From 008cf3ba68692b2b0d0ec54016063845aaa221b7 Mon Sep 17 00:00:00 2001 From: Julien Pedron Date: Thu, 4 Apr 2024 09:17:27 +0200 Subject: [PATCH] feat : Compose - collectAsStateWithLifecycle Add Compose-related convenience functions to collect a State variable in a lifecycle-aware manner. Mirror `collectAsState` extension functions and create the lifecycle-aware version `collectAsStateWithLifecycle`. Add new dependency to `androidx.lifecycle:lifecycle-runtime-compose`. Update `ComposeSampleActivity` to use one of the new `collectAsStateWithLifecycle` extension function. --- gradle/libs.versions.toml | 1 + mvrx-compose/build.gradle | 1 + .../compose/MavericksComposeExtensions.kt | 62 +++ .../compose/sample/ComposeSampleActivity.kt | 3 +- versions.properties | 474 ++++++++++++++++++ 5 files changed, 540 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6085a008..cf991cac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,6 +64,7 @@ retrofitRxJava = "com.squareup.retrofit2:adapter-rxjava2:_" roomRuntime = "androidx.room:room-runtime:_" roomRxJava = "androidx.room:room-rxjava2:_" runtimeKtx = "androidx.lifecycle:lifecycle-runtime-ktx:_" +runtimeCompose = "androidx.lifecycle:lifecycle-runtime-compose:_" rxAndroid = "io.reactivex.rxjava2:rxandroid:_" rxJava = "io.reactivex.rxjava2:rxjava:_" viewModelKtx = "androidx.lifecycle:lifecycle-viewmodel-ktx:_" diff --git a/mvrx-compose/build.gradle b/mvrx-compose/build.gradle index 4b10088c..13fa91d9 100644 --- a/mvrx-compose/build.gradle +++ b/mvrx-compose/build.gradle @@ -62,6 +62,7 @@ dependencies { implementation libs.composeFoundation implementation libs.composeUi implementation libs.viewModelCompose + implementation libs.runtimeCompose debugImplementation libs.composeUiTestManifest testImplementation project(':mvrx-testing') diff --git a/mvrx-compose/src/main/kotlin/com/airbnb/mvrx/compose/MavericksComposeExtensions.kt b/mvrx-compose/src/main/kotlin/com/airbnb/mvrx/compose/MavericksComposeExtensions.kt index 9d276695..8e35c862 100644 --- a/mvrx-compose/src/main/kotlin/com/airbnb/mvrx/compose/MavericksComposeExtensions.kt +++ b/mvrx-compose/src/main/kotlin/com/airbnb/mvrx/compose/MavericksComposeExtensions.kt @@ -15,8 +15,10 @@ import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalView import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.savedstate.SavedStateRegistryOwner import com.airbnb.mvrx.ActivityViewModelContext import com.airbnb.mvrx.FragmentViewModelContext @@ -144,6 +146,22 @@ fun , S : MavericksState> VM.collectAsState(): State< return stateFlow.collectAsState(initial = withState(this) { it }) } +/** + * Creates a Compose State variable that will emit new values whenever this ViewModel's state changes in a lifecycle-aware manner. + * Prefer the overload with a state property reference to ensure that your composable only recomposes when the properties it uses changes. + */ +@Composable +fun , S : MavericksState> VM.collectAsStateWithLifecycle( + lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, + minActiveState: Lifecycle.State = Lifecycle.State.STARTED +): State { + return stateFlow.collectAsStateWithLifecycle( + initialValue = withState(this) { it }, + lifecycleOwner = lifecycleOwner, + minActiveState = minActiveState + ) +} + /** * Creates a Compose State variable that will emit new values whenever this ViewModel's state mapped to the provided mapper changes. * Prefer the overload with a state property reference to ensure that your composable only recomposes when the properties it uses changes. @@ -160,6 +178,31 @@ fun , S : MavericksState, O> VM.collectAsState(key: A return mappedFlow.collectAsState(initial = withState(this) { updatedMapper(it) }) } +/** + * Creates a Compose State variable that will emit new values whenever this ViewModel's state mapped to the provided mapper changes in a lifecycle-aware manner. + * Prefer the overload with a state property reference to ensure that your composable only recomposes when the properties it uses changes. + * + * @param key An optional key that should be changed if the mapper changes. If your mapper always does the same thing, you can leave this as Unit. + * If your mapper changes (for example, reading a different state property) then, by default, you won't receive an updated state value + * until either the ViewModel emits a new state or if you change the key. + * This is analogous to `remember(key) { … }`. + */ +@Composable +fun , S : MavericksState, O> VM.collectAsStateWithLifecycle( + key: Any? = Unit, + mapper: (S) -> O, + lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, + minActiveState: Lifecycle.State = Lifecycle.State.STARTED +): State { + val updatedMapper by rememberUpdatedState(mapper) + val mappedFlow = remember(key) { stateFlow.map { updatedMapper(it) }.distinctUntilChanged() } + return mappedFlow.collectAsStateWithLifecycle( + initialValue = withState(this) { updatedMapper(it) }, + lifecycleOwner = lifecycleOwner, + minActiveState = minActiveState + ) +} + /** * Creates a Compose State variable that will only update when the value of this property changes. * Prefer this to subscribing to entire state classes which will trigger a recomposition whenever any state variable changes. @@ -170,3 +213,22 @@ fun , S : MavericksState, A> VM.collectAsState(prop1: val mappedFlow = remember(prop1) { stateFlow.map { prop1.get(it) }.distinctUntilChanged() } return mappedFlow.collectAsState(initial = withState(this) { prop1.get(it) }) } + +/** + * Creates a Compose State variable that will only update when the value of this property changes that can be collected in a lifecycle-aware manner. + * Prefer this to subscribing to entire state classes which will trigger a recomposition whenever any state variable changes. + * If you find yourself subscribing to many state properties in a single composable, consider breaking it up into smaller ones. + */ +@Composable +fun , S : MavericksState, A> VM.collectAsStateWithLifecycle( + prop1: KProperty1, + lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, + minActiveState: Lifecycle.State = Lifecycle.State.STARTED +): State { + val mappedFlow = remember(prop1) { stateFlow.map { prop1.get(it) }.distinctUntilChanged() } + return mappedFlow.collectAsStateWithLifecycle( + initialValue = withState(this) { prop1.get(it) }, + lifecycleOwner = lifecycleOwner, + minActiveState = minActiveState + ) +} diff --git a/sample-compose/src/main/java/com/airbnb/mvrx/compose/sample/ComposeSampleActivity.kt b/sample-compose/src/main/java/com/airbnb/mvrx/compose/sample/ComposeSampleActivity.kt index e2b9d3e6..ad958c96 100644 --- a/sample-compose/src/main/java/com/airbnb/mvrx/compose/sample/ComposeSampleActivity.kt +++ b/sample-compose/src/main/java/com/airbnb/mvrx/compose/sample/ComposeSampleActivity.kt @@ -22,6 +22,7 @@ import androidx.navigation.compose.rememberNavController import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.MavericksViewModel import com.airbnb.mvrx.compose.collectAsState +import com.airbnb.mvrx.compose.collectAsStateWithLifecycle import com.airbnb.mvrx.compose.mavericksActivityViewModel import com.airbnb.mvrx.compose.mavericksViewModel @@ -94,7 +95,7 @@ class ComposeSampleActivity : AppCompatActivity() { val activityScopedViewModel: CounterViewModel = mavericksActivityViewModel() val navScopedCount by navScopedViewModel.collectAsState(CounterState::count) - val activityScopedCount by activityScopedViewModel.collectAsState(CounterState::count) + val activityScopedCount by activityScopedViewModel.collectAsStateWithLifecycle(CounterState::count) Column { Text(title) diff --git a/versions.properties b/versions.properties index ebcba689..bc6338b8 100644 --- a/versions.properties +++ b/versions.properties @@ -18,8 +18,18 @@ version.robolectric=4.8.1 ## # available=4.9.1 ## # available=4.9.2 ## # available=4.10-alpha-1 +## # available=4.10 +## # available=4.10.1 +## # available=4.10.2 +## # available=4.10.3 +## # available=4.11-beta-1 +## # available=4.11-beta-2 +## # available=4.11 +## # available=4.11.1 version.retrofit2=2.9.0 +## # available=2.10.0 +## # available=2.11.0 version.picasso=2.8 ## # available=2.71828 @@ -41,6 +51,10 @@ version.org.jetbrains.dokka..dokka-gradle-plugin=1.6.10 ## # available=1.7.10 ## # available=1.7.20 ## # available=1.8.10 +## # available=1.8.20 +## # available=1.9.0 +## # available=1.9.10 +## # available=1.9.20 ## unused version.org.jetbrains.dokka..dokka-base=1.4.32 @@ -50,6 +64,8 @@ version.org.jacoco..org.jacoco.ant=0.8.7 version.moshi=1.13.0 ### available=1.14.0 +### available=1.15.0 +### available=1.15.1 version.mockk=1.12.5 ### available=1.12.6 @@ -59,6 +75,12 @@ version.mockk=1.12.5 ### available=1.13.2 ### available=1.13.3 ### available=1.13.4 +### available=1.13.5 +### available=1.13.6 +### available=1.13.7 +### available=1.13.8 +### available=1.13.9 +### available=1.13.10 version.mockito=4.6.1 ## # available=4.7.0 @@ -71,20 +93,71 @@ version.mockito=4.6.1 ## # available=5.1.0 ## # available=5.1.1 ## # available=5.2.0 +## # available=5.3.0 +## # available=5.3.1 +## # available=5.4.0 +## # available=5.5.0 +## # available=5.6.0 +## # available=5.7.0 +## # available=5.8.0 +## # available=5.9.0 +## # available=5.10.0 +## # available=5.11.0 version.kotlinx.coroutines=1.6.4 ## # available=1.7.0-Beta +## # available=1.7.0-RC +## # available=1.7.0 +## # available=1.7.1 +## # available=1.7.2 +## # available=1.7.3 +## # available=1.8.0-RC +## # available=1.8.0-RC2 +## # available=1.8.0 +## # available=1.8.1-Beta version.kotlin=1.8.22 +## # available=1.9.0-Beta +## # available=1.9.0-RC +## # available=1.9.0 +## # available=1.9.10 +## # available=1.9.20-Beta +## # available=1.9.20-Beta2 +## # available=1.9.20-RC +## # available=1.9.20-RC2 +## # available=1.9.20 +## # available=1.9.21 +## # available=1.9.22 +## # available=1.9.23 +## # available=2.0.0-Beta1 +## # available=2.0.0-Beta2 +## # available=2.0.0-Beta3 +## # available=2.0.0-Beta4 +## # available=2.0.0-Beta5 version.koin=3.2.0 ### available=3.2.1 ### available=3.2.2 ### available=3.2.3 +### available=3.2.4-rc1 +### available=3.2.4-rc2 +### available=3.2.4 ### available=3.3.0 ### available=3.3.1 ### available=3.3.2 ### available=3.3.3 +### available=3.4.0 +### available=3.4.1 +### available=3.4.2 +### available=3.4.3 +### available=3.5.0 +### available=3.5.2-RC1 +### available=3.5.3 +### available=3.5.4-RC1 +### available=3.6.0-wasm-alpha1 +### available=3.6.0-wasm-alpha2 +### available=3.6.0-alpha1 +### available=3.6.0-alpha3 version.junit.jupiter=5.8.2 ## # available=5.9.0-M1 @@ -92,6 +165,13 @@ version.junit.jupiter=5.8.2 ## # available=5.9.0 ## # available=5.9.1 ## # available=5.9.2 +## # available=5.9.3 +## # available=5.10.0-M1 +## # available=5.10.0-RC1 +## # available=5.10.0-RC2 +## # available=5.10.0 +## # available=5.10.1 +## # available=5.10.2 version.junit.junit=4.13.2 @@ -100,18 +180,50 @@ version.io.gitlab.arturbosch.detekt..detekt-formatting=1.21.0 ## # available=1.22.0-RC2 ## # available=1.22.0-RC3 ## # available=1.22.0 +## # available=1.23.0-RC1 +## # available=1.23.0-RC2 +## # available=1.23.0-RC3 +## # available=1.23.0 +## # available=1.23.1 +## # available=1.23.2 +## # available=1.23.3 +## # available=1.23.4 +## # available=1.23.5 +## # available=1.23.6 version.google.dagger=2.43.2 ## # available=2.44 ## # available=2.44.1 ## # available=2.44.2 ## # available=2.45 +## # available=2.46 +## # available=2.46.1 +## # available=2.47 +## # available=2.48 +## # available=2.48.1 +## # available=2.49 +## # available=2.50 +## # available=2.51 version.com.vanniktech..gradle-maven-publish-plugin=0.22.0 ## # available=0.23.0 ## # available=0.23.1 ## # available=0.23.2 ## # available=0.24.0 +## # available=0.25.0-rc1 +## # available=0.25.0 +## # available=0.25.1 +## # available=0.25.2-rc1 +## # available=0.25.2 +## # available=0.25.3-rc1 +## # available=0.25.3 +## # available=0.26.0-rc1 +## # available=0.26.0 +## # available=0.27.0-rc1 +## # available=0.27.0-rc2 +## # available=0.27.0 +## # available=0.28.0-rc1 +## # available=0.28.0 version.com.nhaarman.mockitokotlin2..mockito-kotlin=2.2.0 @@ -131,19 +243,33 @@ version.com.google.auto.value..auto-value=1.6.6 ## # available=1.9 ## # available=1.10 ## # available=1.10.1 +## # available=1.10.2 +## # available=1.10.3 +## # available=1.10.4 version.com.airbnb.android..lottie=5.2.0 ## # available=6.0.0 +## # available=6.0.1 +## # available=6.1.0 +## # available=6.2.0 +## # available=6.3.0 +## # available=6.4.0 version.com.airbnb.android..epoxy-processor=5.0.0-beta05 ## # available=5.0.0 ## # available=5.1.0 ## # available=5.1.1 +## # available=5.1.2 +## # available=5.1.3 +## # available=5.1.4 version.com.airbnb.android..epoxy=5.0.0-beta05 ## # available=5.0.0 ## # available=5.1.0 ## # available=5.1.1 +## # available=5.1.2 +## # available=5.1.3 +## # available=5.1.4 ## unused version.androidx.test.ext.junit=1.1.1 @@ -162,6 +288,8 @@ version.androidx.test.espresso=3.4.0 ## # available=3.5.0 ## # available=3.5.1 ## # available=3.6.0-alpha01 +## # available=3.6.0-alpha02 +## # available=3.6.0-alpha03 version.androidx.test.core=1.4.0 ## # available=1.4.1-alpha01 @@ -177,6 +305,10 @@ version.androidx.test.core=1.4.0 ## # available=1.5.0-rc01 ## # available=1.5.0 ## # available=1.6.0-alpha01 +## # available=1.6.0-alpha02 +## # available=1.6.0-alpha03 +## # available=1.6.0-alpha04 +## # available=1.6.0-alpha05 version.androidx.room=2.4.3 ## # available=2.5.0-alpha01 @@ -187,7 +319,14 @@ version.androidx.room=2.4.3 ## # available=2.5.0-rc01 ## # available=2.5.0 ## # available=2.5.1 +## # available=2.5.2 ## # available=2.6.0-alpha01 +## # available=2.6.0-alpha02 +## # available=2.6.0-alpha03 +## # available=2.6.0-beta01 +## # available=2.6.0-rc01 +## # available=2.6.0 +## # available=2.6.1 version.androidx.recyclerview=1.2.1 ## # available=1.3.0-alpha01 @@ -196,6 +335,10 @@ version.androidx.recyclerview=1.2.1 ## # available=1.3.0-beta02 ## # available=1.3.0-rc01 ## # available=1.3.0 +## # available=1.3.1-rc01 +## # available=1.3.1 +## # available=1.3.2 +## # available=1.4.0-alpha01 version.androidx.navigation-compose=2.5.1 ## # available=2.5.2 @@ -208,6 +351,28 @@ version.androidx.navigation-compose=2.5.1 ## # available=2.6.0-alpha06 ## # available=2.6.0-alpha07 ## # available=2.6.0-alpha08 +## # available=2.6.0-alpha09 +## # available=2.6.0-beta01 +## # available=2.6.0-rc01 +## # available=2.6.0-rc02 +## # available=2.6.0 +## # available=2.7.0-alpha01 +## # available=2.7.0-beta01 +## # available=2.7.0-beta02 +## # available=2.7.0-rc01 +## # available=2.7.0 +## # available=2.7.1 +## # available=2.7.2 +## # available=2.7.3 +## # available=2.7.4 +## # available=2.7.5 +## # available=2.7.6 +## # available=2.7.7 +## # available=2.8.0-alpha01 +## # available=2.8.0-alpha02 +## # available=2.8.0-alpha03 +## # available=2.8.0-alpha04 +## # available=2.8.0-alpha05 version.androidx.navigation=2.5.1 ## # available=2.5.2 @@ -220,13 +385,58 @@ version.androidx.navigation=2.5.1 ## # available=2.6.0-alpha06 ## # available=2.6.0-alpha07 ## # available=2.6.0-alpha08 +## # available=2.6.0-alpha09 +## # available=2.6.0-beta01 +## # available=2.6.0-rc01 +## # available=2.6.0-rc02 +## # available=2.6.0 +## # available=2.7.0-alpha01 +## # available=2.7.0-beta01 +## # available=2.7.0-beta02 +## # available=2.7.0-rc01 +## # available=2.7.0 +## # available=2.7.1 +## # available=2.7.2 +## # available=2.7.3 +## # available=2.7.4 +## # available=2.7.5 +## # available=2.7.6 +## # available=2.7.7 +## # available=2.8.0-alpha01 +## # available=2.8.0-alpha02 +## # available=2.8.0-alpha03 +## # available=2.8.0-alpha04 +## # available=2.8.0-alpha05 version.androidx.multidex=2.0.1 version.androidx.lifecycle-viewmodel-compose=2.6.1 +## # available=2.6.2 +## # available=2.7.0-alpha01 +## # available=2.7.0-alpha02 +## # available=2.7.0-alpha03 +## # available=2.7.0-beta01 +## # available=2.7.0-rc01 +## # available=2.7.0-rc02 +## # available=2.7.0 +## # available=2.8.0-alpha01 +## # available=2.8.0-alpha02 +## # available=2.8.0-alpha03 version.androidx.lifecycle=2.6.1 +## # available=2.6.2 +## # available=2.7.0-alpha01 +## # available=2.7.0-alpha02 +## # available=2.7.0-alpha03 +## # available=2.7.0-beta01 +## # available=2.7.0-rc01 +## # available=2.7.0-rc02 +## # available=2.7.0 +## # available=2.8.0-alpha01 +## # available=2.8.0-alpha02 +## # available=2.8.0-alpha03 +## unused version.androidx.lifecycle-runtime-testing=2.6.1 version.androidx.fragment=1.5.2 @@ -234,6 +444,7 @@ version.androidx.fragment=1.5.2 ## # available=1.5.4 ## # available=1.5.5 ## # available=1.5.6 +## # available=1.5.7 ## # available=1.6.0-alpha01 ## # available=1.6.0-alpha02 ## # available=1.6.0-alpha03 @@ -242,6 +453,23 @@ version.androidx.fragment=1.5.2 ## # available=1.6.0-alpha06 ## # available=1.6.0-alpha07 ## # available=1.6.0-alpha08 +## # available=1.6.0-alpha09 +## # available=1.6.0-beta01 +## # available=1.6.0-rc01 +## # available=1.6.0 +## # available=1.6.1 +## # available=1.6.2 +## # available=1.7.0-alpha01 +## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 +## # available=1.7.0-alpha04 +## # available=1.7.0-alpha05 +## # available=1.7.0-alpha06 +## # available=1.7.0-alpha07 +## # available=1.7.0-alpha08 +## # available=1.7.0-alpha09 +## # available=1.7.0-alpha10 +## # available=1.7.0-beta01 ## unused version.androidx.databinding=7.2.2 @@ -259,10 +487,31 @@ version.androidx.core=1.8.0 ## # available=1.10.0-alpha02 ## # available=1.10.0-beta01 ## # available=1.10.0-rc01 +## # available=1.10.0 +## # available=1.10.1 ## # available=1.11.0-alpha01 +## # available=1.11.0-alpha02 +## # available=1.11.0-alpha03 +## # available=1.11.0-alpha04 +## # available=1.11.0-beta01 +## # available=1.11.0-beta02 ## # available=1.12.0-alpha01 +## # available=1.12.0-alpha03 +## # available=1.12.0-alpha04 +## # available=1.12.0-alpha05 +## # available=1.12.0-beta01 +## # available=1.12.0-rc01 +## # available=1.12.0 +## # available=1.13.0-alpha01 +## # available=1.13.0-alpha02 +## # available=1.13.0-alpha03 +## # available=1.13.0-alpha04 +## # available=1.13.0-alpha05 +## # available=1.13.0-beta01 version.androidx.coordinatorlayout=1.2.0 +## # available=1.3.0-alpha01 +## # available=1.3.0-alpha02 version.androidx.constraintlayout=2.1.4 ## # available=2.2.0-alpha01 @@ -274,6 +523,10 @@ version.androidx.constraintlayout=2.1.4 ## # available=2.2.0-alpha07 ## # available=2.2.0-alpha08 ## # available=2.2.0-alpha09 +## # available=2.2.0-alpha10 +## # available=2.2.0-alpha11 +## # available=2.2.0-alpha12 +## # available=2.2.0-alpha13 version.androidx.compose.ui=1.2.1 ## # available=1.3.0-alpha01 @@ -296,7 +549,44 @@ version.androidx.compose.ui=1.2.1 ## # available=1.4.0-beta02 ## # available=1.4.0-rc01 ## # available=1.4.0 +## # available=1.4.1 +## # available=1.4.2 +## # available=1.4.3 ## # available=1.5.0-alpha01 +## # available=1.5.0-alpha02 +## # available=1.5.0-alpha03 +## # available=1.5.0-alpha04 +## # available=1.5.0-beta01 +## # available=1.5.0-beta02 +## # available=1.5.0-beta03 +## # available=1.5.0-rc01 +## # available=1.5.0 +## # available=1.5.1 +## # available=1.5.2 +## # available=1.5.3 +## # available=1.5.4 +## # available=1.6.0-alpha01 +## # available=1.6.0-alpha02 +## # available=1.6.0-alpha03 +## # available=1.6.0-alpha04 +## # available=1.6.0-alpha05 +## # available=1.6.0-alpha06 +## # available=1.6.0-alpha07 +## # available=1.6.0-alpha08 +## # available=1.6.0-beta01 +## # available=1.6.0-beta02 +## # available=1.6.0-beta03 +## # available=1.6.0-rc01 +## # available=1.6.0 +## # available=1.6.1 +## # available=1.6.2 +## # available=1.6.3 +## # available=1.6.4 +## # available=1.7.0-alpha01 +## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 +## # available=1.7.0-alpha04 +## # available=1.7.0-alpha05 version.androidx.compose.material=1.2.1 ## # available=1.3.0-alpha01 @@ -317,7 +607,44 @@ version.androidx.compose.material=1.2.1 ## # available=1.4.0-beta02 ## # available=1.4.0-rc01 ## # available=1.4.0 +## # available=1.4.1 +## # available=1.4.2 +## # available=1.4.3 ## # available=1.5.0-alpha01 +## # available=1.5.0-alpha02 +## # available=1.5.0-alpha03 +## # available=1.5.0-alpha04 +## # available=1.5.0-beta01 +## # available=1.5.0-beta02 +## # available=1.5.0-beta03 +## # available=1.5.0-rc01 +## # available=1.5.0 +## # available=1.5.1 +## # available=1.5.2 +## # available=1.5.3 +## # available=1.5.4 +## # available=1.6.0-alpha01 +## # available=1.6.0-alpha02 +## # available=1.6.0-alpha03 +## # available=1.6.0-alpha04 +## # available=1.6.0-alpha05 +## # available=1.6.0-alpha06 +## # available=1.6.0-alpha07 +## # available=1.6.0-alpha08 +## # available=1.6.0-beta01 +## # available=1.6.0-beta02 +## # available=1.6.0-beta03 +## # available=1.6.0-rc01 +## # available=1.6.0 +## # available=1.6.1 +## # available=1.6.2 +## # available=1.6.3 +## # available=1.6.4 +## # available=1.7.0-alpha01 +## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 +## # available=1.7.0-alpha04 +## # available=1.7.0-alpha05 version.androidx.compose.foundation=1.2.1 ## # available=1.3.0-alpha01 @@ -338,7 +665,44 @@ version.androidx.compose.foundation=1.2.1 ## # available=1.4.0-beta02 ## # available=1.4.0-rc01 ## # available=1.4.0 +## # available=1.4.1 +## # available=1.4.2 +## # available=1.4.3 ## # available=1.5.0-alpha01 +## # available=1.5.0-alpha02 +## # available=1.5.0-alpha03 +## # available=1.5.0-alpha04 +## # available=1.5.0-beta01 +## # available=1.5.0-beta02 +## # available=1.5.0-beta03 +## # available=1.5.0-rc01 +## # available=1.5.0 +## # available=1.5.1 +## # available=1.5.2 +## # available=1.5.3 +## # available=1.5.4 +## # available=1.6.0-alpha01 +## # available=1.6.0-alpha02 +## # available=1.6.0-alpha03 +## # available=1.6.0-alpha04 +## # available=1.6.0-alpha05 +## # available=1.6.0-alpha06 +## # available=1.6.0-alpha07 +## # available=1.6.0-alpha08 +## # available=1.6.0-beta01 +## # available=1.6.0-beta02 +## # available=1.6.0-beta03 +## # available=1.6.0-rc01 +## # available=1.6.0 +## # available=1.6.1 +## # available=1.6.2 +## # available=1.6.3 +## # available=1.6.4 +## # available=1.7.0-alpha01 +## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 +## # available=1.7.0-alpha04 +## # available=1.7.0-alpha05 ## unused version.androidx.compose.compiler=1.4.8 @@ -357,6 +721,7 @@ version.androidx.appcompat=1.5.0 ## # available=1.6.1 ## # available=1.7.0-alpha01 ## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 version.androidx.activity=1.5.1 ## # available=1.6.0-alpha01 @@ -375,15 +740,124 @@ version.androidx.activity=1.5.1 ## # available=1.7.0-beta02 ## # available=1.7.0-rc01 ## # available=1.7.0 +## # available=1.7.1 +## # available=1.7.2 ## # available=1.8.0-alpha01 ## # available=1.8.0-alpha02 +## # available=1.8.0-alpha03 +## # available=1.8.0-alpha04 +## # available=1.8.0-alpha05 +## # available=1.8.0-alpha06 +## # available=1.8.0-alpha07 +## # available=1.8.0-beta01 +## # available=1.8.0-rc01 +## # available=1.8.0 +## # available=1.8.1 +## # available=1.8.2 +## # available=1.9.0-alpha01 +## # available=1.9.0-alpha02 +## # available=1.9.0-alpha03 +## # available=1.9.0-beta01 plugin.io.gitlab.arturbosch.detekt=1.21.0 ## # available=1.22.0-RC1 ## # available=1.22.0-RC2 ## # available=1.22.0-RC3 ## # available=1.22.0 +## # available=1.23.0-RC1 +## # available=1.23.0-RC2 +## # available=1.23.0-RC3 +## # available=1.23.0 +## # available=1.23.1 +## # available=1.23.2 +## # available=1.23.3 +## # available=1.23.4 +## # available=1.23.5 +## # available=1.23.6 version.anvil=2.4.6 +### available=2.4.7 +### available=2.4.7-1-8 +### available=2.4.8 +### available=2.4.8-1-8 +### available=2.4.9 +### available=2.4.9-1-8 +### available=2.5.0-beta01 +### available=2.5.0-beta02 +### available=2.5.0-beta03 +### available=2.5.0-beta04 plugin.android=8.1.0 +## # available=8.1.1 +## # available=8.1.2 +## # available=8.1.3 +## # available=8.1.4 +## # available=8.2.0-alpha01 +## # available=8.2.0-alpha02 +## # available=8.2.0-alpha03 +## # available=8.2.0-alpha04 +## # available=8.2.0-alpha05 +## # available=8.2.0-alpha06 +## # available=8.2.0-alpha07 +## # available=8.2.0-alpha08 +## # available=8.2.0-alpha09 +## # available=8.2.0-alpha10 +## # available=8.2.0-alpha11 +## # available=8.2.0-alpha12 +## # available=8.2.0-alpha13 +## # available=8.2.0-alpha14 +## # available=8.2.0-alpha15 +## # available=8.2.0-alpha16 +## # available=8.2.0-beta01 +## # available=8.2.0-beta02 +## # available=8.2.0-beta03 +## # available=8.2.0-beta04 +## # available=8.2.0-beta05 +## # available=8.2.0-beta06 +## # available=8.2.0-rc01 +## # available=8.2.0-rc02 +## # available=8.2.0-rc03 +## # available=8.2.0 +## # available=8.2.1 +## # available=8.2.2 +## # available=8.3.0-alpha01 +## # available=8.3.0-alpha02 +## # available=8.3.0-alpha03 +## # available=8.3.0-alpha04 +## # available=8.3.0-alpha05 +## # available=8.3.0-alpha06 +## # available=8.3.0-alpha07 +## # available=8.3.0-alpha08 +## # available=8.3.0-alpha09 +## # available=8.3.0-alpha10 +## # available=8.3.0-alpha11 +## # available=8.3.0-alpha12 +## # available=8.3.0-alpha13 +## # available=8.3.0-alpha14 +## # available=8.3.0-alpha15 +## # available=8.3.0-alpha16 +## # available=8.3.0-alpha17 +## # available=8.3.0-alpha18 +## # available=8.3.0-beta01 +## # available=8.3.0-beta02 +## # available=8.3.0-rc01 +## # available=8.3.0-rc02 +## # available=8.3.0 +## # available=8.3.1 +## # available=8.4.0-alpha01 +## # available=8.4.0-alpha02 +## # available=8.4.0-alpha03 +## # available=8.4.0-alpha04 +## # available=8.4.0-alpha05 +## # available=8.4.0-alpha06 +## # available=8.4.0-alpha07 +## # available=8.4.0-alpha08 +## # available=8.4.0-alpha09 +## # available=8.4.0-alpha10 +## # available=8.4.0-alpha11 +## # available=8.4.0-alpha12 +## # available=8.4.0-alpha13 +## # available=8.4.0-beta01 +## # available=8.4.0-beta02 +## # available=8.5.0-alpha01 +## # available=8.5.0-alpha02