diff options
author | 2024-12-07 14:31:56 -0500 | |
---|---|---|
committer | 2025-01-03 15:58:38 -0500 | |
commit | bafc44ea3f1f9a59a0c28caafe90d8301bd9d6cb (patch) | |
tree | 7bf1fc56a6f58b6ddbbd73e44cbac3d81e4de627 | |
parent | eb057d3eb942520b2e6b0fb5c5d910cd9765a37b (diff) |
[kairos] util API improvements
Flag: EXEMPT unused
Test: atest kairos-tests
Change-Id: I044363de3f49399594903fc305f189195f604763
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 |