Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 265dd552 authored by Rajeev Kumar's avatar Rajeev Kumar Committed by Android (Google) Code Review
Browse files

Merge "Ensure hibernation exemption toggle uses pre-S flag" into sc-dev

parents 8cb761e3 4b34271f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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";

+11 −2
Original line number Diff line number Diff line
@@ -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);
    }
}
+15 −0
Original line number Diff line number Diff line
@@ -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);
    }
}