Skip to content

πŸ—ΊοΈ Tacking the user distance traveled and time taken using the google maps API

License

Notifications You must be signed in to change notification settings

devrath/Distance-Tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

cover

Distance-Tracker πŸ§žβ€

Android Best practices Kotlin Coroutines DaggerHilt Firebase Timber Orhanobut Google Material Crashlytics Fused Location Service OkHttp OkHttp-interceptors Kotlin-Serialization

π™°πš›πšŒπš‘πš’πšπšŽπšŒπšπšžπš›πšŽ 🎈

π™±πš•πš˜πšŒπš” π™³πš’πšŠπšπš›πšŠπš–

dev_logo

π™Όπš…πš…π™Ό-π™°πš™πš™πš›πš˜πšŠπšŒπš‘

dev_logo

πšƒπš‘πšŽ πšŠπš›πšŒπš‘πš’πšπšŽπšŒπšπšžπš›πšŽ 𝚘𝚏 πšπš‘πšŽ πšŠπš™πš™πš•πš’πšŒπšŠπšπš’πš˜πš— πš’πšœ πš‹πšŠπšœπšŽπš, πšŠπš™πš™πš•πš’ πšŠπš—πš πšœπšπš›πš’πšŒπšπš•πš’ πšŒπš˜πš–πš™πš•πš’πšŽπšœ πš πš’πšπš‘ πšŽπšŠπšŒπš‘ 𝚘𝚏 πšπš‘πšŽ πšπš˜πš•πš•πš˜πš πš’πš—πš 𝟻 πš™πš˜πš’πš—πšπšœ 🐿️

SlNo Description
1 A single-activity architecture, using the Navigation component to manage fragment operations.
2 Android architecture components, part of Android Jetpack for give to project a robust design, testable and maintainable.
3 Pattern Model-View-ViewModel (MVVM) facilitating a separation of development of the graphical user interface.
4 S.O.L.I.D design principles intended to make software designs more understandable, flexible and maintainable.
5 Modular app architecture allows to be developed features in isolation, independently from other features.

π™Όπš˜πšπšžπš•πšŠπš›πš’πš£πšŠπšπš’πš˜πš— πšœπšπš›πšŠπšπšŽπšπš’πšŽπšœ 𝚞𝚜𝚎𝚍 🦨

Name Description
Reusability Keeping code reusable so same code snippets are utilized in different parts of the code
Parallel Building Modular approach reduces the build time
Strict visibility control Modules restrict to expose dedicated components and access to other layers, so it prevents they're being used outside the module
Decentralized focusing Each developer team can assign their dedicated module and they can focus on their own modules

π™³πšŽπš–πš˜ 𝚘𝚏 πšπš‘πšŽ πš™πš›πš˜πš“πšŽπšŒπš πŸ’‘

This application is used to track the user distance traveled and the time taken to travel the distance.

Features with Description Wiki Demo
Location-Tracking : With this feature users can start the tracking from a source and travel to destination. Then measure the distance travelled and time taken for the journey with a visual display on the map using hte polyline. Users will be able to track the distance even when the app is not in the foreground or background using a foreground service. Documentation
Splash API: With this API there is no need of creating a separate activity to customise the splash screen. The system will automatically create one for you. It also allows you to have a new launch animation for your apps and ability to perform a long running operation.
In-App updates: Using this API, users will be able to update the application in an eligant way thus keeping the app always up-to-date. Documentation
App-reviews: This API lets you prompt users to submit Play Store ratings and reviews without the inconvenience of leaving your app.
Network Observer: This is used to observe the network change if connected/disconnected to user Documentation
Toggling dark/light mode from app: This application supports system dark/light mode along with it user can force the toggling of modes in android Documentation
Changing the map style: We can dynamically change the map style of android to provide a different user experience

Useful learnings πŸ’‘

π™³πšŽπš™πšŽπš—πšπšŽπš—πšŒπš’πšŽπšœπŸ§΅

  • Jetpack-Androidx: Major improvement to the original Android Support Library, which is no longer maintained.
  • View-Binding: Allows you to more easily write code that interacts with views. An instance of a binding class contains direct references to all views that have an ID in the corresponding layout.
  • Lifecycle: Perform actions in response to a change in the lifecycle status of another component, such as activities and fragments.
  • LiveData: lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services.
  • Navigation: helps you implement navigation, from simple button clicks to more complex patterns, such as app bars and the navigation drawer.
  • Timber: a logger with a small, extensible API which provides utility on top of Android's normal Log class.
  • DataStore: iData storage solution that allows you to store key-value pairs.
  • Fused location provider: Get location data for your app based on combined signals from the device sensors using a battery-efficient API.
  • Google play core: Download additional language resources, Manage delivery of feature modules, Manage delivery of asset packs, Trigger in-app updates, Request in-app reviews
  • Coroutines: A coroutine is a concurrency design pattern that you can use on Android to simplify code that executes asynchronously

π™²πš˜πšπšŽ πšœπšπš’πš•πšŽπŸͺ€

To maintain the style and quality of the code, are used the bellow static analysis tools.

Tools Config file Check command Fix command
detekt /.detekt ./gradlew detekt -
ktlint - ./gradlew ktlint ./gradlew ktlintFormat
spotless /.spotless ./gradlew spotlessCheck ./gradlew spotlessApply
lint /.lint ./gradlew lint -

πšƒπšŽπšŒπš‘ πšœπšπšŠπšŒπš” πŸ—οΈοΈ

What How
🎭 πš„πšœπšŽπš› π™Έπš—πšπšŽπš›πšπšŠπšŒπšŽ (π™°πš—πšπš›πš˜πš’πš) π™ΉπšŽπšπš™πšŠπšŒπš” π™²πš˜πš–πš™πš˜πšœπšŽ , π™°πšŒπšπš’πšŸπš’πšπš’+πš‡π™Όπ™»
πŸ— π™°πš›πšŒπš‘πš’πšπšŽπšŒπšπšžπš›πšŽ π™²πš•πšŽπšŠπš— π™°πš›πšŒπš‘πš’πšπšŽπšŒπšπšžπš›πšŽ
πŸ’‰ 𝙳𝙸 (π™°πš—πšπš›πš˜πš’πš) π™·πš’πš•πš
🌊 π™°πšœπš’πš—πšŒ π™²πš˜πš›πš˜πšžπšπš’πš—πšŽπšœ + Flow
🌐 π™³πšŠπšπšŠπš‹πšŠπšœπšŽ πšπš˜πš˜πš–

π™Ώπš•πšŠπš’πšœπšπš˜πš›πšŽ π™³πš˜πš πš—πš•πš˜πšŠπš 🧰

πš‚πšžπš™πš™πš˜πš›πš β˜•

If you feel like support me a coffee for my efforts, I would greatly appreciate it.
Buy Me A Coffee

π™²πš˜πš—πšπš›πš’πš‹πšžπšπšŽ πŸ™‹β€β™‚οΈ

Read contribution guidelines for more information regarding contribution.

π™΅πšŽπšŽπšπš‹πšŠπšŒπš” ✍️

Feature requests are always welcome, File an issue here.

π™΅πš’πš—πš πšπš‘πš’πšœ πš™πš›πš˜πš“πšŽπšŒπš πšžπšœπšŽπšπšžπš• ? ❀️

Support it by clicking the ⭐ button on the upper right of this page. ✌️

π™»πš’πšŒπšŽπš—πšœπšŽ Licence πŸš”

This project is licensed under the Apache License 2.0 - see the LICENSE file for details