* Added PDF top tab strip visibility toggle and fixed WebView hit test NPE
* Refactored desktop reader screens and state management into specialized components
* Added image gallery to reader sidebar and refactored desktop PDF UI components
* Implemented EPUB image gallery
* Refactored reader and library models to use shared common types, centralizing file type resolution and texture management while removing redundant mapping logic
* Standardized UI styling and refactored app navigation layout
* Implemented auto-hiding reader chrome and activity tracking in desktop
* Refactored reader panels into distinct left and right modal layers with platform-specific sizing and keyboard navigation support.
* Added PPTX support for desktop and refactored parsing into a shared module
* Implement paid AI features and account management for the desktop application.
* Implement AI Hub and enhanced Cloud TTS integration for Desktop
* Implement streaming support for AI definition and summarization features
* Implement support for password-protected PDFs and file actions in the desktop reader.
* Implement cloud synchronization for desktop using Firestore and Google Drive
* Implement PDF reflow and "Text View" for the desktop reader
* Refactor OPDS logic to use SharedOpdsController
* Optimize PDF tile rendering performance
* Implement two-page spread support for PDF pagination
* Implement two-page spread support for the PDF viewer
* Improved shared spread zoom in PDF viewer
* Improve PDF spread navigation with fling support and configurable page gaps
* Add brightness control to PDF and EPUB readers
* Refactor folder synchronization to use shared logic engine
* Implement safe string formatting and validation for localized resources
* Implement TTS chunk skip navigation
* Implement deep-linking and playback controls for TTS media sessions
* Implement start index for TTS playback
* Improve TTS navigation, prefetching, and notification duration reporting
* Implement TTS mini playback bar for background reading
* Implement multi-window reader support for the desktop application
* Improve desktop modal window management and visibility syncing
* Implement localized string support for Desktop and shared UI
* Implement language selection and persistence for Desktop
* Implement plural string support for Desktop and migrate hardcoded counts to plurals.xml
* Implement localized banner messages and UI strings using resource-backed SharedText
* Implement compact badge styling for small book covers
* Refactor PDF native interaction and improve HTML import memory safety
* fix language persistence
* Refactor reader overflow menus to use section-based logic
* Refactor PDF layout remapping and improve text box interaction
* Improve CFI resolution and TTS resume accuracy using dynamic chunk offsets
* Centralize PDF annotation export mapping and improve metadata handling
* Add support for threaded comments in PDF highlight annotations
* Flatten highlight comments into a single thread for PDF export and allow author editing
* Integrate page slider into reader chrome and persist toggle state
* Handle fragments and queries in EPUB chapter paths
* Implement dynamic, theme-aware coloring for the reader slider
* Implement customizable app-wide font preference
* Implement one-hand zoom gestures in the PDF viewer
* Implement File Information dialog for PDF and EPUB readers
* Bump version to 1.0.49 (53)
* Refactor PDF reader logic into modular components
* Add ProGuard rules to prevent R8 optimization issues in EPUB reader screens
* Add option to use PDF filenames as display names
* Fix preservation of PDF filename display preference in library projection
* Added support for right text alignment in epub reader
* Added tabs management to PDF navigation drawer
* Implemented unified selection menu placement logic
* Added reset functionality for toolbar customization
* Improved highlight filtering in epub pagination
* Migrated hardcoded UI strings to string resources
* Extracted desktop application logic from Main.kt into modular files
* Refactored Main.kt by extracting PDF and EPUB logic into specialized files
* Added Spanish language support
* Added system default option to app language selection
* 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
* 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)
* Implemented ML-based comic panel detection and a panel popup viewer.
* Optimized `ComicPanelDetector` for performance and memory efficiency.
* Optimized comic panel detection performance by introducing a dedicated single-thread dispatcher for ML tasks, replacing mutex-based synchronization.
* Refactored system UI handling and layout padding in `PdfViewerScreen`.
* Refactor `PdfViewerScreen.kt` by extracting components and logic into specialized files.
* replace hardcoded padding with dynamic header height and adjust IME layout logic
* Improve `PdfTextBox` interaction and visual consistency during zoom and pan.
* improve PDF text box dragging and scaling behavior across zoom levels
* optimize color scheme calculation using remember and expand text dimming coverage
* Implement in-app language selection and per-app language preferences.
* Improve PDF lock stability in `PdfVerticalReader`
* Implement "Preserve Image Colors" option for PDF themes
* Optimize TOC locate in ReaderDrawer
* Update library and home screen UI components
* smoother page turn animation in epub pagination mode
* Implement automatic page skipping for TTS when no text is found in PDF viewer
* Refine status bar handling and window insets across main screens
* Optimize ViewModel initialization and integrate AndroidX SplashScreen
* Move ComicPanelDetector to debug source set and introduce IPanelDetector interface
* Optimize TOC scrolling in PdfNavigationDrawerContent
* Bump version to 1.0.45(45)
* 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.
* FolderSyncWorker: update supported file types in getFileType
* Extract hardcoded strings to `strings.xml` and `plurals.xml`
* Extract hardcoded strings to `strings.xml` and `plurals.xml`
* Extract hardcoded strings to `strings.xml` and `plurals.xml` in MainViewModel
* Extract hardcoded strings to `strings.xml` and `plurals.xml` in Common.kt
* Extract hardcoded strings to `strings.xml` and `plurals.xml` in Epub Reader
* Add visual options and seamless transitions to the EPUB reader
* Add support for DOCX file format
* Refine padding and status bar inset handling in Epub pagination mode
* Add file size parameter for recent files and sorting
* Refactor book data cleanup logic into a centralized method
* Bump version to 1.0.40(41)
* Add OPDS catalog support for book discovery and downloading
* Implement OPDS search, improved book discovery, and enhanced UI details.
* Improve OPDS search and catalog management
* Add authentication support and extended metadata to the OPDS reader.
* Add support for OPDS 2.0 (JSON) feeds
* Enhance OPDS book downloading with progress tracking and multi-format support.
* Enhance OPDS book management and UI
* Add support for OPDS-PSE (Page Streaming Extension) streaming
* Improve OPDS streaming and catalog management
* Add "Keep Screen On" feature to PDF and Epub readers.
* Add `rawLibraryFiles` to `MainViewModel` and improve file path resolution in `SharedComposables`.
Specifically:
- Updated `MainViewModel` state and UI logic to track and provide unfiltered library files.
- Enhanced file path formatting in `SharedComposables` to better handle Document, Tree, and primary storage URIs.
- Added scrollable support for long text values in `DetailItem` composable.
- Passed `rawLibraryFiles` to `FolderSyncScreen` to ensure sync logic uses the base file list.
* Update info bar background and text colors in EpubReaderScreen to match the selected theme.
* Prevent accidental UI bar toggles immediately after scrolling in EPUB vertical mode.
* feat: implement EPUB highlights sync and legacy migration
- Implement Cloud and Local Folder sync for EPUB highlights.
- Add highlight JSON serialization/deserialization helpers in EpubReaderAnnotations.
- Implement automatic migration of highlights from SharedPreferences to the Database on book open.
- Add cleanup logic to remove legacy SharedPreferences data after successful DB migration.
- Update RecentFilesRepository to trigger local folder metadata sync when highlights are modified.
- Update FolderSyncWorker to pull highlights and custom names from linked folder metadata.
* Update intent filters
* Added support for filtering file types in synced folders
* Added support for custom file names and enhanced file information dialog
* added feedback option in the homescreen drawer
* Implemented a limit for number of recent files displayed on the home screen
* Added print functionality to PDF viewer
* feat(pdf): add interactive button support and visibility reveal heuristic
* Moved search state management to MainViewModel and improved search UI interaction.
* Updated `pdfiumandroid` to version 2.0.0 and handled resulting API changes, including nullable page/text page returns and revised native pointer access.
increased compileSdk to 36.
* Fixed Table of Contents (TOC) truncation bug and improved the TOC UI in `PdfViewerScreen`.
- Implemented `getFixedTableOfContents` using reflection to bypass a library issue where sibling nodes were incorrectly truncated during traversal.
- Enhanced the TOC drawer with a nested, expandable tree structure using the new `PdfTocTreeItem` component.
- Added a custom `VerticalScrollbar` with draggable support for better navigation within long TOC lists.
- Integrated `animateColorAsState` and `animateFloatAsState` for smoother UI transitions in the TOC and scrollbar.
- Optimized TOC loading by flattening the tree structure and managing expansion states with `rememberSaveable`.
* Improved zoom pivot calculation and interaction handling in PdfVerticalReader
* Fixed high-res PDF tile bleeding by implementing clipRect in PdfBitmapLayer
* fix(pdf): resolve zoom stuttering, in pagination mode, by removing eager scale snapping
* Added book pinning and library filtering functionality
* Updated folder sync logic, improved metadata extraction, and added persistent banner message while syncing
* build: bump version to 1.0.37 (38)
* 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
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.