👷 🔧️ 👷♀️ ⛏ )
PayBill Manager (work-in-progress Paybill manger is an Android app meant to help you manage your bill.
It attempts to use the latest cutting edge libraries and tools. As a summary:
- Entirely written in Kotlin
- Uses RxJava 2
- Uses all of the Architecture Components: Room, LiveData and Lifecycle-components
- Uses dagger-android for dependency injection
Architecture
The architecture of this project is built around Android Architecture Components.
Module Layers
This project uses clean architecture to abstract all functionality. We've done this by isolation functionality in respective modules.
-
UI (mobile): This layer is responsible for the UI of the app. This layer contains Android framework application implementation. At the moment we are only supporting Phones but we may add tablet support later on and we'll create a separate module for this
-
Presentation: The Presentation layer allows us to abstract the presentation logic from the framework specific implementation of our user interface. We'll be using MVVM and android architecture components library to handle presentation of our app.
-
Domain: This houses business rules/use case classes. This provides the core functionality of the project, think of it as rules of the projects. eg, Add Bill, Update Bill, Make payment. e.t.c
-
Data: The Data layer allows us to abstract the sources of the data that our application uses. It implements the domain later to help us satisfy the required functionality. It will help us determine where we should fetch data from, Cache or remote.
-
Remote: The Remote layer allows us to abstract the sources of the remote data that our application uses. We'll use Retrofit to handle networking functionality.
-
Cache: The Cache layer allows us to abstract the local source of data that our application uses. We'll use Room to handle local storage.
Development Environment
The app is written entirely in Kotlin and uses the Gradle build system.
To build the app, use the gradlew build
command or use "Import Project" in
Android Studio. A canary or stable version >= 3.2 of Android Studio is
required and may be downloaded
here.
We followed the recommendations laid out in the Guide to App Architecture when deciding on the architecture for the app. We kept logic away from Activities and Fragments and moved it to ViewModel. We observed data using LiveData.
On top of this, We use a clean architecture approach to abstract all layers.
API Keys
For the app to make requests you require a Safaricom Dev Account. Once you have one, go ahead and create an application in order to get your credentials
Once you have it, open gradle.properties
file and paste your API key in SAFARICOM_CONSUMER_KEY
and SAFARICOM_CONSUMER_SECRET
variables respectively.
RoadMap
- Setup Travis CI
- Add Kotlin Support
- Create payment module
- Add CodeCov
- Setup CodeQuality Checks
- Get CodeCoverage above 70%
- Setup LeakCanary
- Read SMSs & generate report
- Release Beta Version
Contributions
If you've found an error in this sample, please file an issue.
Patches are encouraged, and may be submitted by forking this project and submitting a pull request. Since this project is still in its very early stages, if your change is substantial, please raise an issue first to discuss it.
Would you like to contribute code?
- Fork Paybill Manager.
- Create a new branch (using GitHub) or the command
git checkout -b branch-name dev
). - Start a pull request. Reference existing issues when possible.
No code!
- You can discuss a bug or if it was not reported yet submit a bug.
License
Copyright 2018 Thomas Kioko
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.