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

Commit d04635b1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] SysUiState correction during SUW." into main

parents 51f55e25 4d68d7bb
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.model

import android.view.Display
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -35,7 +34,7 @@ class SysUiStateExtTest : SysuiTestCase() {

    @Test
    fun updateFlags() {
        underTest.updateFlags(Display.DEFAULT_DISPLAY, 1L to true, 2L to false, 4L to true)
        underTest.updateFlags(1L to true, 2L to false, 4L to true)

        assertThat(underTest.flags and 1L).isNotEqualTo(0L)
        assertThat(underTest.flags and 2L).isEqualTo(0L)
+3 −4
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.os.PowerManager
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import android.view.Display
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
@@ -1213,15 +1212,15 @@ class SceneContainerStartableTest : SysuiTestCase() {
                    fakeSceneDataSource.pause()
                    sceneInteractor.changeScene(sceneKey, "reason")
                    runCurrent()
                    verify(sysUiState, times(index)).commitUpdate(Display.DEFAULT_DISPLAY)
                    verify(sysUiState, times(index)).commitUpdate()

                    fakeSceneDataSource.unpause(expectedScene = sceneKey)
                    runCurrent()
                    verify(sysUiState, times(index)).commitUpdate(Display.DEFAULT_DISPLAY)
                    verify(sysUiState, times(index)).commitUpdate()

                    transitionStateFlow.value = ObservableTransitionState.Idle(sceneKey)
                    runCurrent()
                    verify(sysUiState, times(index + 1)).commitUpdate(Display.DEFAULT_DISPLAY)
                    verify(sysUiState, times(index + 1)).commitUpdate()
                }
        }

+18 −7
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ constructor(
                SceneContainerPluginState(
                    scene = idleState.currentScene,
                    overlays = idleState.currentOverlays,
                    isVisible = sceneInteractor.get().isVisible.value,
                    invisibleDueToOcclusion = invisibleDueToOcclusion,
                )
            )
@@ -100,12 +101,17 @@ constructor(
            mapOf<Long, (SceneContainerPluginState) -> Boolean>(
                SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE to
                    {
                        it.scene != Scenes.Gone || it.overlays.isNotEmpty()
                        when {
                            !it.isVisible -> false
                            it.scene != Scenes.Gone -> true
                            it.overlays.isNotEmpty() -> true
                            else -> false
                        }
                    },
                SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED to
                    {
                        when {
                            it.invisibleDueToOcclusion -> false
                            !it.isVisible -> false
                            it.scene == Scenes.Lockscreen -> true
                            it.scene == Scenes.Shade -> true
                            Overlays.NotificationsShade in it.overlays -> true
@@ -114,19 +120,23 @@ constructor(
                    },
                SYSUI_STATE_QUICK_SETTINGS_EXPANDED to
                    {
                        it.scene == Scenes.QuickSettings ||
                            Overlays.QuickSettingsShade in it.overlays
                        when {
                            !it.isVisible -> false
                            it.scene == Scenes.QuickSettings -> true
                            Overlays.QuickSettingsShade in it.overlays -> true
                            else -> false
                        }
                    },
                SYSUI_STATE_BOUNCER_SHOWING to { Overlays.Bouncer in it.overlays },
                SYSUI_STATE_BOUNCER_SHOWING to { it.isVisible && Overlays.Bouncer in it.overlays },
                SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING to
                    {
                        it.scene == Scenes.Lockscreen && !it.invisibleDueToOcclusion
                        it.isVisible && it.scene == Scenes.Lockscreen
                    },
                SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED to
                    {
                        it.scene == Scenes.Lockscreen && it.invisibleDueToOcclusion
                    },
                SYSUI_STATE_COMMUNAL_HUB_SHOWING to { it.scene == Scenes.Communal },
                SYSUI_STATE_COMMUNAL_HUB_SHOWING to { it.isVisible && it.scene == Scenes.Communal },
            )
    }

@@ -134,5 +144,6 @@ constructor(
        val scene: SceneKey,
        val overlays: Set<OverlayKey>,
        val invisibleDueToOcclusion: Boolean,
        val isVisible: Boolean,
    )
}
+2 −12
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.systemui.model

import com.android.systemui.dagger.qualifiers.DisplayId

/**
 * In-bulk updates multiple flag values and commits the update.
 *
@@ -32,16 +30,8 @@ import com.android.systemui.dagger.qualifiers.DisplayId
 *     SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING to (sceneKey == Scenes.Lockscreen),
 * )
 * ```
 *
 * You can inject [displayId] by injecting it using:
 * ```
 *     @DisplayId private val displayId: Int`,
 * ```
 */
fun SysUiState.updateFlags(
    @DisplayId displayId: Int,
    vararg flagValuePairs: Pair<Long, Boolean>,
) {
fun SysUiState.updateFlags(vararg flagValuePairs: Pair<Long, Boolean>) {
    flagValuePairs.forEach { (flag, enabled) -> setFlag(flag, enabled) }
    commitUpdate(displayId)
    commitUpdate()
}
+13 −10
Original line number Diff line number Diff line
@@ -33,10 +33,8 @@ import com.android.systemui.bouncer.domain.interactor.SimBouncerInteractor
import com.android.systemui.bouncer.shared.logging.BouncerUiEvent
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.classifier.FalsingCollectorActual
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.DisplayId
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryHapticsInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
@@ -82,6 +80,7 @@ import com.android.systemui.util.kotlin.pairwise
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.printSection
import com.android.systemui.util.println
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.google.android.msdl.data.model.MSDLToken
import com.google.android.msdl.domain.MSDLPlayer
import dagger.Lazy
@@ -123,7 +122,6 @@ constructor(
    private val bouncerInteractor: BouncerInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val sysUiState: SysUiState,
    @DisplayId private val displayId: Int,
    private val sceneLogger: SceneLogger,
    @FalsingCollectorActual private val falsingCollector: FalsingCollector,
    private val falsingManager: FalsingManager,
@@ -732,21 +730,26 @@ constructor(
                    sceneInteractor.transitionState
                        .mapNotNull { it as? ObservableTransitionState.Idle }
                        .distinctUntilChanged(),
                    sceneInteractor.isVisible,
                    occlusionInteractor.invisibleDueToOcclusion,
                ) { idleState, invisibleDueToOcclusion ->
                ) { idleState, isVisible, invisibleDueToOcclusion ->
                    SceneContainerPlugin.SceneContainerPluginState(
                        scene = idleState.currentScene,
                        overlays = idleState.currentOverlays,
                        isVisible = isVisible,
                        invisibleDueToOcclusion = invisibleDueToOcclusion,
                    )
                }
                .collect { sceneContainerPluginState ->
                    sysUiState.updateFlags(
                        displayId,
                        *SceneContainerPlugin.EvaluatorByFlag.map { (flag, evaluator) ->
                                flag to evaluator.invoke(sceneContainerPluginState)
                .map { sceneContainerPluginState ->
                    SceneContainerPlugin.EvaluatorByFlag.map { (flag, evaluator) ->
                            flag to evaluator(sceneContainerPluginState)
                        }
                            .toTypedArray(),
                        .toMap()
                }
                .distinctUntilChanged()
                .collect { flags ->
                    sysUiState.updateFlags(
                        *(flags.entries.map { (key, value) -> key to value }).toTypedArray()
                    )
                }
        }
Loading