Show privacy dialog on secondary user calls

When calls are performed by a secondary user, the attribution is to UID
1000, so they don't match the current user. However, as they are marked
with isPhoneCall, show them anyway.

Test: atest PrivacyDialogControllerTest (fails without fix)
Fixes: 198552515
Change-Id: I11682eceb578ab3b9bf1b2573294af8ca418e6e2
This commit is contained in:
Fabian Kozynski
2021-09-13 14:36:39 -04:00
parent caad2a3f4d
commit 30ead8d85d
2 changed files with 22 additions and 2 deletions

View File

@@ -155,7 +155,7 @@ class PrivacyDialogController(
val items = usage.mapNotNull {
val type = filterType(permGroupToPrivacyType(it.permGroupName))
val userInfo = userInfos.firstOrNull { ui -> ui.id == UserHandle.getUserId(it.uid) }
userInfo?.let { ui ->
if (userInfo != null || it.isPhoneCall) {
type?.let { t ->
// Only try to get the app name if we actually need it
val appName = if (it.isPhoneCall) {
@@ -171,10 +171,14 @@ class PrivacyDialogController(
it.attribution,
it.lastAccess,
it.isActive,
ui.isManagedProfile,
// If there's no user info, we're in a phoneCall in secondary user
userInfo?.isManagedProfile ?: false,
it.isPhoneCall
)
}
} else {
// No matching user or phone call
null
}
}
uiExecutor.execute {

View File

@@ -22,6 +22,7 @@ import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.content.pm.UserInfo
import android.os.Process.SYSTEM_UID
import android.os.UserHandle
import android.permission.PermGroupUsage
import android.permission.PermissionManager
@@ -550,6 +551,21 @@ class PrivacyDialogControllerTest : SysuiTestCase() {
verify(dialog, never()).dismiss()
}
@Test
fun testCallOnSecondaryUser() {
// Calls happen in
val usage = createMockPermGroupUsage(uid = SYSTEM_UID, isPhoneCall = true)
`when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage))
`when`(userTracker.userProfiles).thenReturn(listOf(
UserInfo(ENT_USER_ID, "", 0)
))
controller.showDialog(context)
exhaustExecutors()
verify(dialog).show()
}
private fun exhaustExecutors() {
FakeExecutor.exhaustExecutors(backgroundExecutor, uiExecutor)
}