v777779 / mapnotes

Android application which allows you to add notes to the current location

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

badge badge

This app has been made to support resume

Map Notes

An Android application which allows you to add/remove notes to the current location

drawing

App Variants

  • master    Kotlin, Kotlin, MVVM, Coroutines, StateFlow/SharedFlow, Hilt, API 33
  • java        Java, MVP, RxJava2, Dagger2, API 29

Frameworks and Tools

  • Android SDK
  • Firebase Authentication, Realtime Database, Storage, Analytics, Crashlytics
  • Google Play Services Authentication
  • Google Maps SDK
  • Fused Location Provider API
  • Jetpack Architecture Components
  • Kotlin Coroutines
  • Hilt
  • Material Design 3

Features

  • Single activity multiple fragments MVVM architecture follows the official architecture guidance
  • ViewModels intensively used for control logic of Fragments and Activity
  • Firebase Authentication email/password sign in, sign up, password restore
  • Google One Tap with Firebase Authentication sign in
  • Remote repository based on Frirebase Realtime Database and Firebase Storage
  • Local repository based on Room used to cache remote repository data
  • Kotlin Coroutines, StateFlow, SharedFlow perform all asynchronous operations and data transfers
  • Kotlin suspend cancellable coroutines and callback flow with coroutine exception handler used to translate Firebase callback API to coroutines
  • Jetpack Navigation uses two graphs for navigation main graph and bottom sheet fragments graph
  • Jetpack Databinding and Binding Adapters provide dynamic data to fragment layouts
  • Encrypted Shared Preferences provides a secure way to store sensitive data in Shared Preferences
  • ListAdapter with DiffUtils implement optimized RecyclerView Adapter
  • Predictive back gesture navigation for Android 13 implemented for custom back navigation
  • Fused Location Client uses static Broadcast Receiver for location updates
  • Automatic detection active and metered network connection with Connectivity Manager
  • State machine pattern used for requesting Runtime Permissions and Location Settings
  • SplashScreen API used for splash screen implementation
  • Hilt dependency injection used all around app in Activity, Fragments, Broadcast Receiver, ViewModels
  • Design follows Material Design 3 recommendations, support light, dark themes and dynamic colors

Configuration

Configuration requires Firebase Project, Google Cloud API Keys for:

  • Google Maps SDK
  • Unsplash API (optional for downloading images from Unsplash)
  • Google One Tap(optional for singing with Google One Tap)

Short guide:

  • setup Firebase Project, add application to project and download google-services.json file
  • place google-services.json file in the app/ folder
  • get Google Map API Key from Google Cloud Console API Keys zone for Google Map API
  • get Unsplash API Key for your application from Unsplash developer zone
  • get Web Client ID from Google Cloud Console OAuth 2.0 Client IDs zone for Web Client
  • replace "YOUR_MAP_API_KEY" with Google Map API Key in build.gradle
  • replace "YOUR_UNSPLASH_API_KEY" with Unsplash API Key n build.gradle
  • replace "YOUR_WEB_CLIENT_ID" with Web Client ID n build.gradle
    buildConfigField("String", "WEB_CLIENT_ID", '"YOUR_WEB_CLIENT_ID"')
    buildConfigField("String", "UNSPLASH_API_KEY", '"YOUR_UNSPLASH_API_KEY"')
    manifestPlaceholders.mapsApiKey = "YOUR_MAP_API_KEY"

Get Started

Setup Firebase Project and Google Maps SDK for Android

Build and run application.

Open Sign Up Screen. Enter name, email and password. Press "Sign Up" button

Google Maps will open and show current location of the device.

Press "Add Note" button and enter "Google Plex" label of note and press "ADD" button

Location marker will appear on Map. Press "Search Notes" button. The list of notes will be displayed.

Swipe note right or left to delete.

License

Copyright 2023.

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.