From 28ded769018205dfc042394b266c271e410ca084 Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Thu, 7 Sep 2023 16:44:13 -0700 Subject: 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 --- .../permission/ui/model/AppPermissionViewModel.kt | 19 ++++++++++++++++--- .../permission/ui/model/GrantPermissionsViewModel.kt | 18 +++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) (limited to 'PermissionController/src/com/android/permissioncontroller/permission') 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 -- cgit v1.2.3