V0.5.6
Changes
- Build Flavors: Added separate
standardandaiapp flavors so the default build works without AI-specific dependencies. - AI Summaries: Reworked summarization behind a
SummaryEngineabstraction with a disabled fallback for standard builds and an AI-backed implementation for theaiflavor. - AI Initialization: Fixed concurrent initialization in
LlmEdgeSummaryEngineso multiple requests share one initialization instead of racing or loading the model multiple times. - CI Updates: Split GitHub Actions validation into standard debug, AI debug, and release-specific workflows to avoid requiring signing secrets during normal validation.
- Release Builds: Updated CI and documentation to use explicit flavor-specific Gradle tasks such as
assembleStandardDebug,testStandardDebugUnitTest, andassembleAiDebug. - Security: Added safer DNS resolution for network requests to block localhost, private networks, link-local addresses, metadata IPs, and DNS rebinding-style redirects.
- Web Fetching: Removed unsafe
Jsoup.connectfallback paths so HTML fetching goes through the shared OkHttp client and security policy. - Cloudflare WebView: Hardened WebView navigation and settings, blocked unsafe schemes/hosts, and ensured the WebView is destroyed when dismissed.
- Reading Progress: Refactored reading progress into
ReaderProgressController, added explicit progress update semantics, and improved lifecycle-safe progress persistence. - Database Safety: Enabled Room schema export, added migration coverage across supported schema versions, removed persisted transient selection state, and removed destructive migration fallback.
- Library State: Moved item selection out of persisted database state and kept it as transient UI/ViewModel state.
- PDF Support: Added a bounded PDF document handle pool, document-scoped PDF image caching, deterministic image filenames, and cache cleanup for extracted PDF images.
- Image Loading: Refactored image caching and downloading into dedicated
ImageCacheandImageDownloadercomponents. - Image Downloads: Streamed large web images to disk with byte limits and temp-file handling instead of buffering entire images in memory.
- Image Prefetching: Added priority-aware image downloads so speculative prefetches no longer poison user-requested image loads.
- Prefetching: Replaced unbounded prefetch retry behavior with explicit, bounded retry limits.
- EPUB Images: Added Coil-based EPUB image loading through a custom fetcher, reducing manual bitmap lifecycle management.
- Testing: Added and reorganized tests for migrations, AI initialization, URL security, progress persistence, image downloading, WebView navigation, and reader state.
- Benchmarks: Moved benchmark-style tests out of the normal unit-test path so PR tests stay deterministic.
- Dependencies: Centralized dependency declarations through the Gradle version catalog and updated AI integration to use the Maven-published
llmedgedependency. - Project Cleanup: Renamed the Gradle root project to EasyReader, updated package namespace references, removed stale UI dump artifacts, and cleaned up documentation.
Fixes
- Fixed clean-clone builds by removing the required local
llmedge-release.aarfrom the default build path. - Fixed PR CI incorrectly depending on AI flavor and release signing.
- Fixed possible duplicate AI model initialization under concurrent summary requests.
- Fixed possible data loss risk from Room destructive migration fallback.
- Fixed stale nullable reading progress fields that could not previously be cleared.
- Fixed PDF handle pooling so active and idle handles are bounded together.
- Fixed leaking randomly named PDF image cache files.
- Fixed full-image response buffering that could cause memory spikes on large images.
- Fixed speculative image requests causing visible image loads to fail.
- Fixed WebView URL validation false positives caused by substring-based scheme checks.
- Fixed image dimension sniffing to handle partial reads correctly.
- Fixed duplicate or misplaced AI unit test source sets.
- Fixed misleading README build commands after adding product flavors.
Full Changelog: V0.5.5...V0.5.6