1 /*
2  * Copyright 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.pdf.viewer.loader;
18 
19 import android.graphics.Bitmap;
20 import android.graphics.Rect;
21 
22 import androidx.annotation.RestrictTo;
23 import androidx.pdf.data.DisplayData;
24 import androidx.pdf.data.PdfStatus;
25 import androidx.pdf.models.Dimensions;
26 import androidx.pdf.models.GotoLink;
27 import androidx.pdf.models.LinkRects;
28 import androidx.pdf.models.MatchRects;
29 import androidx.pdf.models.PageSelection;
30 import androidx.pdf.util.TileBoard.TileInfo;
31 
32 import org.jspecify.annotations.NonNull;
33 
34 import java.util.List;
35 
36 /**
37  * Callback interface - should be implemented by a client of PdfLoader, so that
38  * they can be notified when PdfLoader has loaded the requested data from the
39  * PDF document.
40  */
41 @RestrictTo(RestrictTo.Scope.LIBRARY)
42 public interface PdfLoaderCallbacks {
43 
44     /**
45      * This is called if the PDF is password protected, to request a password.
46      *
47      * @param incorrect True if an incorrect password was just provided.
48      */
requestPassword(boolean incorrect)49     void requestPassword(boolean incorrect);
50 
51     /** This when the PDF is first successfully loaded by PdfLoader. */
documentLoaded(int numPages, @NonNull DisplayData data)52     void documentLoaded(int numPages, @NonNull DisplayData data);
53 
54     /** Called if the Document can't be loaded. */
documentNotLoaded(@onNull PdfStatus status)55     void documentNotLoaded(@NonNull PdfStatus status);
56 
57     /** Called if pdfClient chokes on one page of the document. */
pageBroken(int page)58     void pageBroken(int page);
59 
60     /** This is called in response to a call to loadPageDimensions. */
setPageDimensions(int pageNum, @NonNull Dimensions dimensions)61     void setPageDimensions(int pageNum, @NonNull Dimensions dimensions);
62 
63     /** This is called in response to a call to loadPageBitmap. */
setPageBitmap(int pageNum, @NonNull Bitmap bitmap)64     void setPageBitmap(int pageNum, @NonNull Bitmap bitmap);
65 
66     /** This is called in response to a call to loadTileBitmap. */
setTileBitmap(int pageNum, @NonNull TileInfo tileInfo, @NonNull Bitmap bitmap)67     void setTileBitmap(int pageNum, @NonNull TileInfo tileInfo, @NonNull Bitmap bitmap);
68 
69     /** This is called in response to a call to loadPageText. */
setPageText(int pageNum, @NonNull String text)70     void setPageText(int pageNum, @NonNull String text);
71 
72     /** This is called in response to a call to searchPageText. */
setSearchResults(@onNull String query, int pageNum, @NonNull MatchRects matches)73     void setSearchResults(@NonNull String query, int pageNum, @NonNull MatchRects matches);
74 
75     /** This is called in response to selectPageText. */
setSelection(int pageNum, @NonNull PageSelection selection)76     void setSelection(int pageNum, @NonNull PageSelection selection);
77 
78     /** This is called in response to getPageUrlLinks. */
setPageUrlLinks(int pageNum, @NonNull LinkRects result)79     void setPageUrlLinks(int pageNum, @NonNull LinkRects result);
80 
81     /** This is called in response to getPageGotoLinks. */
setPageGotoLinks(int pageNum, @NonNull List<GotoLink> links)82     void setPageGotoLinks(int pageNum, @NonNull List<GotoLink> links);
83 
84     /**
85      * Called in response to form editing operations in {@link PdfLoader} to inform implementations
86      * that portions of the page bitmap that have been invalidated.
87      */
setInvalidRects(int pageNum, @NonNull List<Rect> invalidRects)88     void setInvalidRects(int pageNum, @NonNull List<Rect> invalidRects);
89 }
90