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

# Version 11.5.0 Changelog (May 28, 2025)

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

Version: 11.5.0.85510

Release Date: May 28, 2025

## Notes

This release of Apryse for Android brings the core PDF functionality inline with version 11.5.0 of the Apryse cross-platform APIs. Most non-module related changes apply to Android.

## New Features

* Added APIs to define measurement units and precision array for measurement tools such as ruler, perimeter and area measurement tools: `AnnotStyleProperty.setMeasurementPrecisions`, `AnnotStyleProperty.setMeasurementBaseUnits`, `AnnotStyleProperty.setMeasurementTranslateUnits`
* Added API to define whether to use filter or temp file when opening non-PDF URIs in the document viewer, default to temp file `ViewerUtils.sUSE_FILTER_FOR_NON_PDF`

## APIs

### PDFViewCtrlTools package

#### ToolManagerBuilder

\*new\* method: \`ToolManagerBuilder setMenuResForPan(int)\` \*new\* method: \`ToolManagerBuilder setMenuResForTextSelect(int)\` \*new\* method: \`ToolManagerBuilder setQuickMenuAllowOverflowForMaxItemCount(boolean)\`

### PdfViewCtrlTabBaseFragment

\*new\* method: \`void onImageStampSelected(PointF, int)\` \*modified\* abstract class: \`PdfViewCtrlTabBaseFragment\` \<i>\</i> | Declaration--- | ---| From: | public abstract class PdfViewCtrlTabBaseFragment extends Fragment implements PageChangeListener,DocumentDownloadListener,UniversalDocumentConversionListener,DocumentLoadListener,RenderingListener,UniversalDocumentProgressIndicatorListener,PreToolManagerListener,QuickMenuListener,AnnotationModificationListener,PdfDocModificationListener,PdfTextModificationListener,BasicAnnotationListener,OnGenericMotionEventListener,ToolChangedListener,AdvancedAnnotationListener,FileAttachmentAnnotationListener,ActionGoBackListener,FullSaveListener,OnReflowTapListener,PortfolioDialogFragmentListener || To: | public abstract class PdfViewCtrlTabBaseFragment extends Fragment implements PageChangeListener,DocumentDownloadListener,UniversalDocumentConversionListener,DocumentLoadListener,RenderingListener,UniversalDocumentProgressIndicatorListener,PreToolManagerListener,QuickMenuListener,AnnotationModificationListener,PdfDocModificationListener,PdfTextModificationListener,BasicAnnotationListener,OnGenericMotionEventListener,ToolChangedListener,AdvancedAnnotationListener,ImageStampAnnotationListener,FileAttachmentAnnotationListener,ActionGoBackListener,FullSaveListener,OnReflowTapListener,PortfolioDialogFragmentListener |

#### PdfViewCtrlTabHostBaseFragment

\*new\* method: \`boolean onOptionsItemSelected(int)\`

#### PdfViewCtrlTabHostFragment2

\*new\* method: \`boolean onOptionsItemSelected(int)\`

#### ViewModePickerItems

\*new\* static final field: \`ViewModePickerItems ITEM\_ID\_CUSTOM\_COLOR\_MODE\`

#### AnnotStyleProperty

\*new\* method: \`MeasurementBaseUnit\[] getMeasurementBaseUnits()\` \*new\* method: \`MeasurementPrecision\[] getMeasurementPrecisions()\` \*new\* method: \`MeasurementTranslateUnit\[] getMeasurementTranslateUnits()\` \*new\* method: \`AnnotStyleProperty setMeasurementBaseUnits(MeasurementBaseUnit\[])\` \*new\* method: \`AnnotStyleProperty setMeasurementPrecisions(MeasurementPrecision\[])\` \*new\* method: \`AnnotStyleProperty setMeasurementTranslateUnits(MeasurementTranslateUnit\[])\`

#### MeasurementBaseUnit

\*new\* final class: \`MeasurementBaseUnit\` \*new\* static final field: \`MeasurementBaseUnit CM\` \*new\* static final field: \`MeasurementBaseUnit IN\` \*new\* static final field: \`MeasurementBaseUnit MM\` \*new\* static final field: \`MeasurementBaseUnit PT\` \*new\* static method: \`MeasurementBaseUnit fromLabel(String)\` \*new\* method: \`String getLabel()\` \*new\* static method: \`MeasurementBaseUnit valueOf(String)\` \*new\* static method: \`MeasurementBaseUnit\[] values()\`

#### MeasurementPrecision

\*new\* final class: \`MeasurementPrecision\` \*new\* static final field: \`MeasurementPrecision FOUR\` \*new\* static final field: \`MeasurementPrecision ONE\` \*new\* static final field: \`MeasurementPrecision THREE\` \*new\* static final field: \`MeasurementPrecision TWO\` \*new\* static final field: \`MeasurementPrecision ZERO\` \*new\* static method: \`MeasurementPrecision fromLabel(String)\` \*new\* static method: \`MeasurementPrecision fromPosition(int)\` \*new\* method: \`String getLabel()\` \*new\* method: \`int getPosition()\` \*new\* static method: \`MeasurementPrecision valueOf(String)\` \*new\* static method: \`MeasurementPrecision\[] values()\`

#### MeasurementTranslateUnit

\*new\* final class: \`MeasurementTranslateUnit\` \*new\* static final field: \`MeasurementTranslateUnit CM\` \*new\* static final field: \`MeasurementTranslateUnit FT\` \*new\* static final field: \`MeasurementTranslateUnit IN\` \*new\* static final field: \`MeasurementTranslateUnit KM\` \*new\* static final field: \`MeasurementTranslateUnit M\` \*new\* static final field: \`MeasurementTranslateUnit MI\` \*new\* static final field: \`MeasurementTranslateUnit MM\` \*new\* static final field: \`MeasurementTranslateUnit PT\` \*new\* static final field: \`MeasurementTranslateUnit YD\` \*new\* static method: \`MeasurementTranslateUnit fromLabel(String)\` \*new\* method: \`String getLabel()\` \*new\* static method: \`MeasurementTranslateUnit valueOf(String)\` \*new\* static method: \`MeasurementTranslateUnit\[] values()\`

#### Pan

\*new\* method: \`PointF getTargetPoint()\`

#### Stamper

\*new\* method: \`void setTargetPagePoint(PointF, int, boolean)\`

#### ToolManager

\*new\* method: \`void addAdvancedAnnotationListener(AdvancedAnnotationListener)\` \*new\* method: \`void addImageStampAnnotationListener(ImageStampAnnotationListener)\` \*new\* method: \`void addPostToolManagerListener(PostToolManagerListener)\` \*new\* method: \`void addPreToolManagerListener(PreToolManagerListener)\` \*new\* method: \`void addQuickMenuListener(QuickMenuListener)\` \*new\* method: \`void defineTranslateSelected(String, RectF, boolean)\` \*new\* method: \`int getMenuResForPan()\` \*new\* method: \`int getMenuResForTextSelect()\` \*new\* method: \`boolean isQuickMenuAllowOverflowForMaxItemCount()\` \*new\* method: \`void onImageStamperSelected(PointF, int)\` \*new\* method: \`void removeAdvancedAnnotationListener(AdvancedAnnotationListener)\` \*new\* method: \`void removeImageStampAnnotationListener(ImageStampAnnotationListener)\` \*new\* method: \`void removePostToolManagerListener(PostToolManagerListener)\` \*new\* method: \`void removePreToolManagerListener(PreToolManagerListener)\` \*new\* method: \`void removeQuickMenuListener(QuickMenuListener)\` \*new\* method: \`void setMenuResForPan(int)\` \*new\* method: \`void setMenuResForTextSelect(int)\` \*new\* method: \`void setQuickMenuAllowOverflowForMaxItemCount(boolean)\` \*removed\* method: \`void defineTranslateSelected(String, RectF, Boolean)\`

#### ImageStampAnnotationListener

\*new\* interface: \`ImageStampAnnotationListener\` \*new\* method: \`void onImageStampSelected(PointF, int)\`

#### PostToolManagerListener

\*new\* interface: \`PostToolManagerListener\` \*new\* method: \`void onSingleTapConfirmed(MotionEvent)\`

#### SpecialAnnotationListener

\*new\* method: \`void defineTranslateSelected(String, RectF, boolean)\` \*removed\* method: \`void defineTranslateSelected(String, RectF, Boolean)\`

#### BufferTransitionManager

\*new\* method: \`void beginDelayedTransition(ViewGroup, Transition, Runnable, TransitionListener)\`

#### ViewerUtils

\*new\* static field: \`boolean sUSE\_FILTER\_FOR\_NON\_PDF\` \*new\* static method: \`void createImageStamp(Activity, Intent, PDFViewCtrl, Uri, PointF, PointF, int)\` \*new\* static method: \`void createImageStamp(Activity, Intent, PDFViewCtrl, Uri, PointF, int)\` \*new\* static method: \`Intent getChooserIntent(Context, boolean, boolean, boolean, Uri)\` \*new\* static method: \`Uri getOutputFileUri(Context, File, boolean)\` \*new\* static method: \`int getPrintContentFlag(boolean, boolean, boolean)\`

#### SaveExternalFileUtils

\*new\* class: \`SaveExternalFileUtils\` \*new\* constructor: \`SaveExternalFileUtils()\` \*new\* static final field: \`String TAG\` \*new\* static method: \`void saveExternalFile(boolean, boolean, PDFViewCtrl, PDFDoc, ToolManager, ExternalSaveCallback)\`

#### ExternalSaveCallback

\*new\* interface: \`ExternalSaveCallback\` \*new\* method: \`void onException(Exception)\` \*new\* method: \`void onReopen()\` \*new\* method: \`void onSuccess()\`

#### SaveLocalFileUtils

\*new\* class: \`SaveLocalFileUtils\` \*new\* constructor: \`SaveLocalFileUtils()\` \*new\* static final field: \`String TAG\` \*new\* static method: \`void saveLocalFile(boolean, boolean, int, File, PDFViewCtrl, PDFDoc, ToolManager, LocalSaveCallback)\`

#### LocalSaveCallback

\*new\* interface: \`LocalSaveCallback\` \*new\* method: \`void onException(Exception)\` \*new\* method: \`void onFullWriteBackRequired()\` \*new\* method: \`void onSuccess()\`


---

# 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-11/v11-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.
