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,
