Giter Club home page Giter Club logo

locationreminder's Introduction

LocationReminder

Overview

This is a TODO list app with location reminders that remind the user to do something when the user is at a specific location. The app will require the user to create an account and log in to set and access reminders (for more details, see the description section below).

Important Notes:

  • This project was created based on educational purposes according to Advanced Android Kotlin Development Nanodegree.
  • In order not to break the terms of service, the API key is not provided in this repo. You can put your API key in the (google_maps_api.xml) file from this path ("app/src/debug/res/values/google_maps_api.xml") or directly press this link.

Skills Acquired from this Project

  • User Authentication: Signup, Login & Logout
  • Firebase Authentication
  • Map View & Styling
  • Geofencing
  • MVVM
  • Testing
  • Compatibility

Description

User Authentication

  • Login: There is a Login screen to ask users to log in using an email address or a Google account. Upon successful login, navigate the user to the Reminders screen. If there is no account, the app should navigate to a Registration (Signup) screen.

  • Signup: There is a Registration screen to allow a user to register using an email address or a Google account.

  • Logout: The users can log out of the app and when the app starts again they are required to log in first.

Note: The authentication is done using the Firebase console and includes Firebase UI.

Map View

  • Map view: There is a Map view that shows the user's current location.
    • It first asks the user's location access permission to show his/her current location on the map.
    • The location access is handled in cases of user denial that the user is shown the right error messages.

  • POI: The app asks the user to select a point of interest (POI) on the map to create a reminder.
    • The app asks the user to select a location or POI on the map and add a new marker at that location.
    • The selected POI can be just a simple POI or an area or specific latitude and longitude. The POI has a location name.
    • Upon saving, the selected location is returned to the Save Reminder page and the user is asked to input the title and description for the reminder.
    • When the reminder is saved, a geofencing request is created. Allowing the user to take Circular Radius for the geofence is a bonus.

  • Compatibility: The app works on all the different Android versions including Android Q.

  • Map Styling: The Map Styling is done using the map styling wizard to have a nice-looking map. Users have the option to change the map type from the toolbar items.

  • Geofencing: When the user enters a geofence, a reminder is retrieved from the local storage and a notification showing the reminder title will appear, even if the app is not open.

Reminders

Reminders: There is a screen to add a new reminder when a user reaches the selected location. Each new reminder includes:

  • title
  • description
  • selected location
  • Note:
    • The user-entered data is captured using live data and data binding.
    • (RemindersLocalRepository) is used to save the reminder to the local DB, and the geofencing request is created after confirmation.

Reminders list view

There is a screen that displays the reminders retrieved from local storage.

  • If there are no reminders, it displays a "No Data" indicator. If there are any errors, it displays an error message.
  • The user can navigate from the Reminders list view screen to another screen to create a new reminder.

Reminder notification

For each reminder, a geofencing request, in the background that fires up a notification when the user enters the geofencing area, is created.

  • Details are displayed about a reminder when a selected POI is reached and the user clicked on the notification.
  • When the user clicks a notification, a new screen appears to display the reminder details.

Testing

Tests include:

  • The app follows the MVVM design pattern and uses ViewModels to hold the live data objects, do the validation, and interact with the data sources.
  • Automation Testing using ViewMatchers and ViewInteractions to simulate user interactions with the app.
  • Testing for Snackbar and Toast messages.
  • Testing the fragments’ navigation.
  • Inserting and retrieving data using DAO.
  • Predictable errors like data not found.

Preview

locationreminder's People

Contributors

moh60000 avatar mohamedsamir21 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.