summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Sullivan <jaysullivan@google.com>2022-06-10 23:08:14 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-06-10 23:08:14 +0000
commit826b244455227ad64ca33d4c4eda66dd9d4d3ca7 (patch)
tree91fece3becc614adc9b6d447312e229c34f4c722
parentafd9db5c5d254d96e473f8fc390d60ac0a303862 (diff)
parent5c1e79cb9d4b54cee731d21688b4bcd044b1ab0b (diff)
downloadPermission-826b244455227ad64ca33d4c4eda66dd9d4d3ca7.tar.gz
Merge "Conditionally hide 'Files' permission group" into tm-dev
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt5
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt19
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt15
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java33
4 files changed, 63 insertions, 9 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
index 8a11c1cc3..f3addd112 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
@@ -124,8 +124,9 @@ class AppPermGroupUiInfoLiveData private constructor(
val requestedPermissionInfos =
allPermInfos.filter { permissionState.containsKey(it.key) }.values
- val shouldShow = packageInfo.enabled && isGrantableAndNotLegacyPlatform(packageInfo,
- groupInfo, requestedPermissionInfos)
+ val shouldShow = packageInfo.enabled &&
+ isGrantableAndNotLegacyPlatform(packageInfo, groupInfo, requestedPermissionInfos) &&
+ (!isStorage || Utils.shouldShowStorage(packageInfo))
val isSystemApp = !isUserSensitive(permissionState)
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt
index 157c745f2..504cb5231 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AllAppPermissionsViewModel.kt
@@ -16,12 +16,15 @@
package com.android.permissioncontroller.permission.ui.model
+import android.Manifest
import android.os.UserHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.android.permissioncontroller.permission.data.LightPackageInfoLiveData
import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData
import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData
import com.android.permissioncontroller.permission.data.get
+import com.android.permissioncontroller.permission.utils.Utils
/**
* ViewModel for the AllAppPermissionsFragment. Has a liveData with the UI information for all
@@ -51,23 +54,33 @@ class AllAppPermissionsViewModel(
private val packagePermsLiveData =
PackagePermissionsLiveData[packageName, user]
+ private val packageInfoLiveData = LightPackageInfoLiveData[packageName, user]
init {
addSource(packagePermsLiveData) {
update()
}
+ addSource(packageInfoLiveData) {
+ update()
+ }
}
override fun onUpdate() {
- if (!packagePermsLiveData.isInitialized || packagePermsLiveData.isStale) {
+ if (!packagePermsLiveData.isInitialized || packagePermsLiveData.isStale ||
+ !packageInfoLiveData.isInitialized) {
return
}
val permissions = packagePermsLiveData.value
- if (permissions == null) {
+ val packageInfo = packageInfoLiveData.value
+ if (permissions == null || packageInfo == null) {
value = null
return
}
- value = permissions.filter { filterGroup == null || it.key == filterGroup }
+
+ value = permissions
+ .filter { filterGroup == null || it.key == filterGroup }
+ .filter { (it.key != Manifest.permission_group.STORAGE ||
+ Utils.shouldShowStorage(packageInfo!!)) }
}
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
index d31c111ff..0551a96d4 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
@@ -160,6 +160,9 @@ class AppPermissionGroupsViewModel(
for (groupName in groups) {
val isSystem = Utils.getPlatformPermissionGroups().contains(groupName)
appPermGroupUiInfoLiveDatas[groupName]?.value?.let { uiInfo ->
+ if (SdkLevel.isAtLeastT() && !uiInfo.shouldShow) {
+ return@let
+ }
if (groupName == Manifest.permission_group.STORAGE &&
(fullStorageState?.isGranted == true && !fullStorageState.isLegacy)) {
groupGrantStates[Category.ALLOWED]!!.add(
@@ -169,10 +172,14 @@ class AppPermissionGroupsViewModel(
when (uiInfo.permGrantState) {
PermGrantState.PERMS_ALLOWED -> {
val subtitle = if (groupName == Manifest.permission_group.STORAGE) {
- if (fullStorageState?.isLegacy == true) {
- PermSubtitle.ALL_FILES
+ if (SdkLevel.isAtLeastT()) {
+ PermSubtitle.NONE
} else {
- PermSubtitle.MEDIA_ONLY
+ if (fullStorageState?.isLegacy == true) {
+ PermSubtitle.ALL_FILES
+ } else {
+ PermSubtitle.MEDIA_ONLY
+ }
}
} else {
PermSubtitle.NONE
@@ -270,7 +277,7 @@ class AppPermissionGroupsViewModel(
packageName: String
) {
if (!SdkLevel.isAtLeastS()) {
- return;
+ return
}
val aggregateDataFilterBeginDays = if (is7DayToggleEnabled())
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
index 11200b204..48793ab51 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
@@ -100,6 +100,7 @@ import com.android.permissioncontroller.PermissionControllerApplication;
import com.android.permissioncontroller.R;
import com.android.permissioncontroller.permission.model.AppPermissionGroup;
import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup;
+import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo;
import java.lang.annotation.Retention;
import java.time.ZonedDateTime;
@@ -953,6 +954,38 @@ public final class Utils {
}
/**
+ * Gets whether the STORAGE group should be hidden from the UI for this package. This is true
+ * when the platform is T+, and the package has legacy storage access (i.e., either the package
+ * has a targetSdk less than Q, or has a targetSdk equal to Q and has OPSTR_LEGACY_STORAGE).
+ *
+ * TODO jaysullivan: This is always calling AppOpsManager; not taking advantage of LiveData
+ *
+ * @param pkg The package to check
+ */
+ public static boolean shouldShowStorage(LightPackageInfo pkg) {
+ if (!SdkLevel.isAtLeastT()) {
+ return true;
+ }
+ int targetSdkVersion = pkg.getTargetSdkVersion();
+ PermissionControllerApplication app = PermissionControllerApplication.get();
+ Context context = null;
+ try {
+ context = Utils.getUserContext(app, UserHandle.getUserHandleForUid(pkg.getUid()));
+ } catch (NameNotFoundException e) {
+ return true;
+ }
+ AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);
+ if (appOpsManager == null) {
+ return true;
+ }
+
+ return targetSdkVersion < Build.VERSION_CODES.Q
+ || (targetSdkVersion == Build.VERSION_CODES.Q
+ && appOpsManager.unsafeCheckOpNoThrow(OPSTR_LEGACY_STORAGE, pkg.getUid(),
+ pkg.getPackageName()) == MODE_ALLOWED);
+ }
+
+ /**
* Build a string representing the given time if it happened on the current day and the date
* otherwise.
*