> 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-8/v8-1-0.md).

# Version 8.1.0 Changelog (December 2, 2020)

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

Version: 8.1.0.30522

Release Date: December 2, 2020

## Notes

This release of Apryse for Android brings the core PDF functionality inline with version 8.1.0 of the Apryse cross-platform APIs. More information can be found on [What's new for cross-platform APIs](/core/changelogs/version-8/8-1-0.md).

## New features

* The new viewer ui is now officially released and all of the legacy components have been deprecated

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

* New redaction toolbar in new ui

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

* Keyboard shortcuts is now supported in the new viewer UI
* New API to [show/hide page forward backward](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#showQuickNavigationButton\(boolean\)) buttons
* New API to [show/hide toolbar switcher](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/controls/PdfViewCtrlTabHostFragment2.html#setToolbarSwitcherVisible\(boolean\)) button
* New API to [show/hide thumbnails browser's filter modes](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#hideThumbnailFilterModes\(com.pdftron.pdf.controls.ThumbnailsViewFragment.FilterModes\))
* New API to [disable image in reflow](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#imageInReflowEnabled\(boolean\))

## Fixed

* Toolbar customization is reset in this version to resolve incorrect state behavior
* Hide toolbar section in favorite toolbar editor if all tools have been disabled
* Fixed issue where slider does not work in RTL mode
* Fixed issue where disabled tools showed up in the toolbar editors
* Fixed issue where bottom nav APIs did not work if support action bar is disabled
* Fixed issue where the poly shape tools did not work when activated from the long press menu with the new ui
* Fixed issue where editing existing ink annotaitons did not work with the new ui
* Fixed issue where eraser could get stuck in certain stylus as pen flow
* Fixed issue where continuous mode ignores animated flag when turn page
* Fixed issue where `DefaultToolbars` did not work properly when building custom toolbars
* Fixed issue where file attachment tool did not work from the toolbar
* Fixed issue where document sharing would not work if the app has its own version of `provider_paths.xml`
* Fixed issue where the bottom toolbar still shows when disabled in the config

## APIs

### PDFViewCtrlTools package

#### ToolStyleConfig

*new* method: `int numberOfAnnotPresetStyles(Context, int)`

#### ViewerConfig

*new* method: `int[] getHideThumbnailFilterModes()`

*new* method: `boolean isImageInReflowEnabled()`

*new* method: `boolean isShowFileAttachmentOption()`

*new* method: `boolean isShowQuickNavigationButton()`

#### ViewerConfig.Builder

*new* method: `Builder hideThumbnailFilterModes(FilterModes[])`

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

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

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

#### PdfViewCtrlTabFragment2

*new* method: `boolean handleKeyUp(int, KeyEvent)`

*new* method: `void setThumbSliderVisible(boolean, boolean, boolean)`

#### PdfViewCtrlTabHostFragment2

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

#### ReflowControl

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

#### ReflowPagerAdapter

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

#### ThumbnailsViewFragment

*new* static method: `ThumbnailsViewFragment newInstance(boolean, boolean, int[])`

#### ThumbnailsViewFragment.FilterModes

*new* final class: `FilterModes`

*new* static final field: `FilterModes ANNOTATED`

*new* static final field: `FilterModes BOOKMARKED`

*new* method: `int getValue()`

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

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

#### DigitalSignatureDialogFragment

*new* static field: `boolean HANDLE_INTENT_IN_ACTIVITY`

*new* static method: `DigitalSignatureViewModel getViewModel(FragmentActivity)`

*new* static method: `boolean isDigitalSignatureIntent(int)`

*new* method: `void onDestroy()`

#### DigitalSignatureViewModel

*new* method: `void setActivityResultIntent(int, int, Intent)`

#### ToolbarSwitcherItem

*new* method: `String getToolbarName(Context)`

*removed* method: `String getToolbarName()`

#### ToolbarSwitcherState

*new* method: `String getToolbarTagWithButtonId(int)`

#### AnnotStyle

*new* static final field: `int CUSTOM_RECT_REDACTION`

*new* method: `boolean isEnabled()`

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

#### ActionUtils

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

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

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

#### AnnotUtils

*new* static method: `void applyRedaction(PDFViewCtrl, Redaction, ArrayList<Redaction>)`

*new* static method: `void deleteAllAnnotsByType(PDFDoc, int)`

*new* static method: `ArrayList<Pair<Redaction, Integer>> getAllRedactions(PDFViewCtrl)`

*new* static method: `ArrayList<Redaction> getRedactionArray(Redaction, int)`

#### PdfViewCtrlSettingsManager

*new* static final field: `String KEY_PREF_NEW_UI_SHOW_TAB_BAR`

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

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

#### RedactionManager

*new* method: `void applyRedaction()`

#### RequestCode

*new* static final field: `int DIGITAL_SIGNATURE_IMAGE`

*removed* static final field: `int DIGITAL_SIGNATURE_KEYSTORE_IMAGE`

#### ShortcutHelper

*new* static method: `boolean canHandleShortcut(ToolManager, int, KeyEvent)`

*new* static method: `ButtonId getButtonId(ToolManager, int, KeyEvent)`

#### ViewerUtils

*new* static method: `Uri openImageIntent(Activity, int)`

*new* static method: `Uri openImageIntent(Fragment, int)`

#### AnnotationFilterViewModel

*new* method: `void addAnnotToHide(Annot)`

*new* method: `void removeAnnotToHide(Annot)`

*new* method: `boolean shouldHideAnnot(Annot)`

*removed* method: `void addAnnotToHide(String)`

*removed* method: `void removeAnnotToHide(String)`

*removed* method: `boolean shouldHideAnnot(String)`

#### ViewerShortcutViewModel

*new* class: `ViewerShortcutViewModel`

*new* constructor: `ViewerShortcutViewModel()`

*new* method: `void observeKeyboardEvents(LifecycleOwner, Observer<KeyboardShortcut>)`

*new* method: `void setKeyboardEvent(int, KeyEvent)`

#### KeyboardShortcut

*new* class: `KeyboardShortcut`

*new* constructor: `KeyboardShortcut(int, KeyEvent)`

*new* method: `KeyEvent getEvent()`

*new* method: `int getKeyCode()`

#### PresetBarView

*new* static final field: `int MAX_NUMBER_OF_PRESETS`

*removed* static final field: `int DEFAULT_NUMBER_OF_PRESETS`

#### DocumentSlider

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

#### AnnotationToolbarBuilder

*new* method: `String getToolbarName(Context)`

*new* static method: `void removeItems(List<ToolbarItem>, Set<ToolMode>)`

*new* method: `AnnotationToolbarBuilder setToolbarName(int)`

*removed* method: `String getToolbarName()`

#### ToolbarButtonType

*new* static final field: `ToolbarButtonType RECT_REDACTION`

*new* static final field: `ToolbarButtonType TEXT_REDACTION`

*new* static method: `ToolbarButtonType valueOf(int)`

#### AnnotationToolbarComponent

*new* method: `void addToolbarLeftOptionalContainer(View)`

*new* method: `void clearOptionalToolbarContainer()`

*new* method: `void showEditToolbar(ToolMode, Annot, int, boolean)`

*removed* method: `void onEditToolbarDismissed()`

*modified* class: `AnnotationToolbarComponent`

|       | Declaration                                                                                    |
| ----- | ---------------------------------------------------------------------------------------------- |
| From: | public class AnnotationToolbarComponent implements OnEditToolbarListener,OnEditToolbarListener |
| To:   | public class AnnotationToolbarComponent implements OnEditToolbarListener                       |

#### DefaultToolbars

*new* static final field: `String TAG_REDACTION_TOOLBAR`

*new* static field: `AnnotationToolbarBuilder defaultRedactionToolbar`

#### DefaultToolbars.ButtonId

*new* static final field: `ButtonId RECT_REDACTION`

*new* static final field: `ButtonId REDACT_PAGE`

*new* static final field: `ButtonId REDACT_SEARCH`

*new* static final field: `ButtonId TEXT_REDACTION`

#### TabletAnnotationToolbarComponent

*removed* method: `void showEditToolbar(ToolMode, Annot, int, Bundle)`

#### ToolbarSharedPreferences

*new* method: `LinkedHashMap<String, List<ToolbarItem>> getAllDefaultToolbarItems(Context)`

*new* method: `AnnotationToolbarBuilder getRedactToolbar(Context)`

*new* static method: `int getToolbarStringResByName(Context, String)`

*removed* method: `LinkedHashMap<String, List<ToolbarItem>> getAllDefaultToolbarItems()`

*removed* static method: `int getToolbarStringResByName(String)`

#### ActionToolbar

*new* static field: `boolean AUTO_PAD_TOOLBAR`

*new* method: `void addToolbarLeftOptionalContainer(View)`

*new* method: `void clearOptionalContainers()`

#### AnnotationToolbarView

*new* method: `void addToolbarLeftOptionalContainer(View)`

*new* method: `void clearOptionContainers()`

#### SingleButtonToolbar

*new* method: `boolean isEditingAnnotation()`

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

#### ToolbarDatabase

*new* static final field: `Migration MIGRATION_1_2`

#### ToolbarItemEntity

*new* field: `int buttonId`

### pdftron-collab package

#### CollabManager

*new* method: `AnnotationCompletionListener getAnnotationCompletionListener()`

*new* method: `void setAnnotationCompletionListener(AnnotationCompletionListener)`

#### AnnotationCompletionListener

*new* interface: `AnnotationCompletionListener`

*new* method: `void onRemoteChangeImported()`


---

# 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-8/v8-1-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.
