From a78df6f10a020c8e7be530a4777844a6dfcd0b3c Mon Sep 17 00:00:00 2001 From: arpitdhoundiyal Date: Mon, 2 Mar 2026 16:06:06 +0530 Subject: [PATCH 1/4] Fix ViewModel not clearing on NavigationState pop (nav3) --- .../apps/nowinandroid/core/navigation/NavigationState.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt index 864fec7940..e10d4d70e0 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.core.navigation +import android.util.Log import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf @@ -84,11 +85,16 @@ class NavigationState( fun NavigationState.toEntries( entryProvider: (NavKey) -> NavEntry, ): SnapshotStateList> { + Log.d("NAV_CHECK", "TopStack: $topLevelStack") val decoratedEntries = subStacks.mapValues { (_, stack) -> + val decorators = listOf( rememberSaveableStateHolderNavEntryDecorator(), - rememberViewModelStoreNavEntryDecorator(), + rememberViewModelStoreNavEntryDecorator( + removeViewModelStoreOnPop = { true } + ), ) + rememberDecoratedNavEntries( backStack = stack, entryDecorators = decorators, @@ -100,3 +106,4 @@ fun NavigationState.toEntries( .flatMap { decoratedEntries[it] ?: emptyList() } .toMutableStateList() } + From 0275e4dc0eff324b925ae9077e661cb4a1f75e93 Mon Sep 17 00:00:00 2001 From: arpitdhoundiyal Date: Mon, 2 Mar 2026 16:18:19 +0530 Subject: [PATCH 2/4] . --- .../samples/apps/nowinandroid/core/navigation/NavigationState.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt index e10d4d70e0..cc2268bbf3 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt @@ -85,7 +85,6 @@ class NavigationState( fun NavigationState.toEntries( entryProvider: (NavKey) -> NavEntry, ): SnapshotStateList> { - Log.d("NAV_CHECK", "TopStack: $topLevelStack") val decoratedEntries = subStacks.mapValues { (_, stack) -> val decorators = listOf( From 1253eb460ccbe5adfc96a51fefaf9aabc6ac27c0 Mon Sep 17 00:00:00 2001 From: arpitdhoundiyal Date: Mon, 2 Mar 2026 16:24:46 +0530 Subject: [PATCH 3/4] Fix ViewModel not clearing on NavigationState pop (nav3) --- .../samples/apps/nowinandroid/core/navigation/NavigationState.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt index cc2268bbf3..c3326569e2 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NavigationState.kt @@ -16,7 +16,6 @@ package com.google.samples.apps.nowinandroid.core.navigation -import android.util.Log import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf From 4531d7a7db7865600b2038950f2055ab924320d1 Mon Sep 17 00:00:00 2001 From: arpitdhoundiyal Date: Mon, 2 Mar 2026 16:31:26 +0530 Subject: [PATCH 4/4] Fix: Scope ViewModel to backStackEntry to ensure onCleared() is called --- .../apps/nowinandroid/feature/topic/impl/TopicViewModel.kt | 4 ++++ gradle/libs.versions.toml | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/TopicViewModel.kt b/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/TopicViewModel.kt index f604eb65b5..a5202a9332 100644 --- a/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/TopicViewModel.kt +++ b/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/TopicViewModel.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.feature.topic.impl +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.samples.apps.nowinandroid.core.common.result.Result @@ -46,6 +47,7 @@ class TopicViewModel @AssistedInject constructor( userNewsResourceRepository: UserNewsResourceRepository, @Assisted val topicId: String, ) : ViewModel() { + val topicUiState: StateFlow = topicUiState( topicId = topicId, userDataRepository = userDataRepository, @@ -71,6 +73,7 @@ class TopicViewModel @AssistedInject constructor( fun followTopicToggle(followed: Boolean) { viewModelScope.launch { userDataRepository.setTopicIdFollowed(topicId, followed) + } } @@ -86,6 +89,7 @@ class TopicViewModel @AssistedInject constructor( } } + @AssistedFactory interface Factory { fun create( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fbe070c1a8..e8786d8b1b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,8 +2,8 @@ accompanist = "0.37.0" androidDesugarJdkLibs = "2.1.4" # AGP and tools should be updated together -androidGradlePlugin = "9.0.0" -androidTools = "32.0.0" +androidGradlePlugin = "9.0.1" +androidTools = "32.0.1" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0"