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

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

Merge "Fallback to default if shade display is disconnected" into main

parents b19991c9 c16c3f01
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ class ShadeDisplaysRepositoryTest : SysuiTestCase() {
            policies,
            shadeOnDefaultDisplayWhenLocked = shadeOnDefaultDisplayWhenLocked,
            keyguardRepository,
            displayRepository,
        )

    @Test
@@ -89,6 +90,30 @@ class ShadeDisplaysRepositoryTest : SysuiTestCase() {
            assertThat(displayIds).containsExactly(0, 1, 2, 0)
        }

    @Test
    fun displayId_afterDisplayDisconnected_fallsBackToDefaultDisplay() =
        testScope.runTest {
            val underTest = createUnderTest()
            globalSettings.putString(
                DEVELOPMENT_SHADE_DISPLAY_AWARENESS,
                FakeShadeDisplayPolicy.name,
            )
            val displayId by collectLastValue(underTest.displayId)

            displayRepository.addDisplay(displayId = 1)

            FakeShadeDisplayPolicy.setDisplayId(1)
            assertThat(displayId).isEqualTo(1)

            // Let's disconnect and make sure it goes back to the default one
            displayRepository.removeDisplay(displayId = 1)
            assertThat(displayId).isEqualTo(Display.DEFAULT_DISPLAY)

            // Let's re-connect it and make sure it goes back to the non-default one
            displayRepository.addDisplay(displayId = 1)
            assertThat(displayId).isEqualTo(1)
        }

    @Test
    fun policy_updatesBasedOnSettingValue_defaultDisplay() =
        testScope.runTest {
+14 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.provider.Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS
import android.view.Display
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.keyguard.data.repository.KeyguardRepository
import com.android.systemui.shade.ShadeOnDefaultDisplayWhenLocked
import com.android.systemui.shade.display.ShadeDisplayPolicy
@@ -45,7 +46,12 @@ interface ShadeDisplaysRepository {
    val currentPolicy: ShadeDisplayPolicy
}

/** Keeps the policy and propagates the display id for the shade from it. */
/**
 * Keeps the policy and propagates the display id for the shade from it.
 *
 * If the display set by the policy is not available (e.g. after the cable is disconnected), this
 * falls back to the [Display.DEFAULT_DISPLAY].
 */
@SysUISingleton
class ShadeDisplaysRepositoryImpl
@Inject
@@ -56,6 +62,7 @@ constructor(
    policies: Set<@JvmSuppressWildcards ShadeDisplayPolicy>,
    @ShadeOnDefaultDisplayWhenLocked private val shadeOnDefaultDisplayWhenLocked: Boolean,
    keyguardRepository: KeyguardRepository,
    displayRepository: DisplayRepository,
) : ShadeDisplaysRepository {

    private val policy: StateFlow<ShadeDisplayPolicy> =
@@ -73,7 +80,12 @@ constructor(
            .distinctUntilChanged()
            .stateIn(bgScope, SharingStarted.Eagerly, defaultPolicy)

    private val displayIdFromPolicy: Flow<Int> = policy.flatMapLatest { it.displayId }
    private val displayIdFromPolicy: Flow<Int> =
        policy
            .flatMapLatest { it.displayId }
            .combine(displayRepository.displayIds) { policyDisplayId, availableIds ->
                if (policyDisplayId !in availableIds) Display.DEFAULT_DISPLAY else policyDisplayId
            }

    private val keyguardAwareDisplayPolicy: Flow<Int> =
        if (!shadeOnDefaultDisplayWhenLocked) {
+0 −2
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.shade.domain.interactor.NotificationShadeElement
import com.android.systemui.shade.domain.interactor.QSShadeElement
import com.android.systemui.shade.domain.interactor.ShadeExpandedStateInteractor.ShadeElement
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import dagger.Lazy
import java.util.concurrent.atomic.AtomicReference
@@ -53,7 +52,6 @@ class StatusBarTouchShadeDisplayPolicy
constructor(
    displayRepository: DisplayRepository,
    @Background private val backgroundScope: CoroutineScope,
    private val shadeInteractor: Lazy<ShadeInteractor>,
    private val qsShadeElement: Lazy<QSShadeElement>,
    private val notificationElement: Lazy<NotificationShadeElement>,
) : ShadeDisplayPolicy, ShadeExpansionIntent {
+2 −3
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import com.android.systemui.shade.display.ShadeExpansionIntent
import com.android.systemui.shade.display.StatusBarTouchShadeDisplayPolicy
import com.android.systemui.shade.domain.interactor.notificationElement
import com.android.systemui.shade.domain.interactor.qsElement
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.util.settings.fakeGlobalSettings

val Kosmos.defaultShadeDisplayPolicy: DefaultDisplayShadePolicy by
@@ -49,9 +48,8 @@ val Kosmos.statusBarTouchShadeDisplayPolicy: StatusBarTouchShadeDisplayPolicy by
        StatusBarTouchShadeDisplayPolicy(
            displayRepository = displayRepository,
            backgroundScope = testScope.backgroundScope,
            shadeInteractor = { shadeInteractor },
            notificationElement = { notificationElement },
            qsShadeElement = { qsElement },
            notificationElement = { notificationElement },
        )
    }
val Kosmos.shadeExpansionIntent: ShadeExpansionIntent by
@@ -65,6 +63,7 @@ val Kosmos.shadeDisplaysRepository: ShadeDisplaysRepository by
            defaultPolicy = defaultShadeDisplayPolicy,
            shadeOnDefaultDisplayWhenLocked = true,
            keyguardRepository = keyguardRepository,
            displayRepository = displayRepository,
        )
    }