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

Commit 5321180d authored by Caitlin Cassidy's avatar Caitlin Cassidy Committed by Automerger Merge Worker
Browse files

Merge "[Ongoing Call Chip] Fix NPE if the notification doesn't have a content...

Merge "[Ongoing Call Chip] Fix NPE if the notification doesn't have a content intent." into sc-dev am: 614e76dc

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15067651

Change-Id: I24a0e7e9680245d42193284113fa4d37fc73405b
parents 4c4aaf56 614e76dc
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ class OngoingCallController @Inject constructor(
                val newOngoingCallInfo = CallNotificationInfo(
                        entry.sbn.key,
                        entry.sbn.notification.`when`,
                        entry.sbn.notification.contentIntent.intent,
                        entry.sbn.notification.contentIntent?.intent,
                        entry.sbn.uid,
                        entry.sbn.notification.extras.getInt(
                                Notification.EXTRA_CALL_TYPE, -1) == CALL_TYPE_ONGOING
@@ -176,15 +176,18 @@ class OngoingCallController @Inject constructor(
                    systemClock.elapsedRealtime()
            timeView.start()

            currentCallNotificationInfo.intent?.let { intent ->
                currentChipView.setOnClickListener {
                    logger.logChipClicked()
                    activityStarter.postStartActivityDismissingKeyguard(
                        currentCallNotificationInfo.intent, 0,
                            intent,
                            0,
                            ActivityLaunchAnimator.Controller.fromView(
                                    backgroundView,
                                    InteractionJankMonitor.CUJ_STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP)
                    )
                }
            }

            setUpUidObserver(currentCallNotificationInfo)

@@ -254,7 +257,7 @@ class OngoingCallController @Inject constructor(
    private data class CallNotificationInfo(
        val key: String,
        val callStartTime: Long,
        val intent: Intent,
        val intent: Intent?,
        val uid: Int,
        /** True if the call is currently ongoing (as opposed to incoming, screening, etc.). */
        val isOngoing: Boolean
+24 −9
Original line number Diff line number Diff line
@@ -40,23 +40,23 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.mockito.any
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers.*
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.nullable
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.reset

import org.mockito.MockitoAnnotations

private const val CALL_UID = 900
@@ -140,6 +140,13 @@ class OngoingCallControllerTest : SysuiTestCase() {
                .onOngoingCallStateChanged(anyBoolean())
    }

    /** Regression test for b/191472854. */
    @Test
    fun onEntryUpdated_notifHasNullContentIntent_noCrash() {
        notifCollectionListener.onEntryUpdated(
                createCallNotifEntry(ongoingCallStyle, nullContentIntent = true))
    }

    /**
     * If a call notification is never added before #onEntryRemoved is called, then the listener
     * should never be notified.
@@ -357,14 +364,22 @@ class OngoingCallControllerTest : SysuiTestCase() {

    private fun createScreeningCallNotifEntry() = createCallNotifEntry(screeningCallStyle)

    private fun createCallNotifEntry(callStyle: Notification.CallStyle): NotificationEntry {
    private fun createCallNotifEntry(
        callStyle: Notification.CallStyle,
        nullContentIntent: Boolean = false
    ): NotificationEntry {
        val notificationEntryBuilder = NotificationEntryBuilder()
        notificationEntryBuilder.modifyNotification(context).style = callStyle
        notificationEntryBuilder.setUid(CALL_UID)

        if (nullContentIntent) {
            notificationEntryBuilder.modifyNotification(context).setContentIntent(null)
        } else {
            val contentIntent = mock(PendingIntent::class.java)
            `when`(contentIntent.intent).thenReturn(mock(Intent::class.java))
            notificationEntryBuilder.modifyNotification(context).setContentIntent(contentIntent)
        notificationEntryBuilder.setUid(CALL_UID)
        }

        return notificationEntryBuilder.build()
    }