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

# Version 7.0.3 Changelog (October 30, 2019)

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

Version: 7.0.3.72953

Release Date: October 30, 2019

## New features

* AndroidX Support: all packages and samples have been migrated over to AndroidX. **This is a breaking change, and your application will need to be migrated as well**. Head over to the official AndroidX migration guide here: [Migrating to AndroidX](https://developer.android.com/jetpack/androidx/migrate/)
* Rich content is now supported for [FreeText](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/annots/FreeText.html) annotations, it can be turned off with [`setShowRichContentOption`](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#setShowRichContentOption\(boolean\))

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-870d89542897bba5638687317bc6774dd5df89a9%2Fc638be9027a388d0be0b5a5c6b05b2b96036372d-501x901.gif?alt=media)

* Text file with `.txt` extension is now supported
* Annotations can now optionally snap to square and aspect ratio

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-757f0cacca34e3d8328138ef51da06838eb30452%2F2fb85d6a4dcc680a5a8863978762ca77495132ba-501x901.gif?alt=media)

* Adds ability to take screenshot of the selected area on a page

![](https://226546913-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0QItsdFBmuuL9ezHimHy%2Fuploads%2Fgit-blob-3c296aba91e1275cafbde2ba5d73738fbe81bf21%2Ff52588d577a731c682b5399c2be4edbc166b07ee-501x901.gif?alt=media)

* More styling attributes are now available, see sample project here: [CustomUI](https://github.com/ApryseSDK/pdftron-android-samples/tree/master/CustomUI/)
* Adds API to [show/hide inline toggle button](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ToolManagerBuilder.html#freeTextInlineToggleEnabled\(boolean\)) for FreeText annotations
* Adds API to [show/hide view layers option](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#showViewLayersToolbarOption\(boolean\)) in toolbar
* Adds API to [permanently show/hide top toolbar](https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/config/ViewerConfig.Builder.html#permanentTopToolbar\(boolean\))
* Adds API to \[enable/disable turn page on tap]\(<https://sdk.apryse.com/api/android/javadoc/reference/com/pdftron/pdf/utils/PdfViewCtrlSettingsManager.html#setAllowPageChangeOnTap(android.content.Context>, boolean))

## Dependency changes

* See AndroidX specific mapping here: [AndroidX Artifact Mappings](https://developer.android.com/jetpack/androidx/migrate/artifact-mappings/)
* `androidx.preference:preference` is now **added** to the `PDFViewCtrlTools` library project and all samples
* `jp.wasabeef:richeditor-android` is now **added** to the `PDFViewCtrlTools` library project and all samples
* `com.github.CymChad:BaseRecyclerViewAdapterHelper` is now **added** to the `pdfnet-demo-utils` library project and CompleteReader sample

## Fixed

* Fixed issue where selection handle looks strange on some devices
* Fixed issue where reflow control does not update font size when turning pages in certain cases
* Fixed issue where annotation is in the wrong orientation when selected
* Fixed issue where icon picker is shown in sound annotation's style picker
* Fixed issue where the same page can be added to the user bookmarks multiple times
* Fixed issue where `AdvancedReaderActivity` takes long time to load files
* Fixed issue where non-PDF files cannot be annotated in collaboration viewer
* Fixed issue where form toolbar always shows regardless of the configuration
* Fixed issue where saved signatures will come back after deleting them
* Fixed issue where FreeText is still removed even when `setDeleteEmptyFreeText` is set to false
* Fixed issue where open remote file with long params would fail due to cache path too long
* Fixed issue where signature does not appear in certain situations on slow devices
* Fixed issue where go to page dialog is multi-line when contains page label
* Fixed infinite loop when trying to use signature tool while it is disabled

## APIs

### PDFViewCtrlTools package

#### ToolManagerBuilder

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

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

#### ViewerConfig.Builder

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

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

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

#### AnnotStyle

*new* method: `String getTextHTMLContent()`

*new* method: `boolean isCallout()`

*new* method: `boolean isRCFreeText()`

*new* method: `void setTextHTMLContent(String)`

#### AnnotEdit

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

#### FreeTextCreate

*new* method: `boolean isRichContentEnabled()`

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

#### ToolManager

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

*new* method: `boolean isRichContentEnabledForFreeText()`

*new* method: `boolean isShowRichContentOption()`

*new* method: `boolean isfreeTextInlineToggleEnabled()`

*new* method: `void onFileCreated(String, AnnotAction)`

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

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

#### ToolManager.AdvancedAnnotationListener

*new* method: `void fileCreated(String, AnnotAction)`

#### AnnotAction

*new* final class: `AnnotAction`

*new* static final field: `AnnotAction SCREENSHOT_CREATE`

#### AnnotUtils

*new* static field: `String KEY_InReplyTo`

*new* static field: `String KEY_RawRichContent`

*new* static field: `String KEY_ReplyTo`

*new* static field: `String KEY_RichContent`

*new* static method: `void createRCFreeTextAppearance(PTRichEditor, PDFViewCtrl, Annot, int)`

*new* static method: `String createScreenshot(File, PDFDoc, Annot, int)`

*new* static method: `Single<String> createScreenshotAsync(File, PDFDoc, Annot, int)`

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

*removed* static field: `String KEY_IRT`

*removed* static field: `String KEY_RT`

#### InlineEditText

*new* constructor: `InlineEditText(PDFViewCtrl, Annot, int, Point, boolean, boolean, InlineEditTextListener)`

*new* method: `PTRichEditor getRichEditor()`

*new* method: `void setHTMLContents(String)`

*new* method: `void setRichTextViewModel(RichTextViewModel)`

*new* method: `void updateRichContentStyle(AnnotStyle)`

#### PdfViewCtrlSettingsManager

*new* static method: `void setAllowPageChangeOnTap(Context, boolean)`

#### RichTextEvent

*new* class: `RichTextEvent`

*new* method: `AnnotStyle getAnnotStyle()`

*new* method: `List<Type> getDecorationTypes()`

*new* method: `Type getEventType()`

#### Type

*new* final class: `Type`

*new* static final field: `Type ALIGN_CENTER`

*new* static final field: `Type ALIGN_LEFT`

*new* static final field: `Type ALIGN_RIGHT`

*new* static final field: `Type BLOCK_QUOTE`

*new* static final field: `Type BOLD`

*new* static final field: `Type BULLETS`

*new* static final field: `Type CLOSE_TOOLBAR`

*new* static final field: `Type HIDE_KEYBOARD`

*new* static final field: `Type INDENT`

*new* static final field: `Type ITALIC`

*new* static final field: `Type NUMBERS`

*new* static final field: `Type OPEN_TOOLBAR`

*new* static final field: `Type OUTDENT`

*new* static final field: `Type REDO`

*new* static final field: `Type SHOW_KEYBOARD`

*new* static final field: `Type STRIKE_THROUGH`

*new* static final field: `Type TEXT_STYLE`

*new* static final field: `Type UNDERLINE`

*new* static final field: `Type UNDO`

*new* static final field: `Type UPDATE_TOOLBAR`

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

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

#### AnnotView

*new* method: `void animateActiveHandle()`

*new* method: `InertRichEditor getRichEditor()`

*new* method: `void setActiveHandle(int)`

*new* method: `void setAnnotRect(RectF)`

*new* method: `void snapToPerfectShape(SnapMode)`

#### SnapMode

*new* final class: `SnapMode`

*new* static final field: `SnapMode ASPECT_RATIO_L`

*new* static final field: `SnapMode ASPECT_RATIO_R`

*new* static final field: `SnapMode HORIZONTAL`

*new* static final field: `SnapMode VERTICAL`

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

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

#### AutoScrollEditor

*new* method: `View getActiveEditor()`

*new* method: `String getActiveText()`

*new* method: `PTRichEditor getRichEditor()`

*new* method: `boolean isRichContentEnabled()`

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

#### RichTextViewModel

*new* class: `RichTextViewModel`

*new* constructor: `RichTextViewModel()`

*new* final method: `Observable<RichTextEvent> getObservable()`

*new* method: `void onCloseToolbar()`

*new* method: `void onEditorAction(Type)`

*new* method: `void onOpenToolbar()`

*new* method: `void onUpdateDecorationTypes(List<Type>)`

*new* method: `void onUpdateTextStyle(AnnotStyle)`

#### PTRichEditor

*new* class: `PTRichEditor`

*new* constructor: `PTRichEditor(Context)`

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

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

*new* method: `int getEditorFontSize()`

*new* method: `void setEditorFontSize(int)`

#### RCContainer

*new* class: `RCContainer`

*new* constructor: `RCContainer(Context)`

*new* method: `void dismiss()`

*new* method: `void setup(View, ToolManager)`

*new* method: `void updateToolbar(List<Type>)`

#### RCToolbar

*new* class: `RCToolbar`

*new* constructor: `RCToolbar(Context)`

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

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

*new* method: `void deselectAll()`

*new* method: `void setToolManager(ToolManager)`

*new* method: `void toggleStylePicker(View)`

*new* method: `void updateDecorationTypes(List<Type>)`

*new* method: `void updateStyle(AnnotStyle)`

#### StrokeOutlineResult

*new* class: `StrokeOutlineResult`

*new* constructor: `StrokeOutlineResult(ArrayList<PointF>, double[])`

*new* final field: `ArrayList<PointF> pointPath`

*new* final field: `double[] strokeOutline`

#### VariableWidthSignatureView

*new* method: `void finish()`

*removed* method: `List<double[]> getStrokes()`

#### ColorPreference

*removed* class: `ColorPreference`

### pdfnet-demo-utils package

#### AboutDialogFragment

*new* class: `AboutDialogFragment`

*new* constructor: `AboutDialogFragment()`

*new* static method: `AboutDialogFragment newInstance(String)`

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

#### SettingsActivity

*modified* class: `SettingsActivity`

|       | Declaration                                              |
| ----- | -------------------------------------------------------- |
| From: | public class SettingsActivity extends PreferenceActivity |
| To:   | public class SettingsActivity extends AppCompatActivity  |

#### SettingsFragment

*new* class: `SettingsFragment`

*new* constructor: `SettingsFragment()`

*new* method: `void onCreatePreferences(Bundle, String)`

*new* method: `void onDisplayPreferenceDialog(Preference)`


---

# 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-0-3.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.
