Skip to content

Commit 291ec2d

Browse files
authored
Make circuit-retained fully optional (#354)
Followup to #352 and related to #349, this makes `circuit-retained` a fully optional artifact and documents its setup and installation. A few opportunistic improvements are made as well around idiomatic composition local setup and some repo infra stuff
1 parent e823850 commit 291ec2d

13 files changed

Lines changed: 38 additions & 60 deletions

File tree

.github/workflows/mkdocs-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ future==0.18.2
33
Jinja2==3.1.2
44
livereload==2.6.3
55
lunr==0.6.2
6-
Markdown==3.4.1
6+
Markdown==3.3.7
77
MarkupSafe==2.1.1
88
mkdocs==1.4.2
99
mkdocs-macros-plugin==0.7.0

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ out/
2323

2424
docs/code-of-conduct.md
2525
docs/contributing.md
26+
docs/changelog.md
2627
docs/api/
2728
site/
2829
temp-clone/

circuit-retained/README.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
11
circuit-retained
22
================
33

4-
This artifact contains an implementation of `rememberRetained` and `produceRetainedState`. This is
4+
This optional artifact contains an implementation of `rememberRetained` and `produceRetainedState`. This is
55
useful for cases where you want to retain non-parcelable state across configuration changes. This
66
comes at the cost of not participating in the `SavedStateRegistry` and thus not being able to
77
persist across process death.
8+
9+
The only meaningful implementation in this artifact is for Android, where a backing `ViewModel` is used
10+
to hold values. If you're not running this on Android, you shouldn't need this artifact.
11+
12+
## Installation
13+
14+
Simply provide the `LocalRetainedStateRegistry` composition local using `continuityRetainedStateRegistry()`.
15+
16+
```kotlin
17+
CompositionLocalProvider(
18+
LocalRetainedStateRegistry provides continuityRetainedStateRegistry(),
19+
) {
20+
// Content
21+
}
22+
```

circuit-retained/android-tests/src/androidTest/kotlin/com/circuit/retained/android/RetainedTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import androidx.lifecycle.ViewModelProvider
3030
import androidx.test.core.app.ActivityScenario
3131
import com.google.common.truth.Truth.assertThat
3232
import com.slack.circuit.retained.Continuity
33-
import com.slack.circuit.retained.LocalRetainedStateRegistryOwner
33+
import com.slack.circuit.retained.LocalRetainedStateRegistry
3434
import com.slack.circuit.retained.continuityRetainedStateRegistry
3535
import com.slack.circuit.retained.rememberRetained
3636
import leakcanary.DetectLeaksAfterTestSuccess.Companion.detectLeaksAfterTestSuccessWrapping
@@ -239,7 +239,7 @@ class RetainedTest {
239239
scenario.onActivity { activity ->
240240
activity.setContent {
241241
CompositionLocalProvider(
242-
LocalRetainedStateRegistryOwner provides continuityRetainedStateRegistry(vmFactory),
242+
LocalRetainedStateRegistry provides continuityRetainedStateRegistry(vmFactory),
243243
) {
244244
content()
245245
}

circuit-retained/src/commonMain/kotlin/com/slack/circuit/retained/RememberRetained.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ import androidx.compose.runtime.rememberUpdatedState
6767
*/
6868
@Composable
6969
public fun <T : Any> rememberRetained(vararg inputs: Any?, key: String? = null, init: () -> T): T {
70-
val registry = LocalRetainedStateRegistryOwner.current
70+
val registry = LocalRetainedStateRegistry.current
7171
// Short-circuit no-ops
7272
if (registry === NoOpRetainedStateRegistry) {
7373
return when (inputs.size) {

circuit-retained/src/commonMain/kotlin/com/slack/circuit/retained/RetainedStateRegistry.kt

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.slack.circuit.retained
44

5-
import androidx.compose.runtime.Composable
6-
import androidx.compose.runtime.CompositionLocalProvider
7-
import androidx.compose.runtime.ProvidedValue
5+
import androidx.compose.runtime.ProvidableCompositionLocal
86
import androidx.compose.runtime.staticCompositionLocalOf
97
import com.slack.circuit.retained.RetainedStateRegistry.Entry
108

@@ -69,25 +67,10 @@ public fun RetainedStateRegistry(values: Map<String, List<Any?>>?): RetainedStat
6967
)
7068

7169
/** CompositionLocal with a current [RetainedStateRegistry] instance. */
72-
public object LocalRetainedStateRegistryOwner {
73-
private val LocalRetainedStateRegistry =
74-
staticCompositionLocalOf<RetainedStateRegistry> { NoOpRetainedStateRegistry }
75-
76-
/**
77-
* Returns current composition local value for the owner or errors if one has not been provided.
78-
*/
79-
public val current: RetainedStateRegistry
80-
@Composable get() = LocalRetainedStateRegistry.current
81-
82-
/**
83-
* Associates a [LocalRetainedStateRegistry] key to a value in a call to
84-
* [CompositionLocalProvider].
85-
*/
86-
@Composable
87-
public infix fun provides(registry: RetainedStateRegistry): ProvidedValue<RetainedStateRegistry> {
88-
return LocalRetainedStateRegistry.provides(registry)
70+
public val LocalRetainedStateRegistry: ProvidableCompositionLocal<RetainedStateRegistry> =
71+
staticCompositionLocalOf {
72+
NoOpRetainedStateRegistry
8973
}
90-
}
9174

9275
internal class RetainedStateRegistryImpl(retained: MutableMap<String, List<Any?>>?) :
9376
MutableRetainedStateRegistry {

circuit/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ kotlin {
2020
api(libs.compose.runtime)
2121
api(libs.coroutines)
2222
api(projects.backstack)
23-
api(projects.circuitRetained)
2423
}
2524
}
2625
maybeCreate("androidMain").apply {

circuit/src/androidMain/kotlin/com/slack/circuit/CircuitCompositionLocals.android.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

circuit/src/commonMain/kotlin/com/slack/circuit/CircuitCompositionLocals.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import androidx.compose.runtime.ProvidedValue
99
import androidx.compose.runtime.compositionLocalOf
1010
import androidx.compose.runtime.staticCompositionLocalOf
1111

12-
@Composable internal expect fun PlatformCompositionLocals(content: @Composable () -> Unit)
13-
1412
/**
1513
* Provides the given [circuitConfig] as a [CompositionLocal] to all composables within [content].
1614
* Also adds any other composition locals that Circuit needs.
@@ -20,7 +18,7 @@ public fun CircuitCompositionLocals(circuitConfig: CircuitConfig, content: @Comp
2018
CompositionLocalProvider(
2119
LocalCircuitOwner provides circuitConfig,
2220
) {
23-
PlatformCompositionLocals(content)
21+
content()
2422
}
2523
}
2624

circuit/src/jvmMain/kotlin/com/slack/circuit/CompositionLocals.jvm.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)