Skip to content

Commit 254b464

Browse files
committed
Update Lifecycle to 2.7.0. Use new LifecycleEventEffect.
Change-Id: I71e7aa521f22499fd3f3e9f3ac7c81658f3abc3a
1 parent c1d6c88 commit 254b464

File tree

4 files changed

+38
-13
lines changed

4 files changed

+38
-13
lines changed

build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
4444
add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get())
4545
add("implementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get())
4646
add("implementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get())
47+
48+
add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get())
4749
}
4850
}
4951
}

feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package com.google.samples.apps.nowinandroid.feature.bookmarks
1818

1919
import androidx.activity.ComponentActivity
20+
import androidx.compose.runtime.CompositionLocalProvider
21+
import androidx.compose.ui.platform.LocalLifecycleOwner
2022
import androidx.compose.ui.test.assertCountEquals
2123
import androidx.compose.ui.test.assertHasClickAction
2224
import androidx.compose.ui.test.filter
@@ -30,8 +32,11 @@ import androidx.compose.ui.test.onNodeWithContentDescription
3032
import androidx.compose.ui.test.onNodeWithText
3133
import androidx.compose.ui.test.performClick
3234
import androidx.compose.ui.test.performScrollToNode
35+
import androidx.lifecycle.Lifecycle
36+
import androidx.lifecycle.testing.TestLifecycleOwner
3337
import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData
3438
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
39+
import kotlinx.coroutines.test.runTest
3540
import org.junit.Rule
3641
import org.junit.Test
3742
import kotlin.test.assertEquals
@@ -166,4 +171,30 @@ class BookmarksScreenTest {
166171
)
167172
.assertExists()
168173
}
174+
175+
@Test
176+
fun feed_whenLifecycleStops_undoBookmarkedStateIsCleared() = runTest {
177+
178+
var undoStateCleared = false
179+
val testLifecycleOwner = TestLifecycleOwner(initialState = Lifecycle.State.STARTED)
180+
181+
composeTestRule.setContent {
182+
CompositionLocalProvider(LocalLifecycleOwner provides testLifecycleOwner){
183+
BookmarksScreen(
184+
feedState = NewsFeedUiState.Success(emptyList()),
185+
onShowSnackbar = { _, _ -> false },
186+
removeFromBookmarks = {},
187+
onTopicClick = {},
188+
onNewsResourceViewed = {},
189+
clearUndoState = {
190+
undoStateCleared = true
191+
}
192+
)
193+
}
194+
}
195+
196+
assertEquals(false, undoStateCleared)
197+
testLifecycleOwner.handleLifecycleEvent(event = Lifecycle.Event.ON_STOP)
198+
assertEquals(true, undoStateCleared)
199+
}
169200
}

feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,12 @@ import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridS
4242
import androidx.compose.material3.MaterialTheme
4343
import androidx.compose.material3.Text
4444
import androidx.compose.runtime.Composable
45-
import androidx.compose.runtime.DisposableEffect
4645
import androidx.compose.runtime.LaunchedEffect
4746
import androidx.compose.runtime.getValue
4847
import androidx.compose.ui.Alignment
4948
import androidx.compose.ui.Modifier
5049
import androidx.compose.ui.graphics.Color
5150
import androidx.compose.ui.graphics.ColorFilter
52-
import androidx.compose.ui.platform.LocalLifecycleOwner
5351
import androidx.compose.ui.platform.testTag
5452
import androidx.compose.ui.res.painterResource
5553
import androidx.compose.ui.res.stringResource
@@ -60,7 +58,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
6058
import androidx.compose.ui.unit.dp
6159
import androidx.hilt.navigation.compose.hiltViewModel
6260
import androidx.lifecycle.Lifecycle
63-
import androidx.lifecycle.LifecycleEventObserver
61+
import androidx.lifecycle.compose.LifecycleEventEffect
6462
import androidx.lifecycle.compose.collectAsStateWithLifecycle
6563
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel
6664
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.DraggableScrollbar
@@ -128,15 +126,8 @@ internal fun BookmarksScreen(
128126
}
129127
}
130128

131-
val lifecycleOwner = LocalLifecycleOwner.current
132-
DisposableEffect(lifecycleOwner) {
133-
val observer = LifecycleEventObserver { _, event ->
134-
if (event == Lifecycle.Event.ON_STOP) {
135-
clearUndoState()
136-
}
137-
}
138-
lifecycleOwner.lifecycle.addObserver(observer)
139-
onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
129+
LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
130+
clearUndoState()
140131
}
141132

142133
when (feedState) {

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ androidxCoreSplashscreen = "1.0.1"
1515
androidxDataStore = "1.0.0"
1616
androidxEspresso = "3.5.1"
1717
androidxHiltNavigationCompose = "1.0.0"
18-
androidxLifecycle = "2.6.2"
18+
androidxLifecycle = "2.7.0"
1919
androidxMacroBenchmark = "1.2.2"
2020
androidxMetrics = "1.0.0-alpha04"
2121
androidxNavigation = "2.7.4"
@@ -82,6 +82,7 @@ androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscree
8282
androidx-dataStore-core = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" }
8383
androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidxHiltNavigationCompose" }
8484
androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" }
85+
androidx-lifecycle-runtimeTesting = { group = "androidx.lifecycle", name = "lifecycle-runtime-testing", version.ref = "androidxLifecycle" }
8586
androidx-lifecycle-viewModelCompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" }
8687
androidx-metrics = { group = "androidx.metrics", name = "metrics-performance", version.ref = "androidxMetrics" }
8788
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" }

0 commit comments

Comments
 (0)