🌔
Nooble Engineering Challenge (Android Developer)
📜
Description
This test solution is implemented with Clean Architecture
It is written 100% in Kotlin with both unit and integrated tests.
Languages, libraries and tools used
Requirements
- JDK 1.8
- Android SDK
- Android 11 (API 30)
- Latest Android SDK Tools and build tools.
Installation
- To run this code, clone this repository using this command
git clone https://github.com/chydee/Nooble-Assessment.git
- Import into android studio
- Build the project and run on an android device or emulator
Architecture
The architecture of the project follows the principles of Clean Architecture and MVVM. Here's how the project implements it:
The app when run will show you a a Tiktok style feed of songs parsed from a json file.
App module
This layer makes use of the Android Framework and is used to create all of our UI components to display inside of the Main Activity. This layer contains the views(activities and fragments) and the ViewModel. The ViewModel receives its data from the use cases of the domain layer and then supplies the views.
Domain module
The domain layer responsibility is to simply contain the UseCase instance used to retrieve data from the Data layer and pass it onto the Presentation layer.
Data Module
The Data layer is our access point to external data layers and is used to fetch data from multiple sources (examples are cache and network). In this case, it gets data from the local source only. It contains an implementation of the Repository.
Local Module
The local layer contains the business logic that converts the JSON to a list of data that we can use. It contains Room database implementation for storing of shorts.
Appreciation
- Kawsar Hossain - Lottie Animation
💡
Motivation and Context
Working on this challenge I have enjoyed:
- Getting a feel of what modularization is all about
- Implementing with Kotlin
❓
💭
What I could have done better in attempting this test
- Handle error messages properly with more contexts
- Test end to end
- Play shorts in the background using actual services
- Handle AudioFocus in a clean way
...but there's more from where this came.