Build an App: Concept (Part 1)

Staying on top of your daily goals can be challenging, especially if you have a lot of different things to keep track of. That’s where a daily goal tracker app can come in handy. A daily goal tracker app can help you stay organized, motivated, and accountable. Before starting to write an app, we should specify some features and functionality which should be implemented.

Functions

A goal tracking app should include some basic features, such as:

Goal setting: Users should be able to set new goals and specify them by adding a description. Optionally, goals could be categorized.
Goal tracking: Users should be able to track their progress towards their goals and view their history. This could be done through a variety of methods, such as checklists, progress bars, and timelines. Probably, we will go the easy way and only include a status, whether a goal is done or not.
Reporting: Users should be able to view reports on their progress, including things like goal completion rates and trends.
Reminders: Users should be able to set reminders for themselves to help them stay on track with their goals. This will be done by notifications.

App Features

Settings: Settings should include different languages, notifications, and themes.

Components and Structure


We will use the Model–view–viewmodel to structure our classes.

Model

The Model layer represents the data that the application uses. It can be stored in a database, file system, or other data source. The Model layer should be independent of the View and ViewModel layers. Additionally, we will add a Database component for the app, and probably use Room for our database access.

View

The View layer is responsible for displaying the user interface. It should not contain any business logic or interact with the Model layer directly. Instead, it should observe the ViewModel for changes and update the UI accordingly.

ViewModel

The ViewModel layer mediates between the View and Model layers. It exposes the data needed by the View and handles any business logic required to prepare that data. The ViewModel should be aware of the underlying Model layer, but the View should not be aware of it.

Additionally, we have to store our resources, such as UI layouts, translations, or app icon somewhere. This is mostly handled by Android Studio, so we don’t really have to worry about that part.


Design

Our design should not deviate much from the standard design which is used by many apps and components in Android. We will use the internal designer in Android Studio. As this is not a professional project and rather a simple demonstration of Android Studio, we also won’t need design concepts of our UI and will figure out the necessary steps on the way.

Programming Language

Android Studio offers both: Kotlin and Java. Kotlin and Java are interoperable, meaning that you can use Kotlin code in Java projects and vice versa. This makes it easy to migrate from Java to Kotlin or to use Kotlin alongside Java in existing projects. And this is exactly what we will do. I am more familiar with Java, however, using Kotlin offers some crucial advantages in Android Studio. Therefore, the project will be mixed and consists of classes written in Java and in Kotlin.