diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt | 28 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt | 31 |
2 files changed, 59 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt index b4653bef766d..f0815e93dccd 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt @@ -19,11 +19,14 @@ package com.android.systemui.shade import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.annotation.IdRes +import android.app.PendingIntent import android.app.StatusBarManager +import android.content.Intent import android.content.res.Configuration import android.os.Bundle import android.os.Trace import android.os.Trace.TRACE_TAG_APP +import android.provider.AlarmClock import android.util.Pair import android.view.DisplayCutout import android.view.View @@ -41,6 +44,7 @@ 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.plugins.ActivityStarter import com.android.systemui.qs.ChipVisibilityListener import com.android.systemui.qs.HeaderPrivacyIconsController import com.android.systemui.shade.ShadeHeaderController.Companion.HEADER_TRANSITION_ID @@ -58,6 +62,7 @@ import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.Cent import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SHADE_HEADER import com.android.systemui.statusbar.policy.Clock import com.android.systemui.statusbar.policy.ConfigurationController +import com.android.systemui.statusbar.policy.NextAlarmController import com.android.systemui.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.ViewController @@ -91,6 +96,8 @@ constructor( private val combinedShadeHeadersConstraintManager: CombinedShadeHeadersConstraintManager, private val demoModeController: DemoModeController, private val qsBatteryModeController: QsBatteryModeController, + private val nextAlarmController: NextAlarmController, + private val activityStarter: ActivityStarter, ) : ViewController<View>(header), Dumpable { companion object { @@ -103,6 +110,8 @@ constructor( @VisibleForTesting internal val LARGE_SCREEN_HEADER_CONSTRAINT = R.id.large_screen_header_constraint + @VisibleForTesting internal val DEFAULT_CLOCK_INTENT = Intent(AlarmClock.ACTION_SHOW_ALARMS) + private fun Int.stateToString() = when (this) { QQS_HEADER_CONSTRAINT -> "QQS Header" @@ -125,6 +134,7 @@ constructor( private var roundedCorners = 0 private var cutout: DisplayCutout? = null private var lastInsets: WindowInsets? = null + private var nextAlarmIntent: PendingIntent? = null private var qsDisabled = false private var visible = false @@ -252,6 +262,11 @@ constructor( } } + private val nextAlarmCallback = + NextAlarmController.NextAlarmChangeCallback { nextAlarm -> + nextAlarmIntent = nextAlarm?.showIntent + } + override fun onInit() { variableDateViewControllerFactory.create(date as VariableDateView).init() batteryMeterViewController.init() @@ -286,19 +301,23 @@ constructor( mShadeCarrierGroup.setPaddingRelative((v.width * v.scaleX).toInt(), 0, 0, 0) } + clock.setOnClickListener { launchClockActivity() } dumpManager.registerDumpable(this) configurationController.addCallback(configurationControllerListener) demoModeController.addCallback(demoModeReceiver) statusBarIconController.addIconGroup(iconManager) + nextAlarmController.addCallback(nextAlarmCallback) } override fun onViewDetached() { + clock.setOnClickListener(null) privacyIconsController.chipVisibilityListener = null dumpManager.unregisterDumpable(this::class.java.simpleName) configurationController.removeCallback(configurationControllerListener) demoModeController.removeCallback(demoModeReceiver) statusBarIconController.removeIconGroup(iconManager) + nextAlarmController.removeCallback(nextAlarmCallback) } fun disable(state1: Int, state2: Int, animate: Boolean) { @@ -318,6 +337,15 @@ constructor( .start() } + @VisibleForTesting + internal fun launchClockActivity() { + if (nextAlarmIntent != null) { + activityStarter.postStartActivityDismissingKeyguard(nextAlarmIntent) + } else { + activityStarter.postStartActivityDismissingKeyguard(DEFAULT_CLOCK_INTENT, 0 /*delay */) + } + } + private fun loadConstraints() { // Use resources.getXml instead of passing the resource id due to bug b/205018300 header diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt index b043e97f1054..76f7401adbb2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt @@ -16,6 +16,8 @@ package com.android.systemui.shade import android.animation.Animator +import android.app.AlarmManager +import android.app.PendingIntent import android.app.StatusBarManager import android.content.Context import android.content.res.Resources @@ -40,8 +42,10 @@ 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.plugins.ActivityStarter import com.android.systemui.qs.ChipVisibilityListener import com.android.systemui.qs.HeaderPrivacyIconsController +import com.android.systemui.shade.ShadeHeaderController.Companion.DEFAULT_CLOCK_INTENT import com.android.systemui.shade.ShadeHeaderController.Companion.LARGE_SCREEN_HEADER_CONSTRAINT import com.android.systemui.shade.ShadeHeaderController.Companion.QQS_HEADER_CONSTRAINT import com.android.systemui.shade.ShadeHeaderController.Companion.QS_HEADER_CONSTRAINT @@ -52,6 +56,7 @@ 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.NextAlarmController import com.android.systemui.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.mockito.any @@ -114,6 +119,8 @@ class ShadeHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var demoModeController: DemoModeController @Mock private lateinit var qsBatteryModeController: QsBatteryModeController + @Mock private lateinit var nextAlarmController: NextAlarmController + @Mock private lateinit var activityStarter: ActivityStarter @JvmField @Rule val mockitoRule = MockitoJUnit.rule() var viewVisibility = View.GONE @@ -181,6 +188,8 @@ class ShadeHeaderControllerTest : SysuiTestCase() { combinedShadeHeadersConstraintManager, demoModeController, qsBatteryModeController, + nextAlarmController, + activityStarter, ) whenever(view.isAttachedToWindow).thenReturn(true) shadeHeaderController.init() @@ -828,6 +837,28 @@ class ShadeHeaderControllerTest : SysuiTestCase() { verify(carrierGroup).setPaddingRelative(514, 0, 0, 0) } + @Test + fun launchClock_launchesDefaultIntentWhenNoAlarmSet() { + shadeHeaderController.launchClockActivity() + + verify(activityStarter).postStartActivityDismissingKeyguard(DEFAULT_CLOCK_INTENT, 0) + } + + @Test + fun launchClock_launchesNextAlarmWhenExists() { + val pendingIntent = mock<PendingIntent>() + val aci = AlarmManager.AlarmClockInfo(12345, pendingIntent) + val captor = + ArgumentCaptor.forClass(NextAlarmController.NextAlarmChangeCallback::class.java) + + verify(nextAlarmController).addCallback(capture(captor)) + captor.value.onNextAlarmChanged(aci) + + shadeHeaderController.launchClockActivity() + + verify(activityStarter).postStartActivityDismissingKeyguard(pendingIntent) + } + private fun View.executeLayoutChange( left: Int, top: Int, |