* Implement build profiles and feature policy for offline desktop builds
* Introduce unified cross-platform Settings Hub
* Refactor main settings into a hierarchical page-based navigation model
* Refactor library projection to use shared multiplatform logic
* Refactor UI state consumption by removing intermediate screen models
* Introduce AndroidSharedStateBridge to centralize state mapping and reduction logic
* Refactor state management for tabs, selection, and pinning to use shared bridge logic
* Refactor file type management and validation into a centralized shared module
* Centralize file type resolution and improve handling of unknown types
* Centralize book import logic with SharedImportPlanner
* Refactor magnifier geometry logic and coordinate mapping
* Properly handle orientation changes in scroll-locked PDF reader
* Add screen orientation controls to EPUB and PDF readers
* Implement right-to-left (RTL) pagination support and refactor reader menus
* Separate right-to-left pagination settings for PDF and EPUB
* Ensure PDF page data is scoped by document key for multi tab support
* Implement theme-aware link styling for the epub reader
* Implement jump history for back and forward navigation in the epub reader
* Improve locator handling and navigation logic in paginated reader mode
* Implement stable pagination navigation and location tracking
* Centralize banner message management and auto-dismiss logic in MainViewModel
* Implement zoom and pan state preservation for PDF pan lock mode
* Enhance reader navigation UI and workspace layout management in desktop app
* Refactor reader navigation sidebar and relocate search controls in desktop app
* Enhance reader UI with redesigned selection menus and bottom sheet overlays
* Implement custom highlight palettes and reader theme customization in desktop app
* Implement cross-platform modal layer and refine reader UI styling
* Improve highlight accuracy and implement metadata enrichment on book open in desktop app
* Implement two-page spread layout for paginated reader on desktop
* Implement persistent caching for book loading and pagination in desktop app
* Implement persistent caching for book loading and pagination in desktop app
* Optimize reader settings updates by separating layout and appearance changes in desktop app
* Improve desktop window branding and native Windows styling
* Enhance reader selection interactions and UI across EPUB and PDF viewers in desktop app
* Refine selection handle positioning and interaction logic
* Implement EPUB selection debug logging and improve handle targeting
* Optimize desktop book loading performance and UI responsiveness
* Implement anchored zoom gestures and rendering optimizations for the Desktop PDF viewer.
* Implement smooth zoom preview for the PDF reader in desktop app
* Optimize PDF rendering performance and responsiveness in the desktop reader
* Implement conditional diagnostic logging and update desktop build configuration
* Implemented hierarchical TOC, custom scrollbars, and improved desktop modal handling
* Added management options for annotations and highlights in the sidebar in desktop app
* Implemented `SharedStableOutlinedTextField` and updated text input fields to use `TextFieldValue` for improved cursor and selection stability.
* Refined library filters and enhanced OPDS functionality in desktop app
* Improved EPUB pagination measurement and implemented layout diagnostic logging for desktop app
* Added PPTX support including document parsing, rendering, and indexing
* Improved PPTX rendering and layout accuracy
* Implemented text autofit support for PPTX rendering
* Enhanced PPTX rendering with support for custom geometry, automatic numbering, table styles, and image opacity
* Improved EPUB pagination accuracy and added layout telemetry in desktop app
* Improved folder synchronization with metadata-only mode and hashed sidecar management in desktop app
* Implemented rich text font scaling and migrated desktop ink tools to custom pointer input handling
* Implemented billing account obfuscation
* Implemented hierarchical folder navigation and improved library selection functionality in desktop app
* Implemented platform-aware directory resolution and multi-platform native library support for desktop
* Added full-screen mode for the reader workspace
* Added PDF zoom indicator and interactive vertical scrollbar with page tooltips
* Refactored speech bubble prefetching to use a limited radius and improved ML detector initialization and lifecycle management
* Updated PDF indexing to replace existing page text and removed search result item keys
* Implemented "preparing" foreground notification for TTS service
* Optimized PDF rendering performance by pre-calculating page-specific annotations
* Refactored desktop packaging tasks and improved distribution configuration
* Optimized EPUB parser memory usage and added path traversal protection
* Refactored WorkManager monitoring logic and added work pruning
* Implemented comprehensive resource cleanup and memory management for WebView-based components to prevent memory leaks
* Implemented bitmap size limits and scaling to prevent canvas rendering errors
* Split long text paragraphs into multiple semantic blocks during HTML parsing
* Implemented local ActionMode for text selection to prevent platform crashes
* Refactored PPTX text layout, optimized HtmlParser block detection, and improved banner dismissal logic
* Added desktop startup splash screen and deferred WebView initialization
* Reorganized settings hub and added separate PDF reader defaults
* Implemented embedded cover extraction and metadata support for MOBI and FB2 formats
* Implemented batching for MetadataExtractionWorker and optimized EPUB metadata extraction performance.
* Implemented procedurally generated book covers and replaced static placeholders
* Redesigned search UI with a top bar and results overlay in desktop app
* Added PDF page gap and overlay visibility options and implemented DesktopBookImporter
* Refactored PDF reader UI with tabbed inspector and improved theme background handling in desktop
* Implemented PDF viewport persistence for zoom and scroll positions in desktop app
* Improved desktop fullscreen implementation and state restoration
* Implemented desktop window state persistence
* Implemented flavor-based branding and ProGuard configuration for desktop builds
* Implemented precise reader positioning and improved highlight rendering logic in desktop app
* Added support for user-editable book metadata
* Enhanced book metadata support and integrated info/edit dialogs
* Implemented embedded EPUB metadata editing
* Improved highlight mapping and added custom scrollbar styling for the reader.
* Reduced desktop WebView bundle size by excluding unused locales and runtime files
* Added neutral pan mode as the default PDF interaction state.
* Refactored library empty states and updated primary navigation tabs in desktop app
* Implemented native paginated reader and unified content rendering architecture in desktop epub reader
* Implemented native EPUB image rendering for desktop and improved block layout spacing with margin collapsing.
* Improved pagination overflow detection in desktop
* Implemented multi-block text selection with interactive handles and CFI support in desktop epub pagination
* Add performance and stylus debugging logs
* Refactor and decouple UI models from `MainViewModel`
* Refactor library state management and projection logic
* Implement desktop shell using Compose Multiplatform
* Implement desktop shell using Compose Multiplatform
* Implement desktop shell using Compose Multiplatform
* Introduce ReaderEngine and enhance EPUB reader features in windows app
* Move core paginated reader logic to a Kotlin Multiplatform `shared` module and introduce experimental desktop support.
* Implement PDF rendering and text extraction for desktop using Pdfium
* Add `NonReaderScreens.kt` and UI dependencies
* Refactor and centralize library state management and models to improve cross-platform consistency
* Implement JSON persistence for desktop library and enhance library management features including shelf CRUD, tagging, and metadata editing
* Implement PDF annotation system and enhanced zoom controls for the desktop viewer
* Implement WebView-based EPUB rendering for desktop using CEF and embedded resources
* Optimize UI state projection, navigation state handling, and main screen pager performance
* Implement Bring Your Own Key (BYOK) support for AI features in OSS version
* Support Gemini-based Cloud TTS with BYOK support for OSS builds
* Refactor table cell image sizing in `PaginatedReader` and improve `MobiParser` native library loading and error handling.
* crash fixes
* Enhance navigation stability with lifecycle-aware safety checks and update `navigation-compose` to 2.9.6
* Implement dynamic bottom padding for the page info bar to account for device rounded corners
* Implement bidirectional jump history navigation and replace the jump-back pill with a dedicated `PdfJumpHistoryBar`
* Optimize PDF tiling performance and refine pan-and-fling gesture handling
* Implement customizable toolbars with drag-and-drop reordering and placement for PDF and EPUB readers
* Updated UI for customize toolbar
* Refine drag-and-drop reordering and section assignment for PDF and EPUB reader controls
* restructure PDF viewer UI component hierarchy to fix verifier crash
* Implement separate text dimming factors for light and dark themes
* Synchronize Pdfium access and improve resource lifecycle safety across Kotlin and native layers
* Enhance image alignment in paginated and EPUB readers through anchor detection and style-based positioning
* Centralize file type resolution logic and implement HTML sanitization during import
* Introduce vertical margin customization and configurable progress bar positioning
* texture support in epub reader
* Enhance TTS session management, progress tracking, and diagnostic logging
* Optimize library state projection and folder synchronization performance by refactoring collection lookups and refining metadata extraction logic.
* Refine TTS page mapping for PDF and overhaul TTS control UI
* Implement natural session completion logic in `TtsPlaybackManager` for cloud tts
* Replace Snackbar with `CustomTopBanner` for notifications in `PdfViewerScreen`
* Refine TTS playback continuity across PDF pages and improve state management for session transitions
* Implement global texture transparency and enhance textured theme support across PDF and EPUB readers.
* Update reader themes and improve texture rendering in page animations, EPUB UI, and immersive mode
* Add Support Project screen
* Optimize library performance via projection caching, batch database updates, and scoped folder synchronization.
* Enhance folder synchronization with fallback query mechanisms and refactor annotation sidecar importing logic
* Bump version to 1.0.47 (51)
* Remove custom-onnxruntime-arm64.aar
* Refactor remaining, hardcoded UI strings into localizable resources and added French and Russian to language list
* Fix background auto-advance for Text-to-Speech (TTS)
* add a UI trigger for demo annotations
* Implement internal link navigation
* Simplify bottom padding logic in `EpubReaderScreen` for vertical scroll mode
* Add support for Calibre metadata
* Implement advanced library management with Room-backed collections, tags, and smart rules.
* Display book series information in book details and remove tags from home screen
* Implement zoom reset functionality in PDF viewer
* Add a "Pages" thumbnail view to the PDF navigation drawer
* Implement jump-back navigation in PDF viewer
* MainViewModel: disable FolderSyncWorker, add log export, and enhance PDF position logging
* Replace Gson with Kotlin Serialization in SmartCollectionEngine
* Implement ONNX-based speech bubble detection
* Implement speech bubble detection in PDF viewer
* Implement "Smart Comic Zoom" feature for PDF manga/comic reading
* Implement reader session persistence and restoration in `MainViewModel`
* Add tap-to-turn page feature to PDF viewer
* Improve book cache management and recovery
* Refactor top overlay padding logic in `PdfViewerScreen`
* Implement stylus eraser support in PDF reader
* Refactor ReaderTextFormatPanel to use ModalBottomSheet and add new formatting controls
* Introduce a customizable horizontal margin setting for the EPUB reader
* Refine folder sync and metadata handling for better conflict resolution and stability.
* Introduce user-adjustable image scaling for the EPUB reader
* Use maxWidthPx as default width fallback for blocks
* Improve cross-page text selection and header styling in the paginated reader
* Refactor speech bubble detection and UI to support segmentation masks and interactive scaling
* Improve speech bubble detection masking and rendering quality
* Update ONNX speech bubble detector to use `.ort` model and optimize inference
* Improve pagination accuracy
* Implement hierarchical folder navigation for the library.
* Refactor library item layout for improved space efficiency
* Add support for browsing and downloading Google Fonts
* Persist library landing state and add shelf search functionality
* Fix base tts sample.
* Move SpeechBubbleDetector to main source set and update ONNX dependency
* Implement a "locate" feature and improve synchronization for TTS (Text-to-Speech) playback across EPUB and PDF readers.
* Refine TTS synchronization and voice management in the EPUB reader
* Adjust OCR checks for OSS flavor and optimize external dictionary intent flags
* Add "Locate" button to PDF drawer's pages tab and move the page number to bottom right of thumbnail
* fix various crashes
* Refactor SpeechBubbleDetector into product flavors
* Implement speech bubble detection caching and background prefetching
* Implement on-demand download for Bubble Zoom ML model
* Add smooth animation for PDF speech bubble expansion
* fixes#252
* hide Google Fonts option, in FontsScreen, for offline variant
* Bump version to 1.0.46(46)
* Updated `.gitattributes` to correctly vendor all files within the `libmobi` and `woff2` directories.
* Improved TTS chapter transition handling
* Improved TTS stability and chapter advancement in the EPUB reader.
* Implemented PDF metadata extraction for titles and authors using PdfiumCore in `MainViewModel` and `MetadataExtractionWorker`.
* Implemented support for interactive footnotes in the EPUB vertical reader.
* Added support for footnotes in the paginated EPUB reader.
* Implemented a customizable app theming system.
* Added support for app-wide contrast and text brightness customization in the "App Theme" option.
* option to adjust pull-to-chapter-change drag in the EPUB vertical reader under visual options.
* Updated `PdfViewerScreen` to replace the standalone full-screen toggle with a more comprehensive "Visual Options" system UI management tool.
* Refactored the EPUB reader to use localized string resources instead of hardcoded strings across multiple components.
* Refactored the PDF viewer and annotation components to use centralized string resources instead of hardcoded text.
* Updated `strings.xml` with extensive translation hints and localization metadata.
* Added a "Remove Edge Padding" option in "Visual Options"
* Added support for paragraph gap settings in the EPUB vertical reader.
* Added support for adjustable paragraph gaps in the paginated reader.
* fix(epub-pagination): ensure custom fonts override embedded epub fonts
* feat(epub): allow overlapping highlights and resolve gesture selection conflicts
* Improved navigation and search result highlighting in the EPUB reader
* refactor: implement JIT chunk restoration for robust navigation
- Fixes search and bookmark navigation failing in same-chapter transitions.
- Introduced JIT (Just-in-Time) HTML restoration in `epub_reader.js` to
re-populate virtualized chunks before CFI resolution or search scrolling.
- Synchronized search highlighting and user highlights within
newly-restored chunk segments.
- Improved search navigation accuracy by mapping occurrences to
relative chunk indices.
* Implemented a custom text selection engine for the paginated EPUB reader to support cross-page selection and improved handle interaction.
* Implemented management of external file behavior and improved library filtering.
* Added support for toolbar customization in the EPUB reader.
* Added support for toolbar customization in the PDF reader.
* fix: rendering during auto-scroll and navigation on long pages
* Added a "Scroll to Top" feature to the auto-scroll controls in both EPUB and PDF readers.
* Updated folder synchronization logic and redesigned the file type filter dialog.
* Fixed CFI generation and navigation stability in the EPUB reader.
* Improved CFI scrolling and position calculation in the EPUB reader by implementing text node traversal using `TreeWalker`. This ensures accurate positioning and scrolling when a CFI offset spans multiple fragmented text nodes.
* fix fb2 multiline titles, retain footnotes, and prevent stream leaks
- Fix FB2 titles with multiple paragraphs by inserting breaks/spaces
- Prevent resource leaks by properly closing InputStreams in all importers
- Retain "notes" and "comments" sections in FB2 instead of skipping them
- Add support for FB2 poem, stanza, cite, and link tags
* Implement persistence for zoom and pan states when pan lock is enabled in the PDF reader.
* Added `FileTypeBadge` to home and library screens
* Bump version to 1.0.41(42)
* Added support for highlight notes in EPUB reader
* fix(epub annots): ensure persistent highlights and preserve notes on color change
- refactor: unified processAndAddHighlight across scroll and paginated modes
- fix: re-apply highlights to virtualized DOM elements on chunk load
- fix: replaced '|' with ';;' in JS bridge to prevent CFI parsing errors
* feat(epub): redesign annotation UX with theme-aware Bottom Sheet
* Updated highlight handling to use full CFI strings instead of splitting into parts during deletion and style updates. Adjusted `processAndAddHighlight` to return the final CFI and updated the delete button UI to use a contained button style.
* Added support for notes in PDF highlights.
* Implemented support for custom highlight colors in the PDF reader.
* Improved PDF annotation notes and theme handling in the bottom sheet.
* feat(EPUB): adapt status bar icon visibility to reader theme
Pass the reader's active isDarkTheme state to EpubReaderSystemUiController to ensure status bar icons automatically switch between light and dark to remain visible against the selected background/page color.
* Implement storage tracking and optimize cache management
This commit introduces a `StorageTracker` to monitor disk usage and implements several optimizations to prevent cache bloat and handle orphaned files.
* refactor: unify book extraction paths and fix cache leaks
- Replaced random UUID and title-based hashing with stable `bookId` for extraction directories across Epub, Mobi, and FB2 parsers.
- Standardized all temporary extraction paths to `cache/imported_file_${bookId}`.
- Updated MainViewModel and MetadataExtractionWorker to provide the mandatory `bookId` during parsing.
- Ensured `clearImportedFileCache` successfully targets the correct directories on book deletion.
- Added a legacy cleanup task in `sweepOrphanedCache` to reclaim storage from old `extracted_epubs` folders.
* fix(pdf): handle NoClassDefFoundError for PdfPasswordException
Updated the PDF loading logic in PdfViewerScreen to catch Throwable
instead of Exception. This prevents the app from crashing when the
underlying pdfium library attempts to throw a PdfPasswordException
that is missing from the runtime classpath (NoClassDefFoundError).
* fix(tts): set language before voice to prevent variant reset
* EpubReaderScreen: increase scroll-hide ignore duration for tap toggles
Increase the threshold for ignoring tap toggles after bars are hidden by scrolling from 250ms to 400ms. This prevents accidental UI toggles caused by "sloppy taps" immediately following a scroll action.
* fix: resolve large bitmap crash on tall PDF pages
- Caps base layer bitmap dimensions to 3000px to prevent GPU texture limit crashes.
- Enables tiled rendering for large pages even at 1x zoom to maintain sharpness.
- Optimizes PdfBitmapPool to support rectangular bitmap allocations.
* Common.kt: ensure unique keys in voice list
* fix: handle ActivityNotFoundException in folder sync screen
* Improve file deletion logic and fix chapter index bounds in epub reader
* fix: ensure WebView bridge callbacks run on UI thread
This resolves a WebViewMethodCalledOnWrongThreadViolation in vertical mode that was preventing chapter chunks from loading beyond the initial viewport.
* Improve PDF rendering quality and performance.
- Set `FilterQuality.High` when drawing base bitmaps and high-res tiles in `PdfPageComposable`.
- Implement `inSampleSize` calculation in `UniversalDocument` to optimize memory usage during region decoding.
- Enhance bitmap drawing quality by adding `ANTI_ALIAS_FLAG` and `DITHER_FLAG` to the paint configuration.
* Implement custom reader themes for PDF viewer.
This change integrates the `ReaderThemePanel` and theme management logic into the PDF viewer, allowing users to apply preset or custom themes. Previously, the PDF viewer only supported a simple dark mode toggle.
Specific changes:
- Moved `ReaderTheme`, `ReaderTexture`, and theme-related utility functions from `EpubReaderScreen.kt` to `Common.kt` to allow sharing between EPUB and PDF readers.
- Updated `PdfPageComposable` to use `activeTheme` instead of `isDarkMode`, implementing a `ColorMatrix` to apply custom background and text colors to PDF pages.
- Replaced the dark mode toggle in `PdfViewerScreen` with a theme selection button that opens `ReaderThemePanel`.
- Introduced `PdfBuiltInThemes` to provide PDF-specific theme presets.
* Reset page transformation on constraint changes and refine tile rendering logic.
- Reset scale to 1.0 and offset to zero in `PdfPageComposable` when constraints change.
- Update `UniversalDocument` to use floating-point precision for source rectangle calculations and `RectF` for destination mapping to improve rendering accuracy.
* Improve eraser hit detection and visual thickness settings in PDF reader.
* build: bump version to 1.0.38 and improve CFI page lookup logic
* fix: resolve duplicate TTS audio and broken highlights in Vertical Mode
Updated the text extraction logic in epub_reader.js to pick only the most granular matching elements, preventing duplication when elements like <p> are nested inside <li>.
* Improved PDF embedded annotation hit detection logic
* Updated EPUB and PDF reader logic to improve position tracking and TTS stability.
Key changes:
- Refined CFI and locator handling in `EpubReaderScreen` with improved initialization.
- Updated `BookPaginator` to more accurately calculate text offsets in chunks and improve CFI matching logic.
- Modified `TtsPlaybackManager` to insert media items at the correct index, ensuring proper playback order.
- Simplified `EpubReaderTts` page scrolling by removing conditional checks for backward jumps.
- Disabled OCR fallback in `PdfViewerScreen` during text extraction for TTS.
* Updated extractTextWithCfiFromTop to use getBoundingClientRect for identifying the starting block
* Implemented a custom theme engine for the EPUB reader, allowing users to switch between built-in themes (System, Light, Dark, Sepia, Slate, and OLED).
Key changes include:
- Added `ReaderThemePanel` and theme selection logic to `EpubReaderScreen`.
- Introduced a theme persistence layer using SharedPreferences.
- Updated `ChapterWebView` and `epub_reader.js` to dynamically apply background and text colors via JavaScript, including improved contrast adjustment for inline styles.
- Enhanced `CssParser` and `ContentStyler` in the paginated reader to adapt CSS colors based on the active theme's background and text luminance.
- Integrated theme-specific background and text colors into `PaginatedReaderScreen` and its layout components.
- Added a theme palette icon to the reader controls.
* Added custom theme builder and texture support to EPUB reader
* Refactored color picker(PDF) into shared components and enhanced EPUB theme editor
* Updated theme customization UI and improved WebView theme application efficiency
* Updated page flip animation to use paper color with a theme-based tint
* Improved state restoration during paginated reader reconfiguration
* Added `TooltipIconButton` and integrated tooltips for tool icons in app bars
* Added external translate and search support for EPUB and PDF readers
* docs: refine project overview and update build instructions in readme
* Added support for external dictionary apps and a dictionary settings sheet.
* Refactored external dictionary integration and improved package visibility
- Updated `AndroidManifest.xml` with `<queries>` for common dictionary apps and intent actions (`PROCESS_TEXT`, `SEARCH`, `SEND`) to support Android 11+ package visibility.
- Refactored `ExternalDictionaryHelper` to streamline dictionary discovery using `Intent.ACTION_PROCESS_TEXT` and `colordict.intent.action.SEARCH`.
- Added a package blocklist in `ExternalDictionaryHelper` to filter out system services (e.g., Samsung Pass, GMS) from dictionary lists.
- Simplified `launchDictionary` logic to prioritize `PROCESS_TEXT` intents.
- Fixed a bug in `PdfViewerScreen` to only show the dictionary upsell dialog when `useOnlineDictionary` is enabled.
* Refactored dictionary settings into a dialog and updated dictionary selection logic.
- Renamed `DictionarySettingsSheet` to `DictionarySettingsDialog` and converted it from a bottom sheet to a formal dialog.
- Redesigned the dictionary settings UI with a clearer distinction between AI and external app modes.
- Added a "Search" option to the external dictionary list that triggers a web search.
- Updated `ExternalDictionaryHelper` to include a package blocklist and support for generic web search intents.
- Simplified `PdfHelper` by removing Pro user checks for the "Dictionary" action.
- Updated icons for dictionary settings across the EPUB and PDF readers.
Background pre-processing for single-file imports (MD/TXT) was generating empty DB cache entries because it only looked at RAM content. This caused position saves in Vertical Mode to fail. This fix ensures that an empty cache entry triggers a disk-read fallback to generate valid semantic blocks on-demand.
* feat: rework Folder Sync architecture to separate Managed vs Linked books
- Introduced "Managed" (imported to app storage) vs "Linked" (SAF URI) book logic.
- Disabled Google Drive/Metadata synchronization for Folder-Linked books to respect privacy and storage.
- Updated deletion logic: Folder books are now marked as deleted in the DB to blacklist them from future auto-scans, while Managed books are permanently purged from local and cloud storage.
- Enhanced folder sync discoverability by adding a direct "Sync Folder" navigation button in Home screen.
- Implemented reactive pager navigation in MainScreen and LibraryScreen via LaunchedEffect to allow programmatic tab switching from the ViewModel.
* Implemented a local folder synchronization system to track and update book metadata across devices.
Key changes:
- Added `FolderBookMetadata` and `LocalSyncUtils` for serializing and managing metadata files in a `.episteme` directory.
- Implemented bidirectional sync in `FolderSyncWorker` to reconcile local database state with folder-based metadata using timestamps and Syncthing conflict resolution.
- Updated `MainViewModel` to trigger folder metadata sync when closing a book and verify for remote updates upon opening.
- Enhanced folder management with manual scan support via `WorkManager` and automatic cleanup of database entries when a folder is disconnected.
- Added `RecentFileDao` methods to support bulk deletion and prefix-based file lookups.
* Removed API 34 restriction for chapter processing and updated local folder sync directory name
* Increased TTS timeouts, added edge-to-edge support in MainScreen, and improved TtsChunk mapping safety
* Improved folder synchronization and metadata management.
- Added metadata-only sync option and triggered it on app start.
- Implemented hidden metadata filenames (prefixed with `.`) to reduce file clutter.
- Added automatic creation of `.nomedia` files in the sync directory.
- Enhanced sync conflict resolution by picking the latest metadata and cleaning up obsolete or orphaned files.
- Added "Sync Metadata" button to the Library screen.
- Updated UI labels for local folder sync to clarify Google Drive integration.
- Refactored `FolderSyncWorker` to support targeted metadata-only synchronization.
* Implement folder sync migration and refactoring
- Added a migration dialog to inform users about the folder sync refactor, where books are now read directly from external storage.
- Updated `MainViewModel` to handle migration state and trigger a full scan upon completion or dismissal of the dialog.
- Modified `FolderSyncWorker` to support legacy book matching during migration, updating file URIs and cleaning up internal app storage for migrated books.
- Improved synchronization logic between local and remote metadata, including cleanup of orphaned metadata files.
- Refined `RecentFileItem` updates during sync to preserve progress and bookmarks based on last modified timestamps.
* Implemented pull-to-refresh for library sync and enhanced folder file deletion.
- Added `isRefreshing` state to `MainViewModel` and integrated `PullToRefreshBox` in `HomeScreen`.
- Implemented `refreshLibrary` to trigger cloud and folder metadata synchronization.
- Updated deletion logic to physically remove files and metadata from synced local folders.
- Added a warning to the delete confirmation dialog when removing folder-synced items.
- Improved folder sync reliability by performing lazy cleanup of missing files during interaction and sync.
- Fixed a bug where sync loading indicators would not retract on failure or cancellation.
* Improved bookmark navigation and scroll synchronization in EPUB reader
- Refined bookmark navigation logic for vertical scroll mode to handle chunk injection more reliably.
- Added `isNavigatingToBookmark` state to show a loading overlay during long jumps.
- Implemented `onScrollFinished` callback in `CfiJsBridge` to synchronize UI state with WebView scroll completion.
- Updated `ChapterWebView` to use `rememberUpdatedState` for JavaScript bridge callbacks to ensure data consistency.
- Improved `getCurrentCfi` and `scrollToCfi` in `epub_reader.js` with better visibility probing and retry logic for detached nodes.
* Implemented background metadata extraction for folder sync.
Key changes:
- Added `MetadataExtractionWorker` to handle heavy metadata and cover extraction for files in the background.
- Refactored `FolderSyncWorker` to perform fast file discovery using placeholders, enqueuing the metadata worker upon completion.
- Added `getFolderBooksWithoutCovers` query to `RecentFileDao`.
- Updated UI components (`EmptyState`, `MainViewModel`) to improve user feedback during sync and provide clear setup actions.
- Enhanced `EmptyState` composable to support secondary actions and custom button text.
* Updated Library Screen UI
This introduces a user-configurable palette for text highlighting. The four default highlight colors can now be customized by the user from an expanded set of predefined colors.
Changes include:
- Added a `PaletteManagerDialog` to allow users to select and save their preferred highlight colors.
- Implemented `saveHighlightPalette` and `loadHighlightPalette` to persist the user's choices.
- The highlighting UI in both vertical and paginated readers now displays the active custom palette.
- Added new `HighlightColor` options.
- Updated JavaScript to support the expanded color set and improve highlight interaction logic.
docs: Revamp README and add APK naming convention
This commit introduces a complete overhaul of the `README.md` to improve project presentation. Key changes include:
* Adds a new header with the app icon and a Google Play badge.
* Updates the feature graphic and includes a note distinguishing the OSS version from the Play Store version.
* Refines the "Open Source Libraries" section to be more structured.
* Moves the main preview image into the `docs` directory.
Additionally, the `app/build.gradle.kts` file is updated to configure a standardized naming convention for output APK files, including flavor, version, and build type.
* refactor copyright headers and fix README icon alignment
This commit introduces two main changes across the codebase:
The `spotless/copyright.kt` template have been updated for consistency:
* The author name is simplified from "Episteme Authors" to "Episteme".
* The contact email prefix is shortened from "Electronic mail:" to "mail:".
Second, the `README.md` file is adjusted to correct the vertical alignment of the app icon with the project title.