Skip to content

Commit fa532e1

Browse files
authored
Merge pull request #1210 from android/lifecycle2.7.0
Update Lifecycle to 2.7.0. Use new LifecycleEventEffect.
2 parents 6add4d6 + 08d8f13 commit fa532e1

File tree

5 files changed

+51
-27
lines changed

5 files changed

+51
-27
lines changed

app/dependencies/prodReleaseRuntimeClasspath.txt

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,20 @@ androidx.hilt:hilt-navigation:1.0.0
7171
androidx.hilt:hilt-work:1.1.0
7272
androidx.interpolator:interpolator:1.0.0
7373
androidx.legacy:legacy-support-core-utils:1.0.0
74-
androidx.lifecycle:lifecycle-common-java8:2.6.2
75-
androidx.lifecycle:lifecycle-common:2.6.2
76-
androidx.lifecycle:lifecycle-livedata-core:2.6.2
77-
androidx.lifecycle:lifecycle-livedata:2.6.2
78-
androidx.lifecycle:lifecycle-process:2.6.2
79-
androidx.lifecycle:lifecycle-runtime-compose:2.6.2
80-
androidx.lifecycle:lifecycle-runtime-ktx:2.6.2
81-
androidx.lifecycle:lifecycle-runtime:2.6.2
82-
androidx.lifecycle:lifecycle-service:2.6.2
83-
androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2
84-
androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2
85-
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2
86-
androidx.lifecycle:lifecycle-viewmodel:2.6.2
74+
androidx.lifecycle:lifecycle-common-java8:2.7.0
75+
androidx.lifecycle:lifecycle-common:2.7.0
76+
androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0
77+
androidx.lifecycle:lifecycle-livedata-core:2.7.0
78+
androidx.lifecycle:lifecycle-livedata:2.7.0
79+
androidx.lifecycle:lifecycle-process:2.7.0
80+
androidx.lifecycle:lifecycle-runtime-compose:2.7.0
81+
androidx.lifecycle:lifecycle-runtime-ktx:2.7.0
82+
androidx.lifecycle:lifecycle-runtime:2.7.0
83+
androidx.lifecycle:lifecycle-service:2.7.0
84+
androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0
85+
androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0
86+
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0
87+
androidx.lifecycle:lifecycle-viewmodel:2.7.0
8788
androidx.loader:loader:1.0.0
8889
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
8990
androidx.metrics:metrics-performance:1.0.0-alpha04

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ 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-
4847
add("implementation", libs.findLibrary("androidx.tracing.ktx").get())
48+
49+
add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get())
4950
}
5051
}
5152
}

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

Lines changed: 30 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,29 @@ class BookmarksScreenTest {
166171
)
167172
.assertExists()
168173
}
174+
175+
@Test
176+
fun feed_whenLifecycleStops_undoBookmarkedStateIsCleared() = runTest {
177+
var undoStateCleared = false
178+
val testLifecycleOwner = TestLifecycleOwner(initialState = Lifecycle.State.STARTED)
179+
180+
composeTestRule.setContent {
181+
CompositionLocalProvider(LocalLifecycleOwner provides testLifecycleOwner) {
182+
BookmarksScreen(
183+
feedState = NewsFeedUiState.Success(emptyList()),
184+
onShowSnackbar = { _, _ -> false },
185+
removeFromBookmarks = {},
186+
onTopicClick = {},
187+
onNewsResourceViewed = {},
188+
clearUndoState = {
189+
undoStateCleared = true
190+
},
191+
)
192+
}
193+
}
194+
195+
assertEquals(false, undoStateCleared)
196+
testLifecycleOwner.handleLifecycleEvent(event = Lifecycle.Event.ON_STOP)
197+
assertEquals(true, undoStateCleared)
198+
}
169199
}

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)