From 98eb902ead5600d49c0def5191c0b2e7c4b9115c Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Tue, 17 Apr 2018 13:23:15 -0700 Subject: [PATCH] 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 --- .../android/settings/fuelgauge/BatteryUtils.java | 5 +++++ .../settings/fuelgauge/RestrictedAppDetails.java | 3 ++- .../settings/fuelgauge/BatteryUtilsTest.java | 16 ++++++++++++++++ .../fuelgauge/RestrictedAppDetailsTest.java | 11 ++++++++--- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index c8a5d47cfa8..639c1fbba3e 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -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); diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java index e75112c68a5..96fafb3a0da 100644 --- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java +++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java @@ -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, diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java index 772bb8d6c1a..dc340161978 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java @@ -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, diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java index 94a690326df..0fad0a7635e 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java @@ -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