Update auto-revoke toggle UI w/ hibernation

When hibernation is enabled on S devices, the auto-revoke toggle has
updated text to match with the text in "App Info". In addition, we add a
category title, "Unused apps" to make it clear that the toggle is for
unused apps.

Bug: 191901459
Test: go to app permissions page on apps with/without revocable permissions
Change-Id: Id74a70a2010c96beb50b427ec90b07a18f1bfeb0
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..68abb0d 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;
@@ -526,7 +527,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 +537,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/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());
     }