Преглед изворни кода

Update version code and name to 20 and 2.6.4 in build.gradle.kts; refactor navigation handling in MainActivity and MapScreen; enhance GeoLocation mappers with random UID generation and caching; update LocalResourceRepository to use Resources for string retrieval; remove unused LocalRepositoryModule; adjust repository interfaces for suspend functions.

Carles Sentis пре 2 дана
родитељ
комит
0472e39586

+ 2 - 2
app/build.gradle.kts

@@ -15,8 +15,8 @@ android {
         applicationId = "com.arklan.weather"
         minSdk = ConfigData.minSdk
         targetSdk = ConfigData.targetSdk
-        versionCode = 19
-        versionName = "2.6.3"
+        versionCode = 20
+        versionName = "2.6.4"
         setProperty("archivesBaseName", "weekly-weather-v$versionName.$versionCode")
 
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

+ 2 - 5
app/src/main/java/com/codeskraps/weather/ui/MainActivity.kt

@@ -145,12 +145,9 @@ class MainActivity : ComponentActivity() {
                             state = state,
                             handleEvent = viewModel.state::handleEvent,
                             action = viewModel.action,
+                            navUp = { navController.navigateUp() },
                             navRoute = { route ->
-                                if (route == "nav_up") {
-                                    navController.navigateUp()
-                                } else {
-                                    navController.navigate(route)
-                                }
+                                navController.navigate(route)
                             }
                         )
                     }

+ 4 - 2
core/local/src/main/java/com/codeskraps/core/local/data/mappers/GeoLocationMappers.kt

@@ -2,10 +2,11 @@ package com.codeskraps.core.local.data.mappers
 
 import com.codeskraps.core.local.data.model.GeoLocationEntity
 import com.codeskraps.core.local.domain.model.GeoLocation
+import kotlin.random.Random
 
 fun GeoLocation.toGeoLocationEntity(): GeoLocationEntity {
     return GeoLocationEntity(
-        uid = 0, // Room will auto-generate this
+        uid = Random.nextInt(),
         name = name,
         latitude = latitude,
         longitude = longitude,
@@ -20,6 +21,7 @@ fun GeoLocationEntity.toGeoLocation(): GeoLocation {
         latitude = latitude,
         longitude = longitude,
         country = country,
-        admin1 = admin1
+        admin1 = admin1,
+        cached = true
     )
 } 

+ 0 - 2
core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalGeocodingRepositoryImpl.kt

@@ -6,8 +6,6 @@ import com.codeskraps.core.local.domain.model.GeoLocation
 import com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
 import com.codeskraps.core.local.domain.repository.LocalResourceRepository
 import com.codeskraps.feature.common.util.Resource
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.map
 
 class LocalGeocodingRepositoryImpl(
     private val geocodingDB: com.codeskraps.core.local.data.db.GeocodingDB,

+ 21 - 20
core/local/src/main/java/com/codeskraps/core/local/data/repository/LocalResourceRepositoryImpl.kt

@@ -1,44 +1,45 @@
 package com.codeskraps.core.local.data.repository
 
-import android.content.Context
+import android.content.res.Resources
+import com.codeskraps.feature.common.R
 import com.codeskraps.core.local.domain.repository.LocalResourceRepository
 
 class LocalResourceRepositoryImpl(
-    private val context: Context
+    private val resources: Resources
 ) : LocalResourceRepository {
-    override fun getCurrentLocationString(): String {
-        return "Current Location"
+    override suspend fun getUnknownErrorString(): String {
+        return resources.getString(R.string.unknown_error)
     }
 
-    override fun getLocationCanNotBeBlankString(): String {
-        return "Location name cannot be blank"
+    override suspend fun getCurrentLocationString(): String {
+        return resources.getString(R.string.current_location)
     }
 
-    override fun getNoResultString(): String {
-        return "No results found"
+    override suspend fun getCheckInternetString(): String {
+        return resources.getString(R.string.check_internet_connection)
     }
 
-    override fun getIssueLoadingCache(): String {
-        return "Issue loading cache"
+    override suspend fun getCheckGPSString(): String {
+        return resources.getString(R.string.check_gps)
     }
 
-    override fun getIssueSaving(): String {
-        return "Issue saving location"
+    override suspend fun getLocationCanNotBeBlankString(): String {
+        return resources.getString(R.string.location_can_not_be_blank)
     }
 
-    override fun getIssueDeleting(): String {
-        return "Issue deleting location"
+    override suspend fun getNoResultString(): String {
+        return resources.getString(R.string.no_results)
     }
 
-    override fun getUnknownErrorString(): String {
-        return "An unknown error occurred"
+    override suspend fun getIssueLoadingCache(): String {
+        return resources.getString(R.string.issue_loading_cache)
     }
 
-    override fun getCheckInternetString(): String {
-        return "Please check your internet connection"
+    override suspend fun getIssueSaving(): String {
+        return resources.getString(R.string.issue_saving)
     }
 
-    override fun getCheckGPSString(): String {
-        return "Please enable GPS"
+    override suspend fun getIssueDeleting(): String {
+        return resources.getString(R.string.issue_deleting)
     }
 }

+ 1 - 2
core/local/src/main/java/com/codeskraps/core/local/di/LocalModule.kt

@@ -1,6 +1,5 @@
 package com.codeskraps.core.local.di
 
-import android.content.Context
 import com.codeskraps.core.local.data.db.GeocodingDB
 import com.codeskraps.core.local.data.repository.LocalGeocodingRepositoryImpl
 import com.codeskraps.core.local.data.repository.LocalResourceRepositoryImpl
@@ -11,7 +10,7 @@ import org.koin.dsl.module
 
 val localModule = module {
     single<LocalResourceRepository> { 
-        LocalResourceRepositoryImpl(androidContext())
+        LocalResourceRepositoryImpl(androidContext().resources)
     }
     
     single { 

+ 0 - 27
core/local/src/main/java/com/codeskraps/core/local/di/LocalRepositoryModule.kt

@@ -1,27 +0,0 @@
-package com.codeskraps.core.local.di
-
-import android.content.Context
-import com.codeskraps.core.local.data.db.GeocodingDB
-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 org.koin.android.ext.koin.androidContext
-import org.koin.dsl.module
-
-val localRepositoryModule = module {
-    single<LocalResourceRepository> { 
-        LocalResourceRepositoryImpl(androidContext())
-    }
-    
-    single<LocalGeocodingRepository> { 
-        LocalGeocodingRepositoryImpl(
-            geocodingDB = get(),
-            localResource = get()
-        )
-    }
-    
-    single { 
-        GeocodingDB.getInstance(androidContext())
-    }
-}

+ 0 - 3
core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalGeocodingRepository.kt

@@ -6,10 +6,7 @@ import com.codeskraps.feature.common.util.Resource
 interface LocalGeocodingRepository {
 
     suspend fun getCachedGeoLocation(): Resource<List<GeoLocation>>
-
     suspend fun saveCacheGeoLocation(geoLocation: GeoLocation): Resource<Unit>
-
     suspend fun deleteCacheGeoLocation(geoLocation: GeoLocation): Resource<Unit>
-
     suspend fun isCached(latitude: Double, longitude: Double): Resource<Boolean>
 }

+ 9 - 9
core/local/src/main/java/com/codeskraps/core/local/domain/repository/LocalResourceRepository.kt

@@ -1,13 +1,13 @@
 package com.codeskraps.core.local.domain.repository
 
 interface LocalResourceRepository {
-    fun getCurrentLocationString(): String
-    fun getLocationCanNotBeBlankString(): String
-    fun getNoResultString(): String
-    fun getIssueLoadingCache(): String
-    fun getIssueSaving(): String
-    fun getIssueDeleting(): String
-    fun getUnknownErrorString(): String
-    fun getCheckInternetString(): String
-    fun getCheckGPSString(): String
+    suspend fun getUnknownErrorString(): String
+    suspend fun getCurrentLocationString(): String
+    suspend fun getCheckInternetString(): String
+    suspend fun getCheckGPSString(): String
+    suspend fun getLocationCanNotBeBlankString(): String
+    suspend fun getNoResultString(): String
+    suspend fun getIssueLoadingCache(): String
+    suspend fun getIssueSaving(): String
+    suspend fun getIssueDeleting(): String
 }

+ 11 - 9
feature/maps/src/main/java/com/codeskraps/maps/presentation/components/MapScreen.kt

@@ -1,6 +1,7 @@
 package com.codeskraps.maps.presentation.components
 
 import android.content.res.Resources
+import android.util.Log
 import android.widget.Toast
 import androidx.activity.compose.BackHandler
 import androidx.annotation.ColorInt
@@ -54,6 +55,7 @@ fun MapScreen(
     state: MapState,
     handleEvent: (MapEvent) -> Unit,
     action: Flow<MapAction>,
+    navUp: () -> Unit,
     navRoute: (String) -> Unit
 ) {
     val context = LocalContext.current
@@ -63,7 +65,7 @@ fun MapScreen(
     ObserveAsEvents(action) { mapAction ->
         when (mapAction) {
             is MapAction.ShowToast -> {
-                android.util.Log.i(tag, "Showing toast: ${mapAction.message}")
+                Log.i(tag, "Showing toast: ${mapAction.message}")
                 Toast.makeText(context, mapAction.message, Toast.LENGTH_SHORT).show()
             }
         }
@@ -76,22 +78,22 @@ fun MapScreen(
     // Use LaunchedEffect to update camera position when location changes
     LaunchedEffect(state.location) {
         state.location?.let {
-            android.util.Log.i(tag, "Updating camera position to: $it")
+            Log.i(tag, "Updating camera position to: $it")
             cameraPositionState.position = CameraPosition.fromLatLngZoom(it, 10f)
         }
     }
 
     LifecycleResumeEffect(Unit) {
-        android.util.Log.i(tag, "Screen resumed, sending Resume event")
+        Log.i(tag, "Screen resumed, sending Resume event")
         handleEvent(MapEvent.Resume)
         onPauseOrDispose {
-            android.util.Log.i(tag, "Screen paused/disposed")
+            Log.i(tag, "Screen paused/disposed")
         }
     }
 
     BackHandler {
-        android.util.Log.i(tag, "Back pressed, sending NavigateUp event")
-        navRoute("nav_up")
+        Log.i(tag, "Back pressed, sending NavigateUp event")
+        navUp()
     }
 
     Scaffold(
@@ -107,8 +109,8 @@ fun MapScreen(
                 navigationIcon = {
                     IconButton(
                         onClick = {
-                            android.util.Log.i(tag, "Back button clicked, sending NavigateUp event")
-                            navRoute("nav_up")
+                            Log.i(tag, "Back button clicked, sending NavigateUp event")
+                            navUp()
                         }
                     ) {
                         Icon(
@@ -131,7 +133,7 @@ fun MapScreen(
                                     cameraPositionState.position.target.latitude,
                                     cameraPositionState.position.target.longitude
                                 )
-                                android.util.Log.i(tag, "Add location clicked, navigating to route: $route")
+                                Log.i(tag, "Add location clicked, navigating to route: $route")
                                 navRoute(route)
                             }
                         ) {

+ 1 - 1
feature/weather/src/main/java/com/codeskraps/feature/weather/presentation/WeatherViewModel.kt

@@ -239,7 +239,7 @@ class WeatherViewModel(
 
                 when (val result =
                     localGeocodingRepository.saveCacheGeoLocation(
-                        weatherLocation.copy(name = name).toGeoLocation()
+                        weatherLocation.copy(name = name).toGeoLocation().copy(cached = true)
                     )) {
                     is Resource.Success -> {
                         savedStateHandle["name"] = name

+ 1 - 1
gradle/libs.versions.toml

@@ -1,6 +1,6 @@
 [versions]
 androidxComposeBom = "2025.03.01"
-androidGradlePlugin = "8.9.1"
+androidGradlePlugin = "8.9.2"
 coreSplashscreen = "1.0.1"
 kotlinxCoroutinesAndroid = "1.8.1"
 ktx = "1.15.0"