Loading packages/SystemUI/multivalentTests/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepositoryTest.kt +25 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ class ShadeDisplaysRepositoryTest : SysuiTestCase() { policies, shadeOnDefaultDisplayWhenLocked = shadeOnDefaultDisplayWhenLocked, keyguardRepository, displayRepository, ) @Test Loading Loading @@ -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 { Loading packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepository.kt +14 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -56,6 +62,7 @@ constructor( policies: Set<@JvmSuppressWildcards ShadeDisplayPolicy>, @ShadeOnDefaultDisplayWhenLocked private val shadeOnDefaultDisplayWhenLocked: Boolean, keyguardRepository: KeyguardRepository, displayRepository: DisplayRepository, ) : ShadeDisplaysRepository { private val policy: StateFlow<ShadeDisplayPolicy> = Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/shade/display/StatusBarTouchShadeDisplayPolicy.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepositoryKosmos.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -65,6 +63,7 @@ val Kosmos.shadeDisplaysRepository: ShadeDisplaysRepository by defaultPolicy = defaultShadeDisplayPolicy, shadeOnDefaultDisplayWhenLocked = true, keyguardRepository = keyguardRepository, displayRepository = displayRepository, ) } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepositoryTest.kt +25 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ class ShadeDisplaysRepositoryTest : SysuiTestCase() { policies, shadeOnDefaultDisplayWhenLocked = shadeOnDefaultDisplayWhenLocked, keyguardRepository, displayRepository, ) @Test Loading Loading @@ -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 { Loading
packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepository.kt +14 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -56,6 +62,7 @@ constructor( policies: Set<@JvmSuppressWildcards ShadeDisplayPolicy>, @ShadeOnDefaultDisplayWhenLocked private val shadeOnDefaultDisplayWhenLocked: Boolean, keyguardRepository: KeyguardRepository, displayRepository: DisplayRepository, ) : ShadeDisplaysRepository { private val policy: StateFlow<ShadeDisplayPolicy> = Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/shade/display/StatusBarTouchShadeDisplayPolicy.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading
packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/ShadeDisplaysRepositoryKosmos.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -65,6 +63,7 @@ val Kosmos.shadeDisplaysRepository: ShadeDisplaysRepository by defaultPolicy = defaultShadeDisplayPolicy, shadeOnDefaultDisplayWhenLocked = true, keyguardRepository = keyguardRepository, displayRepository = displayRepository, ) } Loading