> For the complete documentation index, see [llms.txt](https://docs.apryse.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.apryse.com/android/changelogs/version-7/v7-1-2.md).

# Version 7.1.2 Changelog (May 6, 2020)

World's #1 PDF SDK Library for Web, Mobile, Server, Desktop

Version: 7.1.2.74821

Release Date: May 6, 2020

## New features

* New ways to redact documents: [mark by page](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/dialog/redaction/PageRedactionDialogFragment.html) and [mark by search results](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/dialog/redaction/SearchRedactionDialogFragment.html)

| Redact by search                                                                                                                                                                                                                                 | Redact by page                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-ba80f003478aeceef6dadadc380dbd0fb23723c3%2F14e7384f93dc1be0abe1ef23711c6e644ad0e4b0-1080x2209.png?alt=media) | ![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-7939acbf7a7821fa6a7d00f3f12b4d240ff50676%2Fd1b1444a69a188834f297a8573d58280bc641b7d-1080x2207.png?alt=media) |

* New [rectangular area measurement tool](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/RectAreaMeasureCreate.html)

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-3732cc70aeb6928c7797b2ecce0857cebe81bb09%2F3c7da1d1fd0830a126609d6685e9633a5d0b64ef-405x842.gif?alt=media)

* Point snapping and magnifying glasses are now available when editing measurement annotations
* Adds 6 new rubber stamp presets

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-268af0847aed765a1c9cc0ddb59b256899041e0f%2F445ec99f2639170ef0ff0b1efc90ba83a30e1495-1080x2208.png?alt=media)

* New API to [hide page forward/backward buttons](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html)
* New supported file type in the viewer: oxps

## Fixed

* Fixed issue where a rectangle annotation may disappear after sharing its screenshot
* Fixed issue where CollabViewerBuilder was missing some APIs that are in ViewerBuilder
* Fixed issue where print menu would show up at some situations even when it was disabled
* Fixed issue where select cloud with no permission would crash in some situations in the collab viewer
* FreeText annotations are no longer distorted during a resize

## APIs

### PDFViewCtrlTools package

#### FindTextTask.Callback

*new* method: `void onFindTextTaskFinished(int, ArrayList<TextSearchResult>, HashMap<TextSearchResult, ArrayList<Double>>)`

*removed* method: `void onFindTextTaskFinished(int, ArrayList<TextSearchResult>)`

#### GenericViewerBuilder

*new* abstract class: `GenericViewerBuilder`

*new* method: `Fragment build(Context)`

*new* method: `void checkArgs(Context)`

*new* method: `Bundle createBundle(Context)`

*new* method: `int describeContents()`

*new* method: `boolean equals(Object)`

*new* method: `int hashCode()`

*new* method: `VB usingCacheFolder(boolean)`

*new* method: `VB usingConfig(ViewerConfig)`

*new* method: `VB usingCustomHeaders(JSONObject)`

*new* method: `VB usingCustomToolbar(int[])`

*new* method: `VB usingFileType(int)`

*new* method: `VB usingNavIcon(int)`

*new* method: `VB usingQuitAppMode(boolean)`

*new* method: `VB usingTabClass(Class<? extends T>)`

*new* method: `VB usingTabHostClass(Class<TH>)`

*new* method: `VB usingTabTitle(String)`

*new* method: `void writeToParcel(Parcel, int)`

#### ViewerBuilder

*removed* method: `Fragment build(Context)`

*removed* method: `void checkArgs(Context)`

*removed* method: `Bundle createBundle(Context)`

*removed* method: `int describeContents()`

*removed* method: `boolean equals(Object)`

*removed* method: `int hashCode()`

*removed* method: `ViewerBuilder usingCacheFolder(boolean)`

*removed* method: `ViewerBuilder usingConfig(ViewerConfig)`

*removed* method: `ViewerBuilder usingCustomHeaders(JSONObject)`

*removed* method: `ViewerBuilder usingCustomToolbar(int[])`

*removed* method: `ViewerBuilder usingFileType(int)`

*removed* method: `ViewerBuilder usingNavIcon(int)`

*removed* method: `ViewerBuilder usingQuitAppMode(boolean)`

*removed* method: `ViewerBuilder usingTabClass(Class<? extends PdfViewCtrlTabFragment>)`

*removed* method: `ViewerBuilder usingTabTitle(String)`

*removed* method: `void writeToParcel(Parcel, int)`

*modified* class: `ViewerBuilder`

|       | Declaration                                                                                                                 |
| ----- | --------------------------------------------------------------------------------------------------------------------------- |
| From: | public class ViewerBuilder extends SkeletalFragmentBuilder                                                                  |
| To:   | public class ViewerBuilder extends GenericViewerBuilder\<PdfViewCtrlTabHostFragment, PdfViewCtrlTabFragment, ViewerBuilder> |

#### ViewerConfig

*new* method: `boolean isPageStackEnabled()`

#### ViewerConfig.Builder

*new* method: `Builder pageStackEnabled(boolean)`

#### PdfViewCtrlTabFragment

*new* method: `void closeRedactionSearchList()`

*new* method: `void closeSideSheet(String)`

*new* method: `void openRedactionSearchList(SearchRedactionDialogFragment, int, int)`

*new* method: `void openSideSheet(DialogFragment, String, int, int)`

#### PdfViewCtrlTabHostFragment

*new* method: `void setAppBarVisibilityListener(AppBarVisibilityListener)`

*new* method: `void setupRedaction()`

#### PdfViewCtrlTabHostFragment.AppBarVisibilityListener

*new* interface: `AppBarVisibilityListener`

*new* method: `void onAppBarVisibilityChanged(boolean)`

#### SearchResultsAdapter

*new* constructor: `SearchResultsAdapter(Context, int, ArrayList<TextSearchResult>, ArrayList<String>)`

*new* method: `int getItemCount()`

*new* method: `void onBindViewHolder(ViewHolder, int)`

*new* method: `ViewHolder onCreateViewHolder(ViewGroup, int)`

*new* method: `void setWholeWord(boolean)`

*removed* method: `int getCount()`

*removed* method: `View getView(int, View, ViewGroup)`

*modified* class: `SearchResultsAdapter`

|       | Declaration                                            |
| ----- | ------------------------------------------------------ |
| From: | public class SearchResultsAdapter extends ArrayAdapter |
| To:   | public class SearchResultsAdapter extends Adapter      |

*modified* method: `Object getItem(int)`

|       | Declaration                          |
| ----- | ------------------------------------ |
| From: | public Object getItem(int)           |
| To:   | public TextSearchResult getItem(int) |

#### SearchResultsAdapter.ViewHolder

*new* class: `ViewHolder`

*new* constructor: `ViewHolder(View)`

#### SearchResultsView

*new* method: `void cancelSearch()`

*new* method: `void onFindTextTaskFinished(int, ArrayList<TextSearchResult>, HashMap<TextSearchResult, ArrayList<Double>>)`

*new* method: `void restartSearch()`

*removed* method: `void onFindTextTaskFinished(int, ArrayList<TextSearchResult>)`

#### PageRedactionDialogFragment

*new* class: `PageRedactionDialogFragment`

*new* constructor: `PageRedactionDialogFragment()`

*new* static final field: `String TAG`

*new* static method: `PageRedactionDialogFragment newInstance(int, int)`

*new* static method: `PageRedactionDialogFragment newInstance(int, int, int, int)`

*new* method: `Dialog onCreateDialog(Bundle)`

#### SearchRedactionDialogFragment

*new* class: `SearchRedactionDialogFragment`

*new* constructor: `SearchRedactionDialogFragment()`

*new* static final field: `String TAG`

*new* static method: `SearchRedactionDialogFragment newInstance()`

*new* method: `View onCreateView(LayoutInflater, ViewGroup, Bundle)`

*new* method: `void onFullTextSearchStart()`

*new* method: `boolean onMenuItemClick(MenuItem)`

*new* method: `void onRedactionSearchStart()`

*new* method: `void onSearchResultClicked(TextSearchResult)`

*new* method: `void onSearchResultFound(TextSearchResult)`

*new* method: `void setPdfViewCtrl(PDFViewCtrl)`

#### AnnotStyle

*new* static final field: `int CUSTOM_ANNOT_TYPE_RECT_AREA_MEASURE`

#### AnnotEdit

*new* method: `EditText getFreeTextEditText()`

*modified* class: `AnnotEdit`

|       | Declaration                                                                                                                              |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| From: | public class AnnotEdit extends Tool implements DialogAnnotNoteListener,InlineEditTextListener,TextWatcher,OnAnnotStyleChangeListener     |
| To:   | public class AnnotEdit extends BaseTool implements DialogAnnotNoteListener,InlineEditTextListener,TextWatcher,OnAnnotStyleChangeListener |

#### BaseTool

*new* static final field: `int LOUPE_RADIUS`

*new* static final field: `int LOUPE_SIZE`

*new* static final field: `int LOUPE_TYPE_MEASURE`

*new* static final field: `int LOUPE_TYPE_TEXT`

#### FreeTextCreate

*new* static method: `Rect getDefaultRect(FreeText)`

*new* static method: `void putDefaultRect(FreeText, Rect)`

#### RectAreaMeasureCreate

*new* class: `RectAreaMeasureCreate`

*new* constructor: `RectAreaMeasureCreate(PDFViewCtrl)`

*new* method: `int getCreateAnnotType()`

*new* method: `ToolModeBase getToolMode()`

*new* method: `boolean onDown(MotionEvent)`

*new* method: `void onDraw(Canvas, Matrix)`

*new* method: `boolean onMove(MotionEvent, MotionEvent, float, float)`

*new* method: `boolean onUp(MotionEvent, PriorEventMode)`

*new* method: `void setupAnnotProperty(AnnotStyle)`

#### ToolManager

*new* method: `RedactionManager getRedactionManager()`

*removed* method: `void handleAnnotationChanged(String, boolean, JSONArray)`

*removed* method: `void handleGotNewAnnotationData(String, String, String, String, String)`

*removed* method: `void handleUnreadMessageCountChanged(JSONArray)`

#### ToolManager.ToolMode

*new* static final field: `ToolMode RECT_AREA_MEASURE_CREATE`

#### AnnotUtils

*new* static method: `File createPdfFromView(View, int, int, File)`

*new* static method: `boolean isRectAreaMeasure(Annot)`

*new* static method: `void setStyle(Annot, boolean, int, int, float, float)`

#### DrawingUtils

*new* static method: `void drawPolygon(PDFViewCtrl, int, Canvas, ArrayList<PointF>, Path, Paint, int, Paint, int, Matrix)`

#### MeasureUtils

*new* static field: `String K_RECT_AREA`

#### PdfViewCtrlSettingsManager

*new* static final field: `String KEY_PREF_EDIT_URI_BACKUP_FILE_PATH`

*new* static final field: `String KEY_PREF_EDIT_URI_BACKUP_FILE_PATH_DEFAULT_VALUE`

*new* static method: `String getEditUriBackupFilePath(Context)`

*new* static method: `boolean getShowAnnotationIndicator(Context)`

*new* static method: `void setAutoSelectAnnotation(Context, boolean)`

*new* static method: `void setCopyAnnotatedTextToNote(Context, boolean)`

*new* static method: `void setFreeTextFonts(Context, Set<String>)`

*new* static method: `void setInkSmoothing(Context, boolean)`

*new* static method: `void setShowAnnotationIndicator(Context, boolean)`

*new* static method: `void updateEditUriBackupFilePath(Context, String)`

#### RedactionManager

*new* class: `RedactionManager`

*new* constructor: `RedactionManager(PDFViewCtrl)`

*new* method: `void destroy()`

*new* method: `void openPageRedactionDialog()`

*new* method: `void openRedactionBySearchDialog()`

*new* method: `void redactPages(ArrayList<Integer>)`

*new* method: `void redactSearchResults(ArrayList<Pair<Integer, ArrayList<Double>>>)`

#### Utils

*new* static method: `PointF[] getVerticesFromPoly(PDFViewCtrl, Polygon, int)`

#### ViewerUtils

*new* static method: `void jumpToRect(PDFViewCtrl, Rect, int)`

#### RedactionEvent

*new* class: `RedactionEvent`

*new* method: `Type getEventType()`

*new* method: `ArrayList<Integer> getPages()`

*new* method: `ArrayList<Pair<Integer, ArrayList<Double>>> getSearchResults()`

*new* method: `void setPages(ArrayList<Integer>)`

*new* method: `void setSearchResults(ArrayList<Pair<Integer, ArrayList<Double>>>)`

*new* method: `void setSelectedItem(TextSearchResult)`

#### RedactionEvent.Type

*new* final class: `Type`

*new* static final field: `Type REDACT_BY_PAGE`

*new* static final field: `Type REDACT_BY_SEARCH`

*new* static final field: `Type REDACT_BY_SEARCH_CLOSE_CLICKED`

*new* static final field: `Type REDACT_BY_SEARCH_ITEM_CLICKED`

*new* static final field: `Type REDACT_BY_SEARCH_OPEN_SHEET`

*new* static method: `Type valueOf(String)`

*new* static method: `Type[] values()`

#### RedactionViewModel

*new* class: `RedactionViewModel`

*new* constructor: `RedactionViewModel(Application)`

*new* final method: `Observable<RedactionEvent> getObservable()`

*new* method: `void onRedactByPage(ArrayList<Integer>)`

*new* method: `void onRedactBySearch(ArrayList<Pair<Integer, ArrayList<Double>>>)`

*new* method: `void onRedactBySearchCloseClicked()`

*new* method: `void onRedactBySearchItemClicked(TextSearchResult)`

*new* method: `void onRedactBySearchOpenSheet()`

#### AutoScrollEditText

*new* method: `InputFilter[] getDefaultInputFilters()`

*new* method: `InputConnection onCreateInputConnection(EditorInfo)`

*new* method: `void setBackgroundColor(int)`

*new* method: `void setDefaultRect(Rect)`

#### SelectionLoupe

*new* constructor: `SelectionLoupe(PDFViewCtrl, int)`

*new* method: `void setup(Bitmap, float)`

#### RedactionSearchResultsAdapter

*new* class: `RedactionSearchResultsAdapter`

*new* constructor: `RedactionSearchResultsAdapter(Context, int, ArrayList<TextSearchResult>, ArrayList<String>)`

*new* method: `void addSelected(int)`

*new* method: `void deselectAll()`

*new* method: `HashSet<Integer> getSelected()`

*new* method: `boolean isAllSelected()`

*new* method: `boolean isSelected(int)`

*new* method: `void onBindViewHolder(ViewHolder, int)`

*new* method: `ViewHolder onCreateViewHolder(ViewGroup, int)`

*new* method: `void removeSelected(int)`

*new* method: `void selectAll()`

#### RedactionSearchResultsView

*new* class: `RedactionSearchResultsView`

*new* constructor: `RedactionSearchResultsView(Context)`

*new* constructor: `RedactionSearchResultsView(Context, AttributeSet)`

*new* constructor: `RedactionSearchResultsView(Context, AttributeSet, int)`

*new* method: `void deselectAll()`

*new* method: `Rect getRectForResult(TextSearchResult)`

*new* method: `ArrayList<Pair<Integer, ArrayList<Double>>> getSelections()`

*new* method: `boolean isAllSelected()`

*new* method: `void restartSearch()`

*new* method: `void selectAll()`

*new* method: `void setRedactionSearchResultsListener(RedactionSearchResultsListener)`

*new* method: `void toggleSelection()`

#### RedactionSearchResultsListener

*new* interface: `RedactionSearchResultsListener`

*new* method: `void onRedactionSearchStart()`

### pdftron-collab package

#### DataRepository

*new* method: `void sendAnnotation(String, String, String, String, String)`

*removed* method: `void sendAnnotation(String, String, String, String)`

#### CustomService

*new* method: `void sendAnnotation(String, String, ArrayList<AnnotationEntity>, String, String)`

*removed* method: `void sendAnnotation(String, ArrayList<AnnotationEntity>, String, String)`

#### CollabManager

*new* method: `String getLastXfdf()`

*new* method: `void sendAnnotation(String, String, ArrayList<AnnotationEntity>, String, String)`

*removed* method: `void sendAnnotation(String, ArrayList<AnnotationEntity>, String, String)`

#### CollabViewerBuilder

*removed* method: `Fragment build(Context)`

*removed* method: `Bundle createBundle(Context)`

*removed* method: `int describeContents()`

*removed* method: `CollabViewerBuilder usingConfig(ViewerConfig)`

*removed* method: `CollabViewerBuilder usingTabClass(Class<? extends CollabViewerTabFragment>)`

*removed* method: `void writeToParcel(Parcel, int)`

*modified* class: `CollabViewerBuilder`

|       | Declaration                                                                                                                               |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| From: | public class CollabViewerBuilder extends SkeletalFragmentBuilder                                                                          |
| To:   | public class CollabViewerBuilder extends GenericViewerBuilder\<CollabViewerTabHostFragment, CollabViewerTabFragment, CollabViewerBuilder> |

#### XfdfUtils

*new* static final field: `String XFDF_ADD`

*new* static final field: `String XFDF_DELETE`

*new* static final field: `String XFDF_MODIFY`

#### AnnotationViewModel

*new* method: `void sendAnnotation(String, String, String, String)`

*removed* method: `void sendAnnotation(String, String, String)`


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.apryse.com/android/changelogs/version-7/v7-1-2.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
