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

Commit 98eb902e authored by Lei Yu's avatar Lei Yu
Browse files

update checkbox based on FAS API

Before this CL, we assumed all the apps in this page were restricted and
didn't consider that user may uncheck one and rotate the screen.

In this CL, when we create checkbox, we will update the state through
FAS API to make sure checkbox is up-to-date.

Change-Id: I4e89908591f0688b4170806db4b6631bf921f2e9
Fixes: 78161466
Test: RunSettingsRoboTests
parent 1257466d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -416,6 +416,11 @@ public class BatteryUtils {
        mAppOpsManager.setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName, mode);
    }

    public boolean isForceAppStandbyEnabled(int uid, String packageName) {
        return mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid,
                packageName) == AppOpsManager.MODE_IGNORED;
    }

    public void initBatteryStatsHelper(BatteryStatsHelper statsHelper, Bundle bundle,
            UserManager userManager) {
        statsHelper.create(bundle);
+2 −1
Original line number Diff line number Diff line
@@ -133,7 +133,8 @@ public class RestrictedAppDetails extends DashboardFragment {
            try {
                final ApplicationInfo applicationInfo = mPackageManager.getApplicationInfoAsUser(
                        appInfo.packageName, 0 /* flags */, UserHandle.getUserId(appInfo.uid));
                checkBoxPreference.setChecked(true);
                checkBoxPreference.setChecked(
                        mBatteryUtils.isForceAppStandbyEnabled(appInfo.uid, appInfo.packageName));
                checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo));
                checkBoxPreference.setIcon(
                        Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager,
+16 −0
Original line number Diff line number Diff line
@@ -564,6 +564,22 @@ public class BatteryUtilsTest {
                HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
    }

    @Test
    public void testIsForceAppStandbyEnabled_enabled_returnTrue() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
                PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_IGNORED);

        assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue();
    }

    @Test
    public void testIsForceAppStandbyEnabled_disabled_returnFalse() {
        when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
                PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED);

        assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse();
    }

    @Test
    public void testIsAppHeavilyUsed_usageMoreThanThreshold_returnTrue() {
        assertThat(mBatteryUtils.isAppHeavilyUsed(mBatteryStatsHelper, mUserManager, UID,
+8 −3
Original line number Diff line number Diff line
@@ -28,10 +28,12 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceManager;
import android.util.IconDrawableFactory;
import android.widget.CheckBox;

import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
@@ -93,7 +95,7 @@ public class RestrictedAppDetailsTest {
        mRestrictedAppDetails.mAppInfos = new ArrayList<>();
        mRestrictedAppDetails.mAppInfos.add(mAppInfo);
        mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
        mRestrictedAppDetails.mBatteryUtils = new BatteryUtils(mContext);
        mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext));
        doReturn(mPreferenceManager).when(
                mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager();
    }
@@ -103,13 +105,16 @@ public class RestrictedAppDetailsTest {
        doReturn(mApplicationInfo).when(mPackageManager)
                .getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID);
        doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
        doReturn(true).when(mRestrictedAppDetails.mBatteryUtils).isForceAppStandbyEnabled(UID,
                PACKAGE_NAME);

        mRestrictedAppDetails.refreshUi();

        assertThat(mRestrictedAppDetails.mRestrictedAppListGroup.getPreferenceCount()).isEqualTo(1);
        final Preference preference = mRestrictedAppDetails.mRestrictedAppListGroup.getPreference(
                0);
        final CheckBoxPreference preference =
                (CheckBoxPreference) mRestrictedAppDetails.mRestrictedAppListGroup.getPreference(0);
        assertThat(preference.getTitle()).isEqualTo(APP_NAME);
        assertThat(preference.isChecked()).isTrue();
    }

    @Test