Nutrient Android SDK 11.7 release notes
RSS18 September 2026
Nutrient Android SDK 11.7 is a stability release built on the 11.6 line and the last planned minor release before Nutrient Android SDK 12. It contains no breaking changes and only one small API addition, so it’s a drop-in upgrade from any 11.6.x release. It fixes several crashes and Application Not Responding (ANR) issues and makes typing responsive with keyboards that compose text, such as Korean, Japanese, and Chinese input methods. The document and the editing bars now move with the onscreen keyboard, and form filling and annotation editing work in documents opened from several sources. It also fixes a long list of annotation, content editing, zoom, rendering, thumbnail, and accessibility issues.
The only API change is an added optional parameter on SigningManager.signDocument(). Refer to the migration guide below for that and for the behavior changes to check when upgrading. Apps that stay on the 11.x line while migrating to 12 should upgrade to this release. For the full list of changes, refer to our changelog.
Crash and ANR fixes
- Fixed an
IllegalArgumentException: Negative size not allowedcrash when the container hosting aPdfFragmentis briefly laid out with a negative width or height during an orientation change. - Fixed an ANR when a
PdfFragmentis destroyed while a page render is still in progress. - Fixed a crash in
PdfUiFragmentwhen its state is saved, its configuration changes, or it’s destroyed before its view has been created. This is reachable through theDocumentViewcomposable with AndroidX Fragment 1.9.0, which caps the fragment’s lifecycle to its host’s. - Fixed a crash when the outline view was touched before it had ever been opened, which affected apps that resize the document view while it’s onscreen.
- Fixed a crash when deleting or saving a note annotation failed — for example, on a document that rejected the change. The note editor now reports the failure and stays open instead of terminating the app.
- Fixed a rare crash when closing a document while timed document checkpointing was enabled.
- Fixed a rare crash when closing a document tab while the bookmark list is visible.
- Fixed
SigningManager.signDocument()running the whole signing workflow on the main thread, which froze the UI and could cause ANRs. Signing now runs on a background thread. A new optionalcallbackDispatcherparameter controls where the success and failure callbacks are delivered, defaulting to the main thread as before.
Responsive text input with composing keyboards
Keyboards that compose text before committing it previously made typing slow or incorrect in two places. Examples include Korean, Japanese, and Chinese input methods, and Samsung Keyboard’s glide typing.
- Typing in a free text annotation no longer stalls the UI or eventually causes an ANR in languages whose text is expensive to lay out. Each keystroke used to write the annotation through to the document on the main thread. That write now happens in the background and is still flushed before the document is saved.
- Content editing is no longer slow with keyboards that compose text. Repeated, unchanged composition updates no longer trigger redundant text edits and rerenders.
- Content editing no longer occasionally drops a typed space with onscreen keyboards that compose text, such as Samsung Keyboard.
- Backspace now deletes a word entered by glide typing in content editing, and text input with composing keyboards follows the
InputConnectioncontract more closely.
Content editing
- Fixed content editing saves failing after a device rotation that occurred while the document was still loading. This could show “The document couldn’t be saved” or the document error view when saving from the unsaved-changes dialog.
- Fixed a page showing no editable text blocks for the rest of the session when content editing was entered on a different page first.
- Fixed text block frames and text briefly appearing at the wrong size and vertically mirrored when entering content editing.
Annotations
- Fixed an ink, square, circle, line, polyline, or polygon annotation still showing its original color, thickness, alpha, border, and line ends after it’s restyled right after being drawn while its creation tool is still active. Leaving the tool no longer discards the restyling.
- Fixed an annotation disappearing from the page as soon as it’s deselected in an Instant document. The annotation was always saved correctly and reappeared after scrolling or reopening the document.
- Fixed the eraser erasing less and less of an ink stroke the further you zoom in. The gap it leaves now always matches the eraser circle, whatever the zoom level and ink thickness. See the migration guide for the new default eraser thickness.
- Fixed the text markup selection not being drawn when the drag is preceded by a pause. Holding still for roughly the length of a long press before dragging left highlight, underline, strikeout, and squiggly selections without onscreen feedback for the rest of the gesture. Even so, the annotation created on lift was still correct.
- Fixed the annotation popup toolbar covering the selected annotation when document insets are applied to the fragment.
- Fixed
AnnotationProviderlosing track of annotations when severaladdAnnotationToPage()calls for the same page ran concurrently. The annotations were added to the document and stayed rendered, but only some were returned by the provider, so the rest couldn’t be found or edited.
Keyboard handling
The document and the editing bars now move with the onscreen keyboard instead of jumping ahead of it, and custom layouts that handle window insets themselves no longer fight the SDK over the keyboard.
- The document moves together with the onscreen keyboard as it opens and closes, instead of jumping to its final position before the keyboard has finished animating.
- The form editing bar and the content editing styling bar move together with the keyboard as well, instead of jumping to their final position at the start of the keyboard animation.
- Fixed the document collapsing to an empty area and the keyboard then staying open when editing a free text annotation in a custom
PdfActivitylayout whose root view applies the window insets itself. - Fixed the content editing styling bar being hidden behind the keyboard, or left floating above it with a band of empty space, under edge-to-edge windows. This is the same fix the form editing bar received in 11.6.
Documents and saving
- Fixed form filling and annotation editing being disabled in documents opened from more than one source. Such a compound document now saves in place, writing each source back to the file or data provider it was loaded from, so saving it as a copy keeps the original open instead of switching to the copy. See the migration guide for what this changes in
isWritableAndCanSave(). - Fixed documents loaded from a
WritableDataProviderwhosecanWrite()returnsfalsebeing offered for editing, which lost the edits when saving later failed.ImageDocument.isValidForEditing()now returnsfalsefor an image document from such a provider.
Zooming and rotation
- Fixed the document drifting a few pixels further out of position each time the device is rotated while zoomed in. It also fixed the zoom level shrinking slightly with each rotation.
- Fixed interrupted pinch-zoom gestures jumping to an unrelated page in continuous vertical scrolling mode.
Rendering and thumbnails
- Fixed pages of a previously opened document being displayed when a different PDF is opened from the same file path or data provider. The on-disk page cache, introduced in 11.6, keyed its entries by the document’s location, so a replaced file could be shown with the old file’s pages until the user zoomed. Cache entries now also carry a hash of the document’s data, so a replaced file misses the cache and renders fresh.
- Fixed thumbnails keeping their previous drawables when
PdfDrawableProvider.notifyDrawablesChanged()is called without a page index. Thumbnails that were already drawn are now rerendered in both the thumbnail bar and its scrollable mode. - Fixed thumbnail grid pages staying on their loading placeholder after a page render fails. A failed render no longer stalls rendering of the remaining thumbnails.
Accessibility and system UI
- Fixed TalkBack focusing document and page thumbnail items covered by the outline view.
- Fixed a black status bar appearing above the settings dialog when it’s shown fullscreen.
Looking ahead
The next release, planned as Nutrient Android SDK 12, adds new toolbar APIs and Jetpack Compose APIs for the viewer’s user interface. Toolbars and other UI surfaces can then use Compose instead of the Android View classes. Nutrient Android SDK 12.1 is then planned to bring a redesigned user interface built on those APIs.
Nutrient Android SDK 12.1 will also remove the RxJava variants of SDK APIs. Nutrient has converted the SDK to Kotlin coroutines, and the coroutine equivalents are already available. If you still call the RxJava variants, plan to move to the coroutine ones ahead of 12.1.
Migration guide
This release needs no code changes, but a few fixes change behavior you may notice:
- Default eraser thickness. The default eraser thickness is now 15 instead of 13, matching the iOS SDK. Apps that configure the eraser thickness explicitly are unaffected.
- Compound documents are editable.
PdfDocument.isWritableAndCanSave()used to returnfalsefor any document opened from more than one source. It now returnstruewhen all of the sources are writable, so form filling and annotation editing are available in compound documents, and saving writes every source back in full. Content editing and the document editor still need a single file. If your app relied on compound documents being read-only, check that path. SigningManager.signDocument()gains an optional parameter. The newcallbackDispatcherparameter sits betweencustomSigningand theonFailureandonSuccesscallbacks, and it defaults to the main thread, so existing behavior is unchanged. Java callers keep every existing overload. Kotlin callers that pass the two callbacks positionally aftercustomSigningneed to pass them by name, or pass a dispatcher.- Read-only data providers are detected at open. A
WritableDataProviderwhosecanWrite()returnsfalsenow makes the document read-only from the start, instead of offering the editing UI and failing at save time. - Free text annotation writes. While a free text annotation is being edited, each keystroke no longer writes the annotation through to the document on the main thread. The annotation’s
contentsproperty still updates immediately, as before. Only the write to the document, which also regenerates the annotation’s appearance, is now debounced and runs in the background. It’s flushed before the document is saved. Saved output is unchanged.