Ensure hibernation exemption toggle uses pre-S flag

For dogfood, we want hibernation to target apps that target pre-S. This
was done on the PermissionController side but the toggle in Settings
did not visually reflect this policy, confusing dogfood/teamfood
participants.

This updates the default toggle position to consider whether the pre-S
flag is on and then default to the "on" position for apps targeting
pre-S if the flag was on for the device.

Bug: 189260947
Test: atest HibernationSwitchPreferenceControllerTest
Test: manual
Change-Id: I9cd16e82e1eee4589cb17a356b6bf2e3297a8dd2
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 7614070..6e92640 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -161,6 +161,10 @@
     /** Whether or not app hibernation is enabled on the device **/
     public static final String PROPERTY_APP_HIBERNATION_ENABLED = "app_hibernation_enabled";
 
+    /** Whether or not app hibernation targets apps that target a pre-S SDK **/
+    public static final String PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS =
+            "app_hibernation_targets_pre_s_apps";
+
     /** Whether or not Settings Shared Axis transition is enabled */
     public static final String SETTINGS_SHARED_AXIS_ENABLED = "settings_shared_axis_enabled";
 
diff --git a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
index 40be629..42f862d 100644
--- a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
@@ -23,6 +23,7 @@
 import static android.provider.DeviceConfig.NAMESPACE_APP_HIBERNATION;
 
 import static com.android.settings.Utils.PROPERTY_APP_HIBERNATION_ENABLED;
+import static com.android.settings.Utils.PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS;
 
 import android.app.AppOpsManager;
 import android.content.Context;
@@ -95,8 +96,11 @@
                         : android.os.Build.VERSION_CODES.Q;
         try {
             mPackageUid = packageManager.getPackageUid(packageName, /* flags */ 0);
-            mIsPackageExemptByDefault = packageManager.getTargetSdkVersion(packageName)
-                    <= maxTargetSdkVersionForExemptApps;
+            mIsPackageExemptByDefault =
+                    hibernationTargetsPreSApps()
+                            ? false
+                            : packageManager.getTargetSdkVersion(packageName)
+                                    <= maxTargetSdkVersionForExemptApps;
             mIsPackageSet = true;
         } catch (PackageManager.NameNotFoundException e) {
             Slog.w(TAG, "Package [" + mPackageName + "] is not found!");
@@ -142,4 +146,9 @@
         return DeviceConfig.getBoolean(
                 NAMESPACE_APP_HIBERNATION, PROPERTY_APP_HIBERNATION_ENABLED, false);
     }
+
+    private static boolean hibernationTargetsPreSApps() {
+        return DeviceConfig.getBoolean(
+                NAMESPACE_APP_HIBERNATION, PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS, false);
+    }
 }