Loading src/com/android/settings/Utils.java +4 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,10 @@ public final class Utils extends com.android.settingslib.Utils { /** 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"; Loading src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java +11 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.app.AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED; 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; Loading Loading @@ -95,7 +96,10 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen : android.os.Build.VERSION_CODES.Q; try { mPackageUid = packageManager.getPackageUid(packageName, /* flags */ 0); mIsPackageExemptByDefault = packageManager.getTargetSdkVersion(packageName) mIsPackageExemptByDefault = hibernationTargetsPreSApps() ? false : packageManager.getTargetSdkVersion(packageName) <= maxTargetSdkVersionForExemptApps; mIsPackageSet = true; } catch (PackageManager.NameNotFoundException e) { Loading Loading @@ -142,4 +146,9 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen 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); } } tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED; 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 static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -143,4 +144,18 @@ public class HibernationSwitchPreferenceControllerTest { verify(mPreference).setChecked(false); } @Test public void updateState_exemptedByDefaultPackageOverriddenByPreSFlag_shouldCheck() { DeviceConfig.setProperty(NAMESPACE_APP_HIBERNATION, PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS, "true", true /* makeDefault */); when(mAppOpsManager.unsafeCheckOpNoThrow( eq(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED), anyInt(), eq(EXEMPTED_PACKAGE_NAME))) .thenReturn(MODE_DEFAULT); mController.setPackage(EXEMPTED_PACKAGE_NAME); mController.updateState(mPreference); verify(mPreference).setChecked(true); } } Loading
src/com/android/settings/Utils.java +4 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,10 @@ public final class Utils extends com.android.settingslib.Utils { /** 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"; Loading
src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java +11 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.app.AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED; 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; Loading Loading @@ -95,7 +96,10 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen : android.os.Build.VERSION_CODES.Q; try { mPackageUid = packageManager.getPackageUid(packageName, /* flags */ 0); mIsPackageExemptByDefault = packageManager.getTargetSdkVersion(packageName) mIsPackageExemptByDefault = hibernationTargetsPreSApps() ? false : packageManager.getTargetSdkVersion(packageName) <= maxTargetSdkVersionForExemptApps; mIsPackageSet = true; } catch (PackageManager.NameNotFoundException e) { Loading Loading @@ -142,4 +146,9 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen 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); } }
tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED; 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 static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -143,4 +144,18 @@ public class HibernationSwitchPreferenceControllerTest { verify(mPreference).setChecked(false); } @Test public void updateState_exemptedByDefaultPackageOverriddenByPreSFlag_shouldCheck() { DeviceConfig.setProperty(NAMESPACE_APP_HIBERNATION, PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS, "true", true /* makeDefault */); when(mAppOpsManager.unsafeCheckOpNoThrow( eq(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED), anyInt(), eq(EXEMPTED_PACKAGE_NAME))) .thenReturn(MODE_DEFAULT); mController.setPackage(EXEMPTED_PACKAGE_NAME); mController.updateState(mPreference); verify(mPreference).setChecked(true); } }