Skip to content

CathalOConnorRH/mobile_app_dev

Repository files navigation

Mobile App Development

Project Name: Sound Safari

Project Description:

Sound safari is a mobile application that allows users to create a customised GPS based audio tour. A user signs up and saves locations to visit, once they enter a geofenced location an audio prompt plays with the details about the location they are visiting.

The following technologies have been used in the making of the sound safari mobile application:

  • Kotlin
  • Jetpack Compose
  • Android Studio
  • Git/GitHub
  • Firebase Realtime Database
  • Firebase Authentication
  • Google Authentication
  • Google Maps API
  • Android text to speech
  • Tripadvisor api
  • Timber for logging

Features

  • CRUD functionality for locations, locations are persisted to Firebase Realtime Database.
  • User authentication using Firebase Authentication and Google Authentication. A user can choose whether to sign authenticate using their google account or skip and an anonymous user will be created for them in firestore. When they authenticate fully later the user data will be merged.
  • App navigation via Bottom bar navigation.
  • Map functionality to allow the user to see each individual location and also to show all saved locations together on one map. This allows the user to see possible destinations and see all selected destinations in relation to each other. The map functionality makes use of the Google Maps API.
  • Swipe left to delete support for saved locations.
  • Night mode functionality.
  • A foreground service with persistent notification is used to poll the GPS location of the user for triggering the audio TTS when entering the geofence. This currently polls every second for testing within the emulator but can be adjusted for production version.
  • A boot receiver service is used to start the foreground service when the device is restarted.
  • A background receiver to receive the geofence event and start the TTS event.
  • Offline cache as part of Coil, Retrofit and Firestore.

Visuals

Sign Up & Login Page:

First Image

Sign Up & Login Page:

Light Mode Dark Mode
First Image Second Image

Sign in:

Light Mode Dark Mode
First Image Second Image

Locations Page:

Light Mode Dark Mode
First Image Second Image

Location Details Page:

Light Mode Dark Mode
First Image Second Image

Plan Page:

Light Mode Dark Mode
First Image Second Image

Settings Page:

Light Mode Dark Mode
First Image Second Image

Map View Page:

Light Mode Dark Mode
First Image Second Image

Search Popup:

Light Mode Dark Mode
First Image Second Image

UX/DX

UX

The app is designed to be as easy to use as possible and uses standard icons to follow industry norms. Text is used on buttons where icons were not enough to convey functionality. The colours scheme is kept simple to ensure ease of use in either light or dark mode.

DX

I tried followed The MVVM Design Pattern where necessary. I separated the program logic from the UI functionality once the logic became complicated. Pages such as the settings page aren't separated as the logic is small. I also tried to follow a clean architecture approach ensuring that the code is neat, with an easy to understand naming convention and formatted correctly.

GIT

Git has 2 branches, Main and dev, with dev storing the work as changes were made and then pull requests created from dev to main for each tagged release. Renovate bot was used to ensure dependencies are kept up to date. A github action runs on every push/pull to main which runs ./gradelw test and builds the apk. An example of the built artifact is https://github.com/CathalOConnorRH/mobile_app_dev/actions/runs/8909150662

Personal Statement

This project has taken the longest of any projects so far. A lot of reference material and articles are out of date for Jetpack Compose even if written within the last 12 months. This made figuring out the correct usages tricky in some places and means functionality is not exactly what I would have if it were an actual commercial application. I will update the functionality in future versions to address the issues as I learn more.

As it currently stands the app works and is usable in the real world. With the addition of additional sources some of the information could be better tailored to the app. One example is the inaccuracy of GPS location data for some locations in tripadvisor. If I had a custom backend to host the data it would be more accurate or at least controllable. There are also limitations of the tripadvisor api that only returns a limited number of results.

References

Online articles and tutorials used in the process of developing this app.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages