From 615ad7a7880964ed28ccfdd6eebaa84342911b1e Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Thu, 17 Feb 2022 19:55:26 +0000 Subject: [PATCH] [Ongoing Call] Provide our package name when requesting UID process state of dialer. This ensures that we can still access the UID process state of dialer apps even after ag/16659008 is submitted. Fixes: 216489355 Test: atest OngoingCallControllerTest Bug: 216248574 Bug: 216693695 Change-Id: Ibe37de264dd1b84af0348c84e6d6eace74187bd9 Merged-In: Ibe37de264dd1b84af0348c84e6d6eace74187bd9 --- .../dagger/StatusBarDependenciesModule.java | 2 ++ .../phone/ongoingcall/OngoingCallController.kt | 8 ++++++-- .../phone/ongoingcall/OngoingCallControllerTest.kt | 13 +++++++++++++ 3 files changed, 21 insertions(+), 2 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 c687e8282c7c9..fa6b502776db5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java @@ -261,6 +261,7 @@ public interface StatusBarDependenciesModule { @Provides @SysUISingleton static OngoingCallController provideOngoingCallController( + Context context, CommonNotifCollection notifCollection, SystemClock systemClock, ActivityStarter activityStarter, @@ -284,6 +285,7 @@ public interface StatusBarDependenciesModule { : Optional.empty(); OngoingCallController ongoingCallController = new OngoingCallController( + context, notifCollection, ongoingCallFlags, systemClock, 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 6e7231ef5ca38..4fccc5a07317b 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 @@ -21,6 +21,7 @@ import android.app.IActivityManager import android.app.IUidObserver import android.app.Notification import android.app.Notification.CallStyle.CALL_TYPE_ONGOING +import android.content.Context import android.content.Intent import android.util.Log import android.view.View @@ -52,6 +53,7 @@ import javax.inject.Inject */ @SysUISingleton class OngoingCallController @Inject constructor( + private val context: Context, private val notifCollection: CommonNotifCollection, private val ongoingCallFlags: OngoingCallFlags, private val systemClock: SystemClock, @@ -244,7 +246,9 @@ class OngoingCallController @Inject constructor( private fun setUpUidObserver(currentCallNotificationInfo: CallNotificationInfo) { try { isCallAppVisible = isProcessVisibleToUser( - iActivityManager.getUidProcessState(currentCallNotificationInfo.uid, null) + iActivityManager.getUidProcessState( + currentCallNotificationInfo.uid, context.opPackageName + ) ) } catch (se: SecurityException) { Log.e(TAG, "Security exception when trying to get process state: $se") @@ -286,7 +290,7 @@ class OngoingCallController @Inject constructor( uidObserver, ActivityManager.UID_OBSERVER_PROCSTATE, ActivityManager.PROCESS_STATE_UNKNOWN, - null + context.opPackageName ) } catch (se: SecurityException) { Log.e(TAG, "Security exception when trying to register uid observer: $se") 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 807664d093dab..ada0453acd86c 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 @@ -105,6 +105,7 @@ class OngoingCallControllerTest : SysuiTestCase() { val notificationCollection = mock(CommonNotifCollection::class.java) controller = OngoingCallController( + context, notificationCollection, mockOngoingCallFlags, clock, @@ -238,6 +239,18 @@ class OngoingCallControllerTest : SysuiTestCase() { notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry()) } + /** Regression test for b/216248574. */ + @Test + fun entryUpdated_packageNameProvidedToActivityManager() { + notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry()) + + val packageNameCaptor = ArgumentCaptor.forClass(String::class.java) + verify(mockIActivityManager).registerUidObserver( + any(), any(), any(), packageNameCaptor.capture() + ) + assertThat(packageNameCaptor.value).isNotNull() + } + /** * If a call notification is never added before #onEntryRemoved is called, then the listener * should never be notified.