diff options
| author | 2022-11-04 15:47:25 +0000 | |
|---|---|---|
| committer | 2022-11-04 15:47:25 +0000 | |
| commit | c1f48180f362ff3d5c34cd7f53445e0bccf625bb (patch) | |
| tree | b6073c9f2635b55f7ab0a40557b196d8ee7e92bc | |
| parent | a1d923e11f63b7aec3b5bc428b66b59001575f6c (diff) | |
| parent | 3ae456a81c2fca8f857073aad8140832bde6ca1b (diff) | |
Merge "Enable DemoMode for new QS clock" into tm-qpr-dev
3 files changed, 73 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt index 6b540aa9f392..5d7df0dce0ef 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt @@ -19,6 +19,7 @@ package com.android.systemui.shade import android.annotation.IdRes import android.app.StatusBarManager import android.content.res.Configuration +import android.os.Bundle import android.os.Trace import android.os.Trace.TRACE_TAG_APP import android.util.Pair @@ -34,6 +35,8 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController +import com.android.systemui.demomode.DemoMode +import com.android.systemui.demomode.DemoModeController import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags @@ -53,6 +56,7 @@ import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_BATTERY_CONTROLLER import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_SHADE_HEADER +import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController @@ -89,7 +93,8 @@ class LargeScreenShadeHeaderController @Inject constructor( private val dumpManager: DumpManager, private val featureFlags: FeatureFlags, private val qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder, - private val combinedShadeHeadersConstraintManager: CombinedShadeHeadersConstraintManager + private val combinedShadeHeadersConstraintManager: CombinedShadeHeadersConstraintManager, + private val demoModeController: DemoModeController ) : ViewController<View>(header), Dumpable { companion object { @@ -126,7 +131,7 @@ class LargeScreenShadeHeaderController @Inject constructor( private lateinit var qsCarrierGroupController: QSCarrierGroupController private val batteryIcon: BatteryMeterView = header.findViewById(R.id.batteryRemainingIcon) - private val clock: TextView = header.findViewById(R.id.clock) + private val clock: Clock = header.findViewById(R.id.clock) private val date: TextView = header.findViewById(R.id.date) private val iconContainer: StatusIconContainer = header.findViewById(R.id.statusIcons) private val qsCarrierGroup: QSCarrierGroup = header.findViewById(R.id.carrier_group) @@ -212,6 +217,14 @@ class LargeScreenShadeHeaderController @Inject constructor( view.onApplyWindowInsets(insets) } + private val demoModeReceiver = object : DemoMode { + override fun demoCommands() = listOf(DemoMode.COMMAND_CLOCK) + override fun dispatchDemoCommand(command: String, args: Bundle) = + clock.dispatchDemoCommand(command, args) + override fun onDemoModeStarted() = clock.onDemoModeStarted() + override fun onDemoModeFinished() = clock.onDemoModeFinished() + } + private val chipVisibilityListener: ChipVisibilityListener = object : ChipVisibilityListener { override fun onChipVisibilityRefreshed(visible: Boolean) { if (header is MotionLayout) { @@ -298,6 +311,7 @@ class LargeScreenShadeHeaderController @Inject constructor( dumpManager.registerDumpable(this) configurationController.addCallback(configurationControllerListener) + demoModeController.addCallback(demoModeReceiver) updateVisibility() updateTransition() @@ -307,6 +321,7 @@ class LargeScreenShadeHeaderController @Inject constructor( privacyIconsController.chipVisibilityListener = null dumpManager.unregisterDumpable(this::class.java.simpleName) configurationController.removeCallback(configurationControllerListener) + demoModeController.removeCallback(demoModeReceiver) } fun disable(state1: Int, state2: Int, animate: Boolean) { @@ -524,4 +539,7 @@ class LargeScreenShadeHeaderController @Inject constructor( updateConstraints(LARGE_SCREEN_HEADER_CONSTRAINT, updates.largeScreenConstraintsChanges) } } + + @VisibleForTesting + internal fun simulateViewDetached() = this.onViewDetached() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt index 14a3bc147808..52ab6a637a8a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt @@ -35,6 +35,8 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController +import com.android.systemui.demomode.DemoMode +import com.android.systemui.demomode.DemoModeController import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags @@ -50,10 +52,12 @@ import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QS_ import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusIconContainer +import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock @@ -104,7 +108,7 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { @Mock private lateinit var featureFlags: FeatureFlags @Mock - private lateinit var clock: TextView + private lateinit var clock: Clock @Mock private lateinit var date: VariableDateView @Mock @@ -138,6 +142,7 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { private lateinit var qsConstraints: ConstraintSet @Mock private lateinit var largeScreenConstraints: ConstraintSet + @Mock private lateinit var demoModeController: DemoModeController @JvmField @Rule val mockitoRule = MockitoJUnit.rule() @@ -149,7 +154,7 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { @Before fun setUp() { - whenever<TextView>(view.findViewById(R.id.clock)).thenReturn(clock) + whenever<Clock>(view.findViewById(R.id.clock)).thenReturn(clock) whenever(clock.context).thenReturn(mockedContext) whenever<TextView>(view.findViewById(R.id.date)).thenReturn(date) @@ -196,7 +201,8 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { dumpManager, featureFlags, qsCarrierGroupControllerBuilder, - combinedShadeHeadersConstraintManager + combinedShadeHeadersConstraintManager, + demoModeController ) whenever(view.isAttachedToWindow).thenReturn(true) controller.init() @@ -618,6 +624,23 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { } @Test + fun demoMode_attachDemoMode() { + val cb = argumentCaptor<DemoMode>() + verify(demoModeController).addCallback(cb.capture()) + cb.value.onDemoModeStarted() + verify(clock).onDemoModeStarted() + } + + @Test + fun demoMode_detachDemoMode() { + controller.simulateViewDetached() + val cb = argumentCaptor<DemoMode>() + verify(demoModeController).removeCallback(cb.capture()) + cb.value.onDemoModeFinished() + verify(clock).onDemoModeFinished() + } + + @Test fun animateOutOnStartCustomizing() { val animator = Mockito.mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) val duration = 1000L diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt index 90ae693db955..0b850434caf7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt @@ -13,6 +13,8 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.battery.BatteryMeterView import com.android.systemui.battery.BatteryMeterViewController +import com.android.systemui.demomode.DemoMode +import com.android.systemui.demomode.DemoModeController import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags @@ -22,9 +24,11 @@ import com.android.systemui.qs.carrier.QSCarrierGroupController import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusIconContainer +import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.FakeConfigurationController import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.argumentCaptor import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before @@ -52,7 +56,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var qsCarrierGroupController: QSCarrierGroupController @Mock private lateinit var qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder @Mock private lateinit var featureFlags: FeatureFlags - @Mock private lateinit var clock: TextView + @Mock private lateinit var clock: Clock @Mock private lateinit var date: TextView @Mock private lateinit var carrierGroup: QSCarrierGroup @Mock private lateinit var batteryMeterView: BatteryMeterView @@ -66,6 +70,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { CombinedShadeHeadersConstraintManager @Mock private lateinit var mockedContext: Context + @Mock private lateinit var demoModeController: DemoModeController @JvmField @Rule val mockitoRule = MockitoJUnit.rule() var viewVisibility = View.GONE @@ -76,7 +81,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { @Before fun setup() { - whenever<TextView>(view.findViewById(R.id.clock)).thenReturn(clock) + whenever<Clock>(view.findViewById(R.id.clock)).thenReturn(clock) whenever(clock.context).thenReturn(mockedContext) whenever<TextView>(view.findViewById(R.id.date)).thenReturn(date) whenever(date.context).thenReturn(mockedContext) @@ -111,8 +116,9 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { dumpManager, featureFlags, qsCarrierGroupControllerBuilder, - combinedShadeHeadersConstraintManager - ) + combinedShadeHeadersConstraintManager, + demoModeController + ) whenever(view.isAttachedToWindow).thenReturn(true) mLargeScreenShadeHeaderController.init() carrierIconSlots = listOf( @@ -230,4 +236,21 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { verify(animator).setInterpolator(Interpolators.ALPHA_IN) verify(animator).start() } + + @Test + fun demoMode_attachDemoMode() { + val cb = argumentCaptor<DemoMode>() + verify(demoModeController).addCallback(cb.capture()) + cb.value.onDemoModeStarted() + verify(clock).onDemoModeStarted() + } + + @Test + fun demoMode_detachDemoMode() { + mLargeScreenShadeHeaderController.simulateViewDetached() + val cb = argumentCaptor<DemoMode>() + verify(demoModeController).removeCallback(cb.capture()) + cb.value.onDemoModeFinished() + verify(clock).onDemoModeFinished() + } } |