summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/res/xml/roles.xml4
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/dashboard/PermissionDetailsFragment.java4
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt35
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt19
5 files changed, 36 insertions, 29 deletions
diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml
index 4cf69f4c3..04a786e4e 100644
--- a/PermissionController/res/xml/roles.xml
+++ b/PermissionController/res/xml/roles.xml
@@ -131,6 +131,8 @@
<permission name="android.permission.ACCESS_BLOBS_ACROSS_USERS" minSdkVersion="31" />
<permission name="android.permission.READ_ASSISTANT_APP_SEARCH_DATA"
minSdkVersion="33"/>
+ <permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
+ minSdkVersion="33" />
</permissions>
<app-op-permissions>
<app-op-permission name="android.permission.SYSTEM_ALERT_WINDOW" />
@@ -592,6 +594,8 @@
minSdkVersion="33" />
<permission name="android.permission.ADD_TRUSTED_DISPLAY" minSdkVersion="33" />
<permission name="android.permission.ADD_ALWAYS_UNLOCKED_DISPLAY" minSdkVersion="33" />
+ <permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE"
+ minSdkVersion="33" />
</permissions>
</role>
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
index 157e20f0d..020bf9a31 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
@@ -409,7 +409,8 @@ public final class PermissionAppsFragment extends SettingsWithLargeHeader implem
// If this category is empty, and this isn't the "allowed" category of the storage
// permission, set up the empty preference.
- if (packages.size() == 0 && (!isStorageAndLessThanT || !grantCategory.equals(ALLOWED))) {
+ if (packages.size() == 0
+ && (!isStorageAndLessThanT || !grantCategory.equals(ALLOWED))) {
Preference empty = new Preference(context);
empty.setSelectable(false);
empty.setKey(category.getKey() + KEY_EMPTY);
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/dashboard/PermissionDetailsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/dashboard/PermissionDetailsFragment.java
index 2e29fda20..89a1375e1 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/dashboard/PermissionDetailsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/dashboard/PermissionDetailsFragment.java
@@ -335,6 +335,10 @@ public class PermissionDetailsFragment extends SettingsWithLargeHeader implement
PreferenceScreen finalScreen = screen;
new PermissionApps.AppDataLoader(context, () -> {
+ if (getActivity() == null) {
+ // Fragment has no Activity, return.
+ return;
+ }
mViewModel.renderTimelinePreferences(usages, category, finalScreen, preferenceFactory);
setLoading(false, true);
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
index a87761d6a..01495aecc 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt
@@ -192,14 +192,15 @@ class AppPermissionViewModel(
private val appPermGroupLiveData = LightAppPermGroupLiveData[packageName, permGroupName,
user]
- private val mediaStorageSupergroupLiveData = mutableMapOf<String,LightAppPermGroupLiveData>()
+ private val mediaStorageSupergroupLiveData =
+ mutableMapOf<String, LightAppPermGroupLiveData>()
init {
addSource(appPermGroupLiveData) { appPermGroup ->
lightAppPermGroup = appPermGroup
if (permGroupName in Utils.STORAGE_SUPERGROUP_PERMISSIONS) {
- observeMediaPermGroup(permGroupName, appPermGroup)
+ onMediaPermGroupUpdate(permGroupName, appPermGroup)
}
if (appPermGroupLiveData.isInitialized && appPermGroup == null) {
value = null
@@ -228,14 +229,13 @@ class AppPermissionViewModel(
for (permGroupName in mediaStorageSupergroupLiveData.keys) {
val liveData = mediaStorageSupergroupLiveData[permGroupName]!!
addSource(liveData) { permGroup ->
- observeMediaPermGroup(permGroupName, permGroup)
+ onMediaPermGroupUpdate(permGroupName, permGroup)
}
}
}
-
}
- private fun observeMediaPermGroup(permGroupName: String, permGroup: LightAppPermGroup?) {
+ private fun onMediaPermGroupUpdate(permGroupName: String, permGroup: LightAppPermGroup?) {
if (permGroup == null) {
mediaStorageSupergroupPermGroups.remove(permGroupName)
value = null
@@ -248,7 +248,9 @@ class AppPermissionViewModel(
override fun onUpdate() {
val group = appPermGroupLiveData.value ?: return
for (mediaGroupLiveData in mediaStorageSupergroupLiveData.values) {
- mediaGroupLiveData.isInitialized || return
+ if (!mediaGroupLiveData.isInitialized) {
+ return
+ }
}
val admin = RestrictedLockUtils.getProfileOrDeviceOwner(app, user)
@@ -600,7 +602,7 @@ class AppPermissionViewModel(
return
}
- if (isPartOfStorageSupergroup(group)) {
+ if (expandsToStorageSupergroup(group)) {
if (changeRequest == ChangeRequest.GRANT_FOREGROUND) {
defaultDeny.showConfirmDialog(ChangeRequest.GRANT_STORAGE_SUPERGROUP,
R.string.storage_supergroup_warning_allow, buttonClicked, false)
@@ -668,21 +670,17 @@ class AppPermissionViewModel(
FullStoragePermissionAppsLiveData.recalculate()
}
}
-
}
- private fun isPartOfStorageSupergroup(group: LightAppPermGroup): Boolean {
- val mediaSupergroup = Utils.STORAGE_SUPERGROUP_PERMISSIONS
- .mapNotNull { mediaStorageSupergroupPermGroups[it] }
- val targetSdk = group.packageInfo.targetSdkVersion
- return targetSdk < Build.VERSION_CODES.TIRAMISU && group in mediaSupergroup
+ private fun expandsToStorageSupergroup(group: LightAppPermGroup): Boolean {
+ return group.packageInfo.targetSdkVersion < Build.VERSION_CODES.TIRAMISU &&
+ group.permGroupName in Utils.STORAGE_SUPERGROUP_PERMISSIONS
}
private fun expandToSupergroup(group: LightAppPermGroup): List<LightAppPermGroup> {
val mediaSupergroup = Utils.STORAGE_SUPERGROUP_PERMISSIONS
.mapNotNull { mediaStorageSupergroupPermGroups[it] }
- val targetSdk = group.packageInfo.targetSdkVersion
- return if (targetSdk < Build.VERSION_CODES.TIRAMISU && group in mediaSupergroup) {
+ return if (expandsToStorageSupergroup(group)) {
mediaSupergroup
} else {
listOf(group)
@@ -713,7 +711,8 @@ class AppPermissionViewModel(
if (changeRequest andValue ChangeRequest.REVOKE_BACKGROUND != 0 &&
group.hasBackgroundGroup) {
- newGroup = KotlinUtils.revokeBackgroundRuntimePermissions(app, newGroup, false, oneTime)
+ newGroup =
+ KotlinUtils.revokeBackgroundRuntimePermissions(app, newGroup, false, oneTime)
if (wasBackgroundGranted) {
SafetyNetLogger.logPermissionToggled(newGroup)
@@ -723,7 +722,8 @@ class AppPermissionViewModel(
}
if (changeRequest andValue ChangeRequest.REVOKE_FOREGROUND != 0) {
- newGroup = KotlinUtils.revokeForegroundRuntimePermissions(app, newGroup, false, oneTime)
+ newGroup =
+ KotlinUtils.revokeForegroundRuntimePermissions(app, newGroup, false, oneTime)
if (wasForegroundGranted) {
SafetyNetLogger.logPermissionToggled(newGroup)
}
@@ -739,7 +739,6 @@ class AppPermissionViewModel(
FullStoragePermissionAppsLiveData.recalculate()
}
}
-
}
/**
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt
index abe3ad5fd..dbcb34f55 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt
@@ -145,7 +145,7 @@ class GrantPermissionsViewModel(
private val splitPermissionTargetSdkMap = mutableMapOf<String, Int>()
- private var appPermGroupLiveDatasCache = mutableMapOf<String, LightAppPermGroupLiveData>()
+ private var appPermGroupLiveDatas = mutableMapOf<String, LightAppPermGroupLiveData>()
/**
* A class which represents a correctly requested permission group, and the buttons and messages
@@ -171,7 +171,6 @@ class GrantPermissionsViewModel(
SmartUpdateMediatorLiveData<List<RequestInfo>>() {
private val LOG_TAG = GrantPermissionsViewModel::class.java.simpleName
private val packagePermissionsLiveData = PackagePermissionsLiveData[packageName, user]
- private val appPermGroupLiveDatas = mutableMapOf<String, LightAppPermGroupLiveData>()
init {
GlobalScope.launch(Main.immediate) {
@@ -231,7 +230,6 @@ class GrantPermissionsViewModel(
if (appPermGroupLiveDatas.any { it.value.isStale }) {
return
}
- appPermGroupLiveDatasCache = appPermGroupLiveDatas
var newGroups = false
for ((groupName, groupLiveData) in appPermGroupLiveDatas) {
val appPermGroup = groupLiveData.value
@@ -799,26 +797,27 @@ class GrantPermissionsViewModel(
affectedForegroundPermissions: List<String>?,
result: Int
) {
- onPermissionGrantResult(groupName, affectedForegroundPermissions, result, true)
+ onPermissionGrantResult(groupName, affectedForegroundPermissions, result, false)
}
private fun onPermissionGrantResult(
groupName: String?,
affectedForegroundPermissions: List<String>?,
result: Int,
- canRecurse: Boolean
+ alreadyRequestedStorageGroupsIfNeeded: Boolean
) {
if (groupName == null) {
return
}
// If this is a legacy app, and a storage group is requested: request all storage groups
- if (canRecurse && groupName in Utils.STORAGE_SUPERGROUP_PERMISSIONS &&
- packageInfo.targetSdkVersion <= Build.VERSION_CODES.S_V2) {
+ if (!alreadyRequestedStorageGroupsIfNeeded &&
+ groupName in Utils.STORAGE_SUPERGROUP_PERMISSIONS &&
+ packageInfo.targetSdkVersion <= Build.VERSION_CODES.S_V2) {
for (groupName in Utils.STORAGE_SUPERGROUP_PERMISSIONS) {
- val groupPerms = appPermGroupLiveDatasCache[groupName]
- ?.value?.allPermissions?.keys?.toList()
- onPermissionGrantResult(groupName, groupPerms, result, false)
+ val groupPerms = appPermGroupLiveDatas[groupName]
+ ?.value?.allPermissions?.keys?.toList()
+ onPermissionGrantResult(groupName, groupPerms, result, true)
}
return
}