[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
This commit is contained in:
Caitlin Cassidy
2022-02-17 19:55:26 +00:00
parent e586173d8d
commit 615ad7a788
3 changed files with 21 additions and 2 deletions

View File

@@ -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,

View File

@@ -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")

View File

@@ -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.