> 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 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-7/v7-0-3.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.
