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

Commit ef31fdf1 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Fix taskbar visibility when shade moves display in flexiglass

The sysui state bit was being changed based on "ShadeDisplaysInteractor.displayId" instead of "pendingDisplayId". The DisplayId changes only after the reparenting finishes, while the pending is what triggers the move.
Due to that, we were reading the old display id.

+ minor fixes to SysUiState.kt debug logs

Bug: 432202736
Flag: com.android.systemui.shade_window_goes_around
Test: OpenShadeHidesTaskbarOnExternalDisplay
Change-Id: I580abe4380b6efab66e2828be199b91444643320
parent 73a41ca0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ class SceneContainerPluginTest : SysuiTestCase() {
    fun flagValueOverride_sameDisplayId_returnsTrue() {
        sceneDataSource.changeScene(Scenes.Shade)

        shadeDisplayRepository.setDisplayId(1)
        shadeDisplayRepository.setPendingDisplayId(1)

        assertThat(
                underTest.flagValueOverride(
@@ -80,7 +80,7 @@ class SceneContainerPluginTest : SysuiTestCase() {
    fun flagValueOverride_differentDisplayId_shadeGoesAroundFlagOff_returnsTrue() {
        sceneDataSource.changeScene(Scenes.Shade)

        shadeDisplayRepository.setDisplayId(1)
        shadeDisplayRepository.setPendingDisplayId(1)

        assertThat(
                underTest.flagValueOverride(
+3 −1
Original line number Diff line number Diff line
@@ -70,7 +70,9 @@ constructor(
    private val shadeDisplaysRepository: Lazy<ShadeDisplaysRepository>,
) : SceneContainerPlugin {

    private val shadeDisplayId: StateFlow<Int> by lazy { shadeDisplaysRepository.get().displayId }
    private val shadeDisplayId: StateFlow<Int> by lazy {
        shadeDisplaysRepository.get().pendingDisplayId
    }

    override fun flagValueOverride(@SystemUiStateFlags flag: Long, displayId: Int): Boolean? {
        if (!SceneContainerFlag.isEnabled) {
+10 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.model.SysUiState.SysUiStateCallback
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shared.system.QuickStepContract
import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags
import com.android.systemui.shared.system.QuickStepContract.getSystemUiStateString
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -157,10 +158,15 @@ constructor(

    /** Notify all those who are registered that the state has changed. */
    private fun notifyAndSetSystemUiStateChanged(newFlags: Long, oldFlags: Long) {
        if (newFlags != oldFlags) {
            if (SysUiState.DEBUG) {
            Log.d(TAG, "SysUiState changed for displayId=$displayId: old=$oldFlags new=$newFlags")
                Log.d(
                    TAG,
                    "SysUiState changed for displayId=$displayId: " +
                            "old=${getSystemUiStateString(oldFlags)} " +
                            "new=${getSystemUiStateString(newFlags)}",
                )
            }
        if (newFlags != oldFlags) {
            _flags = newFlags
            stateDispatcher.dispatchSysUIStateChange(newFlags, displayId)
        }
@@ -208,7 +214,7 @@ fun flagWithOptionalOverrides(
        if (SysUiState.DEBUG) {
            Log.d(
                TAG,
                "setFlag for flag $flag and value $toSet overridden to " +
                "setFlag for flag ${getSystemUiStateString(flag)} and value $toSet overridden to " +
                    "$overrideOrNull by scene container plugin",
            )
        }
+1 −1
Original line number Diff line number Diff line
@@ -782,7 +782,7 @@ constructor(
                        }
                }
                .distinctUntilChanged()
                .collect { (displayId: Int, flagMap) ->
                .collect { (displayId: Int, flagMap: List<Pair<Long, Boolean>>) ->
                    sysuiStateInteractor.setFlagsExclusivelyToDisplay(
                        targetDisplayId = displayId,
                        stateChanges = StateChange.from(flagMap),