πŸš€A powerful android clean architecture that helps you build your apps faster.

Overview

IMStudio



-----------------------------------------------------

πŸ“– Table of Contents

Architecture Component

Screenshot

Architecture Paging

Screenshot

Clean Architecture

Screenshot

🌈 Git Flow


Flow

  1. Pull newest code from develop branch
  2. Create new branch from develop branch
  3. Code, test on new branch. Make sure that all feature is true and have no error
  4. Pull newest code from develop branch again, merge into new branch
  5. Create merge request

Commit Rules

  • feat (new feature for the user, not a new feature for build script)
  • fix (bug fix for the user, not a fix to a build script)
  • docs (changes to the documentation)
  • style (formatting, missing semi colons, etc; no production code change)
  • refactor (refactoring production code, eg. renaming a variable)
  • test (adding missing tests, refactoring tests; no production code change)
  • chore (updating grunt tasks etc; no production code change)

Example: create new feature branch

  1. Branch name: feature/{feature_name}
  2. Commit message describe core of commit change. Start with:
  • feature: description
  • fix: description
  • refactor: Refactoring source code, optimize source code...
RxJava

Common UseCase (if you do not know about observable and observer, pleas stop here)

  • Single: is an asynchronously retrieved: one-shot value
  • Observable: class that emits a stream of data or events. i.e. a class that can be used to perform some action, and publish the result: streams of data
  • Flowable: streams of data
  • Observer: class that receivers the events or data and acts upon it. i.e. a class that waits and watches the Observable, and reacts whenever the Observable publishes results.

Subject (like above, please stop here)

  • Publish Subject: It emits all the subsequent items of the source Observable at the time of subscription.
  • Replay Subject: It emits all the items of the source Observable, regardless of when the subscriber subscribes.
  • Behavior Subject: It emits the most recently emitted item and all the subsequent items of the source Observable when an observer subscribes to it.
  • Async Subject: It only emits the last value of the source Observable(and only the last value) only after that source Observable completes.
Scripts

Clear build folder

    find . -name build -exec rm -rf {} \;
    find . -name build -exec rm -r "{}" \;

Gradle

task clean(type: Delete) {
    delete rootProject.buildDir
}

Remove all DS_Store

    find . -name '.DS_Store' -type f -delete
    find . -name ".DS_Store" -type d -exec rm -r "{}" \;
    find . -name ".hprof" -type d -exec rm -r "{}" \;

Remove all iml

    find . -name '.iml' -type f -delete

Clear cache

    git rm -r --cached .idea | git rm -r --cached *.iml

Dependencies

    ./gradlew -q dependencies [module]:dependencies

Pull with rebase default

    git config --global pull.rebase true

🌈 Technical Stack

This project takes advantage of many popular libraries, plugins and tools of the Android ecosystem. Most of the libraries are in the stable version, unless there is a good reason to use non-stable dependency.

The architecture is built around Android Architecture Components.

We followed the recommendations laid out in the Guide to App Architecture when deciding on the architecture for the app. We kept logic away from Activities and Fragments and moved it to ViewModels. We observed data using LiveData and used the Data Binding Library to bind UI components in layouts to the app's data sources.

We used a Repository layer for handling data operations. FUTA's data comes from a few different sources - user data is stored in Cloud Firestore (either remotely or in a local cache for offline use), user preferences and settings are stored in SharedPreferences, conference data is stored remotely and is fetched and stored in memory for the app to use, etc. - and the repository modules are responsible for handling all data operations and abstracting the data sources from the rest of the app (we liked using Firestore, but if we wanted to swap it out for a different data source in the future, our architecture allows us to do so in a clean way).

Kotlin

made-with-Kotlin

We made an early decision to rewrite the app from scratch to bring it in line with our thinking about modern Android architecture. Using Kotlin for the rewrite was an easy choice: we liked Kotlin's expressive, concise, and powerful syntax; we found that Kotlin's support for safety features for nullability and immutability made our code more resilient; and we leveraged the enhanced functionality provided by Android Ktx extensions.

🎨 Dependencies

  • Jetpack:
    • Android KTX - provide concise, idiomatic Kotlin to Jetpack and Android platform APIs.
    • AndroidX - major improvement to the original Android Support Library, which is no longer maintained.
    • Data Binding - allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
    • View Binding - View binding is a feature that allows you to more easily write code that interacts with views. Once view binding is enabled in a module, it generates a binding class for each XML layout file present in that module. An instance of a binding class contains direct references to all views that have an ID in the corresponding layout.
    • Lifecycle - perform actions in response to a change in the lifecycle status of another component, such as activities and fragments.
    • LiveData - lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services.
    • Navigation - helps you implement navigation, from simple button clicks to more complex patterns, such as app bars and the navigation drawer.
    • Paging - helps you load and display small chunks of data at a time. Loading partial data on demand reduces usage of network bandwidth and system resources.
    • ViewModel - designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
    • Worker - A class that performs work synchronously on a background thread provided by WorkManager.
  • Dagger2 - dependency injector for replacement all FactoryFactory classes.
  • Retrofit - type-safe HTTP client.
  • Timber - a logger with a small, extensible API which provides utility on top of Android's normal Log class.
  • Stetho - debug bridge for applications via Chrome Developer Tools.
  • Shimmer - Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app.
  • Glide - Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.

βš™οΈ Copyright

Created by $username on $today
Copyright (c) $today.year . All rights reserved.
Last modified $file.lastModified

-----------------------------------------------------

πŸš€ Authors

You might also like...
Money Manager app that helps you to add your daily small incomes and expenses and track them easily.
Money Manager app that helps you to add your daily small incomes and expenses and track them easily.

Simple Money Manager This app is a simple money manager app which helps you to add your daily small incomes and expenses and track them easily. Screen

A simple xposed module that helps you use your AdGuard subscription in multiple devices

DualGuard A simple xposed module that helps you use your AdGuard subscription in multiple (3) devices. Monstor ahead! / θ­¦ε‘Š This is NOT a module that

CatatanKu-SimpleNoteApp - CatatanKu helps to create your notes. You can edit and delete notes too. All Changes in database is pushed to Firebase Realtime Database
Wiped is a wiping app that helps you to delete a file permanently from your device

Wiped Wiped is a wiping app that helps you to delete a file permanently from your device. How Is It Done? Did you know that when you delete a file in

The SleepQualityTracker app - a demo app that helps you collect information about your sleep
The SleepQualityTracker app - a demo app that helps you collect information about your sleep

The SleepQualityTracker app is a demo app that helps you collect information about your sleep. This app builds on the SleepQualityTracker previous made, refactoring the code to make it more efficient so it will be easier to maintain and test

A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.

Ionic Ionic is an open source app development toolkit for building modern, fast, top-quality cross-platform native and Progressive Web Apps from a sin

Weather application example with Android Architecture components and Clean Architecture

Weather application example with Android Architecture components and Clean Architecture Weather app that shows how to architect an android app in a cl

NewsSpac-MVVM-CleanArch-TDD - The App uses MVVM architecture together with Clean architecture

Aplicativo NewsSpace Arquitetura O App utiliza a arquitetura MVVM em conjunto co

Episodie is a TV show time tracker app with unusual design written in kotlin and clean architecture approach. Get to know how much time you spent watching tv shows.
Episodie is a TV show time tracker app with unusual design written in kotlin and clean architecture approach. Get to know how much time you spent watching tv shows.

Episodie Episodie is a TV show time tracker app with unusual design. Get to know how much time you spent watching tv shows. Track easily overall progr

Owner
Hau NGUYEN (Leo)
Software Engineering Manager, Mobile
Hau NGUYEN (Leo)
when you use restful api and network get disconnect you have to store your data local for make your app faster and work on ofline mode

AppArchitectureOflineMode when you use restful api and network get disconnect you have to store your data local for make your app faster and work on o

Kareem-Mansy 3 Jun 20, 2021
Android app that helps you keep track of the medical supplements you need to take and how you spend your days

Android app that helps you keep track of the medical supplements you need to take and how you spend your days, similar to a bullet journal. It also allows you to reflect on your day, week, year, etc.

Rachelle Hu 4 Nov 10, 2022
How to build an Android application using the Uncle Bob's Clean Architecture approach

MVI-Clean-Architecture This is a sample app & basic code that demonstrate how to

Ahmed Shaban  Elhdad 13 Oct 22, 2022
A complete app that demonstrate how to build an Android application using the Uncle Bob's Clean Architecture approach

?? Blog taking application utilizing Ktor REST-API and following modern practices: Kotlin, Coroutines, Flows, Channels, Room, Work Manager, Navigation Component, MVI, Clean Architecture, Modularization, Dagger Hilt, Tests...

Haythem Mejerbi 47 Dec 17, 2022
Alkatraz is an app that helps you to Reach your goals by managing your Habits .

Alkatraz - Build healthy habits for healthy life Alkatraz is an app that helps you to Reach your goals by managing your Habits . It's makes your life

Nishant Kumar 11 Nov 28, 2022
A GitHub user Android apps using Dagger 2, MVVM, Modularization, Clean Architecture, and Airbnb Epoxy

A GitHub user Android apps using Dagger 2, MVVM, Modularization, Clean Architecture, and Airbnb Epoxy.

Alva Yonara Puramandya 3 Dec 28, 2022
Dose a Android app that reminds you medications exactly when your body needs them, building entirely using Kotlin and Jetpack Compose with MVVM + Clean Architecture

??⏰ Dose is a work-in-progress Android app that reminds you medications exactly when your body needs them, building entirely using Kotlin and Jetpack Compose with MVVM + Clean Architecture

Waseef Akhtar 195 Jan 1, 2023
Task Timer - An android app that helps you to keep a track of how much time you spend on each task

Task Timer - An android app that helps you to keep a track of how much time you spend on each task

Hassan Al-Shammari 1 Feb 24, 2022
Oratio Library for Android Studio helps you simplify your Android TTS codes

Oratio Oratio is a library for Android Studio. This library is useful to a number of developers who are currently making apps using android TTS(Text-T

Jacob Lim 1 Oct 28, 2021