diff options
author | Jay Sullivan <jaysullivan@google.com> | 2022-06-10 23:08:14 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-06-10 23:08:14 +0000 |
commit | 826b244455227ad64ca33d4c4eda66dd9d4d3ca7 (patch) | |
tree | 91fece3becc614adc9b6d447312e229c34f4c722 | |
parent | afd9db5c5d254d96e473f8fc390d60ac0a303862 (diff) | |
parent | 5c1e79cb9d4b54cee731d21688b4bcd044b1ab0b (diff) | |
download | Permission-826b244455227ad64ca33d4c4eda66dd9d4d3ca7.tar.gz |
Merge "Conditionally hide 'Files' permission group" into tm-dev
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. * |