📱
FinnAds FinnAds is a sample project to fetch advertisements from a mock api. It follows the MVVM architecture & single activity pattern.
Android development
Here is the overview of the libraries used in FinAds
- UI: Jetpack Compose
- Async: Kotlin Coroutines
- Database: Room
- DI: Hilt
- Network: Retrofit
- Image Loading: Coil
Module structure
- :ui:ads: Composables and the view model for the ads screen
- :base: Dagger modules and classes which is needed in all layers
- :common-ui: Common composables and utilities for UI
- :data:repository: Repositories, data sources and data stores
- :data:api: Api services
- :data:entity:response: Response api models
- :data:entity:dto: Data transfer objects mapped from api responses
- :data-android: Android library module for the database and type converters
Future improvements
- Navigation support
- Filter bottom sheet
- Swipe to refresh functionality
- Removal of the cached bitmap after removing from favourites
- Better handling of local caching of ads
- Better handling of error cases (such as more descriptive error messages based on error type)
- Moving dependency versions to buildSrc
- Animations (such as like button + Lottie)
- Grid layout support such that the user could change the appearance of the list
- Addition of different flavors (such as mock flavor with mock data)
- More composable previews
- Gradle module for common composables
- Signing configuration & proguard rules for the release
- Translations of strings
- Domain layer
- More Unit & UI tests
- Screenshot testing
- CI/CD integration
License
Copyright 2022 Fatih Giris
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.