Merge "[Ongoing Call] Always unregister the UidObserver." into sc-dev am: 3d1c180320
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15503430 Change-Id: I7fca83295fe2a70561094a805b9989358bbf1198
This commit is contained in:
@@ -218,6 +218,10 @@ class OngoingCallController @Inject constructor(
|
||||
isCallAppVisible = isProcessVisibleToUser(
|
||||
iActivityManager.getUidProcessState(currentCallNotificationInfo.uid, null))
|
||||
|
||||
if (uidObserver != null) {
|
||||
iActivityManager.unregisterUidObserver(uidObserver)
|
||||
}
|
||||
|
||||
uidObserver = object : IUidObserver.Stub() {
|
||||
override fun onUidStateChanged(
|
||||
uid: Int, procState: Int, procStateSeq: Long, capability: Int) {
|
||||
|
||||
@@ -184,6 +184,21 @@ class OngoingCallControllerTest : SysuiTestCase() {
|
||||
.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
|
||||
* should never be notified.
|
||||
|
||||
Reference in New Issue
Block a user