Gate permissions hub assistant handling behind flag
Update the user sensitive flags of the current assistant whenever it is
added or removed from the role, only when the device config flag is set.
Adds camera/mic icon flags, and only shows location on
reviewOngoingUsageFragment when permission hub is enabled.
Fixes: 159998363
Test: manual
Change-Id: Ice52dc044c34b31e6930f461008fbeafa70b1e3b
diff --git a/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt b/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
index 1d8b9ac..49acf8a 100644
--- a/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
+++ b/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
@@ -25,6 +25,7 @@
import android.os.Build
import android.os.UserHandle
import com.android.permissioncontroller.PermissionControllerApplication
+import com.android.permissioncontroller.permission.debug.shouldShowCameraMicIndicators
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState
import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo
@@ -78,7 +79,7 @@
updateIfActive()
}
- if (isMicrophone) {
+ if (isMicrophone && shouldShowCameraMicIndicators()) {
addSource(assistantPkgsLiveData) {
updateIfActive()
}
@@ -91,7 +92,8 @@
val permissionState = permissionStateLiveData.value
if (packageInfo == null || permissionGroup == null || permissionState == null ||
- (isMicrophone && assistantPkgsLiveData.value == null)) {
+ ((isMicrophone && shouldShowCameraMicIndicators()) &&
+ assistantPkgsLiveData.value == null)) {
if (packageInfoLiveData.isInitialized && permGroupLiveData.isInitialized &&
permissionStateLiveData.isInitialized) {
invalidateSingle(Triple(packageName, permGroupName, user))
@@ -193,7 +195,8 @@
}
// Make the current assistant microphone permission show as user sensitive
- if (isMicrophone && packageName in assistantPkgsLiveData.value ?: emptyList()) {
+ if (shouldShowCameraMicIndicators() &&
+ isMicrophone && packageName in assistantPkgsLiveData.value ?: emptyList()) {
return true
}
@@ -309,7 +312,6 @@
override fun onActive() {
super.onActive()
-
if (isSpecialLocation) {
LocationUtils.addLocationListener(this)
updateIfActive()
diff --git a/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageActivity.java b/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageActivity.java
index bb2b42e..62d3009 100644
--- a/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageActivity.java
+++ b/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageActivity.java
@@ -26,7 +26,6 @@
import androidx.fragment.app.FragmentActivity;
import com.android.permissioncontroller.DeviceUtils;
-import com.android.permissioncontroller.permission.debug.UtilsKt;
/**
* A dialog listing the currently uses of camera, microphone, and location.
@@ -40,7 +39,7 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (!UtilsKt.isPermissionsHub2Enabled()) {
+ if (!UtilsKt.shouldShowCameraMicIndicators()) {
finish();
return;
}
diff --git a/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageFragment.java b/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageFragment.java
index 0eb785a..5a8670a 100644
--- a/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageFragment.java
+++ b/src/com/android/permissioncontroller/permission/debug/ReviewOngoingUsageFragment.java
@@ -24,6 +24,7 @@
import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS;
import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_LINE_ITEM;
import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_PRIVACY_SETTINGS;
+import static com.android.permissioncontroller.permission.debug.UtilsKt.shouldShowPermissionsDashboard;
import android.app.AlertDialog;
import android.content.Context;
@@ -84,9 +85,13 @@
mPermissionUsages = new PermissionUsages(getActivity());
mStartTime = Math.max(System.currentTimeMillis() - numMillis, Instant.EPOCH.toEpochMilli());
- mPermissionUsages.load(null, new String[]{CAMERA, LOCATION, MICROPHONE}, mStartTime,
- Long.MAX_VALUE, PermissionUsages.USAGE_FLAG_LAST, getActivity().getLoaderManager(),
- false, false, this::onPermissionUsagesLoaded, false);
+ String[] permissions = new String[]{CAMERA, MICROPHONE};
+ if (shouldShowPermissionsDashboard()) {
+ permissions = new String[] {CAMERA, LOCATION, MICROPHONE};
+ }
+ mPermissionUsages.load(null, permissions, mStartTime, Long.MAX_VALUE,
+ PermissionUsages.USAGE_FLAG_LAST, getActivity().getLoaderManager(), false, false,
+ this::onPermissionUsagesLoaded, false);
}
private void onPermissionUsagesLoaded() {
diff --git a/src/com/android/permissioncontroller/permission/debug/Utils.kt b/src/com/android/permissioncontroller/permission/debug/Utils.kt
index 6e1e889..04456f2 100644
--- a/src/com/android/permissioncontroller/permission/debug/Utils.kt
+++ b/src/com/android/permissioncontroller/permission/debug/Utils.kt
@@ -23,20 +23,50 @@
import android.text.format.DateFormat.getTimeFormat
import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.debug.AppPermissionUsage.GroupUsage
-import java.util.*
+import java.util.Locale
/** Whether to show the Permissions Hub. */
private const val PROPERTY_PERMISSIONS_HUB_2_ENABLED = "permissions_hub_2_enabled"
+/** Whether to show the mic and camera icons. */
+private const val PROPERTY_CAMERA_MIC_ICONS_ENABLED = "camera_mic_icons_enabled"
/**
- * Whether the Permissions Hub 2 is enabled.
+ * Whether the Permissions Hub 2 flag is enabled
*
- * @return whether the Permissions Hub is enabled.
+ * @return whether the flag is enabled
*/
-fun isPermissionsHub2Enabled(): Boolean {
+fun isPermissionsHub2FlagEnabled(): Boolean {
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
- PROPERTY_PERMISSIONS_HUB_2_ENABLED, false)
+ PROPERTY_PERMISSIONS_HUB_2_ENABLED, false)
+}
+/**
+ * Whether to show the Permissions Dashboard
+ *
+ * @return whether to show the Permissions Dashboard.
+ */
+fun shouldShowPermissionsDashboard(): Boolean {
+ return isPermissionsHub2FlagEnabled()
+}
+
+/**
+ * Whether the Camera and Mic Icons are enabled by flag.
+ *
+ * @return whether the Camera and Mic Icons are enabled.
+ */
+fun isCameraMicIconsFlagEnabled(): Boolean {
+ return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
+ PROPERTY_CAMERA_MIC_ICONS_ENABLED, false)
+}
+
+/**
+ * Whether to show Camera and Mic Icons. They should be shown if the permission hub, or the icons
+ * specifically, are enabled.
+ *
+ * @return whether to show the icons.
+ */
+fun shouldShowCameraMicIndicators(): Boolean {
+ return isCameraMicIconsFlagEnabled() || isPermissionsHub2FlagEnabled()
}
/**
diff --git a/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java b/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
index bc68f8a..7297792 100644
--- a/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
+++ b/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
@@ -144,7 +144,7 @@
break;
case Intent.ACTION_REVIEW_PERMISSION_USAGE: {
- if (!UtilsKt.isPermissionsHub2Enabled()) {
+ if (!UtilsKt.shouldShowPermissionsDashboard()) {
finish();
return;
}
diff --git a/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java b/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java
index 9d26bfa..ddae029 100644
--- a/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java
+++ b/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java
@@ -17,7 +17,7 @@
import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID;
import static com.android.permissioncontroller.Constants.INVALID_SESSION_ID;
-import static com.android.permissioncontroller.permission.debug.UtilsKt.isPermissionsHub2Enabled;
+import static com.android.permissioncontroller.permission.debug.UtilsKt.shouldShowPermissionsDashboard;
import static com.android.permissioncontroller.permission.ui.handheld.UtilsKt.pressBack;
import android.content.Intent;
@@ -110,7 +110,7 @@
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (isPermissionsHub2Enabled()) {
+ if (shouldShowPermissionsDashboard()) {
menu.add(Menu.NONE, MENU_PERMISSION_USAGE, Menu.NONE, R.string.permission_usage_title);
}
}
diff --git a/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java b/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
index 7922d71..7c9c46b 100644
--- a/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
@@ -22,7 +22,7 @@
import static com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__ALLOWED_FOREGROUND;
import static com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__DENIED;
import static com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__UNDEFINED;
-import static com.android.permissioncontroller.permission.debug.UtilsKt.isPermissionsHub2Enabled;
+import static com.android.permissioncontroller.permission.debug.UtilsKt.shouldShowPermissionsDashboard;
import static com.android.permissioncontroller.permission.ui.Category.ALLOWED;
import static com.android.permissioncontroller.permission.ui.Category.ALLOWED_FOREGROUND;
import static com.android.permissioncontroller.permission.ui.Category.ASK;
@@ -156,7 +156,7 @@
updateMenu(mViewModel.getShouldShowSystemLiveData().getValue());
}
- if (isPermissionsHub2Enabled()) {
+ if (shouldShowPermissionsDashboard()) {
menu.add(Menu.NONE, MENU_PERMISSION_USAGE, Menu.NONE, R.string.permission_usage_title);
}
diff --git a/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt b/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
index a6233bb..405d93d 100644
--- a/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
+++ b/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt
@@ -45,6 +45,7 @@
import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData.Companion.NON_RUNTIME_NORMAL_PERMS
import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData
import com.android.permissioncontroller.permission.data.get
+import com.android.permissioncontroller.permission.debug.shouldShowCameraMicIndicators
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState
import com.android.permissioncontroller.permission.ui.Category
import com.android.permissioncontroller.permission.utils.IPC
@@ -182,6 +183,9 @@
}
fun shouldShowAssistantMicSwitch(): Boolean {
+ if (!shouldShowCameraMicIndicators()) {
+ return false
+ }
val rolePkgs = Utils.getUserContext(app, user).getSystemService(RoleManager::class.java)!!
.getRoleHolders(RoleManager.ROLE_ASSISTANT)
return packageName in rolePkgs
diff --git a/src/com/android/permissioncontroller/permission/utils/UserSensitiveFlagsUtils.kt b/src/com/android/permissioncontroller/permission/utils/UserSensitiveFlagsUtils.kt
index ad4a8a5..6d77af4 100644
--- a/src/com/android/permissioncontroller/permission/utils/UserSensitiveFlagsUtils.kt
+++ b/src/com/android/permissioncontroller/permission/utils/UserSensitiveFlagsUtils.kt
@@ -31,6 +31,7 @@
import com.android.permissioncontroller.Constants.ASSISTANT_RECORD_AUDIO_IS_USER_SENSITIVE_KEY
import com.android.permissioncontroller.PermissionControllerApplication
import com.android.permissioncontroller.permission.data.UserSensitivityLiveData
+import com.android.permissioncontroller.permission.debug.shouldShowCameraMicIndicators
import com.android.permissioncontroller.permission.model.livedatatypes.UidSensitivityState
import com.android.permissioncontroller.permission.utils.Utils.FLAGS_ALWAYS_USER_SENSITIVE
import kotlinx.coroutines.GlobalScope
@@ -78,7 +79,7 @@
// If this package is the current assistant, its microphone permission is not
// user sensitive
if (perm == Manifest.permission.RECORD_AUDIO &&
- pkg.packageName == assistantPkg) {
+ pkg.packageName == assistantPkg && shouldShowCameraMicIndicators()) {
val contentResolver = PermissionControllerApplication.get().contentResolver
val shouldHide = Settings.Secure.getInt(contentResolver,
ASSISTANT_RECORD_AUDIO_IS_USER_SENSITIVE_KEY, 0) == 0
diff --git a/src/com/android/permissioncontroller/role/model/AssistantRoleBehavior.java b/src/com/android/permissioncontroller/role/model/AssistantRoleBehavior.java
index 1c33a1f..d4dfb7f 100644
--- a/src/com/android/permissioncontroller/role/model/AssistantRoleBehavior.java
+++ b/src/com/android/permissioncontroller/role/model/AssistantRoleBehavior.java
@@ -16,6 +16,8 @@
package com.android.permissioncontroller.role.model;
+import static com.android.permissioncontroller.permission.debug.UtilsKt.shouldShowCameraMicIndicators;
+
import android.app.ActivityManager;
import android.app.role.RoleManager;
import android.content.Context;
@@ -174,12 +176,16 @@
@Override
public void grant(@NonNull Role role, @NonNull String packageName, @NonNull Context context) {
- UserSensitiveFlagsUtils.setMicUserSensitiveWhenReady(packageName, true);
+ if (shouldShowCameraMicIndicators()) {
+ UserSensitiveFlagsUtils.setMicUserSensitiveWhenReady(packageName, true);
+ }
}
@Override
public void revoke(@NonNull Role role, @NonNull String packageName, @NonNull Context context) {
- UserSensitiveFlagsUtils.setMicUserSensitiveWhenReady(packageName, false);
+ if (shouldShowCameraMicIndicators()) {
+ UserSensitiveFlagsUtils.setMicUserSensitiveWhenReady(packageName, false);
+ }
}
private boolean isAssistantVoiceInteractionService(@NonNull PackageManager pm,