Official Release Page
Check out the release page here.
Changelog
- The largest update so far. A new home screen, annotation tools, and a rework of nearly every part of the app.
- Home Screen:
- The app now opens to a new Home screen.
- Opening a PDF from another app still goes straight to the reader.
- Home has three swipeable tabs: Recent, Library, and Folders.
- The selected tab is remembered.
- The Recent tab shows a full width Continue Reading pager and a reading history list.
- The Continue Reading card shows cover, title, progress, page count, and last reading date.
- The pager swipes page by page between books.
- The last reading date is right aligned on the card.
- The Library tab shows reading status chips above a cover grid or list.
- Reading statuses: To Read, Reading, On Hold, Completed, and Abandoned.
- Setting a status marks books as read or finished independently from page progress.
- Status chips wrap into two rows without scrolling.
- Wide screens show all six status chips on one line.
- Grid density options: small, medium, and large.
- Sort the library by last opened or by name.
- Long press multi select with batch status change and batch delete.
- The Folders tab is a real file manager with breadcrumb navigation.
- Folders offers a flat mode, per folder counts, and SD card volumes.
- The Folders tab always shows the full device, before any scan setup.
- The back button navigates up through the folder hierarchy.
- A floating button opens any PDF through the system picker.
- Search from Home covers the whole device, not just opened files.
- Library matches appear first, never opened files after.
- Home search opens as a full screen search page.
- The home menu holds view, grid, sort, and folder mode controls.
- View, grid, and sort controls appear only on the Library tab.
- The folders view control appears only on the Folders tab.
- Grid size hides when list view is selected.
- The menu has icon and label rows: Stats, Scan locations, Open online, Settings, About.
- The menu divider is hidden on the Recent tab.
- A Library Stats dialog with Device, Library, and Reading Status sections.
- Stats include storage used, favorites, pages read, and all six status counts.
- Toggle strips color their selected option properly.
- Segmented button coloring is shared between Home and settings.
- All dates across the app render as year, month, day.
- Home shows the document's real title instead of the filename, with an off switch.
- Home can be disabled entirely, restoring the old picker on launch behavior.
- A home button sits left of the PDF title in the reader toolbar.
- The home button hides when the Home page is disabled.
- Back from a Home launched document returns to Home.
- Double tap to exit now applies only to documents opened from outside the app.
- Double tap to exit is now disabled by default.
- Pinned launcher shortcuts keep working across future app updates.
- Books can be deleted straight from Home search results, and the results refresh immediately.
- The Home app bar no longer darkens while scrolling.
- Selecting multiple books keeps the app bar and status bar colors consistent.
- The Recent tab shows the storage permission card whenever unreadable books need access.
- Books fixable by the storage permission appear dimmed everywhere, and tapping one opens the grant flow.
- Books missing for other reasons are hidden and return automatically once readable again.
- After each scan, broken records re link to rediscovered files by content hash, keeping their progress.
- Continue Reading only ever shows openable books.
- The Continue Reading label shows the percent plus the current page over the total.
- The app now opens to a new Home screen.
- Library Cards:
- One unified card design across the Recent, Library, and Folders tabs.
- Cards show reading position, or total page count when unread.
- Folder cards show the file size of every book.
- Books opened through the picker now show page counts and sizes correctly.
- Covers show reading progress as a ring with the percentage, or a thin bar along the bottom edge.
- A Home setting picks the progress indicator style, with the ring as the default.
- Progress bars no longer show dots at their ends.
- An options button appears on every card, including never opened files.
- Grid tiles get a three dots options button in the top right corner.
- The last read date was removed from small cards.
- More title spacing and a slightly larger info font on cards.
- First page cover thumbnails with memory and disk caching.
- Covers load with a cross fade and the cache trims itself.
- A placeholder cover is shown for unreadable or password protected files.
- One unified card design across the Recent, Library, and Folders tabs.
- 3.0.0
- The largest update so far. A new home screen, annotation tools, and a rework of nearly every part of the app.
- Home Screen:
- The app now opens to a new Home screen.
- Opening a PDF from another app still goes straight to the reader.
- Home has three swipeable tabs: Recent, Library, and Folders.
- The selected tab is remembered.
- The Recent tab shows a full width Continue Reading pager and a reading history list.
- The Continue Reading card shows cover, title, progress, page count, and last reading date.
- The pager swipes page by page between books.
- The last reading date is right aligned on the card.
- The Library tab shows reading status chips above a cover grid or list.
- Reading statuses: To Read, Reading, On Hold, Completed, and Abandoned.
- Setting a status marks books as read or finished independently from page progress.
- Status chips wrap into two rows without scrolling.
- Wide screens show all six status chips on one line.
- Grid density options: small, medium, and large.
- Sort the library by last opened or by name.
- Long press multi select with batch status change and batch delete.
- The Folders tab is a real file manager with breadcrumb navigation.
- Folders offers a flat mode, per folder counts, and SD card volumes.
- The Folders tab always shows the full device, before any scan setup.
- The back button navigates up through the folder hierarchy.
- A floating button opens any PDF through the system picker.
- Search from Home covers the whole device, not just opened files.
- Library matches appear first, never opened files after.
- Home search opens as a full screen search page.
- The home menu holds view, grid, sort, and folder mode controls.
- View, grid, and sort controls appear only on the Library tab.
- The folders view control appears only on the Folders tab.
- Grid size hides when list view is selected.
- The menu has icon and label rows: Stats, Scan locations, Open online, Settings, About.
- The menu divider is hidden on the Recent tab.
- A Library Stats dialog with Device, Library, and Reading Status sections.
- Stats include storage used, favorites, pages read, and all six status counts.
- Toggle strips color their selected option properly.
- Segmented button coloring is shared between Home and settings.
- All dates across the app render as year, month, day.
- Home shows the document's real title instead of the filename, with an off switch.
- Home can be disabled entirely, restoring the old picker on launch behavior.
- A home button sits left of the PDF title in the reader toolbar.
- The home button hides when the Home page is disabled.
- Back from a Home launched document returns to Home.
- Double tap to exit now applies only to documents opened from outside the app.
- Double tap to exit is now disabled by default.
- Pinned launcher shortcuts keep working across future app updates.
- Books can be deleted straight from Home search results, and the results refresh immediately.
- The Home app bar no longer darkens while scrolling.
- Selecting multiple books keeps the app bar and status bar colors consistent.
- The Recent tab shows the storage permission card whenever unreadable books need access.
- Books fixable by the storage permission appear dimmed everywhere, and tapping one opens the grant flow.
- Books missing for other reasons are hidden and return automatically once readable again.
- After each scan, broken records re link to rediscovered files by content hash, keeping their progress.
- Continue Reading only ever shows openable books.
- The Continue Reading label shows the percent plus the current page over the total.
- The app now opens to a new Home screen.
- Library Cards:
- One unified card design across the Recent, Library, and Folders tabs.
- Cards show reading position, or total page count when unread.
- Folder cards show the file size of every book.
- Books opened through the picker now show page counts and sizes correctly.
- Covers show reading progress as a ring with the percentage, or a thin bar along the bottom edge.
- A Home setting picks the progress indicator style, with the ring as the default.
- Progress bars no longer show dots at their ends.
- An options button appears on every card, including never opened files.
- Grid tiles get a three dots options button in the top right corner.
- The last read date was removed from small cards.
- More title spacing and a slightly larger info font on cards.
- First page cover thumbnails with memory and disk caching.
- Covers load with a cross fade and the cache trims itself.
- A placeholder cover is shown for unreadable or password protected files.
- Covers reload immediately when storage access is granted.
- Covers and page counts work for files opened through the system picker.
- Five badge switches with a List Card Badges dialog choose what list rows show.
- Grid and list title line counts and the truncation position are configurable.
- Selecting a book shows a bold check badge that stays visible on any cover.
- Selected books gently dim, making the selection obvious at a glance.
- One unified card design across the Recent, Library, and Folders tabs.
- Book Options Dialog:
- Every card opens a per book options dialog.
- The dialog shows a cover header, full PDF properties, progress, and a status picker.
- Rename on disk and delete from device sit side by side.
- The dialog fully works on never opened files, fetching their info in the background.
- A reading status can be assigned to any file, opened or not.
- Setting a status quietly adds the file to the library.
- Rename and delete work for never opened files too.
- A Remove from Recents action for previously opened books.
- Hide from Library hides a book from the Recent and Library tabs.
- Hidden books stay reachable through Folders and search.
- The last read date is shown inside the dialog.
- Borderless menu and properties icons without odd backgrounds.
- Proper vertical padding around the dialog content.
- Long press selection works on never opened files.
- Batch status changes create library records for never opened files.
- Every card opens a per book options dialog.
- Library Durability:
- Documents are identified by content, so progress and status survive moves and renames.
- A moved file heals silently if the scanner finds it elsewhere.
- Otherwise a relocate dialog lets you pick the file again.
- Repicked files are verified by content, so reading progress is preserved.
- If the reader fails to open a library item, it returns Home and starts recovery.
- Files picked through the system picker keep working after a reboot.
- Each opened document refreshes its stored location.
- Records converge to real file paths as documents are opened.
- The reader captures each document's title on open for the Home screen.
- Documents are identified by content, so progress and status survive moves and renames.
- Scanning and Permissions:
- Scanning never starts on its own. A setup card on the Library tab begins it.
- Choose between scanning the whole device or only locations you pick.
- A folder picker with breadcrumbs and tri state checkboxes selects scan locations.
- The picker supports multiple storage volumes.
- A Scan locations entry in the home menu changes the choice later.
- Scans, background rescans, and the file observer respect the chosen scope.
- Entries outside a narrowed scope are removed.
- The scan scope filters only the Library grid, search, and stats.
- File hashing and page counting stay within the configured scope.
- Removing folders from the scope keeps their PDFs visible in Folders.
- Whole device scanning keeps its full speed.
- The library fills near instantly on a fresh install using the system media index.
- A background scan catches anything the index missed.
- The scanned index is saved, so every later launch shows the library immediately.
- Expensive file processing happens silently in the background and never blocks the interface.
- New downloads appear automatically while Home is open.
- Deleted files are pruned safely.
- Rescans skip unchanged files entirely.
- Scanned but never opened files never pollute reading history.
- Never opened files get page counts from the background scan.
- All files access is requested with a proper explanation dialog.
- The flow rechecks on return from system settings, with fallbacks for unusual devices.
- A separate permission flow for older Android versions, including permanently denied handling.
- Without access, Home still works in a degraded mode with a grant card.
- The storage permission flow now works on Android 10 and below.
- Scanning never starts on its own. A setup card on the Library tab begins it.
- Dual Page Mode:
- New Dual Page Mode pairs pages side by side like a book.
- An optional First Page Alone setting keeps the cover on its own.
- Paired pages fit two columns across the view, separated by the page spacing.
- Taps, selection, highlights, forms, and signatures resolve the correct page of a pair.
- Flings, page snapping, volume keys, and mouse paging advance one spread at a time.
- Page indicators show a range like 4 to 5 of 120 for spreads.
- The reading percentage counts the spread's last page.
- The bookmark star lights when either visible page is bookmarked.
- A quick action flips the mode in place while keeping the reading position.
- Position restore remembers the layout mode.
- If the mode changed in between, it falls back to a plain page jump.
- Covers reload immediately when storage access is granted.
- Covers and page counts work for files opened through the system picker.
- Five badge switches with a List Card Badges dialog choose what list rows show.
- Grid and list title line counts and the truncation position are configurable.
- Selecting a book shows a bold check badge that stays visible on any cover.
- Selected books gently dim, making the selection obvious at a glance.
- New Dual Page Mode pairs pages side by side like a book.
- Book Options Dialog:
- Every card opens a per book options dialog.
- The dialog shows a cover header, full PDF properties, progress, and a status picker.
- Rename on disk and delete from device sit side by side.
- The dialog fully works on never opened files, fetching their info in the background.
- A reading status can be assigned to any file, opened or not.
- Setting a status quietly adds the file to the library.
- Rename and delete work for never opened files too.
- A Remove from Recents action for previously opened books.
- Hide from Library hides a book from the Recent and Library tabs.
- Hidden books stay reachable through Folders and search.
- The last read date is shown inside the dialog.
- Borderless menu and properties icons without odd backgrounds.
- Proper vertical padding around the dialog content.
- Long press selection works on never opened files.
- Batch status changes create library records for never opened files.
- Every card opens a per book options dialog.
- Library Durability:
- Documents are identified by content, so progress and status survive moves and renames.
- A moved file heals silently if the scanner finds it elsewhere.
- Otherwise a relocate dialog lets you pick the file again.
- Repicked files are verified by content, so reading progress is preserved.
- If the reader fails to open a library item, it returns Home and starts recovery.
- Files picked through the system picker keep working after a reboot.
- Each opened document refreshes its stored location.
- Records converge to real file paths as documents are opened.
- The reader captures each document's title on open for the Home screen.
- Documents are identified by content, so progress and status survive moves and renames.
- Scanning and Permissions:
- Scanning never starts on its own. A setup card on the Library tab begins it.
- Choose between scanning the whole device or only locations you pick.
- A folder picker with breadcrumbs and tri state checkboxes selects scan locations.
- The picker supports multiple storage volumes.
- A Scan locations entry in the home menu changes the choice later.
- Scans, background rescans, and the file observer respect the chosen scope.
- Entries outside a narrowed scope are removed.
- The scan scope filters only the Library grid, search, and stats.
- File hashing and page counting stay within the configured scope.
- Removing folders from the scope keeps their PDFs visible in Folders.
- Whole device scanning keeps its full speed.
- The library fills near instantly on a fresh install using the system media index.
- A background scan catches anything the index missed.
- The scanned index is saved, so every later launch shows the library immediately.
- Expensive file processing happens silently in the background and never blocks the interface.
- New downloads appear automatically while Home is open.
- Deleted files are pruned safely.
- Rescans skip unchanged files entirely.
- Scanned but never opened files never pollute reading history.
- Never opened files get page counts from the background scan.
- All files access is requested with a proper explanation dialog.
- The flow rechecks on return from system settings, with fallbacks for unusual devices.
- A separate permission flow for older Android versions, including permanently denied handling.
- Without access, Home still works in a degraded mode with a grant card.
- The storage permission flow now works on Android 10 and below.
- Scanning never starts on its own. A setup card on the Library tab begins it.
- Dual Page Mode:
- New Dual Page Mode pairs pages side by side like a book.
- An optional First Page Alone setting keeps the cover on its own.
- Paired pages fit two columns across the view, separated by the page spacing.
- Taps, selection, highlights, forms, and signatures resolve the correct page of a pair.
- Flings, page snapping, volume keys, and mouse paging advance one spread at a time.
- Page indicators show a range like 4 to 5 of 120 for spreads.
- The reading percentage counts the spread's last page.
- The bookmark star lights when either visible page is bookmarked.
- A quick action flips the mode in place while keeping the reading position.
- Position restore remembers the layout mode.
- If the mode changed in between, it falls back to a plain page jump.
- Dual Page Mode is ignored in horizontal scrolling mode.
- New Dual Page Mode pairs pages side by side like a book.
- Reading Direction:
- Right to left reading direction in horizontal mode.
- The direction is detected automatically per document.
- A per document override offers Auto, Left to Right, and Right to Left.
- Detected and chosen directions are remembered per document.
- Right to left page ordering works without changing logical page numbers.
- Reading Direction is hidden when horizontal scrolling is disabled.
- Right to left reading direction in horizontal mode.
- Hide Margins:
- Hide Margins crops blank page margins without changing the file.
- Margins are detected in the background with a cancelable progress card.
- Detection results are cached per PDF, with per page overrides.
- Noisy page edges are handled safely.
- A global option always hides margins for all PDFs.
- Applying or removing the crop keeps your reading position.
- Hide and Show Margins are available as reader and fullscreen buttons.
- Changing the global setting now applies to the open document as soon as settings close.
- A manual toggle made in the reader survives unrelated settings visits.
- Hide Margins crops blank page margins without changing the file.
- Auto Scroll:
- Auto scroll moves by real elapsed time, so speed is consistent on every device.
- It ticks on the display's frame clock instead of a timer loop.
- Each speed unit still means 100 pixels per second.
- Auto scroll pauses while you interact with the document.
- The speed is remembered per document.
- The minimum speed is lower and speed changes are finer.
- Auto scroll controls stay above the bottom overlays.
- Pending speed saves flush when switching documents or closing the app.
- Auto scroll moves by real elapsed time, so speed is consistent on every device.
- Reader Controls:
- Toolbar, shortcut bar, and fullscreen buttons are all configurable.
- Drag and drop reordering dialogs with a reset option.
- New actions include open online PDF, switch theme, extract text, fullscreen, and links.
- Fullscreen shortcuts for Table of Contents and Go To Page.
- The second toolbar is fully configurable instead of reload only.
- The shortcut bar scrolls horizontally when it holds many actions.
- Redesigned fullscreen buttons with outlines and slight elevation.
- The margin buttons use the same style and size as the others.
- The Open Online PDF action warns before opening insecure links.
- Toolbar, shortcut bar, and fullscreen buttons are all configurable.
- Fullscreen:
- True edge to edge fullscreen, including notch areas.
- A fullscreen info card shows the time, page number, and reading percentage.
- One Scrolling Info Card setting picks which parts appear.
- The info card and its text are centered.
- The PDF name is hidden from the card by default.
- The card also appears while dragging the scroll handle, in both modes.
- The old reading progress overlay was removed in favor of the info card.
- In fullscreen the scroll handle stops below the status bar.
- The document top stays reachable while dragging the handle.
- True edge to edge fullscreen, including notch areas.
- Viewer:
- The theme toggle switches PDF dark mode in place, without restarting.
- The toggle shows a sun in dark mode and a moon in light mode.
- It updates live on the toolbar, shortcut bar, and fullscreen overlay.
- It hides when the PDF theme follows the system.
- The brightness panel opens at the same percentage as the system slider.
- The panel resyncs with the system on every open.
- Double tap zoom ends at a page height fit in horizontal mode.
- The mouse wheel scrolls the page vertically or horizontally.
- Holding Ctrl while scrolling the wheel zooms.
- Wheel zooming no longer snaps to a page afterward.
- Mouse back and forward buttons turn pages, toggleable in settings.
- Keyboard forward keys no longer accidentally turn pages.
- A new browser like scrolling mode avoids sideways drift while reading.
- Sideways movement unlocks only on a clearly horizontal pull.
- An Always Open at First Page switch skips restoring the saved position.
- Positions still save while reading, so progress and resume keep working.
- An option shows the current page and total before the title in the toolbar.
- Tapping the scroll handle now actually shows the go to page dialog.
- Improved the page display on the scroll handle.
- An option shows or hides page numbers on the scroll handle.
- Reloading a document no longer flashes stale page content.
- A swipe cancelled by the system no longer stalls background loading.
- Dual Page Mode is ignored in horizontal scrolling mode.
- The theme toggle switches PDF dark mode in place, without restarting.
- Reading Direction:
- Right to left reading direction in horizontal mode.
- The direction is detected automatically per document.
- A per document override offers Auto, Left to Right, and Right to Left.
- Detected and chosen directions are remembered per document.
- Right to left page ordering works without changing logical page numbers.
- Reading Direction is hidden when horizontal scrolling is disabled.
- Right to left reading direction in horizontal mode.
- Hide Margins:
- Hide Margins crops blank page margins without changing the file.
- Margins are detected in the background with a cancelable progress card.
- Detection results are cached per PDF, with per page overrides.
- Noisy page edges are handled safely.
- A global option always hides margins for all PDFs.
- Applying or removing the crop keeps your reading position.
- Hide and Show Margins are available as reader and fullscreen buttons.
- Changing the global setting now applies to the open document as soon as settings close.
- A manual toggle made in the reader survives unrelated settings visits.
- Hide Margins crops blank page margins without changing the file.
- Auto Scroll:
- Auto scroll moves by real elapsed time, so speed is consistent on every device.
- It ticks on the display's frame clock instead of a timer loop.
- Each speed unit still means 100 pixels per second.
- Auto scroll pauses while you interact with the document.
- The speed is remembered per document.
- The minimum speed is lower and speed changes are finer.
- Auto scroll controls stay above the bottom overlays.
- Pending speed saves flush when switching documents or closing the app.
- Auto scroll moves by real elapsed time, so speed is consistent on every device.
- Reader Controls:
- Toolbar, shortcut bar, and fullscreen buttons are all configurable.
- Drag and drop reordering dialogs with a reset option.
- New actions include open online PDF, switch theme, extract text, fullscreen, and links.
- Fullscreen shortcuts for Table of Contents and Go To Page.
- The second toolbar is fully configurable instead of reload only.
- The shortcut bar scrolls horizontally when it holds many actions.
- Redesigned fullscreen buttons with outlines and slight elevation.
- The margin buttons use the same style and size as the others.
- The Open Online PDF action warns before opening insecure links.
- Toolbar, shortcut bar, and fullscreen buttons are all configurable.
- Fullscreen:
- True edge to edge fullscreen, including notch areas.
- A fullscreen info card shows the time, page number, and reading percentage.
- One Scrolling Info Card setting picks which parts appear.
- The info card and its text are centered.
- The PDF name is hidden from the card by default.
- The card also appears while dragging the scroll handle, in both modes.
- The old reading progress overlay was removed in favor of the info card.
- In fullscreen the scroll handle stops below the status bar.
- The document top stays reachable while dragging the handle.
- True edge to edge fullscreen, including notch areas.
- Viewer:
- The theme toggle switches PDF dark mode in place, without restarting.
- The toggle shows a sun in dark mode and a moon in light mode.
- It updates live on the toolbar, shortcut bar, and fullscreen overlay.
- It hides when the PDF theme follows the system.
- The brightness panel opens at the same percentage as the system slider.
- The panel resyncs with the system on every open.
- Double tap zoom ends at a page height fit in horizontal mode.
- The mouse wheel scrolls the page vertically or horizontally.
- Holding Ctrl while scrolling the wheel zooms.
- Wheel zooming no longer snaps to a page afterward.
- Mouse back and forward buttons turn pages, toggleable in settings.
- Keyboard forward keys no longer accidentally turn pages.
- A new browser like scrolling mode avoids sideways drift while reading.
- Sideways movement unlocks only on a clearly horizontal pull.
- An Always Open at First Page switch skips restoring the saved position.
- Positions still save while reading, so progress and resume keep working.
- An option shows the current page and total before the title in the toolbar.
- Tapping the scroll handle now actually shows the go to page dialog.
- Improved the page display on the scroll handle.
- An option shows or hides page numbers on the scroll handle.
- Reloading a document no longer flashes stale page content.
- A swipe cancelled by the system no longer stalls background loading.
- The scroll handle shows the full row range in dual page mode.
- The theme toggle switches PDF dark mode in place, without restarting.
- Text Selection:
- Live inline text selection with larger, easier to grab handles.
- Selection handles have a bigger touch target.
- A floating selection card appears near the selection.
- The card has two rows, with six color swatches on top.
- Below them: Copy, Share, Web, Note, Translate, and Delete or Discard.
- Selected text is fetched only when you actually use an action.
- Copy no longer shows a snackbar, since Android already shows one.
- The Share button renders the selected quote as a square image.
- Quote images show book name, author, an optional made by mark, and three themes.
- A reflow option reshapes the quoted text in the image.
- RTL selection carets mirror with their anchor side.
- Double tap selects whole vocalized Arabic words.
- Live inline text selection with larger, easier to grab handles.
- Highlights and Notes:
- Highlight text and save real highlight annotations into the PDF itself.
- Save into the file or as a copy.
- Highlight edits draw immediately as an overlay, with no page reload.
- Highlights that already exist in the document are detected and editable.
- Tapping an existing highlight selects it instantly, without the double tap wait.
- The selection box stays glued to the highlight while the page scrolls and zooms.
- The highlight strip offers exactly six colors.
- The customize dialog requires picking exactly six from the palette.
- Existing users' color choices are migrated.
- Brown replaced Gray in the palette, and Gray is reserved for notes.
- A toast explains when a color tap is refused at the minimum or maximum.
- Notes are stored inside the PDF on the highlight itself.
- Notes carry creation and modification dates.
- A note editor, viewer, and confirmed delete live on the selection card.
- The note button switches its icon when a note exists.
- Noted text shows an underline indication.
- A note on plain text creates a gray highlight.
- A new My Notes page under the reader menu.
- Note cards show quote, note, page, chapter location, and date.
- My Notes has search, date sorting, and plain text export.
- A new My Highlights page with the same features plus a color filter.
- It lists every highlight in the document.
- Tapping an entry centers and zooms the reader on that highlight.
- Grouped highlights focus their full shape, foreign highlights their own rectangle.
- Opening either page with unsaved edits asks to save, discard, or cancel.
- Unsaved highlights are recovered after a crash.
- Unsaved changes survive rotation and app restarts.
- Saving and discarding are two clear buttons that appear only with unsaved changes.
- Both grey out while saving and a progress bar runs until the save finishes.
- Highlights save off the main thread, so the interface never freezes.
- Share quotes are capped at 400 characters, trimmed at a word boundary, with a notice when shortened.
- RTL quotes draw upright with correct paragraph direction and mirrored marks.
- Highlight text and save real highlight annotations into the PDF itself.
- Signatures:
- Draw a signature and place it on any page.
- Signatures can be moved and resized before saving.
- Saved signatures are written into the PDF itself.
- They are embedded as page content, so every reader displays them.
- Signatures are stored as vector strokes, staying sharp at any zoom.
- The drawn signature is remembered for reuse in later documents.
- Ink colors: black, blue, red, and green.
- Pending signatures survive rotation and app restarts.
- Discarding a placed signature goes through one confirmed flow.
- Draw a signature and place it on any page.
- Forms:
- Fill in PDF form fields.
- Form edits no longer reload the page on every change.
- A tap tolerance makes checkboxes easier to hit.
- The fill in dialog shows the field's readable label instead of an internal path.
- Fields without a label show their short name, and unnamed fields a generic title.
- Fill in PDF form fields.
- Saving and Files:
- Updating the existing file writes directly to it when possible, with no picker.
- Documents opened through the picker or other apps update in place when reachable.
- The locate prompt appears only when the file truly cannot be written.
- Files in the Downloads folder resolve to durable on disk paths.
- The reader recovers from unreadable file links by reopening the on disk file.
- That recovery guards against retry loops.
- The scroll handle shows the full row range in dual page mode.
- Updating the existing file writes directly to it when possible, with no picker.
- Text Selection:
- Live inline text selection with larger, easier to grab handles.
- Selection handles have a bigger touch target.
- A floating selection card appears near the selection.
- The card has two rows, with six color swatches on top.
- Below them: Copy, Share, Web, Note, Translate, and Delete or Discard.
- Selected text is fetched only when you actually use an action.
- Copy no longer shows a snackbar, since Android already shows one.
- The Share button renders the selected quote as a square image.
- Quote images show book name, author, an optional made by mark, and three themes.
- A reflow option reshapes the quoted text in the image.
- RTL selection carets mirror with their anchor side.
- Double tap selects whole vocalized Arabic words.
- Live inline text selection with larger, easier to grab handles.
- Highlights and Notes:
- Highlight text and save real highlight annotations into the PDF itself.
- Save into the file or as a copy.
- Highlight edits draw immediately as an overlay, with no page reload.
- Highlights that already exist in the document are detected and editable.
- Tapping an existing highlight selects it instantly, without the double tap wait.
- The selection box stays glued to the highlight while the page scrolls and zooms.
- The highlight strip offers exactly six colors.
- The customize dialog requires picking exactly six from the palette.
- Existing users' color choices are migrated.
- Brown replaced Gray in the palette, and Gray is reserved for notes.
- A toast explains when a color tap is refused at the minimum or maximum.
- Notes are stored inside the PDF on the highlight itself.
- Notes carry creation and modification dates.
- A note editor, viewer, and confirmed delete live on the selection card.
- The note button switches its icon when a note exists.
- Noted text shows an underline indication.
- A note on plain text creates a gray highlight.
- A new My Notes page under the reader menu.
- Note cards show quote, note, page, chapter location, and date.
- My Notes has search, date sorting, and plain text export.
- A new My Highlights page with the same features plus a color filter.
- It lists every highlight in the document.
- Tapping an entry centers and zooms the reader on that highlight.
- Grouped highlights focus their full shape, foreign highlights their own rectangle.
- Opening either page with unsaved edits asks to save, discard, or cancel.
- Unsaved highlights are recovered after a crash.
- Unsaved changes survive rotation and app restarts.
- Saving and discarding are two clear buttons that appear only with unsaved changes.
- Both grey out while saving and a progress bar runs until the save finishes.
- Highlights save off the main thread, so the interface never freezes.
- Share quotes are capped at 400 characters, trimmed at a word boundary, with a notice when shortened.
- RTL quotes draw upright with correct paragraph direction and mirrored marks.
- Highlight text and save real highlight annotations into the PDF itself.
- Signatures:
- Draw a signature and place it on any page.
- Signatures can be moved and resized before saving.
- Saved signatures are written into the PDF itself.
- They are embedded as page content, so every reader displays them.
- Signatures are stored as vector strokes, staying sharp at any zoom.
- The drawn signature is remembered for reuse in later documents.
- Ink colors: black, blue, red, and green.
- Pending signatures survive rotation and app restarts.
- Discarding a placed signature goes through one confirmed flow.
- Draw a signature and place it on any page.
- Forms:
- Fill in PDF form fields.
- Form edits no longer reload the page on every change.
- A tap tolerance makes checkboxes easier to hit.
- The fill in dialog shows the field's readable label instead of an internal path.
- Fields without a label show their short name, and unnamed fields a generic title.
- Fill in PDF form fields.
- Saving and Files:
- Updating the existing file writes directly to it when possible, with no picker.
- Documents opened through the picker or other apps update in place when reachable.
- The locate prompt appears only when the file truly cannot be written.
- Files in the Downloads folder resolve to durable on disk paths.
- The reader recovers from unreadable file links by reopening the on disk file.
- That recovery guards against retry loops.
- Saving highlights can no longer target the wrong document.
- Closed the window where crop or reload could lose unsaved highlights.
- Printing downloaded PDFs now works.
- File identity is stable for cloud files.
- Saving confirms with Changes saved, covering highlights, signatures, and form fillings.
- The save options now read Update the same file and Save as a new file.
- Saving can no longer damage the original file if the write fails, and failed saves keep every edit and offer saving a copy.
- Interrupted saves finish in the background instead of freezing the save controls.
- Downloaded online PDFs open right away and file into Downloads in the background.
- Saving a link opened PDF updates its Downloads copy directly, with no picker.
- Reopening the same link shows the saved changes.
- Sharing a link opened PDF asks whether to share the link or the PDF file.
- Sharing a link opens it as an online PDF, including repeated shares.
- Temporarily shared PDFs are copied to Documents/MJ PDF, and the copy becomes their permanent location.
- The copy happens only for provably temporary shares, with a switch in History and Privacy.
- Reopening a dead share opens the saved copy or a library match, or offers a verified locate dialog.
- History records remember the original share link so stale entries find their saved copy.
- Shared files always carry the .pdf extension so other apps recognize them.
- File Properties shows the file path when the document has a real on disk location.
- Updating the existing file writes directly to it when possible, with no picker.
- Text Mode:
- The old Text Mode was replaced with a dedicated Text Mode page.
- The current page stays in sync between the PDF and Text Mode.
- Typography settings: multiple fonts, text size, themes, and a reset action.
- A Readable Line Length option limits the text width.
- Reflow rebuilds real paragraphs instead of raw hard wrapped lines.
- Headings are detected by font size and boldness, shown in three levels.
- Hyphenated line breaks are joined correctly, including soft hyphens.
- Bullet, numbered, and lettered lists keep their own lines.
- Poetry, code listings, and short line pages are left unjoined.
- Rotated text and extremely dense pages fall back to a safe joiner.
- Arabic and right to left pages join with direction aware rules.
- Subscripts and superscripts no longer explode math text into fragments.
- Line detection follows horizontal continuity, not just baseline shifts.
- Join Paragraphs and Detect Headings are separate switches.
- They work independently, including headings on unjoined lines.
- Turning both off restores the exact legacy output.
- Choices are remembered per book, and new books use the defaults.
- Reset in the typography sheet clears the book's saved choices.
- Toggling reformats already open pages in place.
- Text Mode is always fullscreen and rehides the bars after dialogs.
- Bottom controls stay above the gesture area.
- The page slider seeks through pages live while dragging.
- Controls are constrained on large screens so they stay reachable.
- An option opens PDFs in Text Mode by default.
- Tapping the page slider jumps to the tapped page, and releasing a drag lands reliably.
- Slider gestures interrupted by the system no longer jolt the page.
- Page jumps settle exactly on the target page.
- Vocalized Arabic text keeps its marks attached and ordered.
- Hyphen wrapped words are rejoined and search offsets stay exact.
- The old Text Mode was replaced with a dedicated Text Mode page.
- Search:
- Results stream in while pages are scanned, instead of appearing at the end.
- The scan keeps running after you pick a result.
- Done cancels the active search session.
- Previous and next arrows with a live counter navigate results inside the reader.
- The results bar shows your position, like 3 of 47.
- The arrows hide when the full result list is not cached.
- Picking a result centers the view on the match.
- A Zoom to Search Results setting also zooms in, off by default.
- The results bar moves to the top when the match sits low on the screen.
- Clicking the results text reopens the full list at the same position.
- The results bar stays alive while the results page is open.
- Picking a new result replaces the old bar cleanly.
- Done is the only thing that clears the search highlight.
- Search sessions are cached per document and query.
- Reopening the same search is instant, with no spinner.
- Cached results restore directly, without extracting text again.
- Expanded results restore expanded with their full text.
- Sessions with more than 5000 hits are not cached.
- Stale cached sessions for the same query are evicted.
- Search remembers list position, scroll offset, expanded results, and the filter query.
- Saving highlights can no longer target the wrong document.
- Closed the window where crop or reload could lose unsaved highlights.
- Printing downloaded PDFs now works.
- File identity is stable for cloud files.
- Saving confirms with Changes saved, covering highlights, signatures, and form fillings.
- The save options now read Update the same file and Save as a new file.
- Saving can no longer damage the original file if the write fails, and failed saves keep every edit and offer saving a copy.
- Interrupted saves finish in the background instead of freezing the save controls.
- Downloaded online PDFs open right away and file into Downloads in the background.
- Saving a link opened PDF updates its Downloads copy directly, with no picker.
- Reopening the same link shows the saved changes.
- Sharing a link opened PDF asks whether to share the link or the PDF file.
- Sharing a link opens it as an online PDF, including repeated shares.
- Temporarily shared PDFs are copied to Documents/MJ PDF, and the copy becomes their permanent location.
- The copy happens only for provably temporary shares, with a switch in History and Privacy.
- Reopening a dead share opens the saved copy or a library match, or offers a verified locate dialog.
- History records remember the original share link so stale entries find their saved copy.
- Shared files always carry the .pdf extension so other apps recognize them.
- File Properties shows the file path when the document has a real on disk location.
- Results stream in while pages are scanned, instead of appearing at the end.
- Text Mode:
- The old Text Mode was replaced with a dedicated Text Mode page.
- The current page stays in sync between the PDF and Text Mode.
- Typography settings: multiple fonts, text size, themes, and a reset action.
- A Readable Line Length option limits the text width.
- Reflow rebuilds real paragraphs instead of raw hard wrapped lines.
- Headings are detected by font size and boldness, shown in three levels.
- Hyphenated line breaks are joined correctly, including soft hyphens.
- Bullet, numbered, and lettered lists keep their own lines.
- Poetry, code listings, and short line pages are left unjoined.
- Rotated text and extremely dense pages fall back to a safe joiner.
- Arabic and right to left pages join with direction aware rules.
- Subscripts and superscripts no longer explode math text into fragments.
- Line detection follows horizontal continuity, not just baseline shifts.
- Join Paragraphs and Detect Headings are separate switches.
- They work independently, including headings on unjoined lines.
- Turning both off restores the exact legacy output.
- Choices are remembered per book, and new books use the defaults.
- Reset in the typography sheet clears the book's saved choices.
- Toggling reformats already open pages in place.
- Text Mode is always fullscreen and rehides the bars after dialogs.
- Bottom controls stay above the gesture area.
- The page slider seeks through pages live while dragging.
- Controls are constrained on large screens so they stay reachable.
- An option opens PDFs in Text Mode by default.
- Tapping the page slider jumps to the tapped page, and releasing a drag lands reliably.
- Slider gestures interrupted by the system no longer jolt the page.
- Page jumps settle exactly on the target page.
- Vocalized Arabic text keeps its marks attached and ordered.
- Hyphen wrapped words are rejoined and search offsets stay exact.
- The old Text Mode was replaced with a dedicated Text Mode page.
- Search:
- Results stream in while pages are scanned, instead of appearing at the end.
- The scan keeps running after you pick a result.
- Done cancels the active search session.
- Previous and next arrows with a live counter navigate results inside the reader.
- The results bar shows your position, like 3 of 47.
- The arrows hide when the full result list is not cached.
- Picking a result centers the view on the match.
- A Zoom to Search Results setting also zooms in, off by default.
- The results bar moves to the top when the match sits low on the screen.
- Clicking the results text reopens the full list at the same position.
- The results bar stays alive while the results page is open.
- Picking a new result replaces the old bar cleanly.
- Done is the only thing that clears the search highlight.
- Search sessions are cached per document and query.
- Reopening the same search is instant, with no spinner.
- Cached results restore directly, without extracting text again.
- Expanded results restore expanded with their full text.
- Sessions with more than 5000 hits are not cached.
- Stale cached sessions for the same query are evicted.
- Search remembers list position, scroll offset, expanded results, and the filter query.
- An option ignores accents when searching.
- Search highlighting no longer stretches the highlighted text taller.
- Fixed search highlighting the wrong words in documents with many line breaks.
- Show more expands the right result in cached searches.
- Filtered result lists no longer corrupt the result order.
- Fixed a broken progress bar when opening cached results.
- Search highlights no longer double draw in dark mode.
- Search highlight cleanup can no longer delete real highlights.
- Big performance improvements on the search page.
- Closing search cleans up leftover markers.
- A hit that cannot be highlighted shows a brief notice without ending navigation.
- Navigating results no longer reloads the whole document per hit.
- Results stream in while pages are scanned, instead of appearing at the end.
- Table of Contents and Links:
- Search inside the Table of Contents matches titles and page numbers.
- Matching ancestors stay visible and matching branches expand automatically.
- Searching never overwrites your saved expansion state.
- Expand all and collapse all buttons.
- Expansion, scroll position, and the query survive rotation and reopening.
- The contents page highlights the path to the current chapter.
- A locate button expands ancestors and scrolls to the current headline.
- The current page is provided by both the reader and Text Mode.
- Jumping from the contents shows a snackbar to jump back.
- Larger expand and collapse touch targets.
- Huge tables of contents scroll smoothly now.
- Nested outline entries build correctly again, restoring the expand button.
- The contents screen no longer mixes in user bookmarks.
- The Links page search icon appears reliably after links load.
- The links list fills in progressively.
- Search inside the Table of Contents matches titles and page numbers.
- Bookmarks:
- Bookmark the current page from the reader.
- The bookmark action shows filled or outline depending on state.
- A dedicated Bookmarks screen lists, opens, renames, and deletes bookmarks.
- Bookmarks can be reordered by drag.
- Deleting a bookmark asks for confirmation.
- Bookmarks are stored per document and survive reopening.
- Deleting a bookmark updates the reader's toggle immediately.
- The bookmark icon is correct right after opening a document.
- Bookmark rows show the chapter each bookmark belongs to.
- Bookmark the current page from the reader.
- Navigation History:
- Navigation history tracks jumps with back and forward.
- History got its own full page instead of a dialog.
- It records link, bookmark, contents, search, and go to jumps.
- Long reading stops are added automatically.
- Forward history appears above the current position, like a browser.
- A highlighted current page row separates the forward and back sections.
- Forward and back rows get distinct icons.
- Tapping a forward entry navigates forward through the stack.
- History opens even when only forward entries exist.
- Revisiting a page moves it to the top instead of duplicating it.
- History rows show the chapter path from the table of contents.
- Chapter paths use a small arrow as the separator.
- Jumping back after an internal link restores the exact view you left.
- Jump Back, Jump Forward, and History grey out when unavailable.
- Navigation history tracks jumps with back and forward.
- Reader Menu:
- The reader menu is now a two section tile grid.
- Sections are labeled Actions and Pages, centered.
- Tiles show an icon with a short label.
- The theme tile reads Light Mode or Dark Mode dynamically.
- Actions include Open PDF, Search, Bookmark Page, and more.
- Pages include Table of Contents, Bookmarks, Text Mode, and Links.
- The navigation tiles sit together in the last Actions row.
- The menu opens faster on its first use.
- Menu content has comfortable spacing away from the edges.
- Action labels are shorter across the whole app.
- The old overflow menu is gone.
- The reader menu is now a two section tile grid.
- Translation and Dictionary:
- A Translate action translates the selected text.
- Translation engines are picked in settings.
- DeepL is marked unstable in the engine picker.
- An offline dictionary can be installed from settings.
- An option ignores accents when searching.
- Search highlighting no longer stretches the highlighted text taller.
- Fixed search highlighting the wrong words in documents with many line breaks.
- Show more expands the right result in cached searches.
- Filtered result lists no longer corrupt the result order.
- Fixed a broken progress bar when opening cached results.
- Search highlights no longer double draw in dark mode.
- Search highlight cleanup can no longer delete real highlights.
- Big performance improvements on the search page.
- Closing search cleans up leftover markers.
- A hit that cannot be highlighted shows a brief notice without ending navigation.
- Navigating results no longer reloads the whole document per hit.
- A Translate action translates the selected text.
- Table of Contents and Links:
- Search inside the Table of Contents matches titles and page numbers.
- Matching ancestors stay visible and matching branches expand automatically.
- Searching never overwrites your saved expansion state.
- Expand all and collapse all buttons.
- Expansion, scroll position, and the query survive rotation and reopening.
- The contents page highlights the path to the current chapter.
- A locate button expands ancestors and scrolls to the current headline.
- The current page is provided by both the reader and Text Mode.
- Jumping from the contents shows a snackbar to jump back.
- Larger expand and collapse touch targets.
- Huge tables of contents scroll smoothly now.
- Nested outline entries build correctly again, restoring the expand button.
- The contents screen no longer mixes in user bookmarks.
- The Links page search icon appears reliably after links load.
- The links list fills in progressively.
- Search inside the Table of Contents matches titles and page numbers.
- Bookmarks:
- Bookmark the current page from the reader.
- The bookmark action shows filled or outline depending on state.
- A dedicated Bookmarks screen lists, opens, renames, and deletes bookmarks.
- Bookmarks can be reordered by drag.
- Deleting a bookmark asks for confirmation.
- Bookmarks are stored per document and survive reopening.
- Deleting a bookmark updates the reader's toggle immediately.
- The bookmark icon is correct right after opening a document.
- Bookmark rows show the chapter each bookmark belongs to.
- Bookmark the current page from the reader.
- Navigation History:
- Navigation history tracks jumps with back and forward.
- History got its own full page instead of a dialog.
- It records link, bookmark, contents, search, and go to jumps.
- Long reading stops are added automatically.
- Forward history appears above the current position, like a browser.
- A highlighted current page row separates the forward and back sections.
- Forward and back rows get distinct icons.
- Tapping a forward entry navigates forward through the stack.
- History opens even when only forward entries exist.
- Revisiting a page moves it to the top instead of duplicating it.
- History rows show the chapter path from the table of contents.
- Chapter paths use a small arrow as the separator.
- Jumping back after an internal link restores the exact view you left.
- Jump Back, Jump Forward, and History grey out when unavailable.
- Navigation history tracks jumps with back and forward.
- Reader Menu:
- The reader menu is now a two section tile grid.
- Sections are labeled Actions and Pages, centered.
- Tiles show an icon with a short label.
- The theme tile reads Light Mode or Dark Mode dynamically.
- Actions include Open PDF, Search, Bookmark Page, and more.
- Pages include Table of Contents, Bookmarks, Text Mode, and Links.
- The navigation tiles sit together in the last Actions row.
- The menu opens faster on its first use.
- Menu content has comfortable spacing away from the edges.
- Action labels are shorter across the whole app.
- The old overflow menu is gone.
- The reader menu is now a two section tile grid.
- Translation and Dictionary:
- A Translate action translates the selected text.
- Translation engines are picked in settings.
- DeepL is marked unstable in the engine picker.
- An offline dictionary can be installed from settings.
- It is built from WordNet with senses, examples, synonyms, and irregular inflections.
- The download is about 7 MB, verified and installed safely with progress shown.
- Lookups normalize case, possessives, and inflections.
- With the dictionary installed, Translate shows definitions for single words.
- Each sense gets its own row, with a Translate instead button.
- It falls back to the translator when no definition exists.
- A define single words toggle controls this behavior.
- The dictionary can be removed again from settings.
- With no translator app installed, a dialog explains the choices and leads to picking a web translator.
- A Translate action translates the selected text.
- Privacy and Incognito:
- A strict per session incognito mode.
- Incognito saves nothing: no history, positions, passwords, titles, or reading settings.
- It also skips highlight recovery writes and system permission grants.
- Reachable from the reader menu, the configurable buttons, and settings.
- Long press the home open button to pick a file in incognito.
- Every library item's options dialog has an Open in Incognito button.
- Turning incognito off mid session records the document immediately.
- Turning it on stops all further writes.
- The mode survives rotation and process death.
- It carries over to documents opened from within the session.
- Incognito always opens a fresh reader instance.
- The app bar turns dark while incognito, with an incognito icon by the title.
- Toolbar icons turn white on the dark bar and restore afterward.
- A new History and Privacy settings page.
- A global Save Reading History switch stops all history writes, including Text Mode.
- While off, status and hide actions on new files are blocked with a notice.
- Adding a bookmark is blocked with a notice, removing one still works.
- A Reading History screen lists every remembered document, including hidden ones.
- It shows the last read date, page progress, and per item delete.
- Confirm guarded clear actions for history, passwords, bookmarks, and recovery data.
- Clearing recovery data also removes the stored signature.
- Deleting a record now removes its bookmarks, recovery data, and save destination too.
- Private and password documents never leave recovery copies on disk.
- Exiting incognito no longer leaves the app stuck in the dark theme.
- A strict per session incognito mode.
- Backup and Restore:
- Export and import settings, reading history, and app data.
- An options dialog picks what to export.
- Passwords are excluded unless explicitly opted in.
- Export writes only the selected sections.
- The result dialog reports what was exported and names the file.
- Chosen export options persist across restarts.
- Backups record hidden files too.
- A Backup Folder setting picks where backups go.
- The app creates its own subfolder inside the chosen location.
- Exports write timestamped files straight into the folder, with no picker each time.
- Export prompts for the folder once if unset and continues after picking.
- A revoked or missing folder shows a notice and reopens the picker.
- Each export keeps only the ten newest backup files.
- An Automatic Daily Backup switch schedules a daily export.
- First enable walks through the folder pick and time pick.
- A Backup Time row shows the schedule and the last run status.
- Daily backups export settings and history without passwords.
- The schedule reanchors on every app start and repairs itself after restores.
- Import opens the picker directly and validates the file before touching anything.
- Settings only backups apply immediately and restart the app.
- Backups containing history show a wipe warning with a countdown confirm.
- Confirmed imports wipe old data and insert the backup as is.
- Device specific settings like the backup folder are never exported or overwritten.
- Malformed backup files report a clear invalid file message.
- Import and export cannot be interrupted midway by navigation.
- Every backup is verified by reading it back before it is declared successful.
- Interrupted exports can no longer leave corrupt files, and leftovers are swept automatically.
- Scheduled backups run even when the app is closed, with retries before reporting failure.
- Only automatic backups are pruned, manual backups are never auto deleted.
- Importing first writes a verified safety snapshot, restorable at any time from settings.
- The restore is atomic, a crash mid import can no longer wipe the library.
- Restored settings are validated, bad values self heal to defaults.
- Failed or stalled automatic backups surface as a notice with a shortcut to backup settings.
- Import runs in the background with progress and a one time summary of what was restored.
- Backups use an explicit fixed format that release builds can never corrupt, and the broken release's file imports again.
- It is built from WordNet with senses, examples, synonyms, and irregular inflections.
- The download is about 7 MB, verified and installed safely with progress shown.
- Lookups normalize case, possessives, and inflections.
- With the dictionary installed, Translate shows definitions for single words.
- Each sense gets its own row, with a Translate instead button.
- It falls back to the translator when no definition exists.
- A define single words toggle controls this behavior.
- The dictionary can be removed again from settings.
- With no translator app installed, a dialog explains the choices and leads to picking a web translator.
- Export and import settings, reading history, and app data.
- Privacy and Incognito:
- A strict per session incognito mode.
- Incognito saves nothing: no history, positions, passwords, titles, or reading settings.
- It also skips highlight recovery writes and system permission grants.
- Reachable from the reader menu, the configurable buttons, and settings.
- Long press the home open button to pick a file in incognito.
- Every library item's options dialog has an Open in Incognito button.
- Turning incognito off mid session records the document immediately.
- Turning it on stops all further writes.
- The mode survives rotation and process death.
- It carries over to documents opened from within the session.
- Incognito always opens a fresh reader instance.
- The app bar turns dark while incognito, with an incognito icon by the title.
- Toolbar icons turn white on the dark bar and restore afterward.
- A new History and Privacy settings page.
- A global Save Reading History switch stops all history writes, including Text Mode.
- While off, status and hide actions on new files are blocked with a notice.
- Adding a bookmark is blocked with a notice, removing one still works.
- A Reading History screen lists every remembered document, including hidden ones.
- It shows the last read date, page progress, and per item delete.
- Confirm guarded clear actions for history, passwords, bookmarks, and recovery data.
- Clearing recovery data also removes the stored signature.
- Deleting a record now removes its bookmarks, recovery data, and save destination too.
- Private and password documents never leave recovery copies on disk.
- Exiting incognito no longer leaves the app stuck in the dark theme.
- A strict per session incognito mode.
- Backup and Restore:
- Export and import settings, reading history, and app data.
- An options dialog picks what to export.
- Passwords are excluded unless explicitly opted in.
- Export writes only the selected sections.
- The result dialog reports what was exported and names the file.
- Chosen export options persist across restarts.
- Backups record hidden files too.
- A Backup Folder setting picks where backups go.
- The app creates its own subfolder inside the chosen location.
- Exports write timestamped files straight into the folder, with no picker each time.
- Export prompts for the folder once if unset and continues after picking.
- A revoked or missing folder shows a notice and reopens the picker.
- Each export keeps only the ten newest backup files.
- An Automatic Daily Backup switch schedules a daily export.
- First enable walks through the folder pick and time pick.
- A Backup Time row shows the schedule and the last run status.
- Daily backups export settings and history without passwords.
- The schedule reanchors on every app start and repairs itself after restores.
- Import opens the picker directly and validates the file before touching anything.
- Settings only backups apply immediately and restart the app.
- Backups containing history show a wipe warning with a countdown confirm.
- Confirmed imports wipe old data and insert the backup as is.
- Device specific settings like the backup folder are never exported or overwritten.
- Malformed backup files report a clear invalid file message.
- Import and export cannot be interrupted midway by navigation.
- Every backup is verified by reading it back before it is declared successful.
- Interrupted exports can no longer leave corrupt files, and leftovers are swept automatically.
- Scheduled backups run even when the app is closed, with retries before reporting failure.
- Only automatic backups are pruned, manual backups are never auto deleted.
- Importing first writes a verified safety snapshot, restorable at any time from settings.
- The restore is atomic, a crash mid import can no longer wipe the library.
- Restored settings are validated, bad values self heal to defaults.
- Failed or stalled automatic backups surface as a notice with a shortcut to backup settings.
- Import runs in the background with progress and a one time summary of what was restored.
- Backups use an explicit fixed format that release builds can never corrupt, and the broken release's file imports again.
- Every export proves the file can be fully imported, and unreadable backups are rejected up front.
- Restoring a backup no longer replays old annotations onto documents.
- All backup errors are specific and translatable.
- Export and import settings, reading history, and app data.
- Settings:
- Settings reorganized into searchable pages.
- Pages: Appearance, Reading, Controls, Text, Highlighting, History and Privacy, and Advanced.
- Every option was revised, with better titles and descriptions.
- Obsolete options were deleted.
- The old advanced configuration screen merged into settings.
- A new Home Page settings section.
- A Highlighting page with the detection switch and the color picker.
- A Translation and Dictionary page.
- Selection dialogs share one full width row style with ripple.
- Removed the obsolete long press copy dialog setting.
- The settings page was reorganized.
- The chosen light or dark theme applies immediately on app start.
- Settings reorganized into searchable pages.
- Design:
- Material You dynamic colors across the whole app.
- Consistent theming and colors everywhere.
- A modern file properties dialog with page size, fonts, and properly parsed dates.
- One consistent snackbar style: floating rounded cards with an outline.
- Snackbar action buttons are underlined and colored.
- A rewritten intro with five Material You pages.
- The intro pages: welcome, library, reading comfort, annotation, and customization.
- The welcome page shows the logo, the privacy pitch, and a made by link.
- Page dots, a Skip button, and Get Started.
- No upfront storage permission request in the intro.
- The intro now also shows on Android 6 devices.
- A new What's New page replaces the old dialog.
- What's New opens once after the intro.
- The About page was rebuilt with a logo, name, and copyable version chip.
- A featured card links to the official MJ PDF page.
- Grouped section cards with icon and label rows.
- The author section links to mudlej.com.
- License information moved to a better place.
- The reader draws edge to edge behind a transparent navigation bar.
- Bottom overlays lift above the Android gesture area.
- Fullscreen hides everything cleanly again.
- The highlight strip uses one size and uniform spacing for swatches and buttons.
- Themed status and navigation bar colors.
- The main layout no longer draws under the system bars.
- The home permission card got proper top spacing.
- Go To Page and All Pages follow the selected theme.
- Improved accessibility support.
- The finalized V3 logo, with a vector version on the welcome and About pages.
- Release notes appear once after each update, with a link to the release.
- Material You dynamic colors across the whole app.
- Languages:
- Added Italian, Dutch, French, Simplified Chinese, Persian, Polish, and Ukrainian translations.
- Updated the existing translations.
- Cleaned up the merged community translations.
- All fourteen partial translations were completed, and every new text is translated.
- Added Italian, Dutch, French, Simplified Chinese, Persian, Polish, and Ukrainian translations.
- Performance:
- The PDF engine is now built for speed instead of size.
- This fixes a years old rendering slowdown, and pages render noticeably faster.
- Pinch zoom renders whole page snapshots instead of a tile patchwork.
- Pages re render in steps while pinching instead of only after release.
- One previous snapshot per page is kept, recycled oldest first.
- The full quality pass still runs when the gesture ends.
- Bigger default tiles, and existing custom settings are preserved.
- The tile cache follows a fixed pixel budget with sane bounds.
- Eviction removes the genuinely oldest tiles first.
- Tiles draw sorted oldest to newest, so newer tiles stay on top.
- Cache eviction pauses during pinch gestures and trims on release.
- Auto scroll reloads tiles a few times per second instead of hundreds.
- Search, Table of Contents, and Links open the PDF off the main thread.
- No jank on entry for big files.
- The properties dialog no longer copies the whole PDF to read its size.
- Book covers render off the main thread everywhere.
- Reloading the PDF and changing reading direction no longer block the interface.
- A stopped render queue no longer wastes work.
- Every export proves the file can be fully imported, and unreadable backups are rejected up front.
- Restoring a backup no longer replays old annotations onto documents.
- All backup errors are specific and translatable.
- The PDF engine is now built for speed instead of size.
- Settings:
- Settings reorganized into searchable pages.
- Pages: Appearance, Reading, Controls, Text, Highlighting, History and Privacy, and Advanced.
- Every option was revised, with better titles and descriptions.
- Obsolete options were deleted.
- The old advanced configuration screen merged into settings.
- A new Home Page settings section.
- A Highlighting page with the detection switch and the color picker.
- A Translation and Dictionary page.
- Selection dialogs share one full width row style with ripple.
- Removed the obsolete long press copy dialog setting.
- The settings page was reorganized.
- The chosen light or dark theme applies immediately on app start.
- Settings reorganized into searchable pages.
- Design:
- Material You dynamic colors across the whole app.
- Consistent theming and colors everywhere.
- A modern file properties dialog with page size, fonts, and properly parsed dates.
- One consistent snackbar style: floating rounded cards with an outline.
- Snackbar action buttons are underlined and colored.
- A rewritten intro with five Material You pages.
- The intro pages: welcome, library, reading comfort, annotation, and customization.
- The welcome page shows the logo, the privacy pitch, and a made by link.
- Page dots, a Skip button, and Get Started.
- No upfront storage permission request in the intro.
- The intro now also shows on Android 6 devices.
- A new What's New page replaces the old dialog.
- What's New opens once after the intro.
- The About page was rebuilt with a logo, name, and copyable version chip.
- A featured card links to the official MJ PDF page.
- Grouped section cards with icon and label rows.
- The author section links to mudlej.com.
- License information moved to a better place.
- The reader draws edge to edge behind a transparent navigation bar.
- Bottom overlays lift above the Android gesture area.
- Fullscreen hides everything cleanly again.
- The highlight strip uses one size and uniform spacing for swatches and buttons.
- Themed status and navigation bar colors.
- The main layout no longer draws under the system bars.
- The home permission card got proper top spacing.
- Go To Page and All Pages follow the selected theme.
- Improved accessibility support.
- The finalized V3 logo, with a vector version on the welcome and About pages.
- Release notes appear once after each update, with a link to the release.
- Material You dynamic colors across the whole app.
- Languages:
- Added Italian, Dutch, French, Simplified Chinese, Persian, Polish, and Ukrainian translations.
- Updated the existing translations.
- Cleaned up the merged community translations.
- All fourteen partial translations were completed, and every new text is translated.
- Added Italian, Dutch, French, Simplified Chinese, Persian, Polish, and Ukrainian translations.
- Performance:
- The PDF engine is now built for speed instead of size.
- This fixes a years old rendering slowdown, and pages render noticeably faster.
- Pinch zoom renders whole page snapshots instead of a tile patchwork.
- Pages re render in steps while pinching instead of only after release.
- One previous snapshot per page is kept, recycled oldest first.
- The full quality pass still runs when the gesture ends.
- Bigger default tiles, and existing custom settings are preserved.
- The tile cache follows a fixed pixel budget with sane bounds.
- Eviction removes the genuinely oldest tiles first.
- Tiles draw sorted oldest to newest, so newer tiles stay on top.
- Cache eviction pauses during pinch gestures and trims on release.
- Auto scroll reloads tiles a few times per second instead of hundreds.
- Search, Table of Contents, and Links open the PDF off the main thread.
- No jank on entry for big files.
- The properties dialog no longer copies the whole PDF to read its size.
- Book covers render off the main thread everywhere.
- Reloading the PDF and changing reading direction no longer block the interface.
- A stopped render queue no longer wastes work.
- Contents rows recycle individually instead of rebuilding the whole tree.
- A batched native call fetches character geometry and font data in one pass.
- Text extraction uses a bounded cache with safe page lifecycle handling.
- Rendering is chunked and cancellable, so stale work stops in milliseconds.
- Every page gets a render once preview, cached in memory and on disk, drawn under the tiles.
- An idle sweep pre renders previews for the whole book, yielding instantly to interaction.
- Preview resolution adapts to the device, with smaller previews on low memory phones.
- Saving previews to disk no longer causes dropped frames.
- Toggling the night theme repaints instead of re rendering everything.
- The PDF engine is now built for speed instead of size.
- Fixes:
- The database moved out of the cache directory.
- History, passwords, and progress no longer vanish when the cache is cleared.
- Fixed a native memory leak on every rendered tile.
- Fixed native leaks when opening PDFs from bytes and when opening fails.
- Fixed a native leak when reading empty document metadata.
- Fixed document leaks when a load is cancelled or fails midway.
- Search, contents, and links pages no longer leak a document copy per visit.
- Fixed document leaks on failure paths in the cover renderer.
- Cached temporary copies of PDFs no longer pile up on disk.
- The file copy helper closes its streams on all paths.
- Fixed a crash when rendering races with closing a document.
- Closing a document mid operation is now safe.
- Fixed crashes when touching pages that are not open.
- Fixed four crashes that could happen with no document loaded.
- Fixed crashes after leaving a screen with background work still running.
- Fixed a possible crash or hang on huge or broken tables of contents.
- Fixed a crash when typing more than ten digits in go to page.
- Fixed a crash on Turkish devices when using list filters.
- Fixed a crash when swiping a record during a delete animation.
- Fixed a launch crash on devices without a brightness setting.
- Fixed a wrong thread crash, and a doubled message, when text extraction fails.
- The first run dialog can no longer appear on a destroyed screen.
- The render thread survives rare race errors instead of crashing the app.
- Hardened the native layer against overflows, bad sizes, and missing checks.
- Fixed the viewer staying blank after switching away and back.
- Fixed the reading position not restoring across screen reloads.
- Fixed the back button breaking when volume key page turning is enabled.
- Fixed the back arrow on the About page doing nothing.
- Fixed PDF annotations not rendering in dark theme.
- Fixed selection handles anchoring wrong in right to left text.
- Fixed loading, animation, and layout glitches in Text Mode.
- An interrupted pinch no longer leaves the tile cache oversized forever.
- Snapshot cleanup cannot recycle the wrong tile on small pages.
- Duplicate thumbnails no longer evict live ones.
- Fixed a thread safety hole in page coordinate mapping.
- Fixed small state races in scanning, byte holding, and date storage.
- Text extraction flags reset properly per document.
- Saving auto scroll speed no longer blocks the interface.
- Hardened document and margin detection lifecycle handling.
- With Home disabled, back reopens the picker instead of exiting.
- Cancelling that picker exits the app, so back twice still leaves.
- The double tap to exit prompt still comes first when enabled.
- The toolbar home arrow updates immediately after toggling the Home setting.
- Fixed a memory corruption risk when closing pages of form documents.
- A failed database relocation recovers on the next launch.
- A stale form field indicator no longer lingers after form edits.
- The database moved out of the cache directory.
- Development:
- Updated to Android SDK 36, Gradle 9.5, Kotlin 2.4, and AGP 9.
- Raised the minimum Android version from 5.0 to 6.0.
- Targets Android 16.
- Updated Activity KTX from 1.9.0 to 1.13.0.
- Updated Fragment KTX from 1.7.0 to 1.8.9.
- Updated Navigation from 2.7.7 to 2.9.8.
- Updated Room from 2.6.1 to 2.8.4.
- Updated AppCompat from 1.6.1 to 1.7.1.
- Updated ConstraintLayout from 2.1.4 to 2.2.1.
- Updated Material from 1.12.0 to 1.14.0.
- Updated AndroidX Core from 1.10.0 to 1.18.0.
- Updated Gson from 2.10.1 to 2.14.0.
- Updated coroutines from 1.6.4 to 1.11.0.
- Contents rows recycle individually instead of rebuilding the whole tree.
- A batched native call fetches character geometry and font data in one pass.
- Text extraction uses a bounded cache with safe page lifecycle handling.
- Rendering is chunked and cancellable, so stale work stops in milliseconds.
- Every page gets a render once preview, cached in memory and on disk, drawn under the tiles.
- An idle sweep pre renders previews for the whole book, yielding instantly to interaction.
- Preview resolution adapts to the device, with smaller previews on low memory phones.
- Saving previews to disk no longer causes dropped frames.
- Toggling the night theme repaints instead of re rendering everything.
- Updated to Android SDK 36, Gradle 9.5, Kotlin 2.4, and AGP 9.
- Fixes:
- The database moved out of the cache directory.
- History, passwords, and progress no longer vanish when the cache is cleared.
- Fixed a native memory leak on every rendered tile.
- Fixed native leaks when opening PDFs from bytes and when opening fails.
- Fixed a native leak when reading empty document metadata.
- Fixed document leaks when a load is cancelled or fails midway.
- Search, contents, and links pages no longer leak a document copy per visit.
- Fixed document leaks on failure paths in the cover renderer.
- Cached temporary copies of PDFs no longer pile up on disk.
- The file copy helper closes its streams on all paths.
- Fixed a crash when rendering races with closing a document.
- Closing a document mid operation is now safe.
- Fixed crashes when touching pages that are not open.
- Fixed four crashes that could happen with no document loaded.
- Fixed crashes after leaving a screen with background work still running.
- Fixed a possible crash or hang on huge or broken tables of contents.
- Fixed a crash when typing more than ten digits in go to page.
- Fixed a crash on Turkish devices when using list filters.
- Fixed a crash when swiping a record during a delete animation.
- Fixed a launch crash on devices without a brightness setting.
- Fixed a wrong thread crash, and a doubled message, when text extraction fails.
- The first run dialog can no longer appear on a destroyed screen.
- The render thread survives rare race errors instead of crashing the app.
- Hardened the native layer against overflows, bad sizes, and missing checks.
- Fixed the viewer staying blank after switching away and back.
- Fixed the reading position not restoring across screen reloads.
- Fixed the back button breaking when volume key page turning is enabled.
- Fixed the back arrow on the About page doing nothing.
- Fixed PDF annotations not rendering in dark theme.
- Fixed selection handles anchoring wrong in right to left text.
- Fixed loading, animation, and layout glitches in Text Mode.
- An interrupted pinch no longer leaves the tile cache oversized forever.
- Snapshot cleanup cannot recycle the wrong tile on small pages.
- Duplicate thumbnails no longer evict live ones.
- Fixed a thread safety hole in page coordinate mapping.
- Fixed small state races in scanning, byte holding, and date storage.
- Text extraction flags reset properly per document.
- Saving auto scroll speed no longer blocks the interface.
- Hardened document and margin detection lifecycle handling.
- With Home disabled, back reopens the picker instead of exiting.
- Cancelling that picker exits the app, so back twice still leaves.
- The double tap to exit prompt still comes first when enabled.
- The toolbar home arrow updates immediately after toggling the Home setting.
- Fixed a memory corruption risk when closing pages of form documents.
- A failed database relocation recovers on the next launch.
- A stale form field indicator no longer lingers after form edits.
- The database moved out of the cache directory.
- Development:
- Updated to Android SDK 36, Gradle 9.5, Kotlin 2.4, and AGP 9.
- Raised the minimum Android version from 5.0 to 6.0.
- Targets Android 16.
- Updated Activity KTX from 1.9.0 to 1.13.0.
- Updated Fragment KTX from 1.7.0 to 1.8.9.
- Updated Navigation from 2.7.7 to 2.9.8.
- Updated Room from 2.6.1 to 2.8.4.
- Updated AppCompat from 1.6.1 to 1.7.1.
- Updated ConstraintLayout from 2.1.4 to 2.2.1.
- Updated Material from 1.12.0 to 1.14.0.
- Updated AndroidX Core from 1.10.0 to 1.18.0.
- Updated Gson from 2.10.1 to 2.14.0.
- Updated coroutines from 1.6.4 to 1.11.0.
- Updated desugaring from 2.0.4 to 2.1.5.
- Updated ACRA from 5.9.0 to 5.13.1.
- Updated Swipe Refresh Layout from 1.1.0 to 1.2.0.
- Removed jcenter.
- Disabled Jetifier after removing the last support library dependency.
- Replaced the attribution dependency with a local open source libraries dialog.
- Removed the Flexbox workaround dependency.
- Removed the unused color picker dependency and its libraries dialog entry.
- Removed the old intro dependency along with its strings and images.
- Removed legacy Kotlin plugin setup.
- Removed redundant build plugin declarations, keeping one in the root.
- Cleaned up build warnings for the new toolchain.
- Page counters format through translatable resources with positional placeholders.
- Dependency metadata is no longer embedded in releases.
- Native libraries are aligned for 16 KB page sizes.
- A setup guide documents building the app from a fresh Linux install.
- The engine can be built fully from source with one script.
- The dependency script can rebuild just the native glue code.
- It fails properly on errors and missing files.
- It verifies that every native library exists for every processor type.
- A script builds, compresses, and fingerprints the offline dictionary reproducibly.
- Dictionary builds are deterministic, so identical sources give identical hashes.
- Replaced deprecated request code navigation with modern result launchers.
- Converted the last Java files to Kotlin.
- The two print adapters merged into one, with the same behavior.
- The download task became a coroutine with identical error handling.
- The database access layer is now thread safe.
- Removed hidden system reflection for file descriptors.
- Removed all dead code, functions, classes, and unused resources.
- Stripped commented out code and leftover debug logging.
- Removed four generations of old launcher icon backups.
- The reader was rebuilt around a view model that owns all reader state.
- Reader state survives process death through saved state.
- A single composition root builds all reader controllers in explicit tiers.
- The main reader screen shrank to a fraction of its former size.
- Document loading lives in a dedicated loader with lifecycle events.
- Printing, screenshots, brightness, zoom lock, and more each got a focused controller.
- Text Mode split into loader, typography, and controls components.
- Screens share common helpers for chrome, confirm dialogs, and filtering.
- Reader files were reorganized into focused packages with history preserved.
- Table of contents entries are no longer called bookmarks internally.
- Database table names are pinned so internal renames cannot break data.
- Internal names were aligned with Dual Page Mode and the note fields.
- Signature internals were renamed from stamp terms to signature terms.
- The intro was rewritten from scratch without the old library.
- The intro activity is labeled with the app name.
- The About screen wiring is compile checked instead of reflection based.
- The file picker failure message is localized now.
- Fixed dead settings rows caused by a subtle scoping bug.
- Search coordination was reworked around one shared session.
- Search preserves raw text through the pipeline with a normalized text mapping.
- Improved logging around extractor failures.
- Shared extractor setup across the search, contents, and links screens.
- Removed the old strings that the redesigns made obsolete, in every language.
- Updated to Android SDK 36, Gradle 9.5, Kotlin 2.4, and AGP 9.