> 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-6/v6-10-4.md).

# Version 6.10.4 Changelog (May 29, 2019)

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

Version: 6.10.4.70914

Release Date: May 29, 2019

## New features

* Adds freeform rotation to stamp annotations

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

* Adds [builder API](/android/open-save-document/open.md) for easy construction and customization of [`PdfViewCtrlTabHostFragment`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/controls/PdfViewCtrlTabHostFragment.html) and [`PdfViewCtrlTabFragment`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/controls/PdfViewCtrlTabFragment.html)
* Adds calibration to [measurement tools](/android/measurement/measurement-a.md)

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-606880971922bf970b7e15d4142c945159590173%2F80310e09eebd81522f86187487c3e1e4dfbbe7e7-451x786.gif?alt=media)

* Adds API to support vertical [reflow control](/android/viewer/view-mode.md) scrolling direction
* Adds [ViewerConfig](/android/viewer/fragment-config.md) API to disable editing of separate dialogs such as [ThumbnailsViewFragment](/android/page-manipulation/thumbnails-view-a.md), [UserBookmarkDialogFragment](/android/bookmarks/user-bookmarks-a.md) and [AnnotationDialogFragment](/android/annotation/annotation-list-a.md)
* [Flutter](https://github.com/ApryseSDK/pdftron-flutter#apis) and [React Native](https://github.com/ApryseSDK/pdftron-react-native#disabledelements) wrapper now comes with customization APIs

## Fixed

* Fixed issue where non-seekable content URI would not save correctly when opened `PdfViewCtrlTabHostFragment` or `DocumentActivity`
* Fixed issue where switching day/night mode in [DocumentActivity](/android/open-save-document/open.md) would crash on some devices
* Fixed issue where quick menu might be cut off after orientation change on some devices
* Fixed issue where `AnnotationToolbar` may crash if its XML is overridden from application with elements removed
* Fixed issue where non-PDF HTTP/HTTPS URL without extension would crash the viewer
* Performance improvement for export annotation feature

## APIs

### PDFViewCtrlTools package

#### ViewerBuilder

new class: `ViewerBuilder`

new method: `Fragment build(Context)`

new method: `ViewerBuilder usingCacheFolder(boolean)`

new method: `ViewerBuilder usingConfig(ViewerConfig)`

new method: `ViewerBuilder usingCustomToolbar(int[])`

new method: `ViewerBuilder usingFileType(int)`

new method: `ViewerBuilder usingNavIcon(int)`

new method: `ViewerBuilder usingQuitAppMode(boolean)`

new method: `ViewerBuilder usingTabClass(Class<? extends PdfViewCtrlTabFragment>)`

new method: `ViewerBuilder usingTabTitle(String)`

new static method: `ViewerBuilder withFile(File)`

new static method: `ViewerBuilder withFile(File, String)`

new static method: `ViewerBuilder withUri(Uri)`

new static method: `ViewerBuilder withUri(Uri, String)`

#### ViewerConfig.Builder

new method: `ViewerConfig.Builder annotationsListEditingEnabled(boolean)`

new method: `ViewerConfig.Builder thumbnailViewEditingEnabled(boolean)`

new method: `ViewerConfig.Builder userBookmarksListEditingEnabled(boolean)`

#### ReflowControl

new static final field: `int HORIZONTAL`

new static final field: `int VERTICAL`

new method: `int getOrientation()`

new method: `void setOrientation(int)`

#### CalibrateDialog

new class: `CalibrateDialog`

#### CalibrateResult

new class: `CalibrateResult`

#### CalibrateViewModel

new class: `CalibrateViewModel`

#### TextInputViewModel

modified class: `TextInputViewModel`

| From                                              | To                                                            |
| ------------------------------------------------- | ------------------------------------------------------------- |
| public class TextInputViewModel extends ViewModel | public class TextInputViewModel extends SimpleDialogViewModel |

#### AnnotUtils

new static method: `Bitmap getStampAppearance(PDFViewCtrl, Annot)`

new static method: `int getStampDegree(Annot)`

new static method: `int getStampDegreeOld(Annot)`

new static method: `void putStampDegree(Annot, int)`

#### MeasureUtils

new static method: `RulerItem calibrate(Annot, RulerItem, float)`

new static method: `double getLineLength(double, double, double, double)`

#### ReflowWebView

new method: `void setOrientation(int)`

#### Utils

new static method: `double angleBetweenTwoPointsWithPivot(double, double, double, double, double, double)`

new static method: `Single<File> duplicateInFolder(ContentResolver, Uri, String, File)`

new static method: `boolean isNonPDFByMimeType(String)`

#### SimpleDialogViewModel

new abstract class: `SimpleDialogViewModel<T>`

new constructor: `SimpleDialogViewModel()`

new method: `void complete()`

new method: `void observeChanges(LifecycleOwner, Observer<T>)`

new method: `void observeOnComplete(LifecycleOwner, Observer<Event<T>>)`

new method: `void set(T)`

#### RotateHandleView

new class: `RotateHandleView`


---

# 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-6/v6-10-4.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.
