[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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<OngoingCallListener> {
|
||||
|
||||
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<Chronometer>(R.id.ongoing_call_chip_time)
|
||||
if (timeView != null) {
|
||||
val currentChipView = chipView
|
||||
val timeView =
|
||||
currentChipView?.findViewById<Chronometer>(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; " +
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user