diff options
author | Nate Myren <ntmyren@google.com> | 2023-09-07 16:44:13 -0700 |
---|---|---|
committer | Nate Myren <ntmyren@google.com> | 2023-09-09 01:50:33 +0000 |
commit | 28ded769018205dfc042394b266c271e410ca084 (patch) | |
tree | 920f53849f34fcd6252eb385302555f96a2da944 /PermissionController/src/com/android/permissioncontroller/permission | |
parent | 1fcd92de12cf42026c66b12a1d8e35e50faf1660 (diff) | |
download | Permission-28ded769018205dfc042394b266c271e410ca084.tar.gz |
Start compat user select storage after targetSDK U, not T
When an app targets T sdk, we no longer show the compat user select
storage behavior, unless the app explicitly adds the user select
permission. We will show the two button prompt instead.
Bug: 299621675
Relnote: adjustment of feature behavior
Test: atest PhotoPickerPermissionTest
Change-Id: Ib88e63544298f26473bd0536e9d862eb6e1e0972
Merged-In: I196061fde8c0eba106ff7d09a6c62593df359794
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/permission')
2 files changed, 31 insertions, 6 deletions
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 99b40d8a7..25b478644 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt @@ -20,6 +20,7 @@ package com.android.permissioncontroller.permission.ui.model import android.Manifest import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.Manifest.permission.ACCESS_FINE_LOCATION +import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED import android.Manifest.permission_group.READ_MEDIA_VISUAL import android.annotation.SuppressLint import android.app.Activity @@ -375,9 +376,8 @@ class AppPermissionViewModel( val detailId = getIndividualPermissionDetailResId(group) detailResIdLiveData.value = detailId.first to detailId.second } - } else if (KotlinUtils.isPhotoPickerPromptEnabled() && - group.permGroupName == READ_MEDIA_VISUAL && - group.packageInfo.targetSdkVersion >= Build.VERSION_CODES.TIRAMISU) { + } else if (group.permGroupName == READ_MEDIA_VISUAL && + shouldShowPhotoPickerPromptForApp(group)) { // Allow / Select Photos / Deny case allowedState.isShown = true deniedState.isShown = true @@ -471,6 +471,19 @@ class AppPermissionViewModel( } } + private fun shouldShowPhotoPickerPromptForApp(group: LightAppPermGroup): Boolean { + if (!isPhotoPickerPromptEnabled() || + group.packageInfo.targetSdkVersion < Build.VERSION_CODES.TIRAMISU) { + return false + } + if (group.packageInfo.targetSdkVersion >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + return true + } + val userSelectedPerm = group.permissions[READ_MEDIA_VISUAL_USER_SELECTED] ?: return false + return !userSelectedPerm.isImplicit + } + + fun registerPhotoPickerResultIfNeeded(fragment: Fragment) { if (permGroupName != READ_MEDIA_VISUAL) { return 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 8a2216469..471f1486b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -124,6 +124,7 @@ import com.android.permissioncontroller.permission.utils.KotlinUtils.getDefaultP import com.android.permissioncontroller.permission.utils.KotlinUtils.grantBackgroundRuntimePermissions import com.android.permissioncontroller.permission.utils.KotlinUtils.grantForegroundRuntimePermissions import com.android.permissioncontroller.permission.utils.KotlinUtils.isLocationAccuracyEnabled +import com.android.permissioncontroller.permission.utils.KotlinUtils.isPhotoPickerPromptEnabled import com.android.permissioncontroller.permission.utils.KotlinUtils.isPhotoPickerPromptSupported import com.android.permissioncontroller.permission.utils.KotlinUtils.revokeBackgroundRuntimePermissions import com.android.permissioncontroller.permission.utils.KotlinUtils.revokeForegroundRuntimePermissions @@ -367,9 +368,8 @@ class GrantPermissionsViewModel( // null == var detailMessage = RequestMessage.NO_MESSAGE - if (KotlinUtils.isPhotoPickerPromptEnabled() && - groupState.group.permGroupName == READ_MEDIA_VISUAL && - groupState.group.packageInfo.targetSdkVersion >= Build.VERSION_CODES.TIRAMISU) { + if (groupState.group.permGroupName == READ_MEDIA_VISUAL && + shouldShowPhotoPickerPromptForApp(groupState.group)) { // If the USER_SELECTED permission is user fixed and granted, or the app is only // requesting USER_SELECTED, direct straight to photo picker val userPerm = groupState.group.permissions[READ_MEDIA_VISUAL_USER_SELECTED] @@ -897,6 +897,18 @@ class GrantPermissionsViewModel( } } + private fun shouldShowPhotoPickerPromptForApp(group: LightAppPermGroup): Boolean { + if (!isPhotoPickerPromptEnabled() || + group.packageInfo.targetSdkVersion < Build.VERSION_CODES.TIRAMISU) { + return false + } + if (group.packageInfo.targetSdkVersion >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + return true + } + val userSelectedPerm = group.permissions[READ_MEDIA_VISUAL_USER_SELECTED] ?: return false + return !userSelectedPerm.isImplicit + } + private fun getStateFromPolicy(perm: String, group: LightAppPermGroup): Int { val isBackground = perm in group.backgroundPermNames var skipGroup = false |