summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steve Elliott <steell@google.com> 2024-12-07 14:31:56 -0500
committer Steve Elliott <steell@google.com> 2025-01-03 15:58:38 -0500
commitbafc44ea3f1f9a59a0c28caafe90d8301bd9d6cb (patch)
tree7bf1fc56a6f58b6ddbbd73e44cbac3d81e4de627
parenteb057d3eb942520b2e6b0fb5c5d910cd9765a37b (diff)
[kairos] util API improvements
Flag: EXEMPT unused Test: atest kairos-tests Change-Id: I044363de3f49399594903fc305f189195f604763
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/Events.kt4
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/StateScope.kt2
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/BuildScopeImpl.kt4
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/FilterNode.kt2
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxDeferred.kt4
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxPrompt.kt4
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/Network.kt2
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/util/HeteroMap.kt2
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Either.kt19
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/MapPatch.kt8
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Maybe.kt14
-rw-r--r--packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/These.kt8
-rw-r--r--packages/SystemUI/utils/kairos/test/com/android/systemui/kairos/KairosTests.kt6
13 files changed, 45 insertions, 34 deletions
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/Events.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/Events.kt
index 88d0e2d0830d..e7d0096f2189 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/Events.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/Events.kt
@@ -39,9 +39,9 @@ import com.android.systemui.kairos.internal.switchDeferredImplSingle
import com.android.systemui.kairos.internal.switchPromptImplSingle
import com.android.systemui.kairos.internal.util.hashString
import com.android.systemui.kairos.util.Either
-import com.android.systemui.kairos.util.Left
+import com.android.systemui.kairos.util.Either.Left
+import com.android.systemui.kairos.util.Either.Right
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.Right
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.toMaybe
import java.util.concurrent.atomic.AtomicReference
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/StateScope.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/StateScope.kt
index f6a8a0ac2a09..933ff1a75a02 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/StateScope.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/StateScope.kt
@@ -16,8 +16,8 @@
package com.android.systemui.kairos
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
+import com.android.systemui.kairos.util.Maybe.Just
import com.android.systemui.kairos.util.WithPrev
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.map
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/BuildScopeImpl.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/BuildScopeImpl.kt
index 07dc1dd2c79c..bc5454ac724b 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/BuildScopeImpl.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/BuildScopeImpl.kt
@@ -36,9 +36,9 @@ import com.android.systemui.kairos.internal.util.childScope
import com.android.systemui.kairos.internal.util.launchImmediate
import com.android.systemui.kairos.launchEffect
import com.android.systemui.kairos.mergeLeft
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.None
+import com.android.systemui.kairos.util.Maybe.Just
+import com.android.systemui.kairos.util.Maybe.None
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.map
import java.util.concurrent.atomic.AtomicReference
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/FilterNode.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/FilterNode.kt
index d38bf21c5db1..9496b06c6bd1 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/FilterNode.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/FilterNode.kt
@@ -18,8 +18,8 @@ package com.android.systemui.kairos.internal
import com.android.systemui.kairos.internal.store.Single
import com.android.systemui.kairos.internal.store.SingletonMapK
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
+import com.android.systemui.kairos.util.Maybe.Just
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.none
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxDeferred.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxDeferred.kt
index 067075bba3e4..cf74f755c98b 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxDeferred.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxDeferred.kt
@@ -27,9 +27,9 @@ import com.android.systemui.kairos.internal.store.singleOf
import com.android.systemui.kairos.internal.util.hashString
import com.android.systemui.kairos.internal.util.logDuration
import com.android.systemui.kairos.internal.util.logLn
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.None
+import com.android.systemui.kairos.util.Maybe.Just
+import com.android.systemui.kairos.util.Maybe.None
import com.android.systemui.kairos.util.These
import com.android.systemui.kairos.util.flatMap
import com.android.systemui.kairos.util.getMaybe
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxPrompt.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxPrompt.kt
index 26e2d4db0c52..32aef5c7041b 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxPrompt.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/MuxPrompt.kt
@@ -23,9 +23,9 @@ import com.android.systemui.kairos.internal.store.singleOf
import com.android.systemui.kairos.internal.util.LogIndent
import com.android.systemui.kairos.internal.util.hashString
import com.android.systemui.kairos.internal.util.logDuration
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.None
+import com.android.systemui.kairos.util.Maybe.Just
+import com.android.systemui.kairos.util.Maybe.None
import com.android.systemui.kairos.util.just
internal class MuxPromptNode<W, K, V>(
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/Network.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/Network.kt
index d13cdded7ac3..fbc2b3644701 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/Network.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/Network.kt
@@ -20,8 +20,8 @@ import com.android.systemui.kairos.State
import com.android.systemui.kairos.internal.util.HeteroMap
import com.android.systemui.kairos.internal.util.logDuration
import com.android.systemui.kairos.internal.util.logLn
-import com.android.systemui.kairos.util.Just
import com.android.systemui.kairos.util.Maybe
+import com.android.systemui.kairos.util.Maybe.Just
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.none
import java.util.concurrent.atomic.AtomicLong
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/util/HeteroMap.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/util/HeteroMap.kt
index 4d183481898b..9b6940d03270 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/util/HeteroMap.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/internal/util/HeteroMap.kt
@@ -17,7 +17,7 @@
package com.android.systemui.kairos.internal.util
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.None
+import com.android.systemui.kairos.util.Maybe.None
import com.android.systemui.kairos.util.just
import java.util.concurrent.ConcurrentHashMap
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Either.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Either.kt
index ad9f7d715156..957d46ff1ecd 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Either.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Either.kt
@@ -18,6 +18,9 @@
package com.android.systemui.kairos.util
+import com.android.systemui.kairos.util.Either.Left
+import com.android.systemui.kairos.util.Either.Right
+
/**
* Contains a value of two possibilities: `Left<A>` or `Right<B>`
*
@@ -25,13 +28,13 @@ package com.android.systemui.kairos.util
* [Pair] is effectively an anonymous grouping of two instances, then an [Either] is an anonymous
* set of two options.
*/
-sealed class Either<out A, out B>
-
-/** An [Either] that contains a [Left] value. */
-data class Left<out A>(val value: A) : Either<A, Nothing>()
+sealed interface Either<out A, out B> {
+ /** An [Either] that contains a [Left] value. */
+ @JvmInline value class Left<out A>(val value: A) : Either<A, Nothing>
-/** An [Either] that contains a [Right] value. */
-data class Right<out B>(val value: B) : Either<Nothing, B>()
+ /** An [Either] that contains a [Right] value. */
+ @JvmInline value class Right<out B>(val value: B) : Either<Nothing, B>
+}
/**
* Returns an [Either] containing the result of applying [transform] to the [Left] value, or the
@@ -57,7 +60,7 @@ inline fun <A, B, C> Either<A, B>.mapRight(transform: (B) -> C): Either<A, C> =
inline fun <A> Either<A, *>.leftMaybe(): Maybe<A> =
when (this) {
is Left -> just(value)
- else -> None
+ else -> none
}
/** Returns the [Left] value held by this [Either], or `null` if this is a [Right] value. */
@@ -71,7 +74,7 @@ inline fun <A> Either<A, *>.leftOrNull(): A? =
inline fun <B> Either<*, B>.rightMaybe(): Maybe<B> =
when (this) {
is Right -> just(value)
- else -> None
+ else -> none
}
/** Returns the [Right] value held by this [Either], or `null` if this is a [Left] value. */
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/MapPatch.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/MapPatch.kt
index f12b17816b61..f368cbf8f124 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/MapPatch.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/MapPatch.kt
@@ -16,6 +16,10 @@
package com.android.systemui.kairos.util
+import com.android.systemui.kairos.util.Either.Left
+import com.android.systemui.kairos.util.Either.Right
+import com.android.systemui.kairos.util.Maybe.Just
+
/** A "patch" that can be used to batch-update a [Map], via [applyPatch]. */
typealias MapPatch<K, V> = Map<K, Maybe<V>>
@@ -25,8 +29,8 @@ typealias MapPatch<K, V> = Map<K, Maybe<V>>
* For each entry in [patch]:
* * a [Just] value will be included in the new map, replacing the entry in the original map with
* the same key, if present.
- * * a [None] value will be omitted from the new map, excluding the entry in the original map with
- * the same key, if present.
+ * * a [Maybe.None] value will be omitted from the new map, excluding the entry in the original map
+ * with the same key, if present.
*/
fun <K, V> Map<K, V>.applyPatch(patch: MapPatch<K, V>): Map<K, V> {
val (adds: List<Pair<K, V>>, removes: List<K>) =
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Maybe.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Maybe.kt
index eef6cbff545b..681218399d93 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Maybe.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/Maybe.kt
@@ -18,6 +18,8 @@
package com.android.systemui.kairos.util
+import com.android.systemui.kairos.util.Maybe.Just
+import com.android.systemui.kairos.util.Maybe.None
import kotlin.coroutines.Continuation
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
@@ -27,13 +29,13 @@ import kotlin.coroutines.startCoroutine
import kotlin.coroutines.suspendCoroutine
/** Represents a value that may or may not be present. */
-sealed class Maybe<out A>
+sealed interface Maybe<out A> {
+ /** A [Maybe] value that is present. */
+ @JvmInline value class Just<out A> internal constructor(val value: A) : Maybe<A>
-/** A [Maybe] value that is present. */
-data class Just<out A> internal constructor(val value: A) : Maybe<A>()
-
-/** A [Maybe] value that is not present. */
-data object None : Maybe<Nothing>()
+ /** A [Maybe] value that is not present. */
+ data object None : Maybe<Nothing>
+}
/** Utilities to query [Maybe] instances from within a [maybe] block. */
@RestrictsSuspension
diff --git a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/These.kt b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/These.kt
index 408d4d1e7803..092dca4d2f1d 100644
--- a/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/These.kt
+++ b/packages/SystemUI/utils/kairos/src/com/android/systemui/kairos/util/These.kt
@@ -16,6 +16,8 @@
package com.android.systemui.kairos.util
+import com.android.systemui.kairos.util.Maybe.Just
+
/** Contains at least one of two potential values. */
sealed class These<out A, out B> {
/** Contains a single potential value. */
@@ -54,7 +56,7 @@ inline fun <A> These<A, A>.merge(f: (A, A) -> A): A =
fun <A> These<A, *>.maybeThis(): Maybe<A> =
when (this) {
is These.Both -> just(thiz)
- is These.That -> None
+ is These.That -> none
is These.This -> just(thiz)
}
@@ -74,7 +76,7 @@ fun <A> These<*, A>.maybeThat(): Maybe<A> =
when (this) {
is These.Both -> just(that)
is These.That -> just(that)
- is These.This -> None
+ is These.This -> none
}
/**
@@ -92,7 +94,7 @@ fun <A : Any> These<*, A>.thatOrNull(): A? =
fun <A, B> These<A, B>.maybeBoth(): Maybe<Pair<A, B>> =
when (this) {
is These.Both -> just(thiz to that)
- else -> None
+ else -> none
}
/** Returns a [These] containing [thiz] and/or [that] if they are present. */
diff --git a/packages/SystemUI/utils/kairos/test/com/android/systemui/kairos/KairosTests.kt b/packages/SystemUI/utils/kairos/test/com/android/systemui/kairos/KairosTests.kt
index 287d8cb136c4..edfed15e8f6f 100644
--- a/packages/SystemUI/utils/kairos/test/com/android/systemui/kairos/KairosTests.kt
+++ b/packages/SystemUI/utils/kairos/test/com/android/systemui/kairos/KairosTests.kt
@@ -1,10 +1,10 @@
package com.android.systemui.kairos
import com.android.systemui.kairos.util.Either
-import com.android.systemui.kairos.util.Left
+import com.android.systemui.kairos.util.Either.Left
+import com.android.systemui.kairos.util.Either.Right
import com.android.systemui.kairos.util.Maybe
-import com.android.systemui.kairos.util.None
-import com.android.systemui.kairos.util.Right
+import com.android.systemui.kairos.util.Maybe.None
import com.android.systemui.kairos.util.just
import com.android.systemui.kairos.util.map
import com.android.systemui.kairos.util.maybe