Project Description

What are we building?

A simple but fully functional Notes App, production-ready, with an actual Back-End API, which could be customized later.

Note that the Back-End API will be based on json-server which provides support for all the different HTTP methods we need.

Different implementation strategies will be added incrementally.

  • Support for multiple UX styles that can be switched at runtime - just a proof of concept to show you how easy it is when using this simplified architecture

  • Initial implementation will use XML layouts, and later, we'll migrate or add new modules using Jetpack Compose

  • Offline support (caching) will use Room Persistence Library

Organization

All the different components will be defined within modules, and each module represents a package.

To provide structure, each module groups components that implement a specific feature:

  • Fragments, bindings, ViewModels, Repositories

  • Shared components will belong to their respective functional module:

    • API Services

    • Repositories for shared data across modules

    • UI utilities

  • All icons will be based on Material Components

Note: For now, ignore files having parsx prefix/suffix - those are part of another project and are used to track timestamps.

debugQA

debug

Android Variants

Variant debug will include different modules related to experimental or test features that should not be included in release.

Variant debugQA will behave as release, but will allow to execute the build within an emulator without having to provide a signing configuration - to keep things simple.

In this way, development workflows can be as efficient as possible, allowing to work on different modules without affecting others. This also simplifies how different builds connect to different API environments.

Several constants are defined using buildConfigField(...) within gradle and each variant will override those values depending which environment we want to target.

In summary:

  • debug ➟ features only available for developers - will define some files within app/src/debug, for specific dev-features

  • debugQA ➟ features only available to testers and resembles release, without having a signing configuration

  • release ➟ production release