Merge "Adjust colors on privacy dashboard graphic" into sc-dev
diff --git a/Android.bp b/Android.bp
index b9d66e1..deb17bd 100644
--- a/Android.bp
+++ b/Android.bp
@@ -64,6 +64,20 @@
       "framework-permission-s",
     ],
     apex_available: ["com.android.permission"],
+
+    // The bootclasspath_fragments that provide APIs on which this depends.
+    fragments: [
+        {
+            apex: "com.android.art",
+            module: "art-bootclasspath-fragment",
+        },
+    ],
+
+    // Additional stubs libraries that this fragment's contents use which are
+    // not provided by another bootclasspath_fragment.
+    additional_stubs: [
+        "android-non-updatable",
+    ],
 }
 
 // Encapsulate the contributions made by the com.android.permission to the systemserverclasspath.
diff --git a/PermissionController/res/layout-v31/permission_details_extended_fab.xml b/PermissionController/res/layout-v31/permission_details_extended_fab.xml
new file mode 100644
index 0000000..b3fa7d8
--- /dev/null
+++ b/PermissionController/res/layout-v31/permission_details_extended_fab.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/extended_fab"
+    android:theme="@style/Theme.MaterialComponents.DayNight"
+    android:visibility="gone"
+    style="@style/PermissionFrameExtendedFloatingActionButton" />
diff --git a/PermissionController/res/layout-v31/permissions_frame.xml b/PermissionController/res/layout-v31/permissions_frame.xml
deleted file mode 100644
index 1d962f4..0000000
--- a/PermissionController/res/layout-v31/permissions_frame.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2021 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <include layout="@layout/progress_header" />
-
-    <androidx.coordinatorlayout.widget.CoordinatorLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <LinearLayout
-            android:id="@+id/prefs_container"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/no_permissions"
-                style="@style/PermissionsFrameNoPermissionsText" />
-
-        </LinearLayout>
-
-        <include layout="@layout/loading_container" />
-
-        <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
-            android:id="@+id/extended_fab"
-            android:theme="@style/Theme.MaterialComponents.DayNight"
-            style="@style/PermissionFrameExtendedFloatingActionButton"
-            android:visibility="gone" />
-
-    </androidx.coordinatorlayout.widget.CoordinatorLayout>
-
-</LinearLayout>
diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml
index 1101b7d..7ccade9 100644
--- a/PermissionController/res/values-fr-rCA/strings.xml
+++ b/PermissionController/res/values-fr-rCA/strings.xml
@@ -115,8 +115,7 @@
     <string name="permission_group_usage_subtitle" msgid="712843174810251274">"Chronologie de quand les applications ont utilisé votre <xliff:g id="PERMGROUP">%1$s</xliff:g> au cours des dernières 24 heures"</string>
     <string name="permission_usage_access_dialog_subtitle" msgid="4171772805196955753">"Lorsque cette application a utilisé votre autorisation de <xliff:g id="PERMGROUP">%1$s</xliff:g>"</string>
     <string name="permission_usage_access_dialog_learn_more" msgid="7121468469493184613">"En savoir plus"</string>
-    <!-- no translation found for permission_usage_duration_and_proxy (573959201368716399) -->
-    <skip />
+    <string name="permission_usage_duration_and_proxy" msgid="573959201368716399">"<xliff:g id="APP_NAME">%1$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%2$s</xliff:g>"</string>
     <plurals name="duration_used_days" formatted="false" msgid="1993098309578536308">
       <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> jour</item>
       <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> jours</item>
diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml
index 2887a4e..957eb59 100644
--- a/PermissionController/res/values-gu/strings.xml
+++ b/PermissionController/res/values-gu/strings.xml
@@ -115,8 +115,7 @@
     <string name="permission_group_usage_subtitle" msgid="712843174810251274">"છેલ્લા 24 કલાકમાં જ્યારે ઍપ તમારા <xliff:g id="PERMGROUP">%1$s</xliff:g>નો ઉપયોગ કરે છે તેની સમયરેખા"</string>
     <string name="permission_usage_access_dialog_subtitle" msgid="4171772805196955753">"જ્યારે આ ઍપ દ્વારા તમારી <xliff:g id="PERMGROUP">%1$s</xliff:g>ની પરવાનગીનો ઉપયોગ કરવામાં આવ્યો"</string>
     <string name="permission_usage_access_dialog_learn_more" msgid="7121468469493184613">"વધુ જાણો"</string>
-    <!-- no translation found for permission_usage_duration_and_proxy (573959201368716399) -->
-    <skip />
+    <string name="permission_usage_duration_and_proxy" msgid="573959201368716399">"<xliff:g id="APP_NAME">%1$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%2$s</xliff:g>"</string>
     <plurals name="duration_used_days" formatted="false" msgid="1993098309578536308">
       <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> દિવસ</item>
       <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> દિવસ</item>
diff --git a/PermissionController/res/values-kn/strings.xml b/PermissionController/res/values-kn/strings.xml
index 7258342..4b1eb86 100644
--- a/PermissionController/res/values-kn/strings.xml
+++ b/PermissionController/res/values-kn/strings.xml
@@ -214,7 +214,7 @@
     <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"ನಿಖರವಾದ ಸ್ಥಳ ಆಫ್ ಆಗಿರುವಾಗ, ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಅಂದಾಜು ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು"</string>
     <string name="app_permission_title" msgid="2090897901051370711">"<xliff:g id="PERM">%1$s</xliff:g> ಕುರಿತು ಅನುಮತಿ"</string>
     <string name="app_permission_header" msgid="2951363137032603806">"ಈ <xliff:g id="PERM">%1$s</xliff:g> ಆ್ಯಪ್‌ಗಾಗಿ ಪ್ರವೇಶದ ಅನುಮತಿ"</string>
-    <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ಎಲ್ಲಾ <xliff:g id="APP">%1$s</xliff:g> ಕುರಿತ ಅನುಮತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+    <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ಎಲ್ಲಾ <xliff:g id="APP">%1$s</xliff:g> ಅನುಮತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ಈ ಅನುಮತಿಯನ್ನು ಹೊಂದಿರುವ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="assistant_mic_label" msgid="1011432357152323896">"ಅಸಿಸ್ಟೆಂಟ್‌ನ ಮೈಕ್ರೋಫೋನ್ ಬಳಕೆಯನ್ನು ತೋರಿಸಿ"</string>
     <string name="auto_revoke_label" msgid="5068393642936571656">"ಆ್ಯಪ್‌ ಬಳಸದಿದ್ದರೆ ಅನುಮತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml
index ac9b5cd..83f3cb2 100644
--- a/PermissionController/res/values-or/strings.xml
+++ b/PermissionController/res/values-or/strings.xml
@@ -115,8 +115,7 @@
     <string name="permission_group_usage_subtitle" msgid="712843174810251274">"ଗତ 24 ଘଣ୍ଟାରେ ଯେତେବେଳେ ଆପଗୁଡ଼ିକ ଆପଣଙ୍କ <xliff:g id="PERMGROUP">%1$s</xliff:g> ବ୍ୟବହାର କରିଥାଏ ତାହାର ଟାଇମଲାଇନ୍"</string>
     <string name="permission_usage_access_dialog_subtitle" msgid="4171772805196955753">"ଏହି ଆପ୍ କେତେବେଳେ ଆପଣଙ୍କ <xliff:g id="PERMGROUP">%1$s</xliff:g> ଅନୁମତି ବ୍ୟବହାର କରିଛି"</string>
     <string name="permission_usage_access_dialog_learn_more" msgid="7121468469493184613">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
-    <!-- no translation found for permission_usage_duration_and_proxy (573959201368716399) -->
-    <skip />
+    <string name="permission_usage_duration_and_proxy" msgid="573959201368716399">"<xliff:g id="APP_NAME">%1$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%2$s</xliff:g>"</string>
     <plurals name="duration_used_days" formatted="false" msgid="1993098309578536308">
       <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> ଦିନ</item>
       <item quantity="one">1 ଦିନ</item>
diff --git a/PermissionController/res/values/styles.xml b/PermissionController/res/values/styles.xml
index 4100fc1..bec3b41 100644
--- a/PermissionController/res/values/styles.xml
+++ b/PermissionController/res/values/styles.xml
@@ -451,7 +451,7 @@
 
     <style name="AppPermissionFooterLink"
            parent="@style/AppPermissionFooterText">
-        <item name="android:textColor">?android:attr/colorAccent</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
     </style>
 
     <style name="AppPermissionFooterTextWithIcon">
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
index 61b1901..06fcb0d 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsFragment.java
@@ -22,6 +22,7 @@
 
 import android.Manifest.permission_group;
 import android.app.ActionBar;
+import android.app.Activity;
 import android.app.AppOpsManager.OpEventProxyInfo;
 import android.app.role.RoleManager;
 import android.content.Context;
@@ -29,6 +30,7 @@
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.text.format.DateFormat;
@@ -42,6 +44,8 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
@@ -58,6 +62,8 @@
 import com.android.permissioncontroller.permission.utils.KotlinUtils;
 import com.android.permissioncontroller.permission.utils.Utils;
 
+import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
+
 import java.time.ZonedDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -77,6 +83,7 @@
 /**
  * The permission details page showing the history/timeline of a permission
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionDetailsFragment extends SettingsWithLargeHeader implements
         PermissionUsages.PermissionsUsagesChangeCallback {
     public static final int FILTER_24_HOURS = 2;
@@ -145,32 +152,34 @@
         ViewGroup rootView = (ViewGroup) super.onCreateView(inflater, container,
                 savedInstanceState);
 
-        if (mExtendedFab != null) {
-            // Load the background tint color from the application theme
-            // rather than the Material Design theme
-            final int colorAccentTertiary = getContext().getColor(
-                    android.R.color.system_accent3_100);
-            mExtendedFab.setBackgroundTintList(ColorStateList.valueOf(colorAccentTertiary));
-
-            mExtendedFab.setText(R.string.manage_permission);
-            final boolean isDarkMode = (getActivity().getResources().getConfiguration().uiMode
-                    & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
-            int textColor = isDarkMode ? android.R.attr.textColorPrimaryInverse
-                    : android.R.attr.textColorPrimary;
-            TypedArray colorArray = getActivity().obtainStyledAttributes(
-                    new int[]{
-                            textColor
-                    }
-            );
-            mExtendedFab.setTextColor(colorArray.getColor(0, -1));
-            mExtendedFab.setIcon(getActivity().getDrawable(R.drawable.ic_settings_outline));
-            mExtendedFab.setVisibility(View.VISIBLE);
-            mExtendedFab.setOnClickListener(v -> {
-                Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
-                        .putExtra(Intent.EXTRA_PERMISSION_NAME, mFilterGroup);
-                startActivity(intent);
-            });
-        }
+        PermissionDetailsWrapperFragment parentFragment = (PermissionDetailsWrapperFragment)
+                requireParentFragment();
+        CoordinatorLayout coordinatorLayout = parentFragment.getCoordinatorLayout();
+        inflater.inflate(R.layout.permission_details_extended_fab, coordinatorLayout);
+        ExtendedFloatingActionButton extendedFab = coordinatorLayout.requireViewById(
+                R.id.extended_fab);
+        // Load the background tint color from the application theme
+        // rather than the Material Design theme
+        Activity activity = getActivity();
+        ColorStateList backgroundColor = activity.getColorStateList(
+                android.R.color.system_accent3_100);
+        extendedFab.setBackgroundTintList(backgroundColor);
+        extendedFab.setText(R.string.manage_permission);
+        boolean isUiModeNight = (activity.getResources().getConfiguration().uiMode
+                & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
+        int textColorAttr = isUiModeNight ? android.R.attr.textColorPrimaryInverse
+                : android.R.attr.textColorPrimary;
+        TypedArray typedArray = activity.obtainStyledAttributes(new int[] { textColorAttr });
+        ColorStateList textColor = typedArray.getColorStateList(0);
+        typedArray.recycle();
+        extendedFab.setTextColor(textColor);
+        extendedFab.setIcon(activity.getDrawable(R.drawable.ic_settings_outline));
+        extendedFab.setVisibility(View.VISIBLE);
+        extendedFab.setOnClickListener(view -> {
+            Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
+                    .putExtra(Intent.EXTRA_PERMISSION_NAME, mFilterGroup);
+            startActivity(intent);
+        });
         RecyclerView recyclerView = getListView();
         int bottomPadding = getResources()
                 .getDimensionPixelSize(R.dimen.privhub_details_recycler_view_bottom_padding);
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
index 99a6ecc..43f62ad 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionDetailsWrapperFragment.java
@@ -17,10 +17,12 @@
 package com.android.permissioncontroller.permission.debug;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity;
@@ -29,6 +31,7 @@
 /**
  * Wrapper over PermissionDetailsFragment
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionDetailsWrapperFragment extends PermissionsCollapsingToolbarBaseFragment {
     @NonNull
     @Override
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
index 0275aef..7e90178 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2Fragment.java
@@ -23,6 +23,7 @@
 import android.app.Activity;
 import android.app.role.RoleManager;
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -33,6 +34,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceGroupAdapter;
@@ -62,6 +64,7 @@
 /**
  * The main page for the privacy dashboard.
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionUsageV2Fragment extends SettingsWithLargeHeader implements
         PermissionUsages.PermissionsUsagesChangeCallback {
     private static final String LOG_TAG = "PermUsageV2Fragment";
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
index 1090b2c..ccb181b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsageV2WrapperFragment.java
@@ -17,10 +17,12 @@
 package com.android.permissioncontroller.permission.debug;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.permissioncontroller.permission.ui.handheld.PermissionsCollapsingToolbarBaseFragment;
@@ -28,6 +30,7 @@
 /**
  * Wrapper over PermissionUsageV2Fragment
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public class PermissionUsageV2WrapperFragment extends PermissionsCollapsingToolbarBaseFragment{
     @NonNull
     @Override
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
index fb1d815..a6a07eb 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/PermissionUsages.java
@@ -33,6 +33,7 @@
 import android.content.pm.PackageInfo;
 import android.media.AudioManager;
 import android.media.AudioRecordingConfiguration;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Process;
 import android.util.ArrayMap;
@@ -42,6 +43,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 
 import com.android.permissioncontroller.permission.model.AppPermissionGroup;
 import com.android.permissioncontroller.permission.model.AppPermissionUsage;
@@ -63,6 +65,7 @@
 /**
  * Loads all permission usages for a set of apps and permission groups.
  */
+@RequiresApi(Build.VERSION_CODES.S)
 public final class PermissionUsages implements LoaderCallbacks<List<AppPermissionUsage>> {
     public static final int USAGE_FLAG_LAST = 1 << 0;
     public static final int USAGE_FLAG_HISTORICAL = 1 << 2;
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt b/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
index be7e00c..37896df 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/debug/Utils.kt
@@ -41,9 +41,6 @@
 /* Default location precision */
 const val PROPERTY_LOCATION_PRECISION = "location_precision"
 
-/* Whether privacy hub feature is enabled */
-const val PROPERTY_PRIVACY_HUB_ENABLED = "privacy_hub_enabled"
-
 const val SECONDS = 1
 const val MINUTES = 2
 const val HOURS = 3
@@ -124,14 +121,6 @@
 }
 
 /**
- * Whether the privacy hub feature is enabled
- */
-fun isPrivacyHubEnabled(): Boolean {
-    return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
-            PROPERTY_PRIVACY_HUB_ENABLED, true)
-}
-
-/**
  * Build a string representing the given time if it happened on the current day and the date
  * otherwise.
  *
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
index cfd9387..03352f8 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/ManagePermissionsActivity.java
@@ -30,6 +30,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.PermissionInfo;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.util.Log;
@@ -158,7 +159,7 @@
                 break;
 
             case Intent.ACTION_REVIEW_PERMISSION_USAGE: {
-                if (!UtilsKt.isPrivacyHubEnabled()) {
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
                     finishAfterTransition();
                     return;
                 }
@@ -169,15 +170,17 @@
             } break;
 
             case Intent.ACTION_REVIEW_PERMISSION_HISTORY: {
-                if (UtilsKt.isPrivacyHubEnabled()) {
-                    String groupName = getIntent()
-                            .getStringExtra(Intent.EXTRA_PERMISSION_GROUP_NAME);
-                    boolean showSystem = getIntent()
-                            .getBooleanExtra(EXTRA_SHOW_SYSTEM, false);
-                    androidXFragment = PermissionDetailsWrapperFragment
-                            .newInstance(groupName, Long.MAX_VALUE, showSystem);
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+                    finishAfterTransition();
+                    return;
                 }
 
+                String groupName = getIntent()
+                        .getStringExtra(Intent.EXTRA_PERMISSION_GROUP_NAME);
+                boolean showSystem = getIntent()
+                        .getBooleanExtra(EXTRA_SHOW_SYSTEM, false);
+                androidXFragment = PermissionDetailsWrapperFragment
+                        .newInstance(groupName, Long.MAX_VALUE, showSystem);
                 break;
             }
 
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
index dfcb39c..16febb8 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
@@ -22,6 +22,7 @@
 import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__ALLOWED;
 import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__ALLOWED_FOREGROUND;
 import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__DENIED;
+import static com.android.permissioncontroller.hibernation.HibernationPolicyKt.isHibernationEnabled;
 import static com.android.permissioncontroller.permission.ui.handheld.UtilsKt.pressBack;
 import static com.android.permissioncontroller.permission.utils.Utils.LAST_24H_CONTENT_PROVIDER;
 import static com.android.permissioncontroller.permission.utils.Utils.LAST_24H_SENSOR_TODAY;
@@ -41,6 +42,7 @@
 import android.graphics.drawable.Drawable;
 import android.icu.text.ListFormatter;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -54,6 +56,7 @@
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.StringRes;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.preference.Preference;
@@ -202,6 +205,7 @@
     }
 
     @Override
+    @RequiresApi(Build.VERSION_CODES.S)
     public void onPermissionUsagesChanged() {
         if (mPermissionUsages.getUsages().isEmpty()) {
             return;
@@ -526,7 +530,8 @@
             mViewModel.setAutoRevoke(autoRevokeSwitch.isChecked());
             return true;
         });
-        autoRevokeSwitch.setTitle(R.string.auto_revoke_label);
+        autoRevokeSwitch.setTitle(isHibernationEnabled() ? R.string.unused_apps_label
+                : R.string.auto_revoke_label);
         autoRevokeSwitch.setKey(AUTO_REVOKE_SWITCH_KEY);
         autoRevokeCategory.addPreference(autoRevokeSwitch);
 
@@ -535,6 +540,9 @@
         autoRevokeSummary.setIcon(Utils.applyTint(getActivity(), R.drawable.ic_info_outline,
                 android.R.attr.colorControlNormal));
         autoRevokeSummary.setKey(AUTO_REVOKE_SUMMARY_KEY);
+        if (isHibernationEnabled()) {
+            autoRevokeCategory.setTitle(R.string.unused_apps);
+        }
         autoRevokeCategory.addPreference(autoRevokeSummary);
     }
 
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
index 3a36b85..ba4928b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java
@@ -40,6 +40,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -52,6 +53,7 @@
 import android.view.View;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
@@ -175,6 +177,7 @@
     }
 
     @Override
+    @RequiresApi(Build.VERSION_CODES.S)
     public void onPermissionUsagesChanged() {
         if (mPermissionUsages.getUsages().isEmpty()) {
             return;
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsCollapsingToolbarBaseFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsCollapsingToolbarBaseFragment.java
index 61c5cd8..2e9a99b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsCollapsingToolbarBaseFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsCollapsingToolbarBaseFragment.java
@@ -42,7 +42,7 @@
         }
 
         PreferenceFragmentCompat preferenceFragment =
-                (PermissionsFrameFragment) getChildFragmentManager()
+                (PreferenceFragmentCompat) getChildFragmentManager()
                         .findFragmentById(R.id.content_frame);
 
         if (preferenceFragment == null) {
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsFrameFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsFrameFragment.java
index c7ccb4b..21c0d7b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsFrameFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionsFrameFragment.java
@@ -28,7 +28,6 @@
 import android.view.animation.AnimationUtils;
 import android.widget.TextView;
 
-import androidx.annotation.Nullable;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.recyclerview.widget.RecyclerView;
 
@@ -37,8 +36,6 @@
 import com.android.permissioncontroller.permission.utils.Utils;
 import com.android.settingslib.widget.ActionBarShadowController;
 
-import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
-
 public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat {
     private static final String LOG_TAG = PermissionsFrameFragment.class.getSimpleName();
 
@@ -54,7 +51,6 @@
     private View mProgressView;
     private ViewGroup mPrefsView;
     private boolean mIsLoading;
-    @Nullable protected ExtendedFloatingActionButton mExtendedFab;
 
     protected boolean mUseShadowController = true;
 
@@ -93,7 +89,6 @@
         mPrefsView.addView(mPreferencesContainer, 0);
         mProgressHeader = rootView.requireViewById(R.id.progress_bar_animation);
         mProgressView = rootView.requireViewById(R.id.progress_bar_background);
-        mExtendedFab = rootView.findViewById(R.id.extended_fab);
         setProgressBarVisible(false);
         getListView().setFocusable(false);
         return rootView;
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java
index 2cd2773..137d776 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/television/AppPermissionsFragment.java
@@ -17,6 +17,7 @@
 package com.android.permissioncontroller.permission.ui.television;
 
 import static com.android.permissioncontroller.Constants.INVALID_SESSION_ID;
+import static com.android.permissioncontroller.hibernation.HibernationPolicyKt.isHibernationEnabled;
 
 import android.app.ActionBar;
 import android.app.Activity;
@@ -42,6 +43,7 @@
 import androidx.lifecycle.ViewModelProvider;
 import androidx.preference.Preference;
 import androidx.preference.Preference.OnPreferenceClickListener;
+import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
 import androidx.preference.PreferenceViewHolder;
 import androidx.preference.SwitchPreference;
@@ -65,6 +67,7 @@
 
     static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
     private static final String AUTO_REVOKE_SWITCH_KEY = "_AUTO_REVOKE_SWITCH_KEY";
+    private static final String UNUSED_APPS_KEY = "_UNUSED_APPS_KEY";
 
     private static final int MENU_ALL_PERMS = 0;
 
@@ -406,10 +409,20 @@
             android.util.Log.w(LOG_TAG, "setAutoRevoke " + autoRevokeSwitch.isChecked());
             return true;
         });
-        autoRevokeSwitch.setTitle(R.string.auto_revoke_label);
+        autoRevokeSwitch.setTitle(isHibernationEnabled() ? R.string.unused_apps_label
+                : R.string.auto_revoke_label);
         autoRevokeSwitch.setSummary(R.string.auto_revoke_summary);
         autoRevokeSwitch.setKey(AUTO_REVOKE_SWITCH_KEY);
-        screen.addPreference(autoRevokeSwitch);
+        if (isHibernationEnabled()) {
+            PreferenceCategory unusedAppsCategory = new PreferenceCategory(
+                    screen.getPreferenceManager().getContext());
+            unusedAppsCategory.setKey(UNUSED_APPS_KEY);
+            unusedAppsCategory.setTitle(R.string.unused_apps);
+            unusedAppsCategory.addPreference(autoRevokeSwitch);
+            screen.addPreference(unusedAppsCategory);
+        } else {
+            screen.addPreference(autoRevokeSwitch);
+        }
     }
 
     private void setAutoRevokeToggleState(HibernationSettingState state) {
@@ -419,9 +432,15 @@
             return;
         }
         if (!state.isEnabledGlobal() || state.getRevocableGroupNames().isEmpty()) {
+            if (isHibernationEnabled()) {
+                getPreferenceScreen().findPreference(UNUSED_APPS_KEY).setVisible(false);
+            }
             autoRevokeSwitch.setVisible(false);
             return;
         }
+        if (isHibernationEnabled()) {
+            getPreferenceScreen().findPreference(UNUSED_APPS_KEY).setVisible(true);
+        }
         autoRevokeSwitch.setVisible(true);
         autoRevokeSwitch.setChecked(state.isEnabledForApp());
     }