From 55202753f7c0c8e2ef10e92a5eea192c4cfd2240 Mon Sep 17 00:00:00 2001 From: Jay Aliomer Date: Fri, 4 Nov 2022 20:00:00 +0000 Subject: [PATCH] Revert "Revert "Enable DemoMode for new QS clock"" This reverts commit 7a1df387ef664e8713601ecc643ff2d338fd36ff. Reason for revert: Fixing original failure Change-Id: Iae0abe01212f72dd21fbd4dd79634e2a954049be --- .../shade/LargeScreenShadeHeaderController.kt | 22 +++++++++++-- ...ScreenShadeHeaderControllerCombinedTest.kt | 29 +++++++++++++++-- .../LargeScreenShadeHeaderControllerTest.kt | 32 ++++++++++++++++--- 3 files changed, 74 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 31e44646859f0..5e47d6dd5b760 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(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) { @@ -300,6 +313,7 @@ class LargeScreenShadeHeaderController @Inject constructor( dumpManager.registerDumpable(this) configurationController.addCallback(configurationControllerListener) + demoModeController.addCallback(demoModeReceiver) updateVisibility() updateTransition() @@ -309,6 +323,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) { @@ -521,4 +536,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 e1007faae88b7..858d0e7b94d08 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() @@ -146,10 +151,12 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { private lateinit var controller: LargeScreenShadeHeaderController private lateinit var carrierIconSlots: List private val configurationController = FakeConfigurationController() + private lateinit var demoModeControllerCapture: ArgumentCaptor @Before fun setUp() { - whenever(view.findViewById(R.id.clock)).thenReturn(clock) + demoModeControllerCapture = argumentCaptor() + whenever(view.findViewById(R.id.clock)).thenReturn(clock) whenever(clock.context).thenReturn(mockedContext) whenever(view.findViewById(R.id.date)).thenReturn(date) @@ -195,7 +202,8 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { dumpManager, featureFlags, qsCarrierGroupControllerBuilder, - combinedShadeHeadersConstraintManager + combinedShadeHeadersConstraintManager, + demoModeController ) whenever(view.isAttachedToWindow).thenReturn(true) controller.init() @@ -616,6 +624,21 @@ class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() { ) } + @Test + fun demoMode_attachDemoMode() { + verify(demoModeController).addCallback(capture(demoModeControllerCapture)) + demoModeControllerCapture.value.onDemoModeStarted() + verify(clock).onDemoModeStarted() + } + + @Test + fun demoMode_detachDemoMode() { + controller.simulateViewDetached() + verify(demoModeController).removeCallback(capture(demoModeControllerCapture)) + demoModeControllerCapture.value.onDemoModeFinished() + verify(clock).onDemoModeFinished() + } + @Test fun animateOutOnStartCustomizing() { val animator = Mockito.mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) 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 90ae693db955e..b4c8f981b7605 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,12 @@ 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.android.systemui.util.mockito.capture import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before @@ -52,7 +57,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 +71,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 +82,7 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { @Before fun setup() { - whenever(view.findViewById(R.id.clock)).thenReturn(clock) + whenever(view.findViewById(R.id.clock)).thenReturn(clock) whenever(clock.context).thenReturn(mockedContext) whenever(view.findViewById(R.id.date)).thenReturn(date) whenever(date.context).thenReturn(mockedContext) @@ -111,8 +117,9 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { dumpManager, featureFlags, qsCarrierGroupControllerBuilder, - combinedShadeHeadersConstraintManager - ) + combinedShadeHeadersConstraintManager, + demoModeController + ) whenever(view.isAttachedToWindow).thenReturn(true) mLargeScreenShadeHeaderController.init() carrierIconSlots = listOf( @@ -230,4 +237,21 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { verify(animator).setInterpolator(Interpolators.ALPHA_IN) verify(animator).start() } + + @Test + fun demoMode_attachDemoMode() { + val cb = argumentCaptor() + verify(demoModeController).addCallback(capture(cb)) + cb.value.onDemoModeStarted() + verify(clock).onDemoModeStarted() + } + + @Test + fun demoMode_detachDemoMode() { + mLargeScreenShadeHeaderController.simulateViewDetached() + val cb = argumentCaptor() + verify(demoModeController).removeCallback(capture(cb)) + cb.value.onDemoModeFinished() + verify(clock).onDemoModeFinished() + } }