Native Android app to help you memorize passages using fill in the blanks!
- Internalize Flutter
- The original MVP project written in Flutter. Got sidelined once I realized I only needed Android support and wanted better performance with Jetpack Compose.
- Internalize Jetpack Compose (This Project)
- Also known as just "Internalize", this is the official version of Internalize. It was built after the Flutter app and is faster and leaner (90% smaller APK file).
- Internalize Web
- A web app made after Internalize Flutter and Internalize Jetpack Compose. More of a proof of concept for progressive web apps. This project was a simplified version focused on memorizing one passage at a time.
You can find the master icon used to generate all the iOS/Android variations in /non_code_icons/. There you can also find the app icons used for the iOS App Store and the Google Play Store. All these icons in this folder are not actually used in the code, I just keep them in the repo so they're easy to find. As for the icons that are generated from the icon and used directly in the app in android/app/src/main/res/mipmap*.
- Material 2 instead of Material 3 for UI
- Material 3 is the future but I quickly ran into cases where experimental flags would have to be used so opted for the tried and true Material 2 for now.
- Jetpack Compose instead of XML
- In all my research Jetpack Compose seems to be the future of Android UI development. In my experience it's more React-like and easier to use as well.
- One single activity
- Seems like this is the recommendation when using Jetpack Compose since activities are expensive to open and close. It's worked well so far.
- JSON for persisting data and then Kotlin in-memory models.
- I knew I would want the Kotlin in-memory models to keep everything super fluid between interactions. Ideally I would have persisted data using Room as that's the industry standard and scalable solution, but this was a project that I was hoping to finish a while back and I don't think users will have enough passages to even lead to performance issues that JSON can have, so it's a fine solution for now.
The app is small enough in scope that I won't bother with unit or integration tests. To simplify the project structure I just removed all the testing dependencies and the example test files.
If things change and testing needs to be added back in, look through the git commit history for a commit like Remove testing dependencies to see which dependencies to add back. Also note that you'll need to recreate test directories in app/src/test and app/src/androidTest.
./gradlew assembleReleaseThe resulting .apk file will be generated at app/build/outputs/apk/release/app-release.apk.




