### v2026.8.2
* Fixed a bug where fast-dragging the side scroll pill in a long PDF froze the app and triggered repeated "Application Not Responding" dialogs. Each touch-move event used to issue its own giant
* Fixed the remaining main-thread work that still caused scrolling jank and ANRs on long PDFs even after the drag fix above: every page bind used to open PDF pages natively on the UI thread, copy the whole bitmap cache on each bind/recycle, and force a layout pass — which all adds up fast when a drag flies past dozens of pages. Page sizes are now only read on the render thread, evicted-bitmap reuse uses a constant-time lookup instead of scanning the cache, item heights only re-request layout when they actually change, next-page prefetching stands down during a drag so the single render thread stays on the pages you're looking at, and the scroll-pill fade is no longer restarted on every scroll event.
* Fixed a bug where a single failed page render (e.g. an out-of-memory moment while scrolling fast, or a render error on one page) could permanently freeze PDF rendering for the rest of the session. The renderer only allows one page open at a time, and the engine now always releases the page it opened — even when rendering throws — so a temporary glitch can no longer wedge it and make every later page fail to load.
* Fixed a bug where pixel-erasing part of a closed loop (e.g. a circle or an infinity drawn as one stroke) filled the remaining loops solid with the pen color. The pixel eraser used to carve the stroke's outline and then fill the leftover pieces, which flooded the loop's interior with ink. It now cuts the stroke along its centerline where the eraser passes, so a loop that loses a small arc stays a clean open arc with a gap — nothing gets filled.
* Fixed a bug where a failed save during page operations (add, delete, duplicate, move, rotate, or template change) could delete the notebook's PDF and leave nothing behind — data loss. PDF edits now write to a temp file, keep a backup, verify the rename, and restore the backup if anything fails.
* Fixed the pixel eraser crashing or corrupting ink when used alongside other tools. The pixel eraser ran its path-splitting math on a background thread while reading the live stroke list and shared Path/Paint objects, racing the main thread's drawing, stroke eraser, and pen strokes — which could throw ConcurrentModificationException or crash Skia. Ink is now deep-copied on the main thread and the math runs only on those private copies.
* Fixed a bug where Export crashed on the tst (test) flavor with Couldn't find meta-data for provider with authority ${applicationId}.fileprovider.
* Fixed a bug where Images donot appear in thumbnails.
* Fixed a bug where undo/redo worked for moving images but failed when undoing the addition of a new image.
* Fixed a bug where duplicating a notebook doesnt copy the strokes.
* Fixed
* Fixed a bug where duplicating a notebook caused it to display first-page thumbnails like imported PDFs instead of retaining the original's page preferences.
* Fixed auto-appending in continuous scroll mode for imported PDFs by persisting the fallback template on the first auto-append.
* Fixed a bug where applying a template to a single page incorrectly saved it as the default template for all pages.
* Fixed a bug where fast-dragging the side scroll pill in a long PDF froze the app and triggered repeated "Application Not Responding" dialogs. Each touch-move event used to issue its own giant
scrollBy plus dozens of page binds on the main thread, fast enough to overrun Android's 5-second input-dispatch window. The move handler now coalesces into a single scrollBy per Choreographer frame, the engine's size-prefetch sweep and the zoomed-in hi-res tile renderer stand down for the duration of the drag so the single render thread is dedicated to whichever page you land on, and the per-page "last viewed page" persistence is deferred until scrolling actually stops instead of firing on every page crossing.* Fixed the remaining main-thread work that still caused scrolling jank and ANRs on long PDFs even after the drag fix above: every page bind used to open PDF pages natively on the UI thread, copy the whole bitmap cache on each bind/recycle, and force a layout pass — which all adds up fast when a drag flies past dozens of pages. Page sizes are now only read on the render thread, evicted-bitmap reuse uses a constant-time lookup instead of scanning the cache, item heights only re-request layout when they actually change, next-page prefetching stands down during a drag so the single render thread stays on the pages you're looking at, and the scroll-pill fade is no longer restarted on every scroll event.
* Fixed a bug where a single failed page render (e.g. an out-of-memory moment while scrolling fast, or a render error on one page) could permanently freeze PDF rendering for the rest of the session. The renderer only allows one page open at a time, and the engine now always releases the page it opened — even when rendering throws — so a temporary glitch can no longer wedge it and make every later page fail to load.
* Fixed a bug where pixel-erasing part of a closed loop (e.g. a circle or an infinity drawn as one stroke) filled the remaining loops solid with the pen color. The pixel eraser used to carve the stroke's outline and then fill the leftover pieces, which flooded the loop's interior with ink. It now cuts the stroke along its centerline where the eraser passes, so a loop that loses a small arc stays a clean open arc with a gap — nothing gets filled.
* Fixed a bug where a failed save during page operations (add, delete, duplicate, move, rotate, or template change) could delete the notebook's PDF and leave nothing behind — data loss. PDF edits now write to a temp file, keep a backup, verify the rename, and restore the backup if anything fails.
* Fixed the pixel eraser crashing or corrupting ink when used alongside other tools. The pixel eraser ran its path-splitting math on a background thread while reading the live stroke list and shared Path/Paint objects, racing the main thread's drawing, stroke eraser, and pen strokes — which could throw ConcurrentModificationException or crash Skia. Ink is now deep-copied on the main thread and the math runs only on those private copies.
* Fixed a bug where Export crashed on the tst (test) flavor with Couldn't find meta-data for provider with authority ${applicationId}.fileprovider.
* Fixed a bug where Images donot appear in thumbnails.
* Fixed a bug where undo/redo worked for moving images but failed when undoing the addition of a new image.
* Fixed a bug where duplicating a notebook doesnt copy the strokes.
* Fixed
imageBitmapCache in StrokeManager by replacing the unbounded MutableMap with an LruCache to auto-evict bitmaps under memory pressure.* Fixed a bug where duplicating a notebook caused it to display first-page thumbnails like imported PDFs instead of retaining the original's page preferences.
* Fixed auto-appending in continuous scroll mode for imported PDFs by persisting the fallback template on the first auto-append.
* Fixed a bug where applying a template to a single page incorrectly saved it as the default template for all pages.
* thumb_<notebookId>.png is now copied alongside the PDF and ink files during duplication. The duplicate notebook will show the original's cover preview instantly instead of showing a blank placeholder until the next render cycle.
* Fixed a bug where grabbing the selection's corner resize handle slightly off-centre made the box jump to a different size on the first drag. The scale is now baselined from where the pen lands on the handle, so the box starts exactly at your grab point and resizes smoothly instead of snapping.
* Fixed a bug where grabbing the selection's corner resize handle slightly off-centre made the box jump to a different size on the first drag. The scale is now baselined from where the pen lands on the handle, so the box starts exactly at your grab point and resizes smoothly instead of snapping.
### v2026.8.4
* Fixed a bug where Exporting or Importing a backup closed the app's database forever — after Export, going back to the home screen crashed the app; after Import, the database stayed broken until a manual restart. Export now flushes the database through SQLite's WAL checkpoint without closing it, and Import properly reopens the restored database and relaunches the app automatically so everything is rebuilt from the restored data.
* Fixed a bug where exporting a large page (PDF/PNG/ZIP) could fail cryptically: if rendering the page threw (e.g. an out-of-memory moment on a very large raster), the PDF page was left open, which made PdfRenderer.close() throw "Current page not closed" and masked the real error. Pages are now always released even when rendering fails, so the export either completes or reports the true error.
* Fixed a small renderer resource leak: if a page render failed partway through (a bad PDF page, an out-of-memory moment, or an ink-drawing error), the bitmap borrowed from the reuse pool was never handed back, silently shrinking the pool until the next render reallocated a fresh one. A failed render now returns its bitmap to the pool before rethrowing, so the reuse pool stays intact across transient render errors.
* Redesigned the Create New dialog with a Material 3 Expressive look. New Folder, New Notebook, and Import PDF each appear as a tinted, color-coded card (blue folder, purple notebook, red PDF) with icon, title, and description, a springy scale-in animation when the dialog opens, and a tactile press effect — the plain text-only list is gone.
* The notebook title you type in the basic create dialog is now carried over to the Advanced Template dialog when you tap "Choose / Edit Template", so you don't have to retype it.
* Shrunk the template preview in the basic create dialog so the dialog feels lighter and the title field gets more visual priority.
* Fixed a crash in the Pages view: fast-scrolling the page grid and closing it could crash with "Document already closed" because thumbnail renders were still queued on the app-wide scope and ran against a closed PDF renderer. The grid now runs on its own dialog-scoped coroutine that is cancelled the moment the dialog closes, and the thumbnail renderer is closed-safe — an in-flight render simply gives up instead of touching the closed document.
* Made the Pages view much faster on large PDFs. Thumbnails used to render one-at-a-time behind a single native renderer lock (a fast fling could queue dozens of renders waiting their turn). The renderer now keeps a small pool of independent renderers so several thumbnails draw in parallel, duplicate renders of the same page are skipped, and thumbnails for holders that scrolled off-screen are never wasted.
* Thumbnail loading in the Pages view now follows the same engine design that makes the main PDF view fast: renders run on their own dedicated worker threads (instead of the app-wide IO pool fighting over one lock), a page that scrolls off-screen cancels its queued render so a fast fling only draws what you're looking at, and rendered bitmaps are reused from a small pool instead of allocating fresh memory for every thumbnail — so the grid fills in noticeably faster and scrolling through huge PDFs stays smooth.
* Added a draggable scroll pill to the Pages view. Just like the one in the PDF view, it appears on the right edge of the page grid: drag it to glide through hundreds or thousands of pages, release to land exactly on the page you pointed at, and it fades away when you stop scrolling.
* Fixed a memory leak in the zoomed-in view: quickly pinching, panning, or starting a scroll-pill drag could cancel a hi-res tile render partway through, and the page bitmaps it had already produced were never recycled — rapid zooming silently churned native memory. A cancelled render now recycles its finished tiles before the job stops.
* Fixed a bug where Exporting or Importing a backup closed the app's database forever — after Export, going back to the home screen crashed the app; after Import, the database stayed broken until a manual restart. Export now flushes the database through SQLite's WAL checkpoint without closing it, and Import properly reopens the restored database and relaunches the app automatically so everything is rebuilt from the restored data.
* Fixed a bug where exporting a large page (PDF/PNG/ZIP) could fail cryptically: if rendering the page threw (e.g. an out-of-memory moment on a very large raster), the PDF page was left open, which made PdfRenderer.close() throw "Current page not closed" and masked the real error. Pages are now always released even when rendering fails, so the export either completes or reports the true error.
* Fixed a small renderer resource leak: if a page render failed partway through (a bad PDF page, an out-of-memory moment, or an ink-drawing error), the bitmap borrowed from the reuse pool was never handed back, silently shrinking the pool until the next render reallocated a fresh one. A failed render now returns its bitmap to the pool before rethrowing, so the reuse pool stays intact across transient render errors.
* Redesigned the Create New dialog with a Material 3 Expressive look. New Folder, New Notebook, and Import PDF each appear as a tinted, color-coded card (blue folder, purple notebook, red PDF) with icon, title, and description, a springy scale-in animation when the dialog opens, and a tactile press effect — the plain text-only list is gone.
* The notebook title you type in the basic create dialog is now carried over to the Advanced Template dialog when you tap "Choose / Edit Template", so you don't have to retype it.
* Shrunk the template preview in the basic create dialog so the dialog feels lighter and the title field gets more visual priority.
* Fixed a crash in the Pages view: fast-scrolling the page grid and closing it could crash with "Document already closed" because thumbnail renders were still queued on the app-wide scope and ran against a closed PDF renderer. The grid now runs on its own dialog-scoped coroutine that is cancelled the moment the dialog closes, and the thumbnail renderer is closed-safe — an in-flight render simply gives up instead of touching the closed document.
* Made the Pages view much faster on large PDFs. Thumbnails used to render one-at-a-time behind a single native renderer lock (a fast fling could queue dozens of renders waiting their turn). The renderer now keeps a small pool of independent renderers so several thumbnails draw in parallel, duplicate renders of the same page are skipped, and thumbnails for holders that scrolled off-screen are never wasted.
* Thumbnail loading in the Pages view now follows the same engine design that makes the main PDF view fast: renders run on their own dedicated worker threads (instead of the app-wide IO pool fighting over one lock), a page that scrolls off-screen cancels its queued render so a fast fling only draws what you're looking at, and rendered bitmaps are reused from a small pool instead of allocating fresh memory for every thumbnail — so the grid fills in noticeably faster and scrolling through huge PDFs stays smooth.
* Added a draggable scroll pill to the Pages view. Just like the one in the PDF view, it appears on the right edge of the page grid: drag it to glide through hundreds or thousands of pages, release to land exactly on the page you pointed at, and it fades away when you stop scrolling.
* Fixed a memory leak in the zoomed-in view: quickly pinching, panning, or starting a scroll-pill drag could cancel a hi-res tile render partway through, and the page bitmaps it had already produced were never recycled — rapid zooming silently churned native memory. A cancelled render now recycles its finished tiles before the job stops.
* Fixed a crash when working with several large inserted images at once: the image cache could evict (and recycle) a selected picture's bitmap while the selection was still drawing it, and the next redraw threw "trying to use a recycled bitmap". Selected pictures now survive cache evictions — a recycled bitmap is re-decoded on the spot instead of drawn.
* Fixed opening PDFs from other apps (Open with… → Octopus Notes): the import could crash or leave an empty notebook when the file couldn't be read (e.g. a permission grant that expired between tapping and reading). Failed imports now show an error and roll back the half-created notebook.
* Fixed heavy stutter when a page holds several large photos — inserting or lasso-selecting them used to decode each photo on the main thread, freezing frames for up to a second (and the frozen frames made the system skip touch events, spamming "Error processing scroll; pointer index for id 1 not found"). Photos are now decoded on a background thread, the selection appears instantly with frame outlines that fill in as pictures load, and two-finger events are no longer leaked to the list while a selection is being moved.
* Fixed opening PDFs from other apps (Open with… → Octopus Notes): the import could crash or leave an empty notebook when the file couldn't be read (e.g. a permission grant that expired between tapping and reading). Failed imports now show an error and roll back the half-created notebook.
* Fixed heavy stutter when a page holds several large photos — inserting or lasso-selecting them used to decode each photo on the main thread, freezing frames for up to a second (and the frozen frames made the system skip touch events, spamming "Error processing scroll; pointer index for id 1 not found"). Photos are now decoded on a background thread, the selection appears instantly with frame outlines that fill in as pictures load, and two-finger events are no longer leaked to the list while a selection is being moved.
https://github.com/VenkataLochanN/OctopusNotes-Public/releases/tag/v2026.8.6
please check changelog here
please check changelog here
GitHub
Release v2026.8.6 · VenkataLochanN/OctopusNotes-Public
v2026.8.6
Notebook tags, just like macOS Finder: tap the ⋯ menu on any notebook and choose Add Tag to pick one of seven colours (red, orange, yellow, green, blue, purple, grey). The tag appears as...
Notebook tags, just like macOS Finder: tap the ⋯ menu on any notebook and choose Add Tag to pick one of seven colours (red, orange, yellow, green, blue, purple, grey). The tag appears as...