> 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-1-2.md).

# Version 9.1.2 Changelog (December 8, 2021)

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

Version: 9.1.2.78721

Release Date: December 8, 2021

## New features

* Adds ability to filter only in the annotation list but not the viewer

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-3c237ab412345630333a9a5014aee6d707fbcfef%2F5f835858c496ca1c3da644fdb19c205d7ec4f9b5-539x1070.png?alt=media)

* New API to [specify file extension](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerBuilder2.html#usingFileExtension\(java.lang.String\)) when opening a document with either wrong or no extension
* New API to [enable and disable ink tool's timer mode](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#setFreeHandTimerEnabled\(boolean\)) when using a stylus
* New API to determine whether to [allow users to enter password](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#openUrlPasswordCheckEnabled\(boolean\)) for remote documents
* New API to [hide the download dialog](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#showDownloadDialog\(boolean\)) when opening remote documents
* New API to detect whether an annotation removal came from a [flatten action or delete action](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/ToolManager.html#getLastAnnotAction\(\))

## Fixed

* Fixed incorrect theme color for search previous and next button
* Fixed extra top padding in the toolbar switcher and the style picker in non-fullscreen mode
* Fixed issue where daylight saving time would be applied to the annotation list when it should not
* Fixed issue where links to external document would jump to incorrect initial page on the linked document
* Fixed issue where using finger to pan would still create text markup annotations in stylus as pen mode
* Fixed issue where bottom buttons for edit outline on tablet would not fit in the bar
* Fixed issue where fling would not work properly when text markup tool is selected and stylus is used
* Fixed issue where last selected free text font would not be saved properly in some situations
* Fixed issue where download dialog would dismiss too early and document is not rendered yet
* Fixed issue with number formatting in textview in the style picker in certain locales
* Fixed issue with number formatting in form fields in certain locales
* Fixed issue with RTL layout in outline fragment
* Fixed issue where thumbnails browser would not update if a page is moved and undo is pressed
* Fixed issue where image size may be incorrect in some situations in the thumbnails browser
* Various performance improvements in the viewer when document is opened from content uri

## APIs

### PDFViewCtrlTools package

#### ToolManagerBuilder

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

#### ViewerBuilder2

*new* method: `ViewerBuilder2 usingFileExtension(String)`

#### ViewerConfig.Builder

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

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

#### DocumentActivity

*new* static final field: `String EXTRA_FILE_EXTENSION`

#### DocumentActivity.IntentBuilder

*new* method: `IntentBuilder usingFileExtension(String)`

#### PdfViewCtrlTabBaseFragment

*new* static final field: `String BUNDLE_TAB_INITIAL_PAGE`

*new* static method: `Bundle createBasicPdfViewCtrlTabBundle(String, String, String, String, int, int, ViewerConfig)`

*new* method: `boolean isNotPdfUri()`

*new* method: `boolean newFileSelectedFromTool(String, int)`

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

#### TabListener

*new* method: `void onOpenAddNewTab(int, String, String, String, int)`

*removed* method: `void onOpenAddNewTab(int, String, String, String)`

#### PdfViewCtrlTabHostBaseFragment

*new* method: `Tab addTab(Bundle, String, String, String, String, int, int)`

*new* method: `void onOpenAddNewTab(int, String, String, String, int)`

#### FilterState

*new* static final field: `FilterState ON_LIST_ONLY`

#### Tool

*new* static final field: `String FLATTENED`

#### ToolManager

*new* method: `AnnotAction getLastAnnotAction()`

*new* method: `boolean isFreehandTimerEnabled()`

*new* method: `boolean onNewFileCreated(String, int)`

*new* method: `void raiseAnnotationsRemovedEvent(Map<Annot, Integer>, Bundle)`

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

#### AdvancedAnnotationListener

*new* method: `boolean newFileSelectedFromTool(String, int)`

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

#### AnnotAction

*new* final class: `AnnotAction`

*new* static final field: `AnnotAction ADD`

*new* static final field: `AnnotAction FLATTEN`

*new* static final field: `AnnotAction MODIFY`

*new* static final field: `AnnotAction REMOVE`

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

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

#### OnFilterChangeEventListener

*new* method: `void onApplyFilterPressed()`

*new* method: `void onApplyFilterToAnnotationListPressed()`

*removed* method: `void onShowSelectedPressed()`

#### PdfViewCtrlSettingsManager

*new* static final field: `String KEY_PREF_PAGE_VIEW_MODE`

#### Utils

*new* static field: `boolean sShowAlertDialog`

*new* static method: `String getRealPathFromURI(Context, Uri)`

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

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

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

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

*new* static method: `float parseFloat(String)`

*new* static method: `float parseFloat(String, Locale)`

*new* static method: `boolean uriHasWritePermission(Context, Uri)`

#### AnnotationFilterViewModel

*new* method: `void onApplyFilterPressed()`

*new* method: `void onApplyFilterToAnnotationListPressed()`

*removed* method: `void onShowSelectedPressed()`

### pdftron-collab package

#### LastAnnotationEntity

*new* constructor: `LastAnnotationEntity(String, String, Long)`

*new* method: `Long getDate()`

*removed* constructor: `LastAnnotationEntity(String, String)`

#### LastAnnotation

*new* method: `Long getDate()`

#### CustomService

*new* method: `void deleteAnnotation(CollabDatabase, AnnotationEntity)`

#### CustomServiceUtils

*new* static method: `void deleteAnnotation(CollabDatabase, AnnotationEntity)`

#### CollabManager

*new* method: `void deleteAnnotation(AnnotationEntity)`

#### CollabViewerBuilder2

*new* method: `CollabViewerBuilder2 usingFileExtension(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-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.
