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

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

Merge "[Ongoing Call] Always unregister the UidObserver." into sc-dev am:...

Merge "[Ongoing Call] Always unregister the UidObserver." into sc-dev am: 3d1c1803 am: 35c19970 am: 466de2de

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

Change-Id: I45e5e02198962e133008d8be605d0cc0c8d7c345
parents 705530d6 466de2de
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -216,6 +216,10 @@ class OngoingCallController @Inject constructor(
        isCallAppVisible = isProcessVisibleToUser(
        isCallAppVisible = isProcessVisibleToUser(
                iActivityManager.getUidProcessState(currentCallNotificationInfo.uid, null))
                iActivityManager.getUidProcessState(currentCallNotificationInfo.uid, null))


        if (uidObserver != null) {
            iActivityManager.unregisterUidObserver(uidObserver)
        }

        uidObserver = object : IUidObserver.Stub() {
        uidObserver = object : IUidObserver.Stub() {
            override fun onUidStateChanged(
            override fun onUidStateChanged(
                uid: Int,
                uid: Int,
+15 −0
Original line number Original line Diff line number Diff line
@@ -184,6 +184,21 @@ class OngoingCallControllerTest : SysuiTestCase() {
                .isGreaterThan(0)
                .isGreaterThan(0)
    }
    }


    /** Regression test for b/194731244. */
    @Test
    fun onEntryUpdated_calledManyTimes_uidObserverUnregisteredManyTimes() {
        val numCalls = 4

        for (i in 0 until numCalls) {
            // Re-create the notification each time so that it's considered a different object and
            // observers will get re-registered (and hopefully unregistered).
            notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry())
        }

        // There should be 1 observer still registered, so we should unregister n-1 times.
        verify(mockIActivityManager, times(numCalls - 1)).unregisterUidObserver(any())
    }

    /**
    /**
     * If a call notification is never added before #onEntryRemoved is called, then the listener
     * If a call notification is never added before #onEntryRemoved is called, then the listener
     * should never be notified.
     * should never be notified.