Explorar o código

Add map location

Carles Sentis hai 11 meses
pai
achega
ec2fad9bf7
Modificáronse 100 ficheiros con 651 adicións e 316 borrados
  1. 4 0
      .idea/gradle.xml
  2. 2 1
      app/build.gradle.kts
  3. 1 1
      app/src/androidTest/java/com/codeskraps/weather/ExampleInstrumentedTest.kt
  4. 2 4
      app/src/main/AndroidManifest.xml
  5. 1 1
      app/src/main/java/com/codeskraps/weather/WeatherApp.kt
  6. 108 0
      app/src/main/java/com/codeskraps/weather/ui/MainActivity.kt
  7. 1 1
      app/src/main/java/com/codeskraps/weather/ui/theme/Color.kt
  8. 38 0
      app/src/main/java/com/codeskraps/weather/ui/theme/ScreenTransitions.kt
  9. 1 1
      app/src/main/java/com/codeskraps/weather/ui/theme/Shape.kt
  10. 1 1
      app/src/main/java/com/codeskraps/weather/ui/theme/Theme.kt
  11. 1 1
      app/src/main/java/com/codeskraps/weather/ui/theme/Type.kt
  12. 0 124
      app/src/main/java/com/example/weather/app/ui/MainActivity.kt
  13. 1 1
      app/src/test/java/com/codeskraps/weather/ExampleUnitTest.kt
  14. 6 0
      build.gradle.kts
  15. BIN=BIN
      buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin
  16. BIN=BIN
      buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin
  17. BIN=BIN
      buildSrc/build/libs/buildSrc.jar
  18. 1 0
      core/local/.gitignore
  19. 57 0
      core/local/build.gradle.kts
  20. 0 0
      core/local/consumer-rules.pro
  21. 21 0
      core/local/proguard-rules.pro
  22. 24 0
      core/local/src/androidTest/java/com/codeskraps/core/local/ExampleInstrumentedTest.kt
  23. 4 0
      core/local/src/main/AndroidManifest.xml
  24. 1 1
      core/local/src/main/java/com/codeskraps/core/local/data/db/GeoLocationEntity.kt
  25. 2 2
      core/local/src/main/java/com/codeskraps/core/local/data/db/GeocodingDB.kt
  26. 1 2
      core/local/src/main/java/com/codeskraps/core/local/data/db/GeocodingDao.kt
  27. 5 4
      core/local/src/main/java/com/codeskraps/core/local/data/mappers/GeocodingMapper.kt
  28. 8 9
      core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalGeocodingRepositoryImpl.kt
  29. 3 3
      core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalResourceRepositoryImpl.kt
  30. 26 0
      core/local/src/main/java/com/codeskraps/core/local/di/LocalModule.kt
  31. 6 6
      core/local/src/main/java/com/codeskraps/core/local/di/LocalRepositoryModule.kt
  32. 1 1
      core/local/src/main/java/com/codeskraps/core/local/domain/model/GeoLocation.kt
  33. 3 3
      core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalGeocodingRepository.kt
  34. 1 1
      core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalResourceRepository.kt
  35. 1 1
      core/local/src/test/java/com/codeskraps/core/local/ExampleUnitTest.kt
  36. 1 0
      core/location/.gitignore
  37. 54 0
      core/location/build.gradle.kts
  38. 0 0
      core/location/consumer-rules.pro
  39. 21 0
      core/location/proguard-rules.pro
  40. 24 0
      core/location/src/androidTest/java/com/codeskraps/location/ExampleInstrumentedTest.kt
  41. 6 0
      core/location/src/main/AndroidManifest.xml
  42. 5 5
      core/location/src/main/java/com/codeskraps/location/data/DefaultLocationTracker.kt
  43. 29 0
      core/location/src/main/java/com/codeskraps/location/di/CoreLocationModule.kt
  44. 1 1
      core/location/src/main/java/com/codeskraps/location/domain/LocationTracker.kt
  45. 1 1
      core/location/src/test/java/com/codeskraps/location/ExampleUnitTest.kt
  46. 1 6
      feature/common/build.gradle.kts
  47. 1 1
      feature/common/src/androidTest/java/com/codeskraps/feature/common/ExampleInstrumentedTest.kt
  48. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/components/ObserveAsEvent.kt
  49. 30 0
      feature/common/src/main/java/com/codeskraps/feature/common/di/FeatureModule.kt
  50. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/DispatcherProvider.kt
  51. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/StandardDispatcherProvider.kt
  52. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/TestDispatcherProvider.kt
  53. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/domain/model/LatLong.kt
  54. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/mvi/StateReducerFlow.kt
  55. 2 1
      feature/common/src/main/java/com/codeskraps/feature/common/navigation/Screen.kt
  56. 2 2
      feature/common/src/main/java/com/codeskraps/feature/common/util/MonthString.kt
  57. 1 1
      feature/common/src/main/java/com/codeskraps/feature/common/util/Resouce.kt
  58. 2 2
      feature/common/src/main/java/com/codeskraps/feature/common/util/WeekString.kt
  59. 0 45
      feature/common/src/main/java/com/trifork/feature/common/di/FeatureModule.kt
  60. 5 0
      feature/common/src/main/res/drawable/ic_location.xml
  61. 5 0
      feature/common/src/main/res/drawable/ic_map.xml
  62. 2 0
      feature/common/src/main/res/values-ar-rEG/strings.xml
  63. 2 0
      feature/common/src/main/res/values-ar/strings.xml
  64. 3 0
      feature/common/src/main/res/values-bho/strings.xml
  65. 3 0
      feature/common/src/main/res/values-bn/strings.xml
  66. 2 0
      feature/common/src/main/res/values-ca/strings.xml
  67. 2 0
      feature/common/src/main/res/values-cs/strings.xml
  68. 3 0
      feature/common/src/main/res/values-de/strings.xml
  69. 3 0
      feature/common/src/main/res/values-el/strings.xml
  70. 3 0
      feature/common/src/main/res/values-es/strings.xml
  71. 3 0
      feature/common/src/main/res/values-eu/strings.xml
  72. 3 0
      feature/common/src/main/res/values-fa-rIR/strings.xml
  73. 3 0
      feature/common/src/main/res/values-fi/strings.xml
  74. 3 0
      feature/common/src/main/res/values-fr/strings.xml
  75. 3 0
      feature/common/src/main/res/values-gu/strings.xml
  76. 3 0
      feature/common/src/main/res/values-ha/strings.xml
  77. 3 0
      feature/common/src/main/res/values-hi/strings.xml
  78. 3 0
      feature/common/src/main/res/values-is/strings.xml
  79. 3 0
      feature/common/src/main/res/values-it/strings.xml
  80. 3 0
      feature/common/src/main/res/values-ja/strings.xml
  81. 3 0
      feature/common/src/main/res/values-jv/strings.xml
  82. 3 0
      feature/common/src/main/res/values-ko/strings.xml
  83. 3 0
      feature/common/src/main/res/values-mr/strings.xml
  84. 3 0
      feature/common/src/main/res/values-nl/strings.xml
  85. 3 0
      feature/common/src/main/res/values-no/strings.xml
  86. 0 75
      feature/common/src/main/res/values-pa-rPK/strings.xml
  87. 3 0
      feature/common/src/main/res/values-pl/strings.xml
  88. 3 0
      feature/common/src/main/res/values-pt/strings.xml
  89. 3 0
      feature/common/src/main/res/values-ro/strings.xml
  90. 3 0
      feature/common/src/main/res/values-ru/strings.xml
  91. 3 0
      feature/common/src/main/res/values-ta/strings.xml
  92. 3 0
      feature/common/src/main/res/values-te/strings.xml
  93. 3 0
      feature/common/src/main/res/values-th/strings.xml
  94. 3 0
      feature/common/src/main/res/values-tl/strings.xml
  95. 3 0
      feature/common/src/main/res/values-ur/strings.xml
  96. 3 0
      feature/common/src/main/res/values-vi/strings.xml
  97. 3 0
      feature/common/src/main/res/values-zh/strings.xml
  98. 2 0
      feature/common/src/main/res/values/strings.xml
  99. 17 0
      feature/common/src/test/java/com/codeskraps/feature/common/ExampleUnitTest.kt
  100. 2 1
      feature/geocoding/build.gradle.kts

+ 4 - 0
.idea/gradle.xml

@@ -22,9 +22,13 @@
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/app" />
             <option value="$PROJECT_DIR$/buildSrc" />
+            <option value="$PROJECT_DIR$/core" />
+            <option value="$PROJECT_DIR$/core/local" />
+            <option value="$PROJECT_DIR$/core/location" />
             <option value="$PROJECT_DIR$/feature" />
             <option value="$PROJECT_DIR$/feature/common" />
             <option value="$PROJECT_DIR$/feature/geocoding" />
+            <option value="$PROJECT_DIR$/feature/maps" />
             <option value="$PROJECT_DIR$/feature/weather" />
           </set>
         </option>

+ 2 - 1
app/build.gradle.kts

@@ -7,7 +7,7 @@ plugins {
 }
 
 android {
-    namespace = "com.example.weather"
+    namespace = "com.codeskraps.weather"
     compileSdk = ConfigData.compileSdk
 
     defaultConfig {
@@ -59,6 +59,7 @@ dependencies {
     implementation(project(mapOf("path" to ":feature:common")))
     implementation(project(mapOf("path" to ":feature:geocoding")))
     implementation(project(mapOf("path" to ":feature:weather")))
+    implementation(project(mapOf("path" to ":feature:maps")))
 
     implementation(libs.androidx.core.ktx)
     implementation(libs.androidx.lifecycle.runtime.ktx)

+ 1 - 1
app/src/androidTest/java/com/example/weather/ExampleInstrumentedTest.kt → app/src/androidTest/java/com/codeskraps/weather/ExampleInstrumentedTest.kt

@@ -1,4 +1,4 @@
-package com.example.weather
+package com.codeskraps.weather
 
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.ext.junit.runners.AndroidJUnit4

+ 2 - 4
app/src/main/AndroidManifest.xml

@@ -3,11 +3,9 @@
     xmlns:tools="http://schemas.android.com/tools">
 
     <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
     <application
-        android:name=".app.WeatherApp"
+        android:name=".WeatherApp"
         android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
         android:fullBackupContent="@xml/backup_rules"
@@ -18,7 +16,7 @@
         android:theme="@style/Theme.Weather"
         tools:targetApi="31">
         <activity
-            android:name=".app.ui.MainActivity"
+            android:name=".ui.MainActivity"
             android:exported="true"
             android:theme="@style/Theme.Weather">
             <intent-filter>

+ 1 - 1
app/src/main/java/com/example/weather/app/WeatherApp.kt → app/src/main/java/com/codeskraps/weather/WeatherApp.kt

@@ -1,4 +1,4 @@
-package com.example.weather.app
+package com.codeskraps.weather
 
 import android.app.Application
 import dagger.hilt.android.HiltAndroidApp

+ 108 - 0
app/src/main/java/com/codeskraps/weather/ui/MainActivity.kt

@@ -0,0 +1,108 @@
+package com.codeskraps.weather.ui
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.animation.AnimatedContentTransitionScope
+import androidx.compose.animation.EnterTransition
+import androidx.compose.animation.core.tween
+import androidx.compose.runtime.getValue
+import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.navigation.NavBackStackEntry
+import androidx.navigation.NavType
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
+import androidx.navigation.navArgument
+import com.codeskraps.maps.presentation.MapViewModel
+import com.codeskraps.maps.presentation.components.MapScreen
+import com.codeskraps.weather.ui.theme.WeatherTheme
+import com.codeskraps.feature.common.navigation.Screen
+import com.codeskraps.feature.geocoding.presentation.GeocodingViewModel
+import com.codeskraps.feature.geocoding.presentation.components.GeocodingScreen
+import com.codeskraps.feature.weather.presentation.WeatherViewModel
+import com.codeskraps.feature.weather.presentation.components.WeatherScreen
+import com.codeskraps.weather.ui.theme.ScreenTransitions
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class MainActivity : ComponentActivity() {
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        setContent {
+            WeatherTheme {
+                val navController = rememberNavController()
+
+                NavHost(navController = navController, startDestination = Screen.Weather.route) {
+                    composable(
+                        route = Screen.Weather.route,
+                        arguments = listOf(
+                            navArgument("name") { type = NavType.StringType },
+                            navArgument("lat") { type = NavType.StringType },
+                            navArgument("long") { type = NavType.StringType }
+                        ),
+                        enterTransition = { ScreenTransitions.slideRightIntoContainer(this) },
+                        exitTransition = { ScreenTransitions.slideLeftOutOfContainer(this) },
+                        popEnterTransition = { ScreenTransitions.slideRightIntoContainer(this) },
+                        popExitTransition = { ScreenTransitions.slideLeftOutOfContainer(this) }
+                    ) {
+
+                        val viewModel = hiltViewModel<WeatherViewModel>()
+                        val state by viewModel.state.collectAsStateWithLifecycle()
+
+                        WeatherScreen(
+                            state = state,
+                            handleEvent = viewModel.state::handleEvent,
+                            action = viewModel.action
+                        ) { route ->
+                            navController.navigate(route)
+                        }
+                    }
+                    composable(
+                        route = Screen.Geocoding.route,
+                        enterTransition = { ScreenTransitions.slideLeftIntoContainer(this) },
+                        exitTransition = { ScreenTransitions.slideRightOutOfContainer(this) },
+                        popEnterTransition = { ScreenTransitions.slideLeftIntoContainer(this) },
+                        popExitTransition = { ScreenTransitions.slideRightOutOfContainer(this) }
+                    ) {
+                        val viewModel = hiltViewModel<GeocodingViewModel>()
+                        val state by viewModel.state.collectAsStateWithLifecycle()
+
+                        GeocodingScreen(
+                            state = state,
+                            handleEvent = viewModel.state::handleEvent,
+                            action = viewModel.action,
+                            navUp = { navController.navigateUp() }
+                        ) { route ->
+                            navController.navigate(route) {
+                                popUpTo(navController.graph.id) { inclusive = true }
+                            }
+                        }
+                    }
+                    composable(
+                        route = Screen.Map.route,
+                        enterTransition = { ScreenTransitions.slideRightIntoContainer(this) },
+                        exitTransition = { ScreenTransitions.slideRightOutOfContainer(this) },
+                        popEnterTransition = { ScreenTransitions.slideRightIntoContainer(this) },
+                        popExitTransition = { ScreenTransitions.slideRightOutOfContainer(this) }
+                    ) {
+                        val viewModel = hiltViewModel<MapViewModel>()
+                        val state by viewModel.state.collectAsStateWithLifecycle()
+
+                        MapScreen(
+                            state = state,
+                            handleEvent = viewModel.state::handleEvent
+                        ) { route ->
+                            navController.navigate(route) {
+                                popUpTo(navController.graph.id) { inclusive = true }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 1 - 1
app/src/main/java/com/example/weather/app/ui/theme/Color.kt → app/src/main/java/com/codeskraps/weather/ui/theme/Color.kt

@@ -1,4 +1,4 @@
-package com.example.weather.app.ui.theme
+package com.codeskraps.weather.ui.theme
 
 import androidx.compose.ui.graphics.Color
 

+ 38 - 0
app/src/main/java/com/codeskraps/weather/ui/theme/ScreenTransitions.kt

@@ -0,0 +1,38 @@
+package com.codeskraps.weather.ui.theme
+
+import androidx.compose.animation.AnimatedContentTransitionScope
+import androidx.compose.animation.EnterTransition
+import androidx.compose.animation.ExitTransition
+import androidx.compose.animation.core.tween
+import androidx.navigation.NavBackStackEntry
+
+object ScreenTransitions {
+
+    fun slideRightIntoContainer(scope: AnimatedContentTransitionScope<NavBackStackEntry>): EnterTransition {
+        return scope.slideIntoContainer(
+            towards = AnimatedContentTransitionScope.SlideDirection.Right,
+            animationSpec = tween(700)
+        )
+    }
+
+    fun slideLeftOutOfContainer(scope: AnimatedContentTransitionScope<NavBackStackEntry>): ExitTransition {
+        return scope.slideOutOfContainer(
+            towards = AnimatedContentTransitionScope.SlideDirection.Left,
+            animationSpec = tween(700)
+        )
+    }
+
+    fun slideLeftIntoContainer(scope: AnimatedContentTransitionScope<NavBackStackEntry>): EnterTransition {
+        return scope.slideIntoContainer(
+            towards = AnimatedContentTransitionScope.SlideDirection.Left,
+            animationSpec = tween(700)
+        )
+    }
+
+    fun slideRightOutOfContainer(scope: AnimatedContentTransitionScope<NavBackStackEntry>): ExitTransition {
+        return scope.slideOutOfContainer(
+            towards = AnimatedContentTransitionScope.SlideDirection.Right,
+            animationSpec = tween(700)
+        )
+    }
+}

+ 1 - 1
app/src/main/java/com/example/weather/app/ui/theme/Shape.kt → app/src/main/java/com/codeskraps/weather/ui/theme/Shape.kt

@@ -1,4 +1,4 @@
-package com.example.weather.app.ui.theme
+package com.codeskraps.weather.ui.theme
 
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Shapes

+ 1 - 1
app/src/main/java/com/example/weather/app/ui/theme/Theme.kt → app/src/main/java/com/codeskraps/weather/ui/theme/Theme.kt

@@ -1,4 +1,4 @@
-package com.example.weather.app.ui.theme
+package com.codeskraps.weather.ui.theme
 
 import android.app.Activity
 import androidx.compose.foundation.isSystemInDarkTheme

+ 1 - 1
app/src/main/java/com/example/weather/app/ui/theme/Type.kt → app/src/main/java/com/codeskraps/weather/ui/theme/Type.kt

@@ -1,4 +1,4 @@
-package com.example.weather.app.ui.theme
+package com.codeskraps.weather.ui.theme
 
 import androidx.compose.material3.Typography
 import androidx.compose.ui.text.TextStyle

+ 0 - 124
app/src/main/java/com/example/weather/app/ui/MainActivity.kt

@@ -1,124 +0,0 @@
-package com.example.weather.app.ui
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.animation.AnimatedContentTransitionScope
-import androidx.compose.animation.core.tween
-import androidx.compose.runtime.getValue
-import androidx.hilt.navigation.compose.hiltViewModel
-import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import androidx.navigation.NavType
-import androidx.navigation.compose.NavHost
-import androidx.navigation.compose.composable
-import androidx.navigation.compose.rememberNavController
-import androidx.navigation.navArgument
-import com.example.weather.app.ui.theme.WeatherTheme
-import com.trifork.feature.common.navigation.Screen
-import com.trifork.feature.geocoding.presentation.GeocodingViewModel
-import com.trifork.feature.geocoding.presentation.components.GeocodingScreen
-import com.trifork.feature.weather.presentation.WeatherViewModel
-import com.trifork.feature.weather.presentation.components.WeatherScreen
-import dagger.hilt.android.AndroidEntryPoint
-
-@AndroidEntryPoint
-class MainActivity : ComponentActivity() {
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-
-        setContent {
-            WeatherTheme {
-                val navController = rememberNavController()
-
-                NavHost(navController = navController, startDestination = Screen.Weather.route) {
-                    composable(
-                        route = Screen.Weather.route,
-                        arguments = listOf(
-                            navArgument("name") { type = NavType.StringType },
-                            navArgument("lat") { type = NavType.StringType },
-                            navArgument("long") { type = NavType.StringType }
-                        ),
-                        enterTransition = {
-                            slideIntoContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        exitTransition = {
-                            slideOutOfContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        popEnterTransition = {
-                            slideIntoContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        popExitTransition = {
-                            slideOutOfContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
-                                animationSpec = tween(700)
-                            )
-                        }
-                    ) {
-
-                        val viewModel = hiltViewModel<WeatherViewModel>()
-                        val state by viewModel.state.collectAsStateWithLifecycle()
-
-                        WeatherScreen(
-                            state = state,
-                            handleEvent = viewModel.state::handleEvent,
-                            action = viewModel.action
-                        ) { route ->
-                            navController.navigate(route)
-                        }
-                    }
-                    composable(
-                        route = Screen.Geocoding.route,
-                        enterTransition = {
-                            slideIntoContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        exitTransition = {
-                            slideOutOfContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        popEnterTransition = {
-                            slideIntoContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Left,
-                                animationSpec = tween(700)
-                            )
-                        },
-                        popExitTransition = {
-                            slideOutOfContainer(
-                                towards = AnimatedContentTransitionScope.SlideDirection.Companion.Right,
-                                animationSpec = tween(700)
-                            )
-                        }
-                    ) {
-                        val viewModel = hiltViewModel<GeocodingViewModel>()
-                        val state by viewModel.state.collectAsStateWithLifecycle()
-
-                        GeocodingScreen(
-                            state = state,
-                            handleEvent = viewModel.state::handleEvent,
-                            action = viewModel.action,
-                            navUp = { navController.navigateUp() }
-                        ) { route ->
-                            navController.navigate(route) {
-                                popUpTo(navController.graph.id) { inclusive = true }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}

+ 1 - 1
feature/common/src/test/java/com/trifork/feature/common/ExampleUnitTest.kt → app/src/test/java/com/codeskraps/weather/ExampleUnitTest.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common
+package com.codeskraps.weather
 
 import org.junit.Test
 

+ 6 - 0
build.gradle.kts

@@ -1,9 +1,15 @@
+buildscript {
+    dependencies {
+       //classpath(libs.secrets.gradle.plugin)
+    }
+}
 plugins {
     alias(libs.plugins.android.application) apply false
     alias(libs.plugins.android.library) apply false
     alias(libs.plugins.org.jetbrains.kotlin.android) apply false
     alias(libs.plugins.com.google.devtools.ksp) apply false
     alias(libs.plugins.dagger.hilt) apply false
+    alias(libs.plugins.secrets.gradle.plugin) apply false
 }
 
 tasks.register("clean", Delete::class) {

BIN=BIN
buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin


BIN=BIN
buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin


BIN=BIN
buildSrc/build/libs/buildSrc.jar


+ 1 - 0
core/local/.gitignore

@@ -0,0 +1 @@
+/build

+ 57 - 0
core/local/build.gradle.kts

@@ -0,0 +1,57 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+    alias(libs.plugins.android.library)
+    alias(libs.plugins.org.jetbrains.kotlin.android)
+    alias(libs.plugins.com.google.devtools.ksp)
+    alias(libs.plugins.dagger.hilt)
+}
+
+android {
+    namespace = "com.codeskraps.core.local"
+    compileSdk = ConfigData.compileSdk
+
+    defaultConfig {
+        minSdk = ConfigData.minSdk
+
+        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+        consumerProguardFiles("consumer-rules.pro")
+    }
+
+    buildTypes {
+        release {
+            isMinifyEnabled = false
+            proguardFiles(
+                getDefaultProguardFile("proguard-android-optimize.txt"),
+                "proguard-rules.pro"
+            )
+        }
+    }
+    compileOptions {
+        sourceCompatibility = ConfigData.javaVersion
+        targetCompatibility = ConfigData.javaVersion
+    }
+    kotlinOptions {
+        jvmTarget = ConfigData.javaTarget
+    }
+}
+
+dependencies {
+    implementation(project(mapOf("path" to ":feature:common")))
+
+    implementation(libs.androidx.core.ktx)
+    implementation(libs.appcompat)
+    implementation(libs.material)
+
+    //Dagger - Hilt
+    implementation(libs.hilt.android)
+    ksp(libs.hilt.android.compiler)
+
+    // Room
+    implementation(libs.room.runtime)
+    annotationProcessor(libs.room.compiler)
+    ksp(libs.room.compiler)
+
+    testImplementation(libs.junit.junit)
+    androidTestImplementation(libs.androidx.junit)
+    androidTestImplementation(libs.espresso.core)
+}

+ 0 - 0
core/local/consumer-rules.pro


+ 21 - 0
core/local/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 24 - 0
core/local/src/androidTest/java/com/codeskraps/core/local/ExampleInstrumentedTest.kt

@@ -0,0 +1,24 @@
+package com.codeskraps.core.local
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+    @Test
+    fun useAppContext() {
+        // Context of the app under test.
+        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+        assertEquals("com.codeskraps.core.local.test", appContext.packageName)
+    }
+}

+ 4 - 0
core/local/src/main/AndroidManifest.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+</manifest>

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/data/local/GeoLocationEntity.kt → core/local/src/main/java/com/codeskraps/core/local/data/db/GeoLocationEntity.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.data.local
+package com.codeskraps.core.local.data.db
 
 import androidx.room.Entity
 import androidx.room.PrimaryKey

+ 2 - 2
feature/common/src/main/java/com/trifork/feature/common/data/local/GeocodingDB.kt → core/local/src/main/java/com/codeskraps/core/local/data/db/GeocodingDB.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.data.local
+package com.codeskraps.core.local.data.db
 
 import androidx.room.Database
 import androidx.room.RoomDatabase
@@ -9,5 +9,5 @@ import androidx.room.RoomDatabase
 )
 abstract class GeocodingDB: RoomDatabase() {
 
-    abstract fun geocodingDao(): GeocodingDao
+    abstract fun geocodingDao(): com.codeskraps.core.local.data.db.GeocodingDao
 }

+ 1 - 2
feature/common/src/main/java/com/trifork/feature/common/data/local/GeocodingDao.kt → core/local/src/main/java/com/codeskraps/core/local/data/db/GeocodingDao.kt

@@ -1,7 +1,6 @@
-package com.trifork.feature.common.data.local
+package com.codeskraps.core.local.data.db
 
 import androidx.room.Dao
-import androidx.room.Delete
 import androidx.room.Query
 import androidx.room.Upsert
 

+ 5 - 4
feature/common/src/main/java/com/trifork/feature/common/data/mappers/GeocodingMapper.kt → core/local/src/main/java/com/codeskraps/core/local/data/mappers/GeocodingMapper.kt

@@ -1,7 +1,8 @@
-package com.trifork.feature.common.data.mappers
+package com.codeskraps.core.local.data.mappers
 
-import com.trifork.feature.common.data.local.GeoLocationEntity
-import com.trifork.feature.common.domain.model.GeoLocation
+import com.codeskraps.core.local.data.db.GeoLocationEntity
+import com.codeskraps.core.local.domain.model.GeoLocation
+import kotlin.random.Random
 
 fun GeoLocationEntity.toGeocoding(): GeoLocation {
     return GeoLocation(
@@ -16,7 +17,7 @@ fun GeoLocationEntity.toGeocoding(): GeoLocation {
 
 fun GeoLocation.toGeoLocationEntity(): GeoLocationEntity {
     return GeoLocationEntity(
-        uid = kotlin.random.Random.nextInt(),
+        uid = Random.nextInt(),
         name = name,
         latitude = latitude,
         longitude = longitude,

+ 8 - 9
feature/common/src/main/java/com/trifork/feature/common/data/repository/LocalGeocodingRepositoryImpl.kt → core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalGeocodingRepositoryImpl.kt

@@ -1,16 +1,15 @@
-package com.trifork.feature.common.data.repository
+package com.codeskraps.core.local.data.repository
 
-import com.trifork.feature.common.data.local.GeocodingDB
-import com.trifork.feature.common.data.mappers.toGeoLocationEntity
-import com.trifork.feature.common.data.mappers.toGeocoding
-import com.trifork.feature.common.domain.model.GeoLocation
-import com.trifork.feature.common.domain.repository.LocalGeocodingRepository
-import com.trifork.feature.common.domain.repository.LocalResourceRepository
-import com.trifork.feature.common.util.Resource
+import com.codeskraps.core.local.domain.model.GeoLocation
+import com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
+import com.codeskraps.core.local.data.mappers.toGeoLocationEntity
+import com.codeskraps.core.local.data.mappers.toGeocoding
+import com.codeskraps.core.local.domain.repository.LocalResourceRepository
+import com.codeskraps.feature.common.util.Resource
 import javax.inject.Inject
 
 class LocalGeocodingRepositoryImpl @Inject constructor(
-    private val geocodingDB: GeocodingDB,
+    private val geocodingDB: com.codeskraps.core.local.data.db.GeocodingDB,
     private val localResource: LocalResourceRepository
 ) : LocalGeocodingRepository {
 

+ 3 - 3
feature/common/src/main/java/com/trifork/feature/common/data/repository/LocalResourceRepositoryImpl.kt → core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalResourceRepositoryImpl.kt

@@ -1,8 +1,8 @@
-package com.trifork.feature.common.data.repository
+package com.codeskraps.core.local.data.repository
 
 import android.content.res.Resources
-import com.trifork.feature.common.R
-import com.trifork.feature.common.domain.repository.LocalResourceRepository
+import com.codeskraps.feature.common.R
+import com.codeskraps.core.local.domain.repository.LocalResourceRepository
 import javax.inject.Inject
 
 class LocalResourceRepositoryImpl @Inject constructor(

+ 26 - 0
core/local/src/main/java/com/codeskraps/core/local/di/LocalModule.kt

@@ -0,0 +1,26 @@
+package com.codeskraps.core.local.di
+
+import android.app.Application
+import androidx.room.Room
+import com.codeskraps.core.local.data.db.GeocodingDB
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object LocalModule {
+
+    @Provides
+    @Singleton
+    fun providesGeocodingDB(
+        application: Application
+    ): GeocodingDB {
+        return Room.databaseBuilder(
+            application,
+            GeocodingDB::class.java, "database-name"
+        ).build()
+    }
+}

+ 6 - 6
feature/common/src/main/java/com/trifork/feature/common/di/RepositoryModule.kt → core/local/src/main/java/com/codeskraps/core/local/di/LocalRepositoryModule.kt

@@ -1,9 +1,9 @@
-package com.trifork.feature.common.di
+package com.codeskraps.core.local.di
 
-import com.trifork.feature.common.data.repository.LocalGeocodingRepositoryImpl
-import com.trifork.feature.common.data.repository.LocalResourceRepositoryImpl
-import com.trifork.feature.common.domain.repository.LocalGeocodingRepository
-import com.trifork.feature.common.domain.repository.LocalResourceRepository
+import com.codeskraps.core.local.data.repository.LocalGeocodingRepositoryImpl
+import com.codeskraps.core.local.data.repository.LocalResourceRepositoryImpl
+import com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
+import com.codeskraps.core.local.domain.repository.LocalResourceRepository
 import dagger.Binds
 import dagger.Module
 import dagger.hilt.InstallIn
@@ -11,7 +11,7 @@ import dagger.hilt.android.components.ViewModelComponent
 
 @Module
 @InstallIn(ViewModelComponent::class)
-abstract class RepositoryModule {
+abstract class LocalRepositoryModule {
 
     @Binds
     abstract fun bindsGeocodingRepository(

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/domain/model/GeoLocation.kt → core/local/src/main/java/com/codeskraps/core/local/domain/model/GeoLocation.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.domain.model
+package com.codeskraps.core.local.domain.model
 
 data class GeoLocation(
     val name: String,

+ 3 - 3
feature/common/src/main/java/com/trifork/feature/common/domain/repository/LocalGeocodingRepository.kt → core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalGeocodingRepository.kt

@@ -1,7 +1,7 @@
-package com.trifork.feature.common.domain.repository
+package com.codeskraps.core.local.domain.repository
 
-import com.trifork.feature.common.domain.model.GeoLocation
-import com.trifork.feature.common.util.Resource
+import com.codeskraps.core.local.domain.model.GeoLocation
+import com.codeskraps.feature.common.util.Resource
 
 interface LocalGeocodingRepository {
 

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/domain/repository/LocalResourceRepository.kt → core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalResourceRepository.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.domain.repository
+package com.codeskraps.core.local.domain.repository
 
 interface LocalResourceRepository {
 

+ 1 - 1
feature/weather/src/test/java/com/trifork/feature/weather/ExampleUnitTest.kt → core/local/src/test/java/com/codeskraps/core/local/ExampleUnitTest.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.weather
+package com.codeskraps.core.local
 
 import org.junit.Test
 

+ 1 - 0
core/location/.gitignore

@@ -0,0 +1 @@
+/build

+ 54 - 0
core/location/build.gradle.kts

@@ -0,0 +1,54 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+    alias(libs.plugins.android.library)
+    alias(libs.plugins.org.jetbrains.kotlin.android)
+    alias(libs.plugins.com.google.devtools.ksp)
+    alias(libs.plugins.dagger.hilt)
+}
+
+android {
+    namespace = "com.codeskraps.location"
+    compileSdk = ConfigData.compileSdk
+
+    defaultConfig {
+        minSdk = ConfigData.minSdk
+
+        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+        consumerProguardFiles("consumer-rules.pro")
+    }
+
+    buildTypes {
+        release {
+            isMinifyEnabled = false
+            proguardFiles(
+                getDefaultProguardFile("proguard-android-optimize.txt"),
+                "proguard-rules.pro"
+            )
+        }
+    }
+    compileOptions {
+        sourceCompatibility = ConfigData.javaVersion
+        targetCompatibility = ConfigData.javaVersion
+    }
+    kotlinOptions {
+        jvmTarget = ConfigData.javaTarget
+    }
+}
+
+dependencies {
+
+    implementation(libs.androidx.core.ktx)
+    implementation(libs.appcompat)
+    implementation(libs.material)
+
+    // Location Services
+    implementation(libs.android.play.services.location)
+
+    //Dagger - Hilt
+    implementation(libs.hilt.android)
+    ksp(libs.hilt.android.compiler)
+
+    testImplementation(libs.junit.junit)
+    androidTestImplementation(libs.androidx.junit)
+    androidTestImplementation(libs.espresso.core)
+}

+ 0 - 0
core/location/consumer-rules.pro


+ 21 - 0
core/location/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 24 - 0
core/location/src/androidTest/java/com/codeskraps/location/ExampleInstrumentedTest.kt

@@ -0,0 +1,24 @@
+package com.codeskraps.location
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+    @Test
+    fun useAppContext() {
+        // Context of the app under test.
+        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+        assertEquals("com.codeskraps.location.test", appContext.packageName)
+    }
+}

+ 6 - 0
core/location/src/main/AndroidManifest.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+</manifest>

+ 5 - 5
feature/weather/src/main/java/com/trifork/feature/weather/data/location/DefaultLocationTracker.kt → core/location/src/main/java/com/codeskraps/location/data/DefaultLocationTracker.kt

@@ -1,14 +1,14 @@
-package com.trifork.feature.weather.data.location
+package com.codeskraps.location.data
 
-import android.app.Application
-import android.location.Location
-import androidx.core.content.ContextCompat
 import android.Manifest
+import android.app.Application
 import android.content.Context
 import android.content.pm.PackageManager
+import android.location.Location
 import android.location.LocationManager
+import androidx.core.content.ContextCompat
+import com.codeskraps.location.domain.LocationTracker
 import com.google.android.gms.location.FusedLocationProviderClient
-import com.trifork.feature.weather.domain.location.LocationTracker
 import kotlinx.coroutines.suspendCancellableCoroutine
 import javax.inject.Inject
 import kotlin.coroutines.resume

+ 29 - 0
core/location/src/main/java/com/codeskraps/location/di/CoreLocationModule.kt

@@ -0,0 +1,29 @@
+package com.codeskraps.location.di
+
+import android.app.Application
+import com.codeskraps.location.data.DefaultLocationTracker
+import com.codeskraps.location.domain.LocationTracker
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ViewModelComponent
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object CoreLocationModule {
+
+    @Provides
+    @Singleton
+    fun providesLocationTracker(
+        app: Application
+    ): LocationTracker {
+        return DefaultLocationTracker(
+            locationClient = LocationServices.getFusedLocationProviderClient(app),
+            application = app
+        )
+    }
+}

+ 1 - 1
feature/weather/src/main/java/com/trifork/feature/weather/domain/location/LocationTracker.kt → core/location/src/main/java/com/codeskraps/location/domain/LocationTracker.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.weather.domain.location
+package com.codeskraps.location.domain
 
 import android.location.Location
 

+ 1 - 1
feature/geocoding/src/test/java/com/trifork/feature/geocoding/ExampleUnitTest.kt → core/location/src/test/java/com/codeskraps/location/ExampleUnitTest.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.geocoding
+package com.codeskraps.location
 
 import org.junit.Test
 

+ 1 - 6
feature/common/build.gradle.kts

@@ -7,7 +7,7 @@ plugins {
 }
 
 android {
-    namespace = "com.trifork.feature.common"
+    namespace = "com.codeskraps.feature.common"
     compileSdk = ConfigData.compileSdk
 
     defaultConfig {
@@ -60,11 +60,6 @@ dependencies {
     implementation(libs.hilt.android)
     ksp(libs.hilt.android.compiler)
 
-    // Room
-    implementation(libs.room.runtime)
-    annotationProcessor(libs.room.compiler)
-    ksp(libs.room.compiler)
-
     testImplementation(libs.junit.junit)
     androidTestImplementation(libs.androidx.junit)
     androidTestImplementation(libs.espresso.core)

+ 1 - 1
feature/common/src/androidTest/java/com/trifork/feature/common/ExampleInstrumentedTest.kt → feature/common/src/androidTest/java/com/codeskraps/feature/common/ExampleInstrumentedTest.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common
+package com.codeskraps.feature.common
 
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.ext.junit.runners.AndroidJUnit4

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/components/ObserveAsEvent.kt → feature/common/src/main/java/com/codeskraps/feature/common/components/ObserveAsEvent.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.components
+package com.codeskraps.feature.common.components
 
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect

+ 30 - 0
feature/common/src/main/java/com/codeskraps/feature/common/di/FeatureModule.kt

@@ -0,0 +1,30 @@
+package com.codeskraps.feature.common.di
+
+import android.app.Application
+import android.content.res.Resources
+import com.codeskraps.feature.common.dispatcher.DispatcherProvider
+import com.codeskraps.feature.common.dispatcher.StandardDispatcherProvider
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object FeatureModule {
+
+    @Provides
+    @Singleton
+    fun providesDispatcherProvider(): DispatcherProvider {
+        return StandardDispatcherProvider()
+    }
+
+    @Provides
+    @Singleton
+    fun providesResources(
+        application: Application
+    ): Resources {
+        return application.resources
+    }
+}

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/dispatcher/DispatcherProvider.kt → feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/DispatcherProvider.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.dispatcher
+package com.codeskraps.feature.common.dispatcher
 
 import kotlinx.coroutines.CoroutineDispatcher
 

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/dispatcher/StandardDispatcherProvider.kt → feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/StandardDispatcherProvider.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.dispatcher
+package com.codeskraps.feature.common.dispatcher
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/dispatcher/TestDispatcherProvider.kt → feature/common/src/main/java/com/codeskraps/feature/common/dispatcher/TestDispatcherProvider.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.dispatcher
+package com.codeskraps.feature.common.dispatcher
 
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.test.StandardTestDispatcher

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/domain/model/LatLong.kt → feature/common/src/main/java/com/codeskraps/feature/common/domain/model/LatLong.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.domain.model
+package com.codeskraps.feature.common.domain.model
 
 import java.io.Serializable
 

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/mvi/StateReducerFlow.kt → feature/common/src/main/java/com/codeskraps/feature/common/mvi/StateReducerFlow.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.mvi
+package com.codeskraps.feature.common.mvi
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope

+ 2 - 1
feature/common/src/main/java/com/trifork/feature/common/navigation/Screen.kt → feature/common/src/main/java/com/codeskraps/feature/common/navigation/Screen.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.navigation
+package com.codeskraps.feature.common.navigation
 
 sealed class Screen(val route: String) {
     data object Weather : Screen("weather/{name}/{lat}/{long}") {
@@ -10,4 +10,5 @@ sealed class Screen(val route: String) {
     }
 
     data object Geocoding : Screen("geocoding")
+    data object Map : Screen("map")
 }

+ 2 - 2
feature/common/src/main/java/com/trifork/feature/common/util/MonthString.kt → feature/common/src/main/java/com/codeskraps/feature/common/util/MonthString.kt

@@ -1,7 +1,7 @@
-package com.trifork.feature.common.util
+package com.codeskraps.feature.common.util
 
 import androidx.annotation.StringRes
-import com.trifork.feature.common.R
+import com.codeskraps.feature.common.R
 
 enum class MonthString(@StringRes val stringResource: Int) {
     January(R.string.january),

+ 1 - 1
feature/common/src/main/java/com/trifork/feature/common/util/Resouce.kt → feature/common/src/main/java/com/codeskraps/feature/common/util/Resouce.kt

@@ -1,4 +1,4 @@
-package com.trifork.feature.common.util
+package com.codeskraps.feature.common.util
 
 sealed interface Resource<T> {
     class Success<T>(val data: T) : Resource<T>

+ 2 - 2
feature/common/src/main/java/com/trifork/feature/common/util/WeekString.kt → feature/common/src/main/java/com/codeskraps/feature/common/util/WeekString.kt

@@ -1,7 +1,7 @@
-package com.trifork.feature.common.util
+package com.codeskraps.feature.common.util
 
 import androidx.annotation.StringRes
-import com.trifork.feature.common.R
+import com.codeskraps.feature.common.R
 
 enum class WeekString(@StringRes val stringResource: Int) {
     Monday(R.string.monday),

+ 0 - 45
feature/common/src/main/java/com/trifork/feature/common/di/FeatureModule.kt

@@ -1,45 +0,0 @@
-package com.trifork.feature.common.di
-
-import android.app.Application
-import android.content.res.Resources
-import androidx.room.Room
-import com.trifork.feature.common.data.local.GeocodingDB
-import com.trifork.feature.common.data.repository.LocalResourceRepositoryImpl
-import com.trifork.feature.common.dispatcher.DispatcherProvider
-import com.trifork.feature.common.dispatcher.StandardDispatcherProvider
-import com.trifork.feature.common.domain.repository.LocalResourceRepository
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.components.SingletonComponent
-import javax.inject.Singleton
-
-@Module
-@InstallIn(SingletonComponent::class)
-object FeatureModule {
-
-    @Provides
-    @Singleton
-    fun providesDispatcherProvider(): DispatcherProvider {
-        return StandardDispatcherProvider()
-    }
-
-    @Provides
-    @Singleton
-    fun providesGeocodingDB(
-        application: Application
-    ): GeocodingDB {
-        return Room.databaseBuilder(
-            application,
-            GeocodingDB::class.java, "database-name"
-        ).build()
-    }
-
-    @Provides
-    @Singleton
-    fun providesResources(
-        application: Application
-    ): Resources {
-        return application.resources
-    }
-}

+ 5 - 0
feature/common/src/main/res/drawable/ic_location.xml

@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>

+ 5 - 0
feature/common/src/main/res/drawable/ic_map.xml

@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48V20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48V3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM15,19l-6,-2.11V5l6,2.11V19z"/>
+</vector>

+ 2 - 0
feature/common/src/main/res/values-ar-rEG/strings.xml

@@ -22,6 +22,8 @@
     <string name="check_internet_connection">تحقق من اتصال الإنترنت !!!</string>
     <string name="check_gps">تحقق من إعدادات GPS !!!</string>
     <string name="no_results">لا توجد نتائج !!!</string>
+    <string name="map_location">موقع الخريطة</string>
+    <string name="add">إضافة</string>
 
     <string name="clear_sky">سماء صافية</string>
     <string name="frost">صقيع</string>

+ 2 - 0
feature/common/src/main/res/values-ar/strings.xml

@@ -22,6 +22,8 @@
     <string name="check_internet_connection">تحقق من اتصال الإنترنت !!!</string>
     <string name="check_gps">تحقق من إعدادات ال GPS !!!</string>
     <string name="no_results">لا توجد نتائج !!!</string>
+    <string name="map_location">موقع الخريطة</string>
+    <string name="add">إضافة</string>
 
     <string name="clear_sky">سماء صافية</string>
     <string name="frost">صقيع</string>

+ 3 - 0
feature/common/src/main/res/values-bho/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">इंटरनेट कनेक्शन चेक करें !!!</string>
     <string name="check_gps">GPS सेटिंग चेक करें !!!</string>
     <string name="no_results">कोई परिणाम नहीं मिला !!!</string>
+    <string name="map_location">नक्शा स्थान</string>
+    <string name="add">जोड़ें</string>
+
 
     <string name="clear_sky">साफ आसमान</string>
     <string name="frost">मौसमी</string>

+ 3 - 0
feature/common/src/main/res/values-bn/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">ইন্টারনেট সংযোগ পরীক্ষা করুন !!!</string>
     <string name="check_gps">GPS সেটিংস পরীক্ষা করুন !!!</string>
     <string name="no_results">কোনো ফলাফল নেই !!!</string>
+    <string name="map_location">মানচিত্রের অবস্থান</string>
+    <string name="add">যোগ করুন</string>
+
 
     <string name="clear_sky">পরিষ্কার আকাশ</string>
     <string name="frost">তুষার</string>

+ 2 - 0
feature/common/src/main/res/values-ca/strings.xml

@@ -22,6 +22,8 @@
     <string name="check_internet_connection">Comprova la connexió a internet !!!</string>
     <string name="check_gps">Comprova la configuració del GPS !!!</string>
     <string name="no_results">Sense resultats !!!</string>
+    <string name="map_location">Ubicació al mapa</string>
+    <string name="add">Afegir</string>
 
     <string name="clear_sky">Cel clar</string>
     <string name="frost">Gelada</string>

+ 2 - 0
feature/common/src/main/res/values-cs/strings.xml

@@ -22,6 +22,8 @@
     <string name="check_internet_connection">Zkontrolujte připojení k internetu !!!</string>
     <string name="check_gps">Zkontrolujte nastavení GPS !!!</string>
     <string name="no_results">Žádné výsledky !!!</string>
+    <string name="map_location">Poloha na mapě</string>
+    <string name="add">Přidat</string>
 
     <string name="clear_sky">Jasno</string>
     <string name="frost">Mrazík</string>

+ 3 - 0
feature/common/src/main/res/values-de/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Überprüfen Sie die Internetverbindung !!!</string>
     <string name="check_gps">Überprüfen Sie die GPS-Einstellungen !!!</string>
     <string name="no_results">Keine Ergebnisse !!!</string>
+    <string name="map_location">Kartenposition</string>
+    <string name="add">Hinzufügen</string>
+
 
     <string name="clear_sky">Klarer Himmel</string>
     <string name="frost">Frost</string>

+ 3 - 0
feature/common/src/main/res/values-el/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Ελέγξτε τη σύνδεση στο internet !!!</string>
     <string name="check_gps">Ελέγξτε τις ρυθμίσεις GPS !!!</string>
     <string name="no_results">Χωρίς αποτελέσματα !!!</string>
+    <string name="map_location">Τοποθεσία Χάρτη</string>
+    <string name="add">Προσθήκη</string>
+
 
     <string name="clear_sky">Καθαρός ουρανός</string>
     <string name="frost">Παγετός</string>

+ 3 - 0
feature/common/src/main/res/values-es/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">¡Verifique la conexión a Internet!</string>
     <string name="check_gps">¡Verifique la configuración del GPS!</string>
     <string name="no_results">¡Sin resultados!</string>
+    <string name="map_location">Ubicación en el mapa</string>
+    <string name="add">Agregar</string>
+
 
     <string name="clear_sky">Cielo Despejado</string>
     <string name="frost">Escarcha</string>

+ 3 - 0
feature/common/src/main/res/values-eu/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Konexioa egiaztatu !!!</string>
     <string name="check_gps">GPS ezarpenak egiaztatu !!!</string>
     <string name="no_results">Emaitzarik ez !!!</string>
+    <string name="map_location">Maparen Kokapena</string>
+    <string name="add">Gehitu</string>
+
 
     <string name="clear_sky">Zeru garbia</string>
     <string name="frost">Izoztua</string>

+ 3 - 0
feature/common/src/main/res/values-fa-rIR/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">بررسی اتصال اینترنت !!!</string>
     <string name="check_gps">بررسی تنظیمات GPS !!!</string>
     <string name="no_results">بدون نتیجه !!!</string>
+    <string name="map_location">موقعیت نقشه</string>
+    <string name="add">افزودن</string>
+
 
     <string name="clear_sky">آسمان صاف</string>
     <string name="frost">شب برفی</string>

+ 3 - 0
feature/common/src/main/res/values-fi/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Tarkista internet-yhteys !!!</string>
     <string name="check_gps">Tarkista GPS-asetus !!!</string>
     <string name="no_results">Ei tuloksia !!!</string>
+    <string name="map_location">Karttalokero</string>
+    <string name="add">Lisää</string>
+
 
     <string name="clear_sky">Selkeää taivasta</string>
     <string name="frost">Halla</string>

+ 3 - 0
feature/common/src/main/res/values-fr/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Vérifiez la connexion Internet !!!</string>
     <string name="check_gps">Vérifiez les paramètres GPS !!!</string>
     <string name="no_results">Aucun résultat !!!</string>
+    <string name="map_location">Emplacement sur la carte</string>
+    <string name="add">Ajouter</string>
+
 
     <string name="clear_sky">Ciel dégagé</string>
     <string name="frost">Gel</string>

+ 3 - 0
feature/common/src/main/res/values-gu/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">ઇન્ટરનેટ કનેક્શન ચેક કરો !!!</string>
     <string name="check_gps">GPS સેટિંગ ચેક કરો !!!</string>
     <string name="no_results">કોઈ પરિણામ મળ્યો નથી !!!</string>
+    <string name="map_location">નकશા સ્થાન</string>
+    <string name="add">ઉમેરો</string>
+
 
     <string name="clear_sky">સાફ આકાશ</string>
     <string name="frost">હિમપાત</string>

+ 3 - 0
feature/common/src/main/res/values-ha/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Dubawa Tsari akan Internet !!!</string>
     <string name="check_gps">Dubawa Tsari akan GPS !!!</string>
     <string name="no_results">Babu Tsarin!!!</string>
+    <string name="map_location">Lokacin ƙasa</string>
+    <string name="add">Ƙara</string>
+
 
     <string name="clear_sky">Saman kai</string>
     <string name="frost">Rawa</string>

+ 3 - 0
feature/common/src/main/res/values-hi/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">इंटरनेट कनेक्शन जाँचें !!!</string>
     <string name="check_gps">GPS सेटिंग्स जाँचें !!!</string>
     <string name="no_results">कोई परिणाम नहीं मिला !!!</string>
+    <string name="map_location">नक्शा स्थान</string>
+    <string name="add">जोड़ें</string>
+
 
     <string name="clear_sky">साफ आसमान</string>
     <string name="frost">सीतल</string>

+ 3 - 0
feature/common/src/main/res/values-is/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Athugaðu net tengingu !!!</string>
     <string name="check_gps">Athugaðu GPS stillingar !!!</string>
     <string name="no_results">Engir Niðurstöður !!!</string>
+    <string name="map_location">Staðsetning á korti</string>
+    <string name="add">Bæta við</string>
+
 
     <string name="clear_sky">Heiðskýjað</string>
     <string name="frost">Frost</string>

+ 3 - 0
feature/common/src/main/res/values-it/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Controlla la connessione Internet !!!</string>
     <string name="check_gps">Controlla le impostazioni GPS !!!</string>
     <string name="no_results">Nessun risultato !!!</string>
+    <string name="map_location">Posizione sulla mappa</string>
+    <string name="add">Aggiungi</string>
+
 
     <string name="clear_sky">Cielo sereno</string>
     <string name="frost">Brina</string>

+ 3 - 0
feature/common/src/main/res/values-ja/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">インターネット接続を確認してください!</string>
     <string name="check_gps">GPS設定を確認してください!</string>
     <string name="no_results">結果がありません!</string>
+    <string name="map_location">地図上の位置</string>
+    <string name="add">追加</string>
+
 
     <string name="clear_sky">快晴</string>
     <string name="frost">霜</string>

+ 3 - 0
feature/common/src/main/res/values-jv/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Pariksa Koneksian Internet !!!</string>
     <string name="check_gps">Pariksa Setelan GPS !!!</string>
     <string name="no_results">Ora Ana Hasil !!!</string>
+    <string name="map_location">Panggonan Peta</string>
+    <string name="add">Tambah</string>
+
 
     <string name="clear_sky">Langit Saré</string>
     <string name="frost">Rosit</string>

+ 3 - 0
feature/common/src/main/res/values-ko/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">인터넷 연결을 확인하세요!!!</string>
     <string name="check_gps">GPS 설정을 확인하세요!!!</string>
     <string name="no_results">결과 없음!!!</string>
+    <string name="map_location">지도 위치</string>
+    <string name="add">추가</string>
+
 
     <string name="clear_sky">맑음</string>
     <string name="frost">서리</string>

+ 3 - 0
feature/common/src/main/res/values-mr/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">इंटरनेट कनेक्शन तपासा !!!</string>
     <string name="check_gps">GPS सेटिंग्ज तपासा !!!</string>
     <string name="no_results">कोणतेही परिणाम नाही !!!</string>
+    <string name="map_location">नकाशा स्थान</string>
+    <string name="add">जोडा</string>
+
 
     <string name="clear_sky">स्पष्ट आकाश</string>
     <string name="frost">गार झालं</string>

+ 3 - 0
feature/common/src/main/res/values-nl/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Controleer internetverbinding !!!</string>
     <string name="check_gps">Controleer GPS-instellingen !!!</string>
     <string name="no_results">Geen resultaten !!!</string>
+    <string name="map_location">Kaartlocatie</string>
+    <string name="add">Toevoegen</string>
+
 
     <string name="clear_sky">Heldere hemel</string>
     <string name="frost">Vorst</string>

+ 3 - 0
feature/common/src/main/res/values-no/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Sjekk internettforbindelsen !!!</string>
     <string name="check_gps">Sjekk GPS-innstillingene !!!</string>
     <string name="no_results">Ingen resultater !!!</string>
+    <string name="map_location">Kartplassering</string>
+    <string name="add">Legg til</string>
+
 
     <string name="clear_sky">Klart himmel</string>
     <string name="frost">Frost</string>

+ 0 - 75
feature/common/src/main/res/values-pa-rPK/strings.xml

@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="unknown_error">ایک انا معلوم خرابی آئی اے۔</string>
-    <string name="unknown">نامعلوم</string>
-
-    <string name="current_location">حالیائی مقام</string>
-    <string name="save_current_location">حالیائی مقام محفوظ کرو</string>
-    <string name="set_name_current_location">حالیائی مقام لئی نام مقرر کرو:</string>
-    <string name="save">محفوظ کرو</string>
-    <string name="cancel">منسوخ کریو</string>
-    <string name="error">خرابی</string>
-    <string name="loading">لوڈ ہو رہا ہے…</string>
-    <string name="cached">کیش کیا گیا</string>
-    <string name="search">تلاش کرو</string>
-    <string name="no_location_set">کوئی مقام مرتب نہیں کیا گیا !!!</string>
-    <string name="location_can_not_be_blank">"مقام خالی نہیں ہو سکتا !!!"</string>
-    <string name="back">پیچھے جاو</string>
-    <string name="search_locations">مقامات تلاش کرو</string>
-    <string name="issue_loading_cache">کیش لوڈ کرتے وقت مسئلہ پیش آیا !!!</string>
-    <string name="issue_saving">محفوظ کرنے میں مسئلہ !!!</string>
-    <string name="issue_deleting">حذف کرنے میں مسئلہ !!!</string>
-    <string name="check_internet_connection">انٹرنیٹ کنکشن چیک کریں !!!</string>
-    <string name="check_gps">جی پی ایس کی ترتیبات چیک کریں !!!</string>
-    <string name="no_results">کوئی نتائج نہیں !!!</string>
-
-    <string name="clear_sky">صاف آسمان</string>
-    <string name="frost">جلدی برف باری</string>
-    <string name="mainly_clear">عمدتاً صاف</string>
-    <string name="partly_cloudy">حصہ وار ابری</string>
-    <string name="overcast">گھنے بادلوں سے ڈھکا ہوا</string>
-    <string name="foggy">دھندلا</string>
-    <string name="depositing_rime_fog">ٹپکتی رائیم کی دھند</string>
-    <string name="light_drizzle">ہلکی بونداباری</string>
-    <string name="moderate_drizzle">درمیانہ بونداباری</string>
-    <string name="dense_drizzle">گھنی بونداباری</string>
-    <string name="slight_freezing_drizzle">ہلکی ٹھنڈی بونداباری</string>
-    <string name="dense_freezing_drizzle">گھنی ٹھنڈی بونداباری</string>
-    <string name="slight_rain">ہلکی برش</string>
-    <string name="rainy">برساتی</string>
-    <string name="heavy_rain">بھاری برش</string>
-    <string name="heavy_freezing_rain">بھاری ٹھنڈی برش</string>
-    <string name="slight_snow_fall">ہلکی برفباری</string>
-    <string name="moderate_snow_fall">درمیانی برفباری</string>
-    <string name="heavy_snow_fall">بھاری برفباری</string>
-    <string name="snow_grains">برف کے دانے</string>
-    <string name="slight_rain_showers">ہلکی برش کی جھلکیاں</string>
-    <string name="moderate_rain_showers">درمیانی برش کی جھلکیاں</string>
-    <string name="violent_rain_showers">زبردست برش کی جھلکیاں</string>
-    <string name="light_snow_showers">ہلکی برف کی جھلکیاں</string>
-    <string name="heavy_snow_showers">بھاری برف کی جھلکیاں</string>
-    <string name="moderate_thunderstorm">درمیانی گرجا</string>
-    <string name="thunderstorm_with_slight_hail">ہلکے چھوٹے برف کے گولے والا گرجا</string>
-    <string name="thunderstorm_with_heavy_rain">بھاری برش کے گولے والا گرجا</string>
-
-    <string name="january">جنوری</string>
-    <string name="february">فروری</string>
-    <string name="march">مارچ</string>
-    <string name="april">اپریل</string>
-    <string name="may">مئی</string>
-    <string name="june">جون</string>
-    <string name="july">جولائی</string>
-    <string name="august">اگست</string>
-    <string name="september">ستمبر</string>
-    <string name="october">اکتوبر</string>
-    <string name="november">نومبر</string>
-    <string name="december">دسمبر</string>
-
-    <string name="monday">سوموار</string>
-    <string name="tuesday">منگلوار</string>
-    <string name="wednesday">بدھوار</string>
-    <string name="thursday">جمعروار</string>
-    <string name="friday">جمعہ</string>
-    <string name="saturday">ہفتہ</string>
-    <string name="sunday">اتوار</string>
-</resources>

+ 3 - 0
feature/common/src/main/res/values-pl/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Sprawdź połączenie internetowe!!!</string>
     <string name="check_gps">Sprawdź ustawienia GPS!!!</string>
     <string name="no_results">Brak wyników!!!</string>
+    <string name="map_location">Lokalizacja na mapie</string>
+    <string name="add">Dodaj</string>
+
 
     <string name="clear_sky">Czyste niebo</string>
     <string name="frost">Mroźno</string>

+ 3 - 0
feature/common/src/main/res/values-pt/strings.xml

@@ -21,6 +21,9 @@
     <string name="issue_deleting">Problema ao deletar !!!</string>
     <string name="check_internet_connection">Verifique a conexão com a internet !!!</string>
     <string name="check_gps">Verifique as configurações do GPS !!!</string>
+    <string name="map_location">Localização no Mapa</string>
+    <string name="add">Adicionar</string>
+
 
     <string name="no_results">Sem resultados!!!</string>
     <string name="clear_sky">Céu limpo</string>

+ 3 - 0
feature/common/src/main/res/values-ro/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Verifică conexiunea la internet !!!</string>
     <string name="check_gps">Verifică setările GPS !!!</string>
     <string name="no_results">Fără rezultate !!!</string>
+    <string name="map_location">Locație pe hartă</string>
+    <string name="add">Adaugă</string>
+
 
     <string name="clear_sky">Cer senin</string>
     <string name="frost">Gheață</string>

+ 3 - 0
feature/common/src/main/res/values-ru/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Проверьте интернет-соединение !!!</string>
     <string name="check_gps">Проверьте настройки GPS !!!</string>
     <string name="no_results">Нет результатов !!!</string>
+    <string name="map_location">Местоположение на карте</string>
+    <string name="add">Добавить</string>
+
 
     <string name="clear_sky">Ясное небо</string>
     <string name="frost">Мороз</string>

+ 3 - 0
feature/common/src/main/res/values-ta/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">இணைய இணைப்பை சரிபார்க்கவும்!!!</string>
     <string name="check_gps">GPS அமைப்பை சரிபார்க்கவும்!!!</string>
     <string name="no_results">முடிவுகள் இல்லை!!!</string>
+    <string name="map_location">வரைபடத்தில் இருப்போம்</string>
+    <string name="add">சேர்க்க</string>
+
 
     <string name="clear_sky">தோள்கள் இல்லாமல்</string>
     <string name="frost">பனி</string>

+ 3 - 0
feature/common/src/main/res/values-te/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">ఇంటర్నెట్ కనెక్షన్ తనిఖీ చేయండి !!!</string>
     <string name="check_gps">GPS సెట్టింగ్లను తనిఖీ చేయండి !!!</string>
     <string name="no_results">ఎటువంటి ఫలితం లేదు !!!</string>
+    <string name="map_location">మ్యాప్ స్థానం</string>
+    <string name="add">జోడించు</string>
+
 
     <string name="clear_sky">స్పష్ట ఆకాశం</string>
     <string name="frost">మంచు పడినందుకు</string>

+ 3 - 0
feature/common/src/main/res/values-th/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต !!!</string>
     <string name="check_gps">ตรวจสอบการตั้งค่า GPS !!!</string>
     <string name="no_results">ไม่มีผลลัพธ์ !!!</string>
+    <string name="map_location">ตำแหน่งบนแผนที่</string>
+    <string name="add">เพิ่ม</string>
+
 
     <string name="clear_sky">ฟ้าใส</string>
     <string name="frost">ความเยือกแข็ง</string>

+ 3 - 0
feature/common/src/main/res/values-tl/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Suriin ang Internet Connection !!!</string>
     <string name="check_gps">Suriin ang GPS Setting !!!</string>
     <string name="no_results">Walang Resulta !!!</string>
+    <string name="map_location">Lokasyon sa Mapa</string>
+    <string name="add">Idagdag</string>
+
 
     <string name="clear_sky">Malinaw na Langit</string>
     <string name="frost">Frost</string>

+ 3 - 0
feature/common/src/main/res/values-ur/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">انٹرنیٹ کنکشن چیک کریں !!!</string>
     <string name="check_gps">GPS ترتیبات چیک کریں !!!</string>
     <string name="no_results">کوئی نتائج نہیں ملے !!!</string>
+    <string name="map_location">نقشہ مقام</string>
+    <string name="add">شامل کریں</string>
+
 
     <string name="clear_sky">صاف آسمان</string>
     <string name="frost">برف جمانا</string>

+ 3 - 0
feature/common/src/main/res/values-vi/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">Kiểm tra kết nối internet !!!</string>
     <string name="check_gps">Kiểm tra cài đặt GPS !!!</string>
     <string name="no_results">Không có kết quả !!!</string>
+    <string name="map_location">Vị trí trên bản đồ</string>
+    <string name="add">Thêm</string>
+
 
     <string name="clear_sky">Trời quang đãng</string>
     <string name="frost">Sương giá</string>

+ 3 - 0
feature/common/src/main/res/values-zh/strings.xml

@@ -22,6 +22,9 @@
     <string name="check_internet_connection">检查网络连接!</string>
     <string name="check_gps">检查GPS设置!</string>
     <string name="no_results">无结果!</string>
+    <string name="map_location">地图位置</string>
+    <string name="add">添加</string>
+
 
     <string name="clear_sky">晴朗</string>
     <string name="frost">霜</string>

+ 2 - 0
feature/common/src/main/res/values/strings.xml

@@ -22,6 +22,8 @@
     <string name="check_internet_connection">Check Internet Connection !!!</string>
     <string name="check_gps">Check GPS Setting !!!</string>
     <string name="no_results">No Results !!!</string>
+    <string name="map_location">Map Location</string>
+    <string name="add">Add</string>
 
     <string name="clear_sky">Clear sky</string>
     <string name="frost">Frost</string>

+ 17 - 0
feature/common/src/test/java/com/codeskraps/feature/common/ExampleUnitTest.kt

@@ -0,0 +1,17 @@
+package com.codeskraps.feature.common
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+    @Test
+    fun addition_isCorrect() {
+        assertEquals(4, 2 + 2)
+    }
+}

+ 2 - 1
feature/geocoding/build.gradle.kts

@@ -7,7 +7,7 @@ plugins {
 }
 
 android {
-    namespace = "com.trifork.feature.geocoding"
+    namespace = "com.codeskraps.feature.geocoding"
     compileSdk = ConfigData.compileSdk
 
     defaultConfig {
@@ -53,6 +53,7 @@ android {
 
 dependencies {
     implementation(project(mapOf("path" to ":feature:common")))
+    implementation(project(mapOf("path" to ":core:local")))
 
     implementation(libs.androidx.core.ktx)
     implementation(libs.androidx.lifecycle.runtime.ktx)

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio