Skip to content

brighamandersen/internalize

Repository files navigation

Internalize

App banner

Native Android app to help you memorize passages using fill in the blanks!

Internalize Projects

  • 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.

Screenshots

Home screen screenshot Blanks mode screenshot

First letters mode screenshot Full text mode screenshot

Launcher/Store App Icons

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*.

Decisions

  • 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.

Testing

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.

Build a Release APK

./gradlew assembleRelease

The resulting .apk file will be generated at app/build/outputs/apk/release/app-release.apk.

About

Native Android app to help you memorize passages using fill in the blanks!

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages