An Android application which allows you to add/remove notes to the current location
- master Kotlin, Kotlin, MVVM, Coroutines, StateFlow/SharedFlow, Hilt, API 33
- java Java, MVP, RxJava2, Dagger2, API 29
- 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
- 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 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"
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.
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.