Skip to content

This repository contains "Drink Reminder" app source code. Its purpose being, to quickly demonstrate Android, Kotlin and software development in general, clean code, best practices, testing and all those other must know goodies.

License

Notifications You must be signed in to change notification settings

kapact/Drink_Reminder

Repository files navigation

Drink Reminder

This repository contains "Drink Reminder" app source code.

Its purpose being, to quickly demonstrate Android, Kotlin and software development in general. The main focus of this project is:

  • Setup and Gradle configuration,
  • Gradle modules,
  • Clean architecture,
  • Clean code,
  • Best practices,
  • Testing and
  • All those other must know goodies.

Screenshots

screenshots

Below is a list of goodies that are being showcased:

  1. Architectural Patterns
    1. Modularization (Modularize the App Horizontally by Features)
    2. Navigation Component (Navigation refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within your app)
    3. Clean Architecture (By employing clean architecture, you can design applications with very low coupling and independent of technical implementation details, such as databases and frameworks. That way, the application becomes easy to maintain and flexible to change. It also becomes intrinsically testable.)
    4. Result (Add Result for Error Handling)
  2. UI Patterns
    1. MVVM (Model View ViewModel)
    2. ViewModel (Architecture Components ViewModel Class)
  3. Kotlin
    1. Kotlin (A modern programming language that makes developers happier)
    2. Kotlin Symbol Processing (Kotlin Symbol Processing (KSP) is an API that you can use to develop lightweight compiler plugins. KSP provides a simplified compiler plugin API that leverages the power of Kotlin while keeping the learning curve at a minimum. Compared to kapt, annotation processors that use KSP can run up to 2 times faster)
    3. Kotlin Coroutines (Coroutines simplify asynchronous programming by putting the complications into libraries. The logic of the program can be expressed sequentially in a coroutine, and the underlying library will figure out the asynchrony for us)
    4. Asynchronous Flow (Suspending functions asynchronously returns a single value, but how can we return multiple asynchronously computed values? This is where Kotlin Flows come in)
  4. Android Support
    1. AndroidX (A new package structure to make it clearer which packages are bundled with the Android operating system, and which are packaged with your app's APK)
    2. Android KTX (Android KTX is a set of Kotlin extensions that is part of the Android Jetpack family)
    3. Room Persistence Library (The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite)
  5. Android UI
    1. Material Components (Modular and customizable Material Design UI components for Android)
    2. Dark Theme (Dark theme is available in Android 10 (API level 29) and higher)
    3. Jetpack Compose (Jetpack Compose simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs)
  6. Tests
    1. JUnit4 (A programmer-oriented testing framework for Java)
    2. MockK (MockK is a mocking library for Kotlin)
  7. Build
    1. Gradle Kotlin DSL (Kotlin language support for Gradle build scripts)
    2. Gradle Versions (Gradle plugin to discover dependency updates)

Build Variant

Beta and Release Setup

The first thing that you need to do in order to be able to build and run the beta and release build variant is to locate the 'local.properties' file (and if it doesn't exist, create it). Then, add the following properties:

# Build Singing Configs
storeFile = <YOUR.STORE.FILE.PATH>
storePassword = <YOUR.STORE.PASSWORD>
keyAlias = <YOUR.KEY.ALIAS>
keyPassword = <YOUR.KEY.PASSWORD>

THANK YOU