summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yi-an Chen <theianchen@google.com> 2024-12-23 23:41:55 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2024-12-23 23:41:55 -0800
commit21fee90b266b7d2f626fa7bdaa47553f9b13a618 (patch)
treeafb1f528aaa64e6509e83ecf84b2e62373364c26
parent055712523e2dd98dcd8306405a7b11b267684722 (diff)
parent93ae7932ffdc754d7ceaccc9ceb31a12ec3ba3d9 (diff)
Merge "Fix empty AllPermission dialog when no description in PermissionInfo" into main
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt133
1 files changed, 67 insertions, 66 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
index fb33aaffc..0701045f5 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
@@ -165,7 +165,7 @@ object KotlinUtils {
val first: A,
val second: B,
val third: C,
- val fourth: D
+ val fourth: D,
)
/**
@@ -179,7 +179,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
PROPERTY_CAMERA_MIC_ICONS_ENABLED,
- true
+ true,
)
}
@@ -190,7 +190,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
PROPERTY_LOCATION_INDICATORS_ENABLED,
- false
+ false,
)
}
@@ -211,7 +211,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
PROPERTY_PHOTO_PICKER_PROMPT_ENABLED,
- true
+ true,
)
}
@@ -236,7 +236,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
PERMISSION_RATIONALE_ENABLED,
- true
+ true,
)
}
@@ -249,7 +249,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
SAFETY_LABEL_CHANGE_NOTIFICATIONS_ENABLED,
- true
+ true,
) &&
!DeviceUtils.isAuto(context) &&
!DeviceUtils.isTelevision(context) &&
@@ -262,7 +262,7 @@ object KotlinUtils {
return DeviceConfig.getLong(
DeviceConfig.NAMESPACE_PRIVACY,
PROPERTY_SAFETY_LABEL_CHANGES_JOB_INTERVAL_MILLIS,
- Duration.ofDays(30).toMillis()
+ Duration.ofDays(30).toMillis(),
)
}
@@ -278,7 +278,7 @@ object KotlinUtils {
*/
fun <K> getMapAndListDifferences(
newValues: Collection<K>,
- oldValues: Map<K, *>
+ oldValues: Map<K, *>,
): Pair<Set<K>, Set<K>> {
val mapHas = oldValues.keys.toMutableSet()
val listHas = newValues.toMutableSet()
@@ -301,7 +301,7 @@ object KotlinUtils {
fun sortPreferenceGroup(
group: PreferenceGroup,
compare: (lhs: Preference, rhs: Preference) -> Int,
- hasHeader: Boolean
+ hasHeader: Boolean,
) {
val preferences = mutableListOf<Preference>()
for (i in 0 until group.preferenceCount) {
@@ -369,7 +369,7 @@ object KotlinUtils {
return groupInfo.loadSafeLabel(
context.packageManager,
0f,
- TextUtils.SAFE_STRING_FLAG_FIRST_LINE or TextUtils.SAFE_STRING_FLAG_TRIM
+ TextUtils.SAFE_STRING_FLAG_FIRST_LINE or TextUtils.SAFE_STRING_FLAG_TRIM,
)
}
@@ -407,7 +407,7 @@ object KotlinUtils {
.loadSafeLabel(
context.packageManager,
20000.toFloat(),
- TextUtils.SAFE_STRING_FLAG_TRIM
+ TextUtils.SAFE_STRING_FLAG_TRIM,
)
} catch (e: PackageManager.NameNotFoundException) {
permName
@@ -431,7 +431,7 @@ object KotlinUtils {
Utils.applyTint(
context,
permInfo.loadUnbadgedIcon(context.packageManager),
- android.R.attr.colorControlNormal
+ android.R.attr.colorControlNormal,
)
}
@@ -445,7 +445,7 @@ object KotlinUtils {
Utils.applyTint(
context,
context.getDrawable(R.drawable.ic_perm_device_info),
- android.R.attr.colorControlNormal
+ android.R.attr.colorControlNormal,
)
}
}
@@ -461,7 +461,8 @@ object KotlinUtils {
fun getPermInfoDescription(context: Context, permName: String): CharSequence {
return try {
val permInfo = context.packageManager.getPermissionInfo(permName, 0)
- permInfo.loadDescription(context.packageManager) ?: ""
+ permInfo.loadDescription(context.packageManager)
+ ?: permInfo.loadLabel(context.packageManager)
} catch (e: PackageManager.NameNotFoundException) {
""
}
@@ -511,7 +512,7 @@ object KotlinUtils {
fun getBadgedPackageIconBitmap(
application: Application,
user: UserHandle,
- packageName: String
+ packageName: String,
): Bitmap? {
val drawable = getBadgedPackageIcon(application, packageName, user)
@@ -547,7 +548,7 @@ object KotlinUtils {
Bitmap.createBitmap(
pkgIcon.intrinsicWidth,
pkgIcon.intrinsicHeight,
- Bitmap.Config.ARGB_8888
+ Bitmap.Config.ARGB_8888,
)
// Draw the icon so it can be displayed.
val canvas = Canvas(pkgIconBmp)
@@ -597,7 +598,7 @@ object KotlinUtils {
activity: Activity,
uid: Int,
requestedPermissions: List<String>,
- requestCode: Int
+ requestCode: Int,
) {
// A clone profile doesn't have a MediaProvider. If the app's user is a clone profile, open
// the photo picker in the parent profile
@@ -653,7 +654,7 @@ object KotlinUtils {
return opsManager.unsafeCheckOpNoThrow(
OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED,
uid,
- packageName
+ packageName,
) == MODE_ALLOWED
}
return true
@@ -692,7 +693,7 @@ object KotlinUtils {
app: Application,
group: LightAppPermGroup,
vararg flags: Pair<Int, Boolean>,
- filterPermissions: List<String> = group.permissions.keys.toList()
+ filterPermissions: List<String> = group.permissions.keys.toList(),
): LightAppPermGroup {
var flagMask = 0
var flagsToSet = 0
@@ -718,7 +719,7 @@ object KotlinUtils {
permName,
group.packageName,
group.userHandle,
- *flags
+ *flags,
)
}
newPerms[permName] =
@@ -727,7 +728,7 @@ object KotlinUtils {
perm.permInfo,
perm.isGranted,
perm.flags or flagsToSet,
- perm.foregroundPerms
+ perm.foregroundPerms,
)
}
return LightAppPermGroup(
@@ -735,7 +736,7 @@ object KotlinUtils {
group.permGroupInfo,
newPerms,
group.hasInstallToRuntimeSplit,
- group.specialLocationGrant
+ group.specialLocationGrant,
)
}
@@ -766,7 +767,7 @@ object KotlinUtils {
isOneTime,
userFixed,
withoutAppOps,
- filterPermissions
+ filterPermissions,
)
}
@@ -785,7 +786,7 @@ object KotlinUtils {
fun grantBackgroundRuntimePermissions(
app: Application,
group: LightAppPermGroup,
- filterPermissions: Collection<String> = group.permissions.keys
+ filterPermissions: Collection<String> = group.permissions.keys,
): LightAppPermGroup {
return grantRuntimePermissions(
app,
@@ -794,7 +795,7 @@ object KotlinUtils {
isOneTime = false,
userFixed = false,
withoutAppOps = false,
- filterPermissions = filterPermissions
+ filterPermissions = filterPermissions,
)
}
@@ -806,7 +807,7 @@ object KotlinUtils {
isOneTime: Boolean = false,
userFixed: Boolean = false,
withoutAppOps: Boolean = false,
- filterPermissions: Collection<String> = group.permissions.keys
+ filterPermissions: Collection<String> = group.permissions.keys,
): LightAppPermGroup {
val deviceId = group.deviceId
val newPerms = group.permissions.toMutableMap()
@@ -837,7 +838,7 @@ object KotlinUtils {
group.packageInfo.packageName,
PERMISSION_CONTROLLER_CHANGED_FLAG_MASK,
permFlags,
- user
+ user,
)
}
}
@@ -846,7 +847,7 @@ object KotlinUtils {
if (shouldKillForAnyPermission) {
(app.getSystemService(ActivityManager::class.java) as ActivityManager).killUid(
group.packageInfo.uid,
- KILL_REASON_APP_OP_CHANGE
+ KILL_REASON_APP_OP_CHANGE,
)
}
val newGroup =
@@ -855,7 +856,7 @@ object KotlinUtils {
group.permGroupInfo,
newPerms,
group.hasInstallToRuntimeSplit,
- group.specialLocationGrant
+ group.specialLocationGrant,
)
// If any permission in the group is one time granted, start one time permission session.
if (newGroup.permissions.any { it.value.isOneTime && it.value.isGranted }) {
@@ -867,7 +868,7 @@ object KotlinUtils {
Utils.getOneTimePermissionsTimeout(),
Utils.getOneTimePermissionsKilledDelay(false),
ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER,
- ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE
+ ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE,
)
} else {
context
@@ -876,7 +877,7 @@ object KotlinUtils {
group.packageName,
Utils.getOneTimePermissionsTimeout(),
ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_RESET_TIMER,
- ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE
+ ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE,
)
}
}
@@ -904,7 +905,7 @@ object KotlinUtils {
group: LightAppPermGroup,
isOneTime: Boolean,
userFixed: Boolean = false,
- withoutAppOps: Boolean = false
+ withoutAppOps: Boolean = false,
): Pair<LightPermission, Boolean> {
val pkgInfo = group.packageInfo
val user = UserHandle.getUserHandleForUid(pkgInfo.uid)
@@ -942,7 +943,7 @@ object KotlinUtils {
group.packageName,
PERMISSION_CONTROLLER_CHANGED_FLAG_MASK,
oldFlags,
- user
+ user,
)
// TODO: Update this method once AppOp is device aware
disallowAppOp(app, perm, group)
@@ -1018,7 +1019,7 @@ object KotlinUtils {
group.packageInfo.packageName,
PERMISSION_CONTROLLER_CHANGED_FLAG_MASK,
newFlags,
- user
+ user,
)
}
@@ -1047,7 +1048,7 @@ object KotlinUtils {
userFixed: Boolean = false,
oneTime: Boolean = false,
forceRemoveRevokedCompat: Boolean = false,
- filterPermissions: Collection<String> = group.permissions.keys
+ filterPermissions: Collection<String> = group.permissions.keys,
): LightAppPermGroup {
return revokeRuntimePermissions(
app,
@@ -1056,7 +1057,7 @@ object KotlinUtils {
userFixed,
oneTime,
forceRemoveRevokedCompat,
- filterPermissions
+ filterPermissions,
)
}
@@ -1079,7 +1080,7 @@ object KotlinUtils {
userFixed: Boolean = false,
oneTime: Boolean = false,
forceRemoveRevokedCompat: Boolean = false,
- filterPermissions: Collection<String> = group.permissions.keys
+ filterPermissions: Collection<String> = group.permissions.keys,
): LightAppPermGroup {
return revokeRuntimePermissions(
app,
@@ -1088,7 +1089,7 @@ object KotlinUtils {
userFixed,
oneTime,
forceRemoveRevokedCompat,
- filterPermissions
+ filterPermissions,
)
}
@@ -1100,7 +1101,7 @@ object KotlinUtils {
userFixed: Boolean,
oneTime: Boolean,
forceRemoveRevokedCompat: Boolean = false,
- filterPermissions: Collection<String>
+ filterPermissions: Collection<String>,
): LightAppPermGroup {
val deviceId = group.deviceId
val wasOneTime = group.isOneTime
@@ -1117,7 +1118,7 @@ object KotlinUtils {
userFixed,
oneTime,
forceRemoveRevokedCompat,
- group
+ group,
)
newPerms[newPerm.name] = newPerm
shouldKillForAnyPermission = shouldKillForAnyPermission || shouldKill
@@ -1127,7 +1128,7 @@ object KotlinUtils {
if (shouldKillForAnyPermission && !shouldSkipKillForGroup(app, group)) {
(app.getSystemService(ActivityManager::class.java) as ActivityManager).killUid(
group.packageInfo.uid,
- KILL_REASON_APP_OP_CHANGE
+ KILL_REASON_APP_OP_CHANGE,
)
}
@@ -1137,7 +1138,7 @@ object KotlinUtils {
group.permGroupInfo,
newPerms,
group.hasInstallToRuntimeSplit,
- group.specialLocationGrant
+ group.specialLocationGrant,
)
if (wasOneTime && !anyPermsOfPackageOneTimeGranted(app, newGroup.packageInfo, newGroup)) {
@@ -1165,7 +1166,7 @@ object KotlinUtils {
packageName: String,
permissionGroupName: String,
user: UserHandle,
- postRevokeHandler: Runnable?
+ postRevokeHandler: Runnable?,
) {
GlobalScope.launch(Dispatchers.Main) {
val group =
@@ -1192,7 +1193,7 @@ object KotlinUtils {
private fun anyPermsOfPackageOneTimeGranted(
app: Application,
packageInfo: LightPackageInfo,
- group: LightAppPermGroup? = null
+ group: LightAppPermGroup? = null,
): Boolean {
val user = group?.userHandle ?: UserHandle.getUserHandleForUid(packageInfo.uid)
if (group?.isOneTime == true) {
@@ -1233,7 +1234,7 @@ object KotlinUtils {
userFixed: Boolean,
oneTime: Boolean,
forceRemoveRevokedCompat: Boolean,
- group: LightAppPermGroup
+ group: LightAppPermGroup,
): Pair<LightPermission, Boolean> {
// Do not touch permissions fixed by the system.
if (perm.isSystemFixed) {
@@ -1259,14 +1260,14 @@ object KotlinUtils {
!isPermissionSplitFromNonRuntime(
app,
perm.name,
- group.packageInfo.targetSdkVersion
+ group.packageInfo.targetSdkVersion,
)
) {
// Revoke the permission if needed.
context.packageManager.revokeRuntimePermission(
group.packageInfo.packageName,
perm.name,
- user
+ user,
)
isGranted = false
if (forceRemoveRevokedCompat) {
@@ -1311,7 +1312,7 @@ object KotlinUtils {
group.packageInfo.packageName,
PERMISSION_CONTROLLER_CHANGED_FLAG_MASK,
newFlags,
- user
+ user,
)
}
@@ -1332,7 +1333,7 @@ object KotlinUtils {
.cancelBackgroundAccessWarningNotification(
group.packageInfo.packageName,
user,
- true
+ true,
)
}
}
@@ -1372,7 +1373,7 @@ object KotlinUtils {
private fun allowAppOp(
app: Application,
perm: LightPermission,
- group: LightAppPermGroup
+ group: LightAppPermGroup,
): Boolean {
val packageName = group.packageInfo.packageName
val uid = group.packageInfo.uid
@@ -1434,7 +1435,7 @@ object KotlinUtils {
private fun disallowAppOp(
app: Application,
perm: LightPermission,
- group: LightAppPermGroup
+ group: LightAppPermGroup,
): Boolean {
val packageName = group.packageInfo.packageName
val uid = group.packageInfo.uid
@@ -1473,7 +1474,7 @@ object KotlinUtils {
uid: Int,
packageName: String,
mode: Int,
- manager: AppOpsManager
+ manager: AppOpsManager,
): Boolean {
val currentMode = manager.unsafeCheckOpRaw(op, uid, packageName)
if (currentMode == mode) {
@@ -1492,7 +1493,7 @@ object KotlinUtils {
app,
POST_NOTIFICATIONS,
group.packageName,
- group.userHandle
+ group.userHandle,
)
}
@@ -1512,7 +1513,7 @@ object KotlinUtils {
app: Application,
permission: String,
packageName: String,
- user: UserHandle
+ user: UserHandle,
): Boolean {
val userContext: Context = Utils.getUserContext(app, user)
if (
@@ -1556,7 +1557,7 @@ object KotlinUtils {
var resolveInfos =
context.packageManager.queryIntentActivities(
intentToResolve,
- MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE
+ MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE,
)
if (resolveInfos.size <= 0) {
@@ -1566,7 +1567,7 @@ object KotlinUtils {
resolveInfos =
context.packageManager.queryIntentActivities(
intentToResolve,
- MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE
+ MATCH_DIRECT_BOOT_AWARE or MATCH_DIRECT_BOOT_UNAWARE,
)
}
return resolveInfos.size > 0
@@ -1582,14 +1583,14 @@ object KotlinUtils {
fun setFlagsWhenLocationAccuracyChanged(
app: Application,
group: LightAppPermGroup,
- isFineSelected: Boolean
+ isFineSelected: Boolean,
) {
if (isFineSelected) {
setGroupFlags(
app,
group,
PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to true,
- filterPermissions = listOf(ACCESS_FINE_LOCATION)
+ filterPermissions = listOf(ACCESS_FINE_LOCATION),
)
val fineIsOneTime =
group.permissions[Manifest.permission.ACCESS_FINE_LOCATION]?.isOneTime ?: false
@@ -1598,20 +1599,20 @@ object KotlinUtils {
group,
PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to false,
PackageManager.FLAG_PERMISSION_ONE_TIME to fineIsOneTime,
- filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION)
+ filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION),
)
} else {
setGroupFlags(
app,
group,
PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to false,
- filterPermissions = listOf(ACCESS_FINE_LOCATION)
+ filterPermissions = listOf(ACCESS_FINE_LOCATION),
)
setGroupFlags(
app,
group,
PackageManager.FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY to true,
- filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION)
+ filterPermissions = listOf(Manifest.permission.ACCESS_COARSE_LOCATION),
)
}
}
@@ -1629,7 +1630,7 @@ object KotlinUtils {
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_PRIVACY,
SAFETY_PROTECTION_RESOURCES_ENABLED,
- false
+ false,
) &&
context
.getResources()
@@ -1658,7 +1659,7 @@ object KotlinUtils {
fun getAppStoreIntent(
context: Context,
installerPackageName: String?,
- packageName: String?
+ packageName: String?,
): Intent? {
val intent: Intent = Intent(Intent.ACTION_SHOW_APP_INFO).setPackage(installerPackageName)
val result: Intent? = resolveActivityForIntent(context, intent)
@@ -1720,7 +1721,7 @@ object KotlinUtils {
/** Get the [value][LiveData.getValue], suspending until [isInitialized] if not yet so */
suspend fun <T, LD : LiveData<T>> LD.getInitializedValue(
observe: LD.(Observer<T?>) -> Unit = { observeForever(it) },
- isValueInitialized: LD.() -> Boolean = { value != null }
+ isValueInitialized: LD.() -> Boolean = { value != null },
): T? {
return if (isValueInitialized()) {
value
@@ -1754,7 +1755,7 @@ suspend fun <T, LD : LiveData<T>> LD.getInitializedValue(
suspend inline fun <T, R> Iterable<T>.mapInParallel(
context: CoroutineContext,
scope: CoroutineScope = GlobalScope,
- crossinline transform: suspend CoroutineScope.(T) -> R
+ crossinline transform: suspend CoroutineScope.(T) -> R,
): List<R> = map { scope.async(context) { transform(it) } }.map { it.await() }
/**
@@ -1765,7 +1766,7 @@ suspend inline fun <T, R> Iterable<T>.mapInParallel(
suspend inline fun <T> Iterable<T>.forEachInParallel(
context: CoroutineContext,
scope: CoroutineScope = GlobalScope,
- crossinline action: suspend CoroutineScope.(T) -> Unit
+ crossinline action: suspend CoroutineScope.(T) -> Unit,
) {
mapInParallel(context, scope) { action(it) }
}