Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt +11 −3 Original line number Diff line number Diff line Loading @@ -2,10 +2,13 @@ package com.android.systemui.statusbar.phone.shade.transition import android.content.res.Configuration import android.content.res.Resources import android.util.MathUtils.constrain import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.ConfigurationController Loading @@ -21,7 +24,8 @@ constructor( configurationController: ConfigurationController, dumpManager: DumpManager, private val scrimController: ScrimController, @Main private val resources: Resources @Main private val resources: Resources, private val statusBarStateController: SysuiStatusBarStateController, ) { private var inSplitShade = false Loading Loading @@ -55,19 +59,23 @@ constructor( } private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float { return if (inSplitShade) { expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance return if (inSplitShade && isScreenUnlocked()) { constrain(expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance, 0f, 1f) } else { expansionEvent.fraction } } private fun isScreenUnlocked() = statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE private fun dump(printWriter: PrintWriter, args: Array<String>) { printWriter.println( """ ScrimShadeTransitionController: Resources: inSplitShade: $inSplitShade isScreenUnlocked: ${isScreenUnlocked()} splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance State: lastExpansionFraction: $lastExpansionFraction Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt +61 −2 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.FakeConfigurationController Loading @@ -13,6 +15,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) Loading @@ -21,6 +24,7 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { @Mock private lateinit var scrimController: ScrimController @Mock private lateinit var dumpManager: DumpManager @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController private val configurationController = FakeConfigurationController() private lateinit var controller: ScrimShadeTransitionController Loading @@ -31,9 +35,14 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { context.ensureTestableResources() controller = ScrimShadeTransitionController( configurationController, dumpManager, scrimController, context.resources configurationController, dumpManager, scrimController, context.resources, statusBarStateController ) } @Test fun onPanelExpansionChanged_inSingleShade_setsFractionEqualToEventFraction() { setSplitShadeEnabled(false) Loading @@ -44,7 +53,9 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { } @Test fun onPanelExpansionChanged_inSplitShade_setsFractionBasedOnDragDownAmount() { fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) Loading @@ -55,6 +66,54 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { verify(scrimController).setRawPanelExpansionFraction(expectedFraction) } @Test fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) controller.onPanelExpansionChanged( EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance) ) verify(scrimController).setRawPanelExpansionFraction(1f) } @Test fun onPanelExpansionChanged_inSplitShade_negativeDragDownAmount_fractionIsNotLessThan0() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f)) verify(scrimController).setRawPanelExpansionFraction(0f) } @Test fun onPanelExpansionChanged_inSplitShade_onLockedShade_setsFractionEqualToEventFraction() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE_LOCKED) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT) verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) } @Test fun onPanelExpansionChanged_inSplitShade_onKeyguard_setsFractionEqualToEventFraction() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.KEYGUARD) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT) verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) } private fun setSplitShadeEnabled(enabled: Boolean) { overrideResource(R.bool.config_use_split_notification_shade, enabled) configurationController.notifyConfigurationChanged() Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt +11 −3 Original line number Diff line number Diff line Loading @@ -2,10 +2,13 @@ package com.android.systemui.statusbar.phone.shade.transition import android.content.res.Configuration import android.content.res.Resources import android.util.MathUtils.constrain import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.ConfigurationController Loading @@ -21,7 +24,8 @@ constructor( configurationController: ConfigurationController, dumpManager: DumpManager, private val scrimController: ScrimController, @Main private val resources: Resources @Main private val resources: Resources, private val statusBarStateController: SysuiStatusBarStateController, ) { private var inSplitShade = false Loading Loading @@ -55,19 +59,23 @@ constructor( } private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float { return if (inSplitShade) { expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance return if (inSplitShade && isScreenUnlocked()) { constrain(expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance, 0f, 1f) } else { expansionEvent.fraction } } private fun isScreenUnlocked() = statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE private fun dump(printWriter: PrintWriter, args: Array<String>) { printWriter.println( """ ScrimShadeTransitionController: Resources: inSplitShade: $inSplitShade isScreenUnlocked: ${isScreenUnlocked()} splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance State: lastExpansionFraction: $lastExpansionFraction Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionControllerTest.kt +61 −2 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.FakeConfigurationController Loading @@ -13,6 +15,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) Loading @@ -21,6 +24,7 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { @Mock private lateinit var scrimController: ScrimController @Mock private lateinit var dumpManager: DumpManager @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController private val configurationController = FakeConfigurationController() private lateinit var controller: ScrimShadeTransitionController Loading @@ -31,9 +35,14 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { context.ensureTestableResources() controller = ScrimShadeTransitionController( configurationController, dumpManager, scrimController, context.resources configurationController, dumpManager, scrimController, context.resources, statusBarStateController ) } @Test fun onPanelExpansionChanged_inSingleShade_setsFractionEqualToEventFraction() { setSplitShadeEnabled(false) Loading @@ -44,7 +53,9 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { } @Test fun onPanelExpansionChanged_inSplitShade_setsFractionBasedOnDragDownAmount() { fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) Loading @@ -55,6 +66,54 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() { verify(scrimController).setRawPanelExpansionFraction(expectedFraction) } @Test fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) val scrimShadeTransitionDistance = context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) setSplitShadeEnabled(true) controller.onPanelExpansionChanged( EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance) ) verify(scrimController).setRawPanelExpansionFraction(1f) } @Test fun onPanelExpansionChanged_inSplitShade_negativeDragDownAmount_fractionIsNotLessThan0() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f)) verify(scrimController).setRawPanelExpansionFraction(0f) } @Test fun onPanelExpansionChanged_inSplitShade_onLockedShade_setsFractionEqualToEventFraction() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.SHADE_LOCKED) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT) verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) } @Test fun onPanelExpansionChanged_inSplitShade_onKeyguard_setsFractionEqualToEventFraction() { whenever(statusBarStateController.currentOrUpcomingState) .thenReturn(StatusBarState.KEYGUARD) setSplitShadeEnabled(true) controller.onPanelExpansionChanged(EXPANSION_EVENT) verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction) } private fun setSplitShadeEnabled(enabled: Boolean) { overrideResource(R.bool.config_use_split_notification_shade, enabled) configurationController.notifyConfigurationChanged() Loading