Latest release APK can be downloaded here.
New commits on main
are built using Github Actions.
Main Screen | Notification |
---|---|
An Android project that notifies you of new chapters to manga series followed on mangadex.org. Mostly created so I could avoid using third-party RSS feeds, but also as a testing ground for new architecture patterns. Mostly only maintained for my own use, feel free to fork the project and build on it if necessary. I'll be adding features at my own leisure, and will not build an iOS version.
The app will only notify you of chapters that have been released after you've installed the app. This is to prevent notification spam on first run.
- Logging in
- Tracking/Displaying followed Manga updates from MangaDex
- Notifying of chapters released after app install date
- Opening a new manga chapter from the Android notification or from the home screen
- Light and Dark theme (following Android's system setting)
- Material You theming (on supported devices)
- Automatically caching new chapters, to improve performance at read-time
- Ability to read manga chapters using a native image renderer or the system webview
- Log out (clear app data if you want to log out)
- Various settings that you might expect with a full consumer app
- Everything else related to MangaDex's site functionality
Developed using Jetpack Compose for the UI Ktor for HTTP requests and file downloads Koin for Dependency Injection
App architecture is modelled after Google's recommended approach: Model-View-ViewModel (MVVM) with Repositories.
Working directly with the MangaDex API. Using global rate-limiting in Ktor, matching MangaDex's 5 per second limit.
All logs + analytics are logged to my personal Firebase Crashlytics project, so I have information to debug crashes or non-fatal events in the app.
Every ~30 minutes (while the app is foregrounded OR background), the app will go through a sync process:
- Refresh Auth Token
- Fetch Followed Chapters
- Fetch new Manga info for unknown manga series
- Fetch covers for new manga found in step 3
- Fetch chapter read status markers for the authenticated user
Background refreshes are using WorkManager, which means there may be some delay in the refresh.
Manga series infor, chapter info, and read status is all stored in a local DB, powered by Room Cover images are cached and stored on device.
This app is split into many modules, which fall into the following categories
- lib: Various segments of the architecture, expected to be used in multiple places. Should not depend on any data or feature modules. Examples: lib-navigation, lib-networking
- data: Responsible for holding services that features may need to interact with. Should not hold state. Should not depend on any feature modules. Examples: data-authentication, data-user
- feature: Responsible for the UI and business logic for a feature. Features should not depend on each other. Some examples: feature-authentication, feature-manga-list
- app: Application lifecycle logic. Should only depend on libs and features