> 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-9/v9-2-0.md).

# Version 9.2.0 Changelog (February 10, 2022)

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

Version: 9.2.0.79329

Release Date: February 10, 2022

## New features

* jCenter is now completely removed from all packages
* New border styles for various annotation types

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

* New line ending styles for various annotation types in the Line family: Line, Polyline, Ruler, Perimeter measurement

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

* New auto-smoothing for free highlighter tool

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-49e9c734dcd7897a90bf1acee91ec7f590230eee%2F8700fb81d103003086eec118f2e1999354908ee8-600x1300.gif?alt=media)

* New reading mode image settings

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

* New [convenience wrapper](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/actions/easypdf/EasyPdfService.html) for PDF to Office REST endpoint, get started here: [PDF to Office](/android/conversion/conversion/pdf-to-word-a.md) (additional licensing required)
* New API to [adjust page number indicator position](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#pageNumberIndicatorPosition\(int\)), for example: `pageNumberIndicatorPosition(PageIndicatorLayout.POSITION_TOP_START)`
* New API to change the [annotation toolbar alignment](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#toolbarItemGravity\(int\))
* New API to define [custom top toolbar items](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#topToolbarMenuIds\(com.pdftron.pdf.widget.toolbar.TopToolbarMenuId\))
* New API to [hide preset bar](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#hidePresetBar\(boolean\)) in the tablet layout
* New API to set the [default save signature](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#setDefaultStoreNewSignature\(boolean\)) setting and whether to [persist changes](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#setPersistStoreSignatureSetting\(boolean\)) to the setting made in the UI
* New API to [hide annotation list filter](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#annotationsListFilterEnabled\(boolean\)) option

## Notes

This release of Apryse for Android brings the core PDF functionality inline with version 9.2.0 of the Apryse cross-platform APIs. More information can be found on [What's new for cross-platform APIs](/core/changelogs/version-9/9-2-0.md). All none-module related changes apply to Android.

## Fixed

* Fixed issue where duplicated form document would have unexpected linked fields
* Fixed issue where deletion of direct annotation object would crash the viewer
* Fixed issue where TXT format would not open correctly in the viewer
* Fixed issue where interaction with items under the document slider track with guideline hidden is now possible
* Fixed issue where remember last used toolbar would not work properly

## APIs

### PDFViewCtrlTools package

#### ToolManagerBuilder

*new* method: `ToolManagerBuilder setDefaultStoreNewSignature(boolean)`

*new* method: `ToolManagerBuilder setFreeHighlighterAutoSmoothingRange(float)`

*new* method: `ToolManagerBuilder setPersistStoreSignatureSetting(boolean)`

#### ToolStyleConfig

*new* method: `String getBorderStyleKey(int, String)`

*new* method: `ShapeBorderStyle getCustomBorderStyleMode(Context, int, String)`

*new* method: `LineEndingStyle getCustomLineEndStyleMode(Context, int, String)`

*new* method: `LineEndingStyle getCustomLineStartStyleMode(Context, int, String)`

*new* method: `LineStyle getCustomLineStyleMode(Context, int, String)`

*new* method: `ShapeBorderStyle getDefaultBorderStyle(Context, int)`

*new* method: `ShapeBorderStyle getDefaultBorderStyle(Context, int, int)`

*new* method: `LineEndingStyle getDefaultLineEndStyle(Context, int)`

*new* method: `LineEndingStyle getDefaultLineEndStyle(Context, int, int)`

*new* method: `LineEndingStyle getDefaultLineStartStyle(Context, int)`

*new* method: `LineEndingStyle getDefaultLineStartStyle(Context, int, int)`

*new* method: `LineStyle getDefaultLineStyle(Context, int)`

*new* method: `LineStyle getDefaultLineStyle(Context, int, int)`

*new* method: `String getLineEndStyleKey(int, String)`

*new* method: `String getLineStartStyleKey(int, String)`

*new* method: `String getLineStyleKey(int, String)`

*removed* method: `String getBorderEffectKey(int, String)`

*removed* method: `BorderEffect getCustomBorderEffectMode(Context, int, String)`

#### ViewerConfig.Builder

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

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

*new* method: `Builder pageNumberIndicatorPosition(int)`

*new* method: `Builder toolbarItemGravity(int)`

*new* method: `Builder topToolbarMenuIds(TopToolbarMenuId[])`

#### AnnotStyleDialogFragment

*new* static final field: `int BORDER_STYLE`

*new* static final field: `int LINE_END_STYLE`

*new* static final field: `int LINE_START_STYLE`

*new* static final field: `int LINE_STYLE`

#### AnnotStyleDialogFragment.Builder

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

#### AnnotStyleDialogFragment.Theme

*new* final class: `Theme`

*new* constructor: `Theme(int, int, int, int, int, int, int, int, int, int, int)`

*new* final field: `int annotPreviewBackgroundColor`

*new* final field: `int backgroundColor`

*new* final field: `int iconColor`

*new* final field: `int presetIconColor`

*new* final field: `int selectedBackgroundColor`

*new* final field: `int selectedPresetBackgroundColor`

*new* final field: `int selectedPresetIconColor`

*new* final field: `int tabIndicatorColor`

*new* final field: `int tabSelectedTextColor`

*new* final field: `int tabTextColor`

*new* final field: `int textColor`

*new* static method: `Theme fromContext(Context)`

#### AnnotStyleView

*new* method: `void setOnStyleLayoutClickedListener(OnStyleLayoutClickedListener)`

#### PageIndicatorLayout

*new* static final field: `int POSITION_BOTTOM_START`

*new* static final field: `int POSITION_TOP_END`

*new* static final field: `int POSITION_TOP_START`

#### PdfViewCtrlTabBaseFragment

*new* method: `boolean isConvertibleFormat()`

#### PresetStyleGridView

*new* class: `PresetStyleGridView`

*new* constructor: `PresetStyleGridView(Context)`

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

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

*new* method: `Adapter getAdapter()`

*new* method: `void setStyleList(List<Integer>)`

*new* method: `void setStyleList(List<Integer>, boolean)`

#### ReadingModeSettingsDialog

*new* class: `ReadingModeSettingsDialog`

*new* constructor: `ReadingModeSettingsDialog()`

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

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

*new* method: `void setReflowControl(ReflowControl)`

#### ReflowControl

*new* method: `void clearAdapterCacheAndReset()`

*new* method: `boolean getIsDoNotReflowTextOverImages()`

*new* method: `boolean getIsHideBackgroundImages()`

*new* method: `boolean getIsHideImagesUnderInvisibleText()`

*new* method: `boolean getIsHideImagesUnderText()`

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

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

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

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

#### ReflowPagerAdapter

*new* method: `boolean getImageInReflowEnabled()`

*new* method: `boolean getIsDoNotReflowTextOverImages()`

*new* method: `boolean getIsHideBackgroundImages()`

*new* method: `boolean getIsHideImagesUnderInvisibleText()`

*new* method: `boolean getIsHideImagesUnderText()`

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

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

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

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

#### StylePickerView

*new* class: `StylePickerView`

*new* constructor: `StylePickerView(Context)`

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

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

*new* method: `void dismiss()`

*new* method: `void setAnnotStyleHolder(AnnotStyleHolder)`

*new* method: `void setOnBackButtonPressedListener(OnBackButtonPressedListener)`

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

#### ThumbnailsViewFragment

*new* static method: `Observable<List<Integer>> getPages(PDFViewCtrl, int)`

#### ViewModePickerItems

*new* static final field: `ViewModePickerItems ITEM_ID_READING_MODE`

#### CreateSignatureFragment

*new* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean, boolean, boolean, HashMap<Integer, AnnotStyleProperty>, boolean, boolean)`

*removed* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean, boolean, boolean, HashMap<Integer, AnnotStyleProperty>)`

#### SignatureDialogFragmentBuilder

*new* method: `SignatureDialogFragmentBuilder usingDefaultStoreNewSignature(boolean)`

*new* method: `SignatureDialogFragmentBuilder usingPersistStoreSignatureSetting(boolean)`

#### SignatureFragmentAdapter

*new* constructor: `SignatureFragmentAdapter(FragmentManager, String, String, Toolbar, Toolbar, int, float, boolean, boolean, boolean, int, OnCreateSignatureListener, OnSavedSignatureListener, boolean, HashMap<Integer, AnnotStyleProperty>, boolean, boolean)`

*removed* constructor: `SignatureFragmentAdapter(FragmentManager, String, String, Toolbar, Toolbar, int, float, boolean, boolean, boolean, int, OnCreateSignatureListener, OnSavedSignatureListener, boolean, HashMap<Integer, AnnotStyleProperty>)`

#### AnnotStyle

*new* method: `ShapeBorderStyle getBorderStyle()`

*new* method: `LineEndingStyle getLineEndStyle()`

*new* method: `LineEndingStyle getLineStartStyle()`

*new* method: `LineStyle getLineStyle()`

*new* method: `boolean hasBorderStyle()`

*new* method: `boolean hasBorderStyleWithoutCloud()`

*new* method: `boolean hasLineEndStyle()`

*new* method: `boolean hasLineStartStyle()`

*new* method: `boolean hasLineStyle()`

*new* method: `void setBorderStyle(ShapeBorderStyle)`

*new* method: `void setLineEndStyle(LineEndingStyle)`

*new* method: `void setLineStartStyle(LineEndingStyle)`

*new* method: `void setLineStyle(LineStyle)`

*new* method: `void updateBorderStyleListener(ShapeBorderStyle, boolean)`

*new* method: `void updateLineEndStyleListener(LineEndingStyle, boolean)`

*new* method: `void updateLineStartStyleListener(LineEndingStyle, boolean)`

*new* method: `void updateLineStyleListener(LineStyle, boolean)`

*removed* method: `BorderEffect getBorderEffect()`

*removed* method: `boolean hasBorderEffect()`

*removed* method: `void setBorderEffect(BorderEffect)`

*removed* method: `void updateBorderEffectListner(BorderEffect, boolean)`

#### OnAnnotStyleChangeListener

*new* method: `void onChangeAnnotBorderStyle(ShapeBorderStyle)`

*new* method: `void onChangeAnnotLineEndStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStartStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStyle(LineStyle)`

*removed* method: `void onChangeAnnotBorderEffect(BorderEffect)`

#### AnnotStyleProperty

*new* method: `boolean canShowBorderStyle()`

*new* method: `boolean canShowLineEndStyle()`

*new* method: `boolean canShowLineStartStyle()`

*new* method: `boolean canShowLineStyle()`

*new* method: `AnnotStyleProperty setCanShowBorderStyle(boolean)`

*new* method: `AnnotStyleProperty setCanShowLineEndStyle(boolean)`

*new* method: `AnnotStyleProperty setCanShowLineStartStyle(boolean)`

*new* method: `AnnotStyleProperty setCanShowLineStyle(boolean)`

*removed* method: `boolean canShowBorderEffect()`

*removed* method: `AnnotStyleProperty setCanShowBorderEffect(boolean)`

#### LineEndingStyle

*new* final class: `LineEndingStyle`

*new* static final field: `LineEndingStyle BUTT`

*new* static final field: `LineEndingStyle CIRCLE`

*new* static final field: `LineEndingStyle CLOSED_ARROW`

*new* static final field: `LineEndingStyle DIAMOND`

*new* static final field: `LineEndingStyle NONE`

*new* static final field: `LineEndingStyle OPEN_ARROW`

*new* static final field: `LineEndingStyle R_CLOSED_ARROW`

*new* static final field: `LineEndingStyle R_OPEN_ARROW`

*new* static final field: `LineEndingStyle SLASH`

*new* static final field: `LineEndingStyle SQUARE`

*new* static method: `LineEndingStyle fromInteger(Integer)`

*new* method: `int getResource()`

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

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

#### LineStyle

*new* final class: `LineStyle`

*new* static final field: `LineStyle DASHED`

*new* static final field: `LineStyle DEFAULT`

*new* static method: `LineStyle fromInteger(Integer)`

*new* method: `int getResource()`

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

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

#### ShapeBorderStyle

*new* final class: `ShapeBorderStyle`

*new* static final field: `ShapeBorderStyle CLOUDY`

*new* static final field: `ShapeBorderStyle DASHED`

*new* static final field: `ShapeBorderStyle DEFAULT`

*new* static method: `ShapeBorderStyle fromInteger(Integer)`

*new* method: `int getResource()`

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

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

#### AnnotEdit

*new* method: `void onChangeAnnotBorderStyle(ShapeBorderStyle)`

*new* method: `void onChangeAnnotLineEndStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStartStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStyle(LineStyle)`

*removed* method: `void onChangeAnnotBorderEffect(BorderEffect)`

#### ArrowCreate

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

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

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

*modified* class: `ArrowCreate`

|       | Declaration                                        |
| ----- | -------------------------------------------------- |
| From: | public class ArrowCreate extends SimpleShapeCreate |
| To:   | public class ArrowCreate extends LineCreate        |

#### FreeHighlighterCreate

*new* static final field: `float AUTO_SMOOTH_RANGE_DEFAULT`

*new* method: `void applyAutoSmooth()`

*new* method: `void setAutoSmoothingRange(float)`

#### FreehandCreate

*new* static field: `float sSampleDelta`

*new* static method: `float computeThresholdValue(View)`

*removed* static method: `float computeThresholdValue(View, float)`

#### LineCreate

*new* static method: `void calculateLineEndingStyle(LineEndingStyle, PointF, PointF, PointF, PointF, PointF, PointF, float, double)`

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

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

#### BorderEffect

*removed* final class: `BorderEffect`

#### StickyNoteCreate

*new* method: `void onChangeAnnotBorderStyle(ShapeBorderStyle)`

*new* method: `void onChangeAnnotLineEndStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStartStyle(LineEndingStyle)`

*new* method: `void onChangeAnnotLineStyle(LineStyle)`

*removed* method: `void onChangeAnnotBorderEffect(BorderEffect)`

#### ToolManager

*new* method: `boolean getDefaultStoreNewSignature()`

*new* method: `float getFreeHighlighterAutoSmoothingRange()`

*new* method: `boolean isPersistStoreSignatureSetting()`

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

*new* method: `void setFreeHighlighterAutoSmoothingRange(float)`

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

#### AnnotUtils

*new* static method: `LineEndingStyle getLineEndingStyle(Line, boolean)`

*new* static method: `Rect getOldAnnotScreenPosition(PDFViewCtrl, Annot, int)`

*new* static method: `Annot safeDeleteAnnot(PDFDoc, Page, Annot)`

*new* static method: `Annot safeDeleteAnnotAndUpdate(PDFViewCtrl, Page, Annot, int)`

*new* static method: `void setLineEndingStyle(Line, LineEndingStyle, Boolean)`

*modified* static method: `void flattenAnnot(PDFViewCtrl, Annot, int)`

|       | Declaration                                                                      |
| ----- | -------------------------------------------------------------------------------- |
| From: | public static void flattenAnnot(PDFViewCtrl, Annot, int) throws PDFNetException  |
| To:   | public static Annot flattenAnnot(PDFViewCtrl, Annot, int) throws PDFNetException |

#### AnnotationPropertyPreviewView

*new* method: `void setBorderStyle(ShapeBorderStyle)`

*new* method: `void setLineEndStyle(LineEndingStyle)`

*new* method: `void setLineStartStyle(LineEndingStyle)`

*new* method: `void setLineStyle(LineStyle)`

*removed* method: `void setBorderEffect(BorderEffect)`

#### DrawingUtils

*new* static method: `void calButt(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcCircle(PointF, PointF, PointF, float, double)`

*new* static method: `void calcClosedArrow(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcDiamond(PointF, PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcOpenArrow(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcRClosedArrow(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcROpenArrow(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcSlash(PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void calcSquare(PointF, PointF, PointF, PointF, PointF, PointF, float, double)`

*new* static method: `void drawArrow(Canvas, PointF, PointF, PointF, PointF, Path, Paint, PathEffect)`

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

*new* static method: `void drawLine(Canvas, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, LineEndingStyle, LineEndingStyle, Path, Paint, PathEffect, float, double)`

*new* static method: `void drawOval(Canvas, PointF, PointF, float, RectF, int, int, Paint, Paint, PathEffect)`

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

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

*new* static method: `void drawPolyline(PDFViewCtrl, int, Canvas, ArrayList<PointF>, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, LineEndingStyle, LineEndingStyle, Path, Paint, int, PathEffect, float, double)`

*new* static method: `void drawRectangle(Canvas, PointF, PointF, float, int, int, Paint, Paint, PathEffect)`

*new* static method: `void drawRuler(Canvas, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, PointF, LineEndingStyle, LineEndingStyle, String, Path, Paint, PathEffect, float, double)`

*new* static method: `DashPathEffect getAnnotationPreviewDashPathEffect(Context)`

*new* static method: `DashPathEffect getDashPathEffect(Context)`

*new* static method: `double[] getShapesDashIntervals()`

*removed* static method: `void calcArrow(PointF, PointF, PointF, PointF, float, double)`

*removed* static method: `void calcRuler(PointF, PointF, PointF, PointF, PointF, PointF, float, double)`

*removed* static method: `void drawArrow(Canvas, PointF, PointF, PointF, PointF, Path, Paint)`

*removed* static method: `void drawLine(Canvas, PointF, PointF, Paint)`

*removed* static method: `void drawOval(Canvas, PointF, PointF, float, RectF, int, int, Paint, Paint)`

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

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

*removed* static method: `void drawPolyline(PDFViewCtrl, int, Canvas, ArrayList<PointF>, Path, Paint, int)`

*removed* static method: `void drawRectangle(Canvas, PointF, PointF, float, int, int, Paint, Paint)`

*removed* static method: `void drawRuler(Canvas, PointF, PointF, PointF, PointF, PointF, PointF, Path, Paint, String, double)`

#### ExceptionHandlerCallback

*new* interface: `ExceptionHandlerCallback`

*new* method: `void onException(Exception)`

#### StylePickerGridViewAdapter

*new* class: `StylePickerGridViewAdapter`

*new* constructor: `StylePickerGridViewAdapter(Context, List<Integer>, boolean)`

*new* method: `boolean contains(Integer)`

*new* method: `int getCount()`

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

*new* method: `String getSelected()`

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

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

*new* method: `void setSource(List<Integer>)`

#### Utils

*new* static method: `Intent createSystemPickerIntent(String[], boolean)`

*new* static method: `boolean isHtmlDocument(String)`

#### ViewerUtils

*new* static method: `PageSet getPageSet(SparseBooleanArray)`

*new* static method: `void renameAllFields(Page)`

*new* static method: `void safeUpdatePageLayout(PDFViewCtrl)`

*new* static method: `void safeUpdatePageLayout(PDFViewCtrl, ExceptionHandlerCallback)`

#### AnnotDrawingView

*new* method: `void updateBorderStyle(ShapeBorderStyle)`

*new* method: `void updateLineEndStyle(LineEndingStyle)`

*new* method: `void updateLineStartStyle(LineEndingStyle)`

*new* method: `void updateLineStyle(LineStyle)`

*removed* method: `void updateBorderEffect(BorderEffect)`

#### AnnotView

*new* method: `void updateBorderStyle(ShapeBorderStyle)`

*new* method: `void updateLineEndStyle(LineEndingStyle)`

*new* method: `void updateLineStartStyle(LineEndingStyle)`

*new* method: `void updateLineStyle(LineStyle)`

*removed* method: `void updateBorderEffect(BorderEffect)`

#### AnnotViewImpl

*new* method: `void updateBorderStyle(ShapeBorderStyle)`

*new* method: `void updateLineEndStyle(LineEndingStyle)`

*new* method: `void updateLineStartStyle(LineEndingStyle)`

*new* method: `void updateLineStyle(LineStyle)`

*removed* method: `void updateBorderEffect(BorderEffect)`

#### TopToolbarMenuId

*new* final class: `TopToolbarMenuId`

*new* static final field: `TopToolbarMenuId CLOSE_TAB`

*new* static final field: `TopToolbarMenuId DIGITAL_SIGNATURES`

*new* static final field: `TopToolbarMenuId EDIT_PAGES`

*new* static final field: `TopToolbarMenuId EXPORT`

*new* static final field: `TopToolbarMenuId FILE_ATTACHMENT`

*new* static final field: `TopToolbarMenuId OCG_LAYERS`

*new* static final field: `TopToolbarMenuId OUTLINE`

*new* static final field: `TopToolbarMenuId PRINT`

*new* static final field: `TopToolbarMenuId REFLOW_MODE`

*new* static final field: `TopToolbarMenuId SEARCH`

*new* static final field: `TopToolbarMenuId SHARE`

*new* static final field: `TopToolbarMenuId TABS`

*new* static final field: `TopToolbarMenuId THUMBNAILS`

*new* static final field: `TopToolbarMenuId UNDO`

*new* static final field: `TopToolbarMenuId VIEW_MODE`

*new* method: `int value()`

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

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

#### AnnotationToolbarBuilder

*new* method: `AnnotationToolbarBuilder addCustomButton(String, int, int)`

*new* method: `AnnotationToolbarBuilder addCustomSelectableButton(String, int, int)`

*new* method: `AnnotationToolbarBuilder addCustomSelectableLeadingStickyButton(String, int, int)`

*new* method: `AnnotationToolbarBuilder addCustomSelectableStickyButton(String, int, int)`

*new* method: `AnnotationToolbarBuilder addCustomStickyButton(String, int, int)`

*new* method: `AnnotationToolbarBuilder addLeadingCustomStickyButton(String, int, int)`

#### ToolbarItem

*new* constructor: `ToolbarItem(String, ToolbarButtonType, int, boolean, boolean, int, String, int, int, boolean, int)`

*new* constructor: `ToolbarItem(String, ToolbarButtonType, int, boolean, boolean, int, String, int, int, int)`

*new* constructor: `ToolbarItem(String, ToolbarButtonType, int, boolean, int, String, int, int, int)`

*new* final field: `int titleRes`

*removed* constructor: `ToolbarItem(String, ToolbarButtonType, int, boolean, boolean, int, int, int, boolean, int)`

*modified* final field: `int title`

|       | Declaration               |
| ----- | ------------------------- |
| From: | public final int title    |
| To:   | public final String title |

#### AnnotationToolbarComponent

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

#### TabletAnnotationToolbarComponent

*new* constructor: `TabletAnnotationToolbarComponent(Fragment, FragmentManager, AnnotationToolbarViewModel, PresetBarViewModel, ToolManagerViewModel, AnnotationToolbarView, boolean, HashSet<ToolbarButtonType>, boolean)`

*removed* constructor: `TabletAnnotationToolbarComponent(Fragment, FragmentManager, AnnotationToolbarViewModel, PresetBarViewModel, ToolManagerViewModel, AnnotationToolbarView, boolean, HashSet<ToolbarButtonType>)`

#### ActionToolbar

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

#### AnnotationToolbarView

*new* method: `void clearPreviousToolbarBuilder()`

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

### pdftron-actions package

#### EasyPdfService

*new* static method: `JSONObject createHTMLTask(String, int)`

*new* method: `void setCustomTask(JSONObject)`

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

*new* static method: `String startDynamicJob(String, int, File, File, String)`

*new* static method: `String startDynamicJob(String, int, File, File, String, JSONObject)`

#### EasyPdfService.EasyPdfServiceInterface

*new* method: `Call<ResponseBody> createWorkflow(String, RequestBody)`

*new* method: `Call<ResponseBody> deleteJob(String, String)`

*new* method: `Call<ResponseBody> downloadOutput(String, String, String)`

*new* method: `Call<ResponseBody> startOrCancelJob(String, String, String)`

*new* method: `Call<ResponseBody> uploadFile(String, String, String, RequestBody)`

*new* method: `Call<ResponseBody> waitForJob(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-9/v9-2-0.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.
