> 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-5-0.md).

# Version 9.5.0 Changelog (February 17, 2023)

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

Version: 9.5.0.81375

Release Date: February 17, 2023

## New features

* Adds [`ToolManager.setTextFieldCustomAppearanceEnabled(bool)`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/ToolManager.html#setTextFieldCustomAppearanceEnabled\(boolean\)) to enable custom appearance for text form fields, default to false

## Notes

This release of Apryse for Android brings the core PDF functionality inline with version 9.5.0 of the Apryse cross-platform APIs. More information can be found on What's new for cross-platform APIs. All none-module or SVG related changes apply to Android.

## Fixed

* Fixes issue where polygon/cloud tool preset bar still shows redo button when [undo redo is turned off](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/tools/ToolManager.html#setShowUndoRedo\(boolean\))
* Fixes potential runtime crash in release build only when running with Gradle v7.5.1

## APIs

### PDFViewCtrlTools package

#### Builder

*new* method: `Bundle getBundle()`

#### TextInputDialog

*new* static final field: `String INITIAL_INPUT`

*new* static method: `TextInputDialog newInstance(int, int, int, int, int, Bundle, String)`

#### FileInfo

*new* constructor: `FileInfo(FileInfo, String)`

#### TextFieldCreate

*new* static final field: `String BACKGROUND_ALPHA`

*new* method: `void onClose()`

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

#### ToolManager

*new* method: `boolean isTextFieldCustomAppearanceEnabled()`

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

#### AnnotUtils

*new* static method: `double getFormFieldBackgroundOpacity(Annot)`

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

#### PdfViewCtrlSettingsManager

*new* static final field: `String KEY_PREF_SUFFIX_XODO_DRIVE_FILES`

*removed* static final field: `String KEY_PREF_SUFFIX_DOCUMENTS_FILES`

#### PdfViewCtrlTabsManager

*removed* synchronized method: `LinkedHashMap<String, PdfViewCtrlTabInfo> getAllPdfViewCtrlTabInfo(Context)`

*removed* static method: `Timestamp safeGetTimestamp(String)`

#### Utils

*new* static method: `String getUriDisplayName(ContentResolver, Uri)`

#### FixedKeyboardEditText

*new* class: `FixedKeyboardEditText`

*new* constructor: `FixedKeyboardEditText(Context)`

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

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

*new* method: `void focusAndShowKeyboard()`

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

#### SingleButtonToolbar

*new* method: `List<ToolbarItem> getButtonItems()`

### pdfnet-demo-utils package

#### DialogImportWebpageUrlSelectorBinding

*new* final field: `FrameLayout aboveCtaContainer`

#### FragmentRecentlyDeletedViewBinding

*new* final field: `LinearLayoutCompat emptyContainer`

*new* final field: `TextView emptyDesc`

*new* final field: `TextView emptyHeader`

*new* final field: `AppCompatImageView emptyIcon`

*new* final field: `TextTrashDurationMessageBinding textTrashDurationMessage`

*removed* final field: `TextView emptyTextView`

*removed* final field: `TextView trashDurationMessage`

#### ListviewItemTrashListBinding

*removed* final class: `ListviewItemTrashListBinding`

*removed* final field: `AppCompatImageView divider`

*removed* final field: `TextView docTextPlaceHolder`

*removed* final field: `ImageViewTopCrop fileIcon`

*removed* final field: `TextView fileInfo`

*removed* final field: `AppCompatImageView fileLockIcon`

*removed* final field: `TextView fileName`

*removed* final field: `Guideline guidelineImage`

*removed* static method: `ListviewItemTrashListBinding bind(View)`

*removed* method: `View getRoot()`

*removed* static method: `ListviewItemTrashListBinding inflate(LayoutInflater)`

*removed* static method: `ListviewItemTrashListBinding inflate(LayoutInflater, ViewGroup, boolean)`

#### TextTrashDurationMessageBinding

*new* final class: `TextTrashDurationMessageBinding`

*new* final field: `TextView trashDurationMessage`

*new* static method: `TextTrashDurationMessageBinding bind(View)`

*new* method: `View getRoot()`

*new* static method: `TextTrashDurationMessageBinding inflate(LayoutInflater)`

*new* static method: `TextTrashDurationMessageBinding inflate(LayoutInflater, ViewGroup, boolean)`

#### FileBrowserViewFragment

*new* method: `void showTrashBin()`

#### RecentFilesFetcher

*new* class: `RecentFilesFetcher`

#### RecentlyDeletedViewFragment

*new* static method: `RecentlyDeletedViewFragment newInstance(boolean)`

*new* method: `void onPause()`

#### BaseFileAdapter

*new* method: `void removeAll()`

#### TrashViewHolder

*new* class: `TrashViewHolder`

*new* constructor: `TrashViewHolder(TrashAdapter, View)`

*new* field: `ImageView divider`

*new* field: `ImageView imageViewFileIcon`

*new* field: `TextView textViewFileInfo`

*new* field: `TextView textViewFileName`

#### HtmlConversionComponent

*new* method: `void fromUrl(Context, String, Uri)`

*new* method: `void handleWebpageToPDF(FragmentActivity, ImportWebpageUrlSelectorDialogFragment, OnDismissListener, OnLinkSelectedListener)`

*new* method: `void handleWebpageToPDF(FragmentActivity, ImportWebpageUrlSelectorDialogFragment, Uri, OnDismissListener, HtmlConversionActionListener)`

#### EmptyStateCause

*removed* final class: `EmptyStateCause`

*removed* static final field: `EmptyStateCause FILTER_TYPE`

*removed* static final field: `EmptyStateCause FILTER_TYPE_IN_SEARCH_RESULTS`

*removed* static final field: `EmptyStateCause NONE`

*removed* static final field: `EmptyStateCause SEARCH_RESULTS`

*removed* static method: `EmptyStateCause valueOf(String)`

*removed* static method: `EmptyStateCause[] values()`

#### MiscUtils

*new* static method: `boolean validateStringFilenameUsingIO(Context, String)`

*removed* static method: `int getUriFileInfoType(Uri)`


---

# 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-5-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.
