- Programming Language: Kotlin
- Design Pattern: Single Activity + MVVM Design Pattern (using LiveData)
- Dependance Injection: Dagger 2
- For Concurrency Execution: Kotlin Coroutine
- For Navigation: Navigation Graph + Safe Args (Android JetPack)
- For Repository:
- Network: Retrofit + Gson
- Local: Room Database
- SharePreference: DataStore( Android JetPack)
- For Security: I use android keystore to retrive master key. This key is used in DataStore and SqlCipher (security library for Room Database)
- "common" package: store common base class, such as: BaseActivity, BaseFragment, BaseViewModel, BaseRecyclerAdapter, ApplicationGlideModule and GsonTypeAdapter.
- "model" package: all of application models
- "repository" package: contain data business logic. There are 3 package in repository: datastore, local and network. Each package will have single reposibility for retriving or inserting data and data in repository will not be retrived directly but it will through a wapper class like RepositoryDataSource.
- datastore: has reposibility for data of SharePreference
- local: has reposibility for data of Local Database (SqlLite)
- network: has reposibility for data of Network Api Service
- "utils" package: contain common helper class, helper methods or extension etc...
- "view" package: contain all of feature view like activity, fragment or custom view in app etc...
- Programming language: Kotlin (DONE)
- Design app'sarchitecture (suggest MVVM) (DONE)
- Apply LiveData mechanism (DONE)
- UI should be looks like in attachment (DONE)
- Write Unit Tests (DONE)
- Acceptance Tests
- Exception handling (DONE)
- Caching handling (DONE)
- Secure Android (DONE)
- Accessibility for Disability Supports (DONE)
- Readme file includes (DONE)
gradle clean