From 516cd3e2cdcc2b7b5c6aaa0429730c2265d64b11 Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Fri, 9 Apr 2021 12:48:49 +0000 Subject: [PATCH] [Ongoing Call Chip] Add a click handler using ActivityLaunchAnimator. Demo video: https://b.corp.google.com/issues/183229367#comment8 Thanks to jdemeulenaere@'s hard work on animations, this is an easy change on my end. Test: atest and manual Bug: 183229367 Change-Id: I9411bf6fc11b380717ac139ef57f1c67011cac61 --- .../dagger/StatusBarDependenciesModule.java | 7 +++++-- .../ongoingcall/OngoingCallController.kt | 19 ++++++++++++++++--- .../ongoingcall/OngoingCallControllerTest.kt | 5 ++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java index 20383feff9bcc..fad748021559a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java @@ -24,6 +24,7 @@ import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.media.MediaDataManager; +import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.ActionClickLogger; import com.android.systemui.statusbar.CommandQueue; @@ -237,9 +238,11 @@ public interface StatusBarDependenciesModule { static OngoingCallController provideOngoingCallController( CommonNotifCollection notifCollection, FeatureFlags featureFlags, - SystemClock systemClock) { + SystemClock systemClock, + ActivityStarter activityStarter) { OngoingCallController ongoingCallController = - new OngoingCallController(notifCollection, featureFlags, systemClock); + new OngoingCallController( + notifCollection, featureFlags, systemClock, activityStarter); ongoingCallController.init(); return ongoingCallController; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt index b55db6fd1e7d7..93ea77b8378c7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt @@ -22,7 +22,9 @@ import android.util.Log import android.view.ViewGroup import android.widget.Chronometer import com.android.systemui.R +import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection @@ -38,7 +40,8 @@ import javax.inject.Inject class OngoingCallController @Inject constructor( private val notifCollection: CommonNotifCollection, private val featureFlags: FeatureFlags, - private val systemClock: SystemClock + private val systemClock: SystemClock, + private val activityStarter: ActivityStarter ) : CallbackController { var hasOngoingCall = false @@ -50,14 +53,24 @@ class OngoingCallController @Inject constructor( private val notifListener = object : NotifCollectionListener { override fun onEntryUpdated(entry: NotificationEntry) { if (isOngoingCallNotification(entry)) { - val timeView = chipView?.findViewById(R.id.ongoing_call_chip_time) - if (timeView != null) { + val currentChipView = chipView + val timeView = + currentChipView?.findViewById(R.id.ongoing_call_chip_time) + + if (currentChipView != null && timeView != null) { hasOngoingCall = true val callStartTime = entry.sbn.notification.`when` timeView.base = callStartTime - System.currentTimeMillis() + systemClock.elapsedRealtime() timeView.start() + + currentChipView.setOnClickListener { + activityStarter.postStartActivityDismissingKeyguard( + entry.sbn.notification.contentIntent.intent, 0, + ActivityLaunchAnimator.Controller.fromView(it)) + } + mListeners.forEach { l -> l.onOngoingCallStarted(animate = true) } } else if (DEBUG) { Log.w(TAG, "Ongoing call chip view could not be found; " + diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt index d87d1d1b92db3..73fcc919eb81c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt @@ -27,6 +27,7 @@ import android.view.LayoutInflater import android.widget.LinearLayout import com.android.systemui.R import com.android.systemui.SysuiTestCase +import com.android.systemui.plugins.ActivityStarter import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder @@ -55,6 +56,7 @@ class OngoingCallControllerTest : SysuiTestCase() { private lateinit var notifCollectionListener: NotifCollectionListener @Mock private lateinit var mockOngoingCallListener: OngoingCallListener + @Mock private lateinit var mockActivityStarter: ActivityStarter private lateinit var chipView: LinearLayout @@ -71,7 +73,8 @@ class OngoingCallControllerTest : SysuiTestCase() { `when`(featureFlags.isOngoingCallStatusBarChipEnabled).thenReturn(true) val notificationCollection = mock(CommonNotifCollection::class.java) - controller = OngoingCallController(notificationCollection, featureFlags, FakeSystemClock()) + controller = OngoingCallController( + notificationCollection, featureFlags, FakeSystemClock(), mockActivityStarter) controller.init() controller.addCallback(mockOngoingCallListener) controller.setChipView(chipView)