The simple app is to demonstrate how the modern Enterprise Android App Architecture should be

Overview

Weather Forecast App

The simple app is to demonstrate how the modern Enterprise Android App Architecture should be.

Clean Architecture (Mr Uncle Bob)

  • The Application is organized base on the Clean Architecture with 3 modules: Domain, Presentation, Data:
    • Domain: Entities, Use Cases (Enterprise business and rules)
    • Data: Network, Database
    • Presentation: UI, Framework, Devices
    • Interfaces that help communicate between 3 modules above

CleanArchitecture

What I have achieved:

  • The Clean Architecture being applied. I tried to achieve the clean architecture with the way that simple as much as possible, and not break any clean architecture principles
  • The clean way to work together between 3 modules: Domain, Presentation, Data. The Dependency Inversion principle is applied, all 3 modules only depend on interfaces
  • Full Kotlin language
  • MVVM (Android Architecture Components) for Presentation module
  • Apply LiveData mechanism
  • Full required app features
  • Full UnitTests (for all 3 modules: Domain, Presentation, Data)
  • Input City Field min-length error handling (TextBox)
  • App Exception handling (Meaningful error messages, the retry button when the app got an error)
  • App Data Caching (by Room Database), and clear old cached data with the invalid weather date
  • App Resilience Networking (use the app without the network (data cache) and more...)
  • RateLimiter class helper to prevent the app from generating a bunch of API requests
  • Secure Android app from:
  • Accessibility for Disability Supports:
    • Talkback: Use a screen reader
    • Scaling Text: Display size and font-size: To change the size of items on your screen, adjust the display size or font size
  • Principles being applied: SOLID, KISS, DRY, specially Dependency Inversion between Domain module and Presentation/Data module (High-Module vs Low-Module)
  • Factory pattern, Dependency Injection pattern
  • Config Checkstyle with Ktlint (run command line: ./gradlew ktlintCheck)
  • Simplifying Project with a Folder-by-Feature structure

Libraries:

  • Android Architecture Components (MVVM)
  • AndroidX
  • Android KTX
  • Android Lifecycle-aware Components
  • ViewModel
  • Dagger 2: Android Injector + Custom Scope
  • Inject dependencies into ViewModel without boilerplate factory
  • LiveData
  • Room database
  • Kotlin Flow
  • Kotlin Coroutines
  • Kotlin CoroutineScope (viewModelScope)
  • Retrofit 2, Okhttp3
  • Single source of truth (by Room Database)
  • Material Design
  • Android Navigation
  • Data Binding 2
  • Gson
  • Timber
  • Ktlint
  • ConstraintLayout
  • Junit 4
  • Mockito for UnitTests
  • Kotlin Coroutines Test (kotlinx-coroutines-test)

The source code run on Android Studio Arctic Fox (2020.3.1)

You might also like...
Viper - Sample Viper (MVVMR) architecture pattern
Viper - Sample Viper (MVVMR) architecture pattern

Viper V I P E R = View + Interactor + Presenter + Entity + Router My versions Wi

Template for MVVM Architecture Clean Code.
Template for MVVM Architecture Clean Code.

MVVM Template Kotlin Template for MVVM Architecture. This is basic template for android app follwing MVVM architecture and latest tech stack. You don'

simple projet for implementation detekt for android

Simple DETEKT implementation others KTLint DeteKT Spotless gradle-code-quality-tools-plugin Tutorials medium Config detekt config.yml Gradle Build Scr

A simple android sound recorder which let's users record audio and listen to it

Android-Sound-Recorder A simple android sound recorder which let's users record audio and listen to it. Getting started To get started just clone or f

Android view data binding made simple!

DataBinding Android view data binding made simple! A more user friendly docu is coming! This library doesn't use any external library, so it's light w

This is a simple application through which I connected Students, Courses and Teachers in an a beautiful way. The main purpose of this project is the connection between the Objects.
This is a simple application through which I connected Students, Courses and Teachers in an a beautiful way. The main purpose of this project is the connection between the Objects.

UniversityApp This is a simple application through which I connected Students, Courses and Teachers in an a beautiful way. The main purpose of this pr

A simple project used for converting currencies

MyCurrencyConverter A simple project used for converting currencies. This project is divided into 2 parts (branches): master - without Dagger Hilt dev

A simple list-detail application using the Github API

GitHub Users Search Android application to search users via GitHub API Project demonstrates how to use Kotlin, Android Architecture Components, Dagger

This is the toy app for Lesson 9 of the Android App Development in Kotlin course on Udacity.
This is the toy app for Lesson 9 of the Android App Development in Kotlin course on Udacity.

Behind the Scenes - DevByte Viewer App This is the toy app for Lesson 9 of the Android App Development in Kotlin course on Udacity. DevByte DevByte Vi

Owner
null
Android Modern Architecture Sample

AndroidModernArchitectureSample TODO: write readme Download (playstore release - under review) https://play.google.com/store/apps/details?id=io.github

Ji Sungbin 22 Sep 10, 2022
This application features - Modern Minimalistic Design, MVVM, Pagination, Hilt, Retrofit, Room, Data Store, Flow, Live Data, Navigation Component (Clean Architecture)

NewsFly NewsFly is a modern news android application which features virtually ALL recent and recommended android development tech stack and tools used

Ibrahim 121 Nov 4, 2022
PolitcalPreparedness is an example application built to demonstrate core Android Development skills recommended by Google.

PolitcalPreparedness is an example application built to demonstrate core Android Development skills recommended by Google.

Pranav Patel 1 Apr 13, 2022
This is an example repository to demonstrate the good practices of using ViewModel and how usage of AndroidViewModel can make things worst in a codebase

ViewModel Good Practices ??‍♂️ This is a example repository to demonstrate the good practices of using ViewModel and how usage of AndroidViewModel can

Shreyas Patil 29 Sep 28, 2022
A sample repo to play with modern Android technologies

MarvelCompose Marvel + Compose. Table of Contents Introduction Features Feedback Introduction This is a sample repo to play with modern Android techno

David 4 Nov 26, 2021
MVI Architecture Android Beginners: Sample App

MVI Architecture Android Beginners: Sample App This repository contains a sample app that implements MVI architecture using Kotlin, ViewModel, LiveDat

null 16 Dec 7, 2022
A sample Album list app that shows how to use ViewModels and Room together with RxJava & Dagger2, in Kotlin by Clean Architecture.

Kotlin-MVVM-Hilt A sample Album list app that shows how to use ViewModels and Room together with RxJava & Dagger2, in Kotlin by Clean Architecture. Im

hpAndro 1 May 12, 2022
📚 Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Android Components Architecture in a Modular Word Android Components Architecture in a Modular Word is a sample project that presents modern, 2020 app

Madalin Valceleanu 2.3k Dec 30, 2022
Booking - Android Architecture Sample

Booking - Android Architecture Sample A simple app that loads information from REST API to show one approach to using some of the best practices in An

MohammedYakub Moriswala 2 May 3, 2022
Sample Android Clean MVVM architecture

Sample Android Clean MVVM architecture ( Retrofit + Okhttp + Moshi + Coil + Room + Navigation Component + Coroutines + Flow + DataStore + ViewModel + Hilt + Compose )

Javad 3 Jun 30, 2022