├── .gitignore ├── Application ├── .gitignore ├── .idea │ ├── .gitignore │ ├── .name │ ├── compiler.xml │ ├── gradle.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── jarRepositories.xml │ └── misc.xml ├── app │ ├── .gitignore │ ├── build.gradle.kts │ ├── dev │ │ └── debug │ │ │ └── output-metadata.json │ ├── proguard-rules.pro │ ├── release │ │ └── output-metadata.json │ └── src │ │ ├── debug │ │ └── ic_launcher-playstore.png │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── distancetracker │ │ │ │ ├── Constants.kt │ │ │ │ ├── TrackerApplication.kt │ │ │ │ ├── compose │ │ │ │ └── theme │ │ │ │ │ ├── Color.kt │ │ │ │ │ ├── Shape.kt │ │ │ │ │ ├── Theme.kt │ │ │ │ │ └── Type.kt │ │ │ │ ├── di │ │ │ │ └── NotificationModule.kt │ │ │ │ ├── features │ │ │ │ ├── KeysFeatureNames.kt │ │ │ │ ├── distancelog │ │ │ │ │ └── DistanceLogFragment.kt │ │ │ │ ├── map │ │ │ │ │ ├── domain │ │ │ │ │ │ ├── MapFragmentUseCases.kt │ │ │ │ │ │ ├── di │ │ │ │ │ │ │ └── MapDomainModule.kt │ │ │ │ │ │ ├── entities │ │ │ │ │ │ │ ├── inputs │ │ │ │ │ │ │ │ └── CalculateResultInput.kt │ │ │ │ │ │ │ └── outputs │ │ │ │ │ │ │ │ └── CalculateResultOutput.kt │ │ │ │ │ │ └── usecases │ │ │ │ │ │ │ └── CalculateResultUseCase.kt │ │ │ │ │ ├── events │ │ │ │ │ │ └── EventMapStyleSelected.kt │ │ │ │ │ ├── presentation │ │ │ │ │ │ ├── custom │ │ │ │ │ │ │ ├── MapDisplayView.kt │ │ │ │ │ │ │ ├── MapErrorView.kt │ │ │ │ │ │ │ └── MapMasterView.kt │ │ │ │ │ │ ├── state │ │ │ │ │ │ │ └── MapStates.kt │ │ │ │ │ │ ├── view │ │ │ │ │ │ │ ├── MapFragment.kt │ │ │ │ │ │ │ └── MapTypeSelectionFragment.kt │ │ │ │ │ │ └── vm │ │ │ │ │ │ │ └── MapsVm.kt │ │ │ │ │ └── util │ │ │ │ │ │ ├── AnimateCamera.kt │ │ │ │ │ │ ├── FileOperations.kt │ │ │ │ │ │ └── MapUtil.kt │ │ │ │ ├── permission │ │ │ │ │ └── presentation │ │ │ │ │ │ ├── state │ │ │ │ │ │ └── PermissionStates.kt │ │ │ │ │ │ ├── view │ │ │ │ │ │ └── PermissionFragment.kt │ │ │ │ │ │ └── vm │ │ │ │ │ │ └── PermissionVm.kt │ │ │ │ └── result │ │ │ │ │ └── ResultFragment.kt │ │ │ │ ├── main │ │ │ │ ├── MainActivity.kt │ │ │ │ └── presentation │ │ │ │ │ ├── state │ │ │ │ │ └── MainEvent.kt │ │ │ │ │ └── vm │ │ │ │ │ └── MainVm.kt │ │ │ │ ├── model │ │ │ │ └── Result.kt │ │ │ │ └── service │ │ │ │ ├── InAppUpdate.kt │ │ │ │ └── TrackerService.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── custom_marker.png │ │ │ ├── ic_app_launcher.png │ │ │ ├── ic_app_launcher_round.png │ │ │ ├── ic_baseline_arrow_forward.xml │ │ │ ├── ic_close.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_reset.xml │ │ │ ├── ic_run.xml │ │ │ ├── ic_share.xml │ │ │ ├── ic_splash.xml │ │ │ └── ic_welcome_image.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── bottom_sheet_map_type.xml │ │ │ ├── fragment_distance_log.xml │ │ │ ├── fragment_map.xml │ │ │ ├── fragment_map_type.xml │ │ │ ├── fragment_permission.xml │ │ │ ├── fragment_result.xml │ │ │ ├── include_cust_error_view.xml │ │ │ ├── include_cust_map_view.xml │ │ │ └── include_cust_master_view.xml │ │ │ ├── navigation │ │ │ └── nav_graph.xml │ │ │ ├── raw │ │ │ ├── map_dark_mode.json │ │ │ └── map_light_mode.json │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── istudio │ │ └── distancetracker │ │ └── ExampleUnitNetworkUtils.kt ├── base-module.gradle ├── build.gradle.kts ├── buildSrc │ ├── .gitignore │ ├── build.gradle.kts │ ├── scripts │ │ └── spotless.gradle │ └── src │ │ └── main │ │ └── java │ │ ├── Accompanist.kt │ │ ├── AndroidX.kt │ │ ├── Build.kt │ │ ├── Coil.kt │ │ ├── Compose.kt │ │ ├── Coroutines.kt │ │ ├── CustomLogging.kt │ │ ├── DaggerHilt.kt │ │ ├── DataStorePreferences.kt │ │ ├── Firebase.kt │ │ ├── FlavourUtils.kt │ │ ├── Glide.kt │ │ ├── Google.kt │ │ ├── Gson.kt │ │ ├── Kotlin.kt │ │ ├── KotlinSerialization.kt │ │ ├── LifeCycle.kt │ │ ├── Lotte.kt │ │ ├── Maps.kt │ │ ├── Modules.kt │ │ ├── Moshi.kt │ │ ├── Navigation.kt │ │ ├── Permission.kt │ │ ├── ProjectConfig.kt │ │ ├── Retrofit.kt │ │ ├── Room.kt │ │ ├── ScriptPlugins.kt │ │ ├── SplashScreen.kt │ │ ├── SqlDelight.kt │ │ └── Testing.kt ├── core │ ├── core-common │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_common │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── istudio │ │ │ │ │ └── core_common │ │ │ │ │ ├── base │ │ │ │ │ └── BaseViewModel.kt │ │ │ │ │ ├── constants │ │ │ │ │ └── DbConstants.kt │ │ │ │ │ ├── di │ │ │ │ │ ├── modules │ │ │ │ │ │ └── CoroutineModule.kt │ │ │ │ │ └── qualifiers │ │ │ │ │ │ └── Dispatchers.kt │ │ │ │ │ ├── extensions │ │ │ │ │ ├── Activity.kt │ │ │ │ │ ├── Channels.kt │ │ │ │ │ ├── Context.kt │ │ │ │ │ ├── SnackBarDisplay.kt │ │ │ │ │ ├── Snackbar.kt │ │ │ │ │ ├── Tag.kt │ │ │ │ │ └── ViewVisibilityExtensions.kt │ │ │ │ │ ├── functional │ │ │ │ │ ├── NetworkBoundResource.kt │ │ │ │ │ ├── PublisherEventBus.kt │ │ │ │ │ ├── Resource.kt │ │ │ │ │ ├── State.kt │ │ │ │ │ ├── SuspendUseCase.kt │ │ │ │ │ └── UseCaseResult.kt │ │ │ │ │ ├── navigation │ │ │ │ │ └── NavigationUtils.kt │ │ │ │ │ ├── network │ │ │ │ │ └── NetworkHandler.kt │ │ │ │ │ └── ui │ │ │ │ │ └── uiEvent │ │ │ │ │ ├── UiEvent.kt │ │ │ │ │ └── UiText.kt │ │ │ └── res │ │ │ │ ├── layout │ │ │ │ └── layout.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ └── strings.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_common │ │ │ └── ExampleUnitTest.kt │ ├── core-connectivity │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_connectivity │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_connectivity │ │ │ │ ├── data │ │ │ │ └── implementation │ │ │ │ │ └── ConnectivityFeatureImpl.kt │ │ │ │ ├── di │ │ │ │ └── ConnectivityModule.kt │ │ │ │ ├── domain │ │ │ │ └── ConnectivityFeature.kt │ │ │ │ └── service │ │ │ │ └── NetworkObserver.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_connectivity │ │ │ └── ExampleUnitTest.kt │ ├── core-database │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_database │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_database │ │ │ │ ├── Constants.kt │ │ │ │ ├── data │ │ │ │ └── implementation │ │ │ │ │ └── DistanceTrackerConstantsDaoImpl.kt │ │ │ │ ├── database │ │ │ │ └── DistanceTrackerDatabase.kt │ │ │ │ ├── di │ │ │ │ └── DatabaseModule.kt │ │ │ │ └── domain │ │ │ │ └── dao │ │ │ │ └── DistanceTrackerConstantsDao.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_database │ │ │ └── ExampleUnitTest.kt │ ├── core-location │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_location │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_location │ │ │ │ ├── data │ │ │ │ ├── LastLocationFeatureImpl.kt │ │ │ │ └── LocationFeatureImpl.kt │ │ │ │ ├── di │ │ │ │ └── LocationModule.kt │ │ │ │ └── domain │ │ │ │ ├── LastLocationFeature.kt │ │ │ │ └── LocationFeature.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_location │ │ │ └── ExampleUnitTest.kt │ ├── core-logger │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_logger │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_logger │ │ │ │ ├── ApplicationLoggerConfig.kt │ │ │ │ ├── data │ │ │ │ ├── implementaion │ │ │ │ │ └── LoggerFeatureImpl.kt │ │ │ │ └── repository │ │ │ │ │ └── LoggerRepository.kt │ │ │ │ ├── di │ │ │ │ └── LoggerModule.kt │ │ │ │ └── domain │ │ │ │ └── LoggerFeature.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_logger │ │ │ └── ExampleUnitTest.kt │ ├── core-models │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_models │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_models │ │ │ │ └── DistanceTrackerConstants.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── demo │ │ │ └── core_models │ │ │ └── ExampleUnitTest.kt │ ├── core-network │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_network │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_network │ │ │ │ ├── api │ │ │ │ └── DistanceTrackerApi.kt │ │ │ │ ├── di │ │ │ │ └── AppModule.kt │ │ │ │ ├── interceptors │ │ │ │ ├── AnalyticsInterceptor.kt │ │ │ │ └── ApiKeyInterceptor.kt │ │ │ │ └── utils │ │ │ │ └── NetworkUtils.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── demo │ │ │ └── core_network │ │ │ └── ExampleUnitNetworkUtils.kt │ ├── core-permission │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_permission │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── demo │ │ │ │ └── core_permission │ │ │ │ ├── Permissions.kt │ │ │ │ ├── data │ │ │ │ └── implementation │ │ │ │ │ └── PermissionFeatureImpl.kt │ │ │ │ ├── di │ │ │ │ └── PermissionModule.kt │ │ │ │ └── domain │ │ │ │ └── PermissionFeature.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── demo │ │ │ └── core_permission │ │ │ └── ExampleUnitTest.kt │ ├── core-preferences │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_preferences │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_preferences │ │ │ │ ├── data │ │ │ │ ├── implementation │ │ │ │ │ ├── PreferenceDatastoreImpl.kt │ │ │ │ │ └── utilities │ │ │ │ │ │ └── KeysPreferences.kt │ │ │ │ └── repository │ │ │ │ │ └── PreferenceRepository.kt │ │ │ │ ├── di │ │ │ │ └── PreferenceModule.kt │ │ │ │ └── domain │ │ │ │ └── InAppReviewPreferences.kt │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_preferences │ │ │ └── ExampleUnitTest.kt │ └── core-ui │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── core_ui │ │ │ └── ExampleInstrumentedTest.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── core_ui │ │ │ │ ├── composeUi │ │ │ │ └── theme │ │ │ │ │ ├── Color.kt │ │ │ │ │ ├── Shape.kt │ │ │ │ │ ├── Theme.kt │ │ │ │ │ └── Type.kt │ │ │ │ ├── customviews │ │ │ │ ├── button │ │ │ │ │ ├── ButtonViewBold.kt │ │ │ │ │ ├── ButtonViewMedium.kt │ │ │ │ │ └── ButtonViewRegular.kt │ │ │ │ └── text │ │ │ │ │ ├── TextViewBold.kt │ │ │ │ │ ├── TextViewMedium.kt │ │ │ │ │ └── TextViewRegular.kt │ │ │ │ ├── data │ │ │ │ ├── implementation │ │ │ │ │ └── SwitchUiModeFeatureImpl.kt │ │ │ │ └── models │ │ │ │ │ └── Mode.kt │ │ │ │ ├── di │ │ │ │ └── SwitchUiModule.kt │ │ │ │ └── domain │ │ │ │ └── SwitchUiModeFeature.kt │ │ └── res │ │ │ ├── anim │ │ │ ├── fade_in.xml │ │ │ └── fade_out.xml │ │ │ ├── drawable-hdpi │ │ │ ├── ic_current_location.png │ │ │ ├── ic_current_location_dark_mode.png │ │ │ └── ic_list.png │ │ │ ├── drawable-mdpi │ │ │ ├── ic_current_location.png │ │ │ ├── ic_current_location_dark_mode.png │ │ │ └── ic_list.png │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable-xhdpi │ │ │ ├── ic_current_location.png │ │ │ ├── ic_current_location_dark_mode.png │ │ │ └── ic_list.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── ic_current_location.png │ │ │ ├── ic_current_location_dark_mode.png │ │ │ └── ic_list.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_current_location.png │ │ │ ├── ic_current_location_dark_mode.png │ │ │ └── ic_list.png │ │ │ ├── drawable │ │ │ ├── ic_add_action.xml │ │ │ ├── ic_dark_mode.xml │ │ │ ├── ic_dialog_bg.xml │ │ │ ├── ic_light_mode.xml │ │ │ ├── ic_lock_black_24dp.xml │ │ │ ├── ic_map_journey.xml │ │ │ ├── ic_map_styles.xml │ │ │ ├── ic_photo_album_black_24dp.xml │ │ │ ├── ic_splash.xml │ │ │ └── ic_splash_dark_mode.xml │ │ │ ├── font │ │ │ ├── roboto.xml │ │ │ ├── roboto_bold.xml │ │ │ ├── roboto_bold_italic.xml │ │ │ ├── roboto_italic.xml │ │ │ ├── roboto_light_italic.xml │ │ │ └── roboto_medium.xml │ │ │ ├── layout │ │ │ └── test_layout.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── raw │ │ │ ├── gps_lotte.json │ │ │ ├── map.geojson │ │ │ ├── map_navigation_lotte.json │ │ │ ├── permission_lotte.json │ │ │ ├── rate_app_lotte.json │ │ │ ├── result_lotte.json │ │ │ ├── style.json │ │ │ └── wifi_lotte.json │ │ │ ├── values-night │ │ │ ├── colors.xml │ │ │ └── themes.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── common_styles.xml │ │ │ ├── dimens.xml │ │ │ ├── font_certs.xml │ │ │ ├── preloaded_fonts.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ ├── backup_rules.xml │ │ │ └── data_extraction_rules.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── istudio │ │ └── core_ui │ │ └── ExampleUnitTest.kt ├── data.json ├── features │ ├── feat-gallery │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── feat_gallery │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── feat_gallery │ │ │ │ │ ├── presentation │ │ │ │ │ ├── adapter │ │ │ │ │ │ └── GalleryAdapter.kt │ │ │ │ │ ├── models │ │ │ │ │ │ └── InternalStoragePhoto.kt │ │ │ │ │ ├── vh │ │ │ │ │ │ └── ImageViewHolder.kt │ │ │ │ │ ├── view │ │ │ │ │ │ └── GalleryActivity.kt │ │ │ │ │ └── vm │ │ │ │ │ │ └── GalleryVm.kt │ │ │ │ │ └── utils │ │ │ │ │ └── PermissionUtils.kt │ │ │ └── res │ │ │ │ └── layout │ │ │ │ ├── activity_demo_one.xml │ │ │ │ └── image_layout.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── feat_gallery │ │ │ └── ExampleUnitTest.kt │ ├── feat-inappreview │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── istudio │ │ │ │ └── feat_inappreview │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── istudio │ │ │ │ │ └── feat_inappreview │ │ │ │ │ ├── InAppReviewView.kt │ │ │ │ │ ├── ReviewFeatureConstants.kt │ │ │ │ │ ├── di │ │ │ │ │ ├── InAppReviewBinds.kt │ │ │ │ │ └── ReviewManagerModule.kt │ │ │ │ │ ├── dialog │ │ │ │ │ ├── ReviewDialog.kt │ │ │ │ │ ├── ReviewDialogVm.kt │ │ │ │ │ └── ReviewStates.kt │ │ │ │ │ └── manager │ │ │ │ │ ├── InAppReviewManager.kt │ │ │ │ │ └── InAppReviewManagerImpl.kt │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ ├── happy_face.png │ │ │ │ ├── ic_rate_review.xml │ │ │ │ ├── not_now_action_border.xml │ │ │ │ ├── progress_black.png │ │ │ │ ├── progress_white.png │ │ │ │ ├── review_action_border.xml │ │ │ │ └── sad_face.png │ │ │ │ └── layout │ │ │ │ └── fragment_in_app_review_prompt.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── istudio │ │ │ └── feat_inappreview │ │ │ └── ExampleUnitTest.kt │ └── feat-repository │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── demo │ │ │ └── feat_repository │ │ │ └── ExampleInstrumentedTest.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── demo │ │ │ └── feat_repository │ │ │ └── DistanceTrackerRepository.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── demo │ │ └── feat_repository │ │ └── ExampleUnitNetworkUtils.kt ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── Assets ├── Architecture │ ├── MVVM.png │ └── projectstructure.drawio.png ├── Banner │ └── banner.jpeg ├── Images │ ├── google-play-store.png │ ├── google-play.png │ └── playstore.png └── ScreenGif │ ├── BackgroundPermission.gif │ ├── Demo.gif │ ├── RuntimePermission.gif │ ├── dark_light_mode.gif │ ├── locating_user.gif │ ├── network_observer.gif │ ├── splash.gif │ ├── switch_map_types.gif │ └── updates.gif ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.aar 4 | *.ap_ 5 | *.aab 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | # Uncomment the following line in case you need and you don't have the release build type files in your app 18 | # release/ 19 | 20 | # Gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Log Files 31 | *.log 32 | 33 | # Android Studio Navigation editor temp files 34 | .navigation/ 35 | 36 | # Android Studio captures folder 37 | captures/ 38 | 39 | # IntelliJ 40 | *.iml 41 | .idea/workspace.xml 42 | .idea/tasks.xml 43 | .idea/gradle.xml 44 | .idea/assetWizardSettings.xml 45 | .idea/dictionaries 46 | .idea/libraries 47 | # Android Studio 3 in .gitignore file. 48 | .idea/caches 49 | .idea/modules.xml 50 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 51 | .idea/navEditor.xml 52 | 53 | # Keystore files 54 | # Uncomment the following lines if you do not want to check your keystore files in. 55 | #*.jks 56 | #*.keystore 57 | 58 | # External native build folder generated in Android Studio 2.2 and later 59 | .externalNativeBuild 60 | .cxx/ 61 | 62 | # Google Services (e.g. APIs or Firebase) 63 | # google-services.json 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | -------------------------------------------------------------------------------- /Application/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | 17 | **/*/res/values/secrets.xml 18 | google-services.json 19 | -------------------------------------------------------------------------------- /Application/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /Application/.idea/.name: -------------------------------------------------------------------------------- 1 | Distance Tracker -------------------------------------------------------------------------------- /Application/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Application/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 36 | 37 | -------------------------------------------------------------------------------- /Application/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /Application/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /Application/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /Application/app/dev/debug/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.istudio.distancetracker", 8 | "variantName": "devDebug", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 8, 15 | "versionName": "1.1", 16 | "outputFile": "app-dev-debug.apk" 17 | } 18 | ], 19 | "elementType": "File" 20 | } -------------------------------------------------------------------------------- /Application/app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.istudio.distancetracker", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 1, 15 | "versionName": "1.0", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File" 20 | } -------------------------------------------------------------------------------- /Application/app/src/debug/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devrath/Distance-Tracker/17d03b535e2ced992b97cc1e3a6d40c5393afded/Application/app/src/debug/ic_launcher-playstore.png -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/compose/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.compose.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Purple200 = Color(0xFFBB86FC) 6 | val Purple500 = Color(0xFF6200EE) 7 | val Purple700 = Color(0xFF3700B3) 8 | val Teal200 = Color(0xFF03DAC5) 9 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/compose/theme/Shape.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.compose.theme 2 | 3 | import androidx.compose.foundation.shape.RoundedCornerShape 4 | import androidx.compose.material.Shapes 5 | import androidx.compose.ui.unit.dp 6 | 7 | val Shapes = Shapes( 8 | small = RoundedCornerShape(4.dp), 9 | medium = RoundedCornerShape(4.dp), 10 | large = RoundedCornerShape(0.dp) 11 | ) -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/compose/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.compose.theme 2 | 3 | import androidx.compose.foundation.isSystemInDarkTheme 4 | import androidx.compose.material.MaterialTheme 5 | import androidx.compose.material.darkColors 6 | import androidx.compose.material.lightColors 7 | import androidx.compose.runtime.Composable 8 | 9 | private val DarkColorPalette = darkColors( 10 | primary = Purple200, 11 | primaryVariant = Purple700, 12 | secondary = Teal200 13 | ) 14 | 15 | private val LightColorPalette = lightColors( 16 | primary = Purple500, 17 | primaryVariant = Purple700, 18 | secondary = Teal200 19 | 20 | /* Other default colors to override 21 | background = Color.White, 22 | surface = Color.White, 23 | onPrimary = Color.White, 24 | onSecondary = Color.Black, 25 | onBackground = Color.Black, 26 | onSurface = Color.Black, 27 | */ 28 | ) 29 | 30 | @Composable 31 | fun MyApplicationTheme( 32 | darkTheme: Boolean = isSystemInDarkTheme(), 33 | content: @Composable () -> Unit 34 | ) { 35 | val colors = if (darkTheme) { 36 | DarkColorPalette 37 | } else { 38 | LightColorPalette 39 | } 40 | 41 | MaterialTheme( 42 | colors = colors, 43 | typography = Typography, 44 | shapes = Shapes, 45 | content = content 46 | ) 47 | } -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/compose/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.compose.theme 2 | 3 | import androidx.compose.material.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | body1 = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp 15 | ) 16 | /* Other default text styles to override 17 | button = TextStyle( 18 | fontFamily = FontFamily.Default, 19 | fontWeight = FontWeight.W500, 20 | fontSize = 14.sp 21 | ), 22 | caption = TextStyle( 23 | fontFamily = FontFamily.Default, 24 | fontWeight = FontWeight.Normal, 25 | fontSize = 12.sp 26 | ) 27 | */ 28 | ) -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/KeysFeatureNames.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features 2 | 3 | object KeysFeatureNames { 4 | const val FEATURE_MAP = "Screen-Map" 5 | const val FEATURE_RESULT = "Screen-Result" 6 | const val FEATURE_PERMISSION = "Screen-Permission" 7 | } 8 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/domain/MapFragmentUseCases.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.domain 2 | 3 | import com.istudio.distancetracker.features.map.domain.usecases.CalculateResultUseCase 4 | 5 | data class MapFragmentUseCases ( 6 | val calculateResult : CalculateResultUseCase 7 | ) 8 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/domain/di/MapDomainModule.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.domain.di 2 | 3 | import com.istudio.core_logger.domain.LoggerFeature 4 | import com.istudio.distancetracker.features.map.domain.MapFragmentUseCases 5 | import com.istudio.distancetracker.features.map.domain.usecases.CalculateResultUseCase 6 | import dagger.Module 7 | import dagger.Provides 8 | import dagger.hilt.InstallIn 9 | import dagger.hilt.android.components.ViewModelComponent 10 | import dagger.hilt.android.scopes.ViewModelScoped 11 | 12 | @Module 13 | @InstallIn(ViewModelComponent::class) 14 | object MapDomainModule { 15 | 16 | @ViewModelScoped 17 | @Provides 18 | fun provideTrackerUseCases(logger: LoggerFeature ): MapFragmentUseCases { 19 | return MapFragmentUseCases(calculateResult = CalculateResultUseCase(log = logger)) 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/domain/entities/inputs/CalculateResultInput.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.domain.entities.inputs 2 | 3 | import com.google.android.gms.maps.model.LatLng 4 | 5 | data class CalculateResultInput( 6 | val locationData: MutableList, 7 | val startTime: Long, 8 | val stopTime: Long 9 | ) 10 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/domain/entities/outputs/CalculateResultOutput.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.domain.entities.outputs 2 | 3 | data class CalculateResultOutput( val distanceTravelled: String, val elapsedTime: String, ) 4 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/events/EventMapStyleSelected.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.events 2 | 3 | data class EventMapStyleSelected(val selection : Int) -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/presentation/state/MapStates.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.presentation.state 2 | 3 | import com.google.android.gms.maps.model.LatLng 4 | import com.google.android.gms.maps.model.LatLngBounds 5 | import com.google.android.gms.maps.model.PolylineOptions 6 | import com.istudio.core_common.ui.uiEvent.UiText 7 | import com.istudio.distancetracker.features.map.domain.entities.outputs.CalculateResultOutput 8 | 9 | sealed class MapStates { 10 | //object OnSubmitClick : MapStates() 11 | data class ShowErrorMessage(val message: UiText) : MapStates() 12 | data class JourneyResult(val result: CalculateResultOutput) : MapStates() 13 | data class AnimateCamera(val location: LatLng) : MapStates() 14 | data class AnimateCameraForBiggerPitchure(val bounds: LatLngBounds, val padding:Int, val duration:Int) : MapStates() 15 | 16 | data class AddPolyline(val polyLine: PolylineOptions) : MapStates() 17 | data class FollowCurrentLocation(val location: LatLng, val duration:Int) : MapStates() 18 | data class AddMarker(val location: LatLng) : MapStates() 19 | 20 | object DisplayStartButton : MapStates() 21 | object DisableStopButton : MapStates() 22 | 23 | object LaunchInAppReview : MapStates() 24 | object CounterGoState : MapStates() 25 | object CounterFinishedState : MapStates() 26 | data class CounterCountDownState(val currentSecond: String) : MapStates() 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/util/AnimateCamera.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.util 2 | 3 | object AnimateCamera { 4 | 5 | 6 | 7 | 8 | } -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/util/FileOperations.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.util 2 | 3 | import android.app.RecoverableSecurityException 4 | import android.content.* 5 | import android.content.Context.MODE_PRIVATE 6 | import android.graphics.Bitmap 7 | import android.graphics.Bitmap.CompressFormat 8 | import android.graphics.BitmapFactory 9 | import android.net.Uri 10 | import android.os.Build 11 | import android.os.Environment 12 | import android.provider.MediaStore 13 | import android.util.Log 14 | import androidx.annotation.RequiresApi 15 | import com.example.feat_gallery.presentation.models.InternalStoragePhoto 16 | import com.istudio.distancetracker.R 17 | import kotlinx.coroutines.Dispatchers 18 | import kotlinx.coroutines.withContext 19 | import java.io.File 20 | import java.io.FileOutputStream 21 | import java.io.IOException 22 | import java.util.UUID 23 | 24 | 25 | private const val TAG = "FileOperations" 26 | private const val QUALITY = 100 27 | 28 | object FileOperations { 29 | 30 | fun savePhotoToInternalStorage(context: Context,bitmap:Bitmap) : Boolean{ 31 | return try { 32 | val fileName =UUID.randomUUID().toString() 33 | context.openFileOutput("$fileName.jpg", MODE_PRIVATE).use { stream -> 34 | if(!bitmap.compress(Bitmap.CompressFormat.JPEG, 95, stream)) { 35 | throw IOException("Couldn't save bitmap.") 36 | } 37 | } 38 | true 39 | }catch (ex:Exception){ 40 | ex.printStackTrace() 41 | false 42 | } 43 | } 44 | 45 | } -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/map/util/MapUtil.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.map.util 2 | 3 | import com.google.android.gms.maps.model.CameraPosition 4 | import com.google.android.gms.maps.model.LatLng 5 | import com.google.maps.android.SphericalUtil 6 | import java.text.DecimalFormat 7 | 8 | object MapUtil { 9 | 10 | fun setCameraPosition(location: LatLng): CameraPosition { 11 | return CameraPosition.Builder() 12 | .target(location) 13 | .zoom(18f) 14 | .build() 15 | } 16 | 17 | fun calculateTheDistance(locationList: MutableList): String { 18 | val firstPoint = locationList.first() 19 | val lastPoint = locationList.last() 20 | 21 | if(locationList.size > 1){ 22 | // Meters 23 | val meters = SphericalUtil.computeDistanceBetween(firstPoint,lastPoint) 24 | // Kilometers 25 | val kilometers = meters / 1000 26 | return DecimalFormat("#.##").format(kilometers) 27 | } 28 | return "0.00" 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/permission/presentation/state/PermissionStates.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.permission.presentation.state 2 | 3 | sealed class PermissionStates { 4 | //object OnSubmitClick : MapStates() 5 | //data class ShowErrorMessage(val message: UiText) : PermissionStates() 6 | object NavigateToMapsScreen : PermissionStates() 7 | object RuntimeLocationPermission : PermissionStates() 8 | } 9 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/features/permission/presentation/vm/PermissionVm.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.features.permission.presentation.vm 2 | 3 | import androidx.lifecycle.viewModelScope 4 | import com.demo.core_permission.domain.PermissionFeature 5 | import com.istudio.core_common.base.BaseViewModel 6 | import com.istudio.core_logger.domain.LoggerFeature 7 | import com.istudio.distancetracker.features.permission.presentation.state.PermissionStates 8 | import dagger.hilt.android.lifecycle.HiltViewModel 9 | import kotlinx.coroutines.channels.Channel 10 | import kotlinx.coroutines.flow.receiveAsFlow 11 | import kotlinx.coroutines.launch 12 | import javax.inject.Inject 13 | 14 | @HiltViewModel 15 | class PermissionVm @Inject constructor( 16 | private var log: LoggerFeature, 17 | var permissionRepository: PermissionFeature 18 | ) : BaseViewModel() { 19 | 20 | /** 21 | * Using channel: We can notify the fragment to make fragment do something 22 | * Fragment should not be able to add values into the channel instead it should only be able to take value from the channel 23 | * Turning into the flow, the fragment can't put anything into it 24 | */ 25 | private val _eventChannel = Channel() 26 | val events = _eventChannel.receiveAsFlow() 27 | 28 | 29 | fun initiateLocationFlow() { 30 | if (permissionRepository.hasLocationPermission()) { 31 | viewModelScope.launch { 32 | _eventChannel.send(PermissionStates.NavigateToMapsScreen) 33 | } 34 | } else { 35 | viewModelScope.launch { 36 | _eventChannel.send(PermissionStates.RuntimeLocationPermission) 37 | } 38 | } 39 | } 40 | 41 | 42 | override fun onCleared() { 43 | super.onCleared() 44 | _eventChannel.cancel() 45 | } 46 | 47 | 48 | } 49 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/main/presentation/state/MainEvent.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.main.presentation.state 2 | 3 | 4 | sealed class MainEvent { 5 | data class ShowErrorMessage(val error: Throwable) : MainEvent() 6 | data class GetTrackerConstantsApiCall(val isSuccess: Boolean) : MainEvent() 7 | object SplashSuccessful : MainEvent() 8 | } 9 | -------------------------------------------------------------------------------- /Application/app/src/main/java/com/istudio/distancetracker/model/Result.kt: -------------------------------------------------------------------------------- 1 | package com.istudio.distancetracker.model 2 | 3 | import android.os.Parcelable 4 | import androidx.annotation.Keep 5 | import kotlinx.parcelize.Parcelize 6 | 7 | @Parcelize 8 | @Keep 9 | data class Result( 10 | var distance: String, 11 | var time: String 12 | ): Parcelable -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/custom_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devrath/Distance-Tracker/17d03b535e2ced992b97cc1e3a6d40c5393afded/Application/app/src/main/res/drawable/custom_marker.png -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_app_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devrath/Distance-Tracker/17d03b535e2ced992b97cc1e3a6d40c5393afded/Application/app/src/main/res/drawable/ic_app_launcher.png -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_app_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devrath/Distance-Tracker/17d03b535e2ced992b97cc1e3a6d40c5393afded/Application/app/src/main/res/drawable/ic_app_launcher_round.png -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_baseline_arrow_forward.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_reset.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_run.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /Application/app/src/main/res/drawable/ic_splash.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Application/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 22 | -------------------------------------------------------------------------------- /Application/app/src/main/res/layout/fragment_distance_log.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /Application/app/src/main/res/layout/fragment_map.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Application/app/src/main/res/layout/include_cust_error_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 18 | 19 | 26 | 27 | 35 | 36 |