Merge "Ensure hibernation exemption toggle uses pre-S flag" into sc-dev am: 265dd55235 am: 4c18ba65c6

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/14725079

Change-Id: Id2406e89b1981a4ba3db62ca474fbd3ebc8f01b6
This commit is contained in:
Rajeev Kumar
2021-05-26 17:21:07 +00:00
committed by Automerger Merge Worker
3 changed files with 30 additions and 2 deletions

View File

@@ -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";

View File

@@ -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;
@@ -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) {
@@ -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);
}
}

View File

@@ -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;
@@ -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);
}
}