On exploring for further opportunities, I came across this amazing open-source project enviroCar. enviroCar Mobile is an Android application for smartphones that can be used to collect Extended Floating Car Data. The app communicates with an OBD2 Bluetooth adapter while the user drives. This enables read access to data from the vehicle’s engine control. Data is recorded along with the smartphone’s GPS position data and the driver can view statistics about his drives and publish his data as open data. The latter happens by uploading tracks to the enviroCar server, where the data is available under the ODbL licence for further analysis and use. The data can also be viewed and analysed via the enviroCar website.
Although the enviroCar App is currently in a fully functional state, there are some issues that need to be resolved. For example, users are able to create artificial types of cars with arbitrary attributes, which leads to collecting wrong data. The data base layer is currently based on sqlbrite, which has been depredated. Thus, it must be reimplemented. The project also lacks some features that will be very helpful to users.
Objective 1 – Replacing Deprecated Libraries
RxJava upgrade from version 2 to 3
The Android project currently uses the outdated RxJava version 2 instead of version 3. Updating this library is crucial to replacing the Otto event bus and and easily creating/integrating future features. In order to migrate to RxJava 3, we will first upgrade to Vert.x 4.1.0, which has support for RxJava 3. RxJava 3 lives in the group io.reactivex.rxjava3 with artifact ID rxjava. Official language/platform adaptors will also be located under the group io.reactivex.rxjava3. RxJava 3 has received a considerable amount of new operators and methods across its API surface.
Event bus implementation using RxJava/ RxAndroid to replace Otto event bus
RxJava is not easy to use, but replacing Otto with RxJava has removed many boilerplate callback code blocks from the codebase. Also RxJava is the best option for getting asynchronous data requests from any REST API. It is risky business to update an app’s UI with asynchronous data request results. RxJava addresses these issues by allowing us to create a composable “stream” of data that can be filtered, combined, cached, or manipulated in pretty much any way we want – all in one expression, or “observable sequence”.
Replace Butter Knife view binding with Jetpack view binding
In order to provide a cleaner approach for separating views from models, we recommend replacing the deprecated Butter Knife view binding with Jetpack view binding library. View binding is a feature that allows you to more easily write code that interacts with views. Once view binding is enabled in a module, it generates a binding class for each XML layout file present in that module. An instance of a binding class contains direct references to all views that have an ID in the corresponding layout.
Replacement of SQLbrite library
The current SQLbrite library has been deprecated. A new and a faster alternative is DBFlow. It is a fast, efficient, and feature-rich Kotlin database library built on SQLite for Android. DBFlow utilizes annotation processing to generate an SQLite boilerplate and provides a powerful SQLite query language that makes use of SQL. It is built from a collection of some of the best features of many database libraries.
Objective 2 – Improving User Experience and adding new Features
Option to Search track from List of track
If, for example, a user has data from more than 1000 tracks and needs to search for a particular track, the search function must be more user friendly. We would like to implement a feature with which users can easily search for the track according to date. To implement a feature where users can easily search the track according to date if a large number of records are present. If a list contains many items then giving a search option is really necessary for making it user friendly.
Comparison between Track Statistics
We will add a functionality in which users can check and compare two track statistics plotted on the same graph. The user will be able to select two tracks from the list of tracks, display the track statistics in a single line chart view with different colors for each track and consult a legend to differentiate between the two tracks. To add a functionality where users can also check and compare between two track statistics plotted on the same graph. To implement it, will make a separate fragment where the user can select two tracks from the list of tracks and then show the track statistics in a single Line chart view with different colour for both and also Legend to differentiate between two tracks line chart. Will use MediatorLiveData library. The user would be able to choose the attributes in which he can compare and see the statistics in a Graphical manner.
Identifying Bugs and UI/ UX improvement
Currently there are a few Bugs present in certain Activities and Fragments of the app. These must be resolved to improve the user experience in the app. Also the Materialistic guidelines are not being implemented in certain sections of the app. By implementing the same, it would drastically improve the user interface and user experience of the entire application. By following the Materialistic guidelines, uses basic yet important concepts of motion, flow, uniformity and ease of use to make websites and mobile apps look and feel much better and at the same time allow users to use it much faster and efficiently. Materialize is the new, commonly used technology for creating mobile friendly responsive websites and even cross platform mobile apps.
I am a student studying Bachelors in Technology Degree from SRM University in Computer Science Engineering. I have been tinkering with code since my school days. I love working on Android Apps, as well as the Android OS (AOSP), and have spent many of my nights building up Android projects. I also regularly participate in a lot of hackathons and have won a few of them in the Chennai circuit. I am interested in open source, because it allows me to showcase my skills to the developer community, the interesting challenges I face, and how I think about solving them. The best thing is that open source developers can casually contribute to projects, learn how to work and what it’s like developing software for a particular set of challenges. Releasing a project as open source allows others to adapt and build on top of my contributed project. When people build on top of my contributed project, they are invested in my success as well as their own.