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

Commit 3ae456a8 authored by Jay Aliomer's avatar Jay Aliomer
Browse files

Enable DemoMode for new QS clock

Fixes: 244345298
Test: LargeScreenShadeHeaderControllerTest
Change-Id: I6ff3587668a5a535218c7f5d4b6c79493ae3955c
parent ebc8b51a
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -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()
}
+26 −3
Original line number Diff line number Diff line
@@ -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()
@@ -617,6 +623,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)
+27 −4
Original line number Diff line number Diff line
@@ -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,7 +116,8 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
                dumpManager,
                featureFlags,
                qsCarrierGroupControllerBuilder,
                combinedShadeHeadersConstraintManager
                combinedShadeHeadersConstraintManager,
                demoModeController
                )
        whenever(view.isAttachedToWindow).thenReturn(true)
        mLargeScreenShadeHeaderController.init()
@@ -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()
    }
}