Artic is an attempt to build a full featured android app that pulls news articles from a Wordpress blog using dynamic feature modularization, kotlin coroutines and unidirectional data flow.
The UI was graciously designed by Ridwan.
The app leverages uni-directional data flow the in building a predictable state machine for every screen. To achieve this, the ViewModel class of the Android Architecture Components
and Kotlin Flow
were used. A lot of the architecture decisions were inspired by the talk detailed in these slides.
Source: Building MVI apps with Roxie.
Another interesting part of the architecture is the use of dynamic feature modularisation to seperate feature related code into the appropriate modules and Dagger 2 for dependency injection in the feature modules.
Source: Android Components Architecture in a Modular Word.
Dagger2 - Dagger2 was used for dependency injection.
Kotlin Flow - Flow was used for threading and data stream management.
Retrofit2 - Network calls
AndroidKtx - For cool extensions to Android classes.
Architecture Components - For Lifecycle managment in the presentation layer, persistence.
MockK - For mocking test dependencies.
Truth - For Unit test assertions etc.
Konveyor - For generating random data for tests.
Espresso - For UI testing.
I had a lot of fun building this. There are some improvements I intend to make.
- More tests.
- Build settings screen with Jetpack Compose
- Complete article search
- Animations
- Dark mode
- Clone repository.
- Run with Android Studio 4.0 canary 3 and above.
Copyright 2020 Abdul-Mujeeb Aliu
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
http://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.