- Android Architecture Components.
- Separation of concerns.
- Test-ability.
- Loose Coupling.
- Applying SOLID principles.
- Using better dependency management Using buildSrc + Kotlin DSL.
- Secure app from reverse engineering and protection against security threats.
- Kotlin - First class and official programming language for Android development.
- Coroutines and Flow - Official Kotlin's tooling for performing asynchronous work.
- MVVM Architecture - Official recommended architecture for building robust, production-quality apps.
- Navigation component - navigation graph for navigating and replacing screens/fragments
- Android Jetpack - Jetpack is a suite of libraries to help developers build state-of-the-art applications.
- ViewModel - The ViewModel is designed to store and manage UI-related data in a lifecycle conscious way.
- StateFlow - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
- Dagger Hilt - Hilt is a dependency injection library for Android.
- OkHttp - An HTTP client for making network calls.
- Retrofit - A library for building REST API clients.
- KotlinX Serialization - A multiplatform Kotlin serialization library.
- Coil - An image loading library.
- Detekt - A static code analysis library for Kotlin.
- Ktlint - A library for formatting Kotlin code according to official guidelines.
- Testing - The app is currently covered with unit tests and instrumentation tests.
- JUnit - JUnit is a unit testing framework for the Java programming language.
- Truth - Truth is a library providing fluent assertions for Java and Android.
- MockK - MockK is a mocking library for Kotlin.
- Coroutines Test - A library for testing Kotlin coroutines.
- Turbine - A testing library for Kotlin Flows.
- Dagger Hilt Test - A testing library for modifying the Dagger bindings in instrumented tests.
- Gradle's Kotlin DSL - Gradleโs Kotlin DSL is an alternative syntax to the Groovy DSL with an enhanced editing experience.
- buildSrc - A special module within the project to manage dependencies.
For more information about used dependencies, see this file.
- Apply UseCases.
- Apply buildSrc + Kotlin DSL for better dependency management.
- Use Coil for loading images.
- Add some unit tests.
- Apply CI|CD and automate some tasks using github actions.
- Apply MAD score Analysis.
- Apply ktlint for checking code style.
- Use git hooks to automate code checking and styling before any new commit.
- Handle Different Build Variants.
- Add pagination for recyclerview using Paging 3 lib.
- Introduce mapper pattern to isolate the logic and making it easier to test and reuse the conversion logic in other classes if necessary.
- Migrate to Jetpack Compose for UI .
- Use Room as a local DB for caching data.
- Use EncryptedSharedPreferences for securing user data.
- Secure app from reverse engineering.
- Apply SafetyNet for protection against security threats.
- Apply ssl certificate concept.
- Use Ktor as network client instead of Retrofit & OKHTTP.
See the CONTRIBUTION.md file.
Copyright 2022 AHMED ABDELHAK, All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.