Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5c48302 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere Committed by Android (Google) Code Review
Browse files

Merge changes Ib09d61eb,I2678c1d2,I125610c1,I554517b7,I48e12cdb, ... into main

* changes:
  Remove the fork of STL UserActionResult
  Remove the Communal fork of STL ObservableTransitionState
  Remove the fork of STL ObservableTransitionState
  Remove the fork of STL TransitionKey
  Remove the Communal fork of STL SceneKey
  Remove the fork of STL SceneKey
  Rename CommunalSceneKey.Foo to CommunalScenes.Foo
  Rename SceneKey.Foo to Scenes.Foo
parents 91a71acc b1ee802f
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -24,13 +24,13 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserActionResult
import com.android.systemui.scene.ui.composable.ComposableScene
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
@@ -52,13 +52,13 @@ constructor(
    private val viewModel: BouncerViewModel,
    private val dialogFactory: BouncerDialogFactory,
) : ComposableScene {
    override val key = SceneKey.Bouncer
    override val key = Scenes.Bouncer

    override val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> =
        MutableStateFlow(
                mapOf(
                    UserAction.Back to UserActionResult(SceneKey.Lockscreen),
                    UserAction.Swipe(Direction.DOWN) to UserActionResult(SceneKey.Lockscreen),
                    UserAction.Back to UserActionResult(Scenes.Lockscreen),
                    UserAction.Swipe(Direction.DOWN) to UserActionResult(Scenes.Lockscreen),
                )
            )
            .asStateFlow()
+10 −58
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.FixedSizeEdgeDetector
import com.android.compose.animation.scene.LowestZIndexScenePicker
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.SceneTransitionLayout
@@ -24,14 +23,11 @@ import com.android.compose.animation.scene.observableTransitionState
import com.android.compose.animation.scene.transitions
import com.android.compose.animation.scene.updateSceneTransitionLayoutState
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.systemui.communal.shared.model.CommunalSceneKey
import com.android.systemui.communal.shared.model.ObservableCommunalTransitionState
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.ui.compose.extensions.allowGestures
import com.android.systemui.communal.ui.viewmodel.BaseCommunalViewModel
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.res.R
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.transform

object Communal {
    object Elements {
@@ -41,7 +37,7 @@ object Communal {
}

val sceneTransitions = transitions {
    to(TransitionSceneKey.Communal) {
    to(CommunalScenes.Communal) {
        spec = tween(durationMillis = 1000)
        translate(Communal.Elements.Content, Edge.Right)
        timestampRange(startMillis = 167, endMillis = 334) {
@@ -49,7 +45,7 @@ val sceneTransitions = transitions {
            fade(Communal.Elements.Content)
        }
    }
    to(TransitionSceneKey.Blank) {
    to(CommunalScenes.Blank) {
        spec = tween(durationMillis = 1000)
        translate(Communal.Elements.Content, Edge.Right)
        timestampRange(endMillis = 167) { fade(Communal.Elements.Content) }
@@ -68,14 +64,11 @@ fun CommunalContainer(
    modifier: Modifier = Modifier,
    viewModel: CommunalViewModel,
) {
    val currentScene: SceneKey by
        viewModel.currentScene
            .transform { value -> emit(value.toTransitionSceneKey()) }
            .collectAsState(TransitionSceneKey.Blank)
    val currentScene: SceneKey by viewModel.currentScene.collectAsState(CommunalScenes.Blank)
    val sceneTransitionLayoutState =
        updateSceneTransitionLayoutState(
            currentScene,
            onChangeScene = { viewModel.onSceneChanged(it.toCommunalSceneKey()) },
            onChangeScene = { viewModel.onSceneChanged(it) },
            transitions = sceneTransitions,
        )
    val touchesAllowed by viewModel.touchesAllowed.collectAsState(initial = false)
@@ -83,9 +76,7 @@ fun CommunalContainer(
    // This effect exposes the SceneTransitionLayout's observable transition state to the rest of
    // the system, and unsets it when the view is disposed to avoid a memory leak.
    DisposableEffect(viewModel, sceneTransitionLayoutState) {
        viewModel.setTransitionState(
            sceneTransitionLayoutState.observableTransitionState().map { it.toModel() }
        )
        viewModel.setTransitionState(sceneTransitionLayoutState.observableTransitionState())
        onDispose { viewModel.setTransitionState(null) }
    }

@@ -98,11 +89,10 @@ fun CommunalContainer(
            ),
    ) {
        scene(
            TransitionSceneKey.Blank,
            CommunalScenes.Blank,
            userActions =
                mapOf(
                    Swipe(SwipeDirection.Left, fromSource = Edge.Right) to
                        TransitionSceneKey.Communal
                    Swipe(SwipeDirection.Left, fromSource = Edge.Right) to CommunalScenes.Communal
                )
        ) {
            // This scene shows nothing only allowing for transitions to the communal scene.
@@ -110,11 +100,9 @@ fun CommunalContainer(
        }

        scene(
            TransitionSceneKey.Communal,
            CommunalScenes.Communal,
            userActions =
                mapOf(
                    Swipe(SwipeDirection.Right, fromSource = Edge.Left) to TransitionSceneKey.Blank
                ),
                mapOf(Swipe(SwipeDirection.Right, fromSource = Edge.Left) to CommunalScenes.Blank),
        ) {
            CommunalScene(viewModel, modifier = modifier)
        }
@@ -135,39 +123,3 @@ private fun SceneScope.CommunalScene(
    )
    Box(modifier.element(Communal.Elements.Content)) { CommunalHub(viewModel = viewModel) }
}

// TODO(b/315490861): Remove these conversions once Compose can be used throughout SysUI.
object TransitionSceneKey {
    val Blank = CommunalSceneKey.Blank.toTransitionSceneKey()
    val Communal = CommunalSceneKey.Communal.toTransitionSceneKey()
}

// TODO(b/315490861): Remove these conversions once Compose can be used throughout SysUI.
fun SceneKey.toCommunalSceneKey(): CommunalSceneKey {
    return this.identity as CommunalSceneKey
}

// TODO(b/315490861): Remove these conversions once Compose can be used throughout SysUI.
fun CommunalSceneKey.toTransitionSceneKey(): SceneKey {
    return SceneKey(debugName = toString(), identity = this)
}

/**
 * Converts between the [SceneTransitionLayout] state class and our forked data class that can be
 * used throughout SysUI.
 */
// TODO(b/315490861): Remove these conversions once Compose can be used throughout SysUI.
fun ObservableTransitionState.toModel(): ObservableCommunalTransitionState {
    return when (this) {
        is ObservableTransitionState.Idle ->
            ObservableCommunalTransitionState.Idle(scene.toCommunalSceneKey())
        is ObservableTransitionState.Transition ->
            ObservableCommunalTransitionState.Transition(
                fromScene = fromScene.toCommunalSceneKey(),
                toScene = toScene.toCommunalSceneKey(),
                progress = progress,
                isInitiatedByUserInput = isInitiatedByUserInput,
                isUserInputOngoing = isUserInputOngoing,
            )
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -19,12 +19,12 @@ package com.android.systemui.communal.ui.compose
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserActionResult
import com.android.systemui.scene.ui.composable.ComposableScene
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
@@ -38,12 +38,12 @@ class CommunalScene
constructor(
    private val viewModel: CommunalViewModel,
) : ComposableScene {
    override val key = SceneKey.Communal
    override val key = Scenes.Communal

    override val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> =
        MutableStateFlow<Map<UserAction, UserActionResult>>(
                mapOf(
                    UserAction.Swipe(Direction.RIGHT) to UserActionResult(SceneKey.Lockscreen),
                    UserAction.Swipe(Direction.RIGHT) to UserActionResult(Scenes.Lockscreen),
                )
            )
            .asStateFlow()
+6 −6
Original line number Diff line number Diff line
@@ -18,9 +18,10 @@ package com.android.systemui.keyguard.ui.composable

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.animateSceneFloatAsState
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -28,9 +29,8 @@ import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.Edge
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.UserAction
import com.android.systemui.scene.shared.model.UserActionResult
import com.android.systemui.scene.ui.composable.ComposableScene
import dagger.Lazy
import javax.inject.Inject
@@ -50,7 +50,7 @@ constructor(
    viewModel: LockscreenSceneViewModel,
    private val lockscreenContent: Lazy<LockscreenContent>,
) : ComposableScene {
    override val key = SceneKey.Lockscreen
    override val key = Scenes.Lockscreen

    override val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> =
        combine(viewModel.upDestinationSceneKey, viewModel.leftDestinationSceneKey, ::Pair)
@@ -83,8 +83,8 @@ constructor(
            up?.let { this[UserAction.Swipe(Direction.UP)] = UserActionResult(up) }
            left?.let { this[UserAction.Swipe(Direction.LEFT)] = UserActionResult(left) }
            this[UserAction.Swipe(fromEdge = Edge.TOP, direction = Direction.DOWN)] =
                UserActionResult(SceneKey.QuickSettings)
            this[UserAction.Swipe(direction = Direction.DOWN)] = UserActionResult(SceneKey.Shade)
                UserActionResult(Scenes.QuickSettings)
            this[UserAction.Swipe(direction = Direction.DOWN)] = UserActionResult(Scenes.Shade)
        }
    }
}
+4 −5
Original line number Diff line number Diff line
@@ -71,8 +71,7 @@ import com.android.systemui.common.ui.compose.windowinsets.LocalScreenCornerRadi
import com.android.systemui.notifications.ui.composable.Notifications.Form
import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS
import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA
import com.android.systemui.scene.ui.composable.Gone
import com.android.systemui.scene.ui.composable.Shade
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.composable.ShadeHeader
import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationStackAppearanceViewBinder.SCRIM_CORNER_RADIUS
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
@@ -214,7 +213,7 @@ fun SceneScope.NotificationScrollingStack(
                    // in step with the transition so that it is 0 when it completes.
                    if (
                        scrimOffset.value < 0 &&
                            layoutState.isTransitioning(from = Shade, to = Gone)
                            layoutState.isTransitioning(from = Scenes.Shade, to = Scenes.Gone)
                    ) {
                        IntOffset(x = 0, y = (scrimOffset.value * expansionFraction).roundToInt())
                    } else {
@@ -226,7 +225,7 @@ fun SceneScope.NotificationScrollingStack(
                        calculateCornerRadius(
                                screenCornerRadius,
                                { expansionFraction },
                                layoutState.isTransitioningBetween(Gone, Shade)
                                layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)
                            )
                            .let {
                                RoundedCornerShape(
@@ -250,7 +249,7 @@ fun SceneScope.NotificationScrollingStack(
                Modifier.fillMaxSize()
                    .graphicsLayer {
                        alpha =
                            if (layoutState.isTransitioningBetween(Gone, Shade)) {
                            if (layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)) {
                                (expansionFraction / EXPANSION_FOR_MAX_SCRIM_ALPHA).coerceAtMost(1f)
                            } else 1f
                    }
Loading