This project is to demonstrate a large database of video games in a native kotlin android app.
-
This app uses a public API, RAWG , for the video games database. Please follow their instructions to retrieve an API key to test the app.
-
The RAWG API key should be added under the
gradle.properties
file as shown below
API_KEY="api_key_here"
- Minimum supported SDK version is 24 (Nougat)
This project does its best to follow clean architecture and single responsibility. The following section briefly describes the packages.
- app: Entry point of the application. Only shows the splash screen and initializes some dependencies that will be shared by the rest of the packages such as dependency injection.
- base: This package contains most commonly shared components, util classes and parent class definitions. Networking component is also here.
- uicomponent: Custom designed views, styles, themes lay under here.
- main: The package that contains the real implementation. Whole logic is implemented in this package. It has a single activity as an entry point, rest is handled by fragments.
- buildSrc: Contains config files such as
Dependencies.kt
,Versions.kt
that are used bybuild.gradle
files. - data: Serializable data classes for REST API are here, also repository classes that call networking components lay under this package.
- domain: Bridge between
data
andmain
, contains usecases, calls web api through repositories and returns results to the corresponding view. - common-model: Commonly shared non-android dependent classes are here.
This project utilizes Single Activity
architecture with MVVM
Moreover, uses Repository - Use Case
pattern for fetching and delivering data.
- AndroidX
- ViewModel: Architecture, MVVM
- LiveData: Responsive UI
- Flow: Continuous data transmitting
- Paging V3: Endless data retrieval
- ViewBinding - DataBinding: Binding data sources to view layouts
- Coil: Image loading
- Koin: Dependency Injection
- Ktor: REST API
- Timber: Logging
- GSON: Json conversions
- ExoPlayer: Video Player
- Palette: Extracting colors from images