> 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-7/v7-1-4.md).

# Version 7.1.4 Changelog (July 13, 2020)

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

Version: 7.1.4.75316

Release Date: July 13, 2020

## New features

* New lasso annotation selection tool

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

* New signature UI

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-91526201375e085920ca5e020842ee0c334414d6%2F461531197331e193f91809cb66131f0e95b702a3-2220x1080.png?alt=media)

* [FreeText](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/annots/FreeText.html) appearance is now WYSIWYG, this means languages that were not supported previously, such as Hindi, or emojis will now be supported properly

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-6143bcc30b69c57237b91b90d6d55570fd7bd57d%2F3adbc0053eadad866bdad2d700992357c09841cc-420x886.gif?alt=media)

* Adds ability to retry a failed remote file opening if it is due to no internet connection

## Breaking changes

* `PdfViewCtrlTabHostFragment.TabHostListener.onOpenDocError` method now returns a boolean. It is now possible to have custom error handling when a document failed to open. Return false to keep the default behaviour.

## Fixed

* Fixed issue where it is not possible to delete author's annotation with XFDF in collaboration viewer
* Fixed issue where the customized quick menu overflow menu is shown even though there is nothing in it
* Fixed issue where saved signatures appears flipped in RTL layout

## APIs

### PDFViewCtrlTools package

#### ToolManagerBuilder

*new* method: `ToolManagerBuilder setMultiSelectMode(SelectionMode)`

#### AnnotStyleView

*new* method: `void setOnDismissListener(OnDialogDismissListener)`

#### DiffActivity

*modified* method: `void onOpenDocError()`

|       | Declaration                     |
| ----- | ------------------------------- |
| From: | public void onOpenDocError()    |
| To:   | public boolean onOpenDocError() |

#### DocumentActivity

*modified* method: `void onOpenDocError()`

|       | Declaration                     |
| ----- | ------------------------------- |
| From: | public void onOpenDocError()    |
| To:   | public boolean onOpenDocError() |

#### DocumentView

*modified* method: `void onOpenDocError()`

|       | Declaration                     |
| ----- | ------------------------------- |
| From: | public void onOpenDocError()    |
| To:   | public boolean onOpenDocError() |

#### PdfViewCtrlTabHostFragment.TabHostListener

*modified* method: `void onOpenDocError()`

|       | Declaration                              |
| ----- | ---------------------------------------- |
| From: | public abstract void onOpenDocError()    |
| To:   | public abstract boolean onOpenDocError() |

#### DigitalSignatureDialogFragment

*new* method: `void onSignatureCreated(String, boolean)`

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

#### CreateSignatureFragment

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

*new* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean, boolean, HashMap<Integer, AnnotStyleProperty>)`

*new* method: `void onConfigurationChanged(Configuration)`

*removed* static method: `CreateSignatureFragment newInstance(int, float, boolean, boolean, HashMap<Integer, AnnotStyleProperty>)`

#### SignatureDialogFragment

*new* method: `void onSignatureCreated(String, boolean)`

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

#### SignatureDialogFragment.DialogMode

*new* final class: `DialogMode`

*new* static final field: `DialogMode MODE_CREATE`

*new* static final field: `DialogMode MODE_SAVED`

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

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

#### OnCreateSignatureListener

*new* method: `void onSignatureCreated(String, boolean)`

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

#### AnnotStyle

*new* method: `boolean isBasicFreeText()`

#### AnnotEditRectGroup

*new* constructor: `AnnotEditRectGroup(PDFViewCtrl, SelectionMode)`

*new* method: `void setSelectionMode(SelectionMode)`

#### AnnotEditRectGroup.SelectionMode

*new* final class: `SelectionMode`

*new* static final field: `SelectionMode LASSO`

*new* static final field: `SelectionMode RECTANGULAR`

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

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

#### CustomRelativeLayout

*new* method: `void setScreenRect(double, double, double, double, int)`

#### ToolManager

*new* method: `SelectionMode getMultiSelectMode()`

*new* method: `boolean isSignSignatureFieldsWithStamps()`

*new* method: `void setMultiSelectMode(SelectionMode)`

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

#### AnnotUtils

*new* static final field: `String XFDF_ADD`

*new* static final field: `String XFDF_DELETE`

*new* static final field: `String XFDF_MODIFY`

*new* static method: `void createCustomFreeTextAppearance(View, PDFViewCtrl, Annot, int, Rect, boolean)`

*new* static method: `Rect getPageRectFromScreenRect(PDFViewCtrl, Rect, int, int)`

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

*new* static method: `boolean refreshCustomFreeTextAppearance(File, Annot)`

*new* static method: `JSONObject simpleXmlParser(String)`

*new* static method: `void traverseAnnotsWithPage(PDFDoc, AnnotWithPageVisitor)`

*new* static method: `void traverseAnnotsWithPage(Page, AnnotWithPageVisitor)`

*removed* static method: `boolean refreshCustomRichFreeTextAppearance(File, Annot)`

#### AnnotWithPageVisitor

*new* interface: `AnnotWithPageVisitor`

*new* method: `void visit(Pair<Annot, Integer>)`

#### StampManager

*new* method: `void deleteSignature(Context, String)`

#### Utils

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

#### AnnotView

*new* method: `void removeView()`

#### AnnotViewImpl

*new* method: `void loadFont(AnnotViewImplListener)`

*removed* method: `void loadFont()`

#### AnnotViewImplListener

*new* interface: `AnnotViewImplListener`

*new* method: `void fontLoaded()`

#### AutoScrollEditText

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

### pdftron-collab package

#### CollabViewerTabHostFragment.CollabTabHostListener

*modified* method: `void onOpenDocError()`

|       | Declaration                     |
| ----- | ------------------------------- |
| From: | public void onOpenDocError()    |
| To:   | public boolean onOpenDocError() |


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.apryse.com/android/changelogs/version-7/v7-1-4.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
