Update Summary for Battery Optimization
Bug: 37221696
Test: RunSettingsRoboTests
Change-Id: I7dc24879521a1375e0ad4b4b73e9a40633b93c3f
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 320031e..2f8e28e 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -230,7 +230,7 @@
controllers.add(new BackgroundActivityPreferenceController(context, uid));
controllers.add(new BatteryOptimizationPreferenceController(
- (SettingsActivity) getActivity(), this));
+ (SettingsActivity) getActivity(), this, packageName));
mAppButtonsPreferenceController = new AppButtonsPreferenceController(
(SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
index 946a9b8..7c5bda2 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
@@ -17,6 +17,7 @@
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
@@ -33,14 +34,29 @@
private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";
+
+ private PowerWhitelistBackend mBackend;
private Fragment mFragment;
private SettingsActivity mSettingsActivity;
+ private String mPackageName;
public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
- Fragment fragment) {
+ Fragment fragment, String packageName) {
super(settingsActivity);
mFragment = fragment;
mSettingsActivity = settingsActivity;
+ mPackageName = packageName;
+ mBackend = PowerWhitelistBackend.getInstance();
+ }
+
+ @VisibleForTesting
+ BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
+ Fragment fragment, String packageName, PowerWhitelistBackend backend) {
+ super(settingsActivity);
+ mFragment = fragment;
+ mSettingsActivity = settingsActivity;
+ mPackageName = packageName;
+ mBackend = backend;
}
@Override
@@ -49,6 +65,12 @@
}
@Override
+ public void updateState(Preference preference) {
+ final boolean isWhitelisted = mBackend.isWhitelisted(mPackageName);
+ preference.setSummary(isWhitelisted ? R.string.high_power_on : R.string.high_power_off);
+ }
+
+ @Override
public String getPreferenceKey() {
return KEY_BACKGROUND_ACTIVITY;
}
@@ -66,4 +88,5 @@
R.string.high_power_apps, null, null, 0);
return true;
}
+
}
diff --git a/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java b/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
index 7199af8..5590a46 100644
--- a/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
+++ b/src/com/android/settings/fuelgauge/PowerWhitelistBackend.java
@@ -18,6 +18,8 @@
import android.os.IDeviceIdleController;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.support.annotation.VisibleForTesting;
+
import android.util.ArraySet;
import android.util.Log;
@@ -31,7 +33,7 @@
private static final String DEVICE_IDLE_SERVICE = "deviceidle";
- private static final PowerWhitelistBackend INSTANCE = new PowerWhitelistBackend();
+ private static PowerWhitelistBackend sInstance;
private final IDeviceIdleController mDeviceIdleService;
private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
@@ -73,7 +75,8 @@
}
}
- private void refreshList() {
+ @VisibleForTesting
+ void refreshList() {
mSysWhitelistedApps.clear();
mWhitelistedApps.clear();
try {
@@ -91,7 +94,10 @@
}
public static PowerWhitelistBackend getInstance() {
- return INSTANCE;
+ if (sInstance == null) {
+ sInstance = new PowerWhitelistBackend();
+ }
+ return sInstance;
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
index 2c5296a..b3afbb4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
@@ -22,14 +22,18 @@
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.app.Fragment;
+import android.content.Context;
import android.os.Bundle;
+import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
+import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
@@ -39,11 +43,14 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BatteryOptimizationPreferenceControllerTest {
+ private static final String PKG_IN_WHITELIST = "com.pkg.in.whitelist";
+ private static final String PKG_NOT_IN_WHITELIST = "com.pkg.not.in.whitelist";
private static final String KEY_OPTIMIZATION = "battery_optimization";
private static final String KEY_OTHER = "other";
@Mock
@@ -51,20 +58,28 @@
@Mock
private Fragment mFragment;
@Mock
- private Preference mPreference;
+ private TestPowerWhitelistBackend mBackend;
private BatteryOptimizationPreferenceController mController;
+ private Preference mPreference;
+ private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mController = new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment);
+ mContext = RuntimeEnvironment.application;
+ doReturn(false).when(mBackend).isWhitelisted(PKG_NOT_IN_WHITELIST);
+ doReturn(true).when(mBackend).isWhitelisted(PKG_IN_WHITELIST);
+
+ mPreference = new SwitchPreference(mContext);
+ mController = spy(new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
+ PKG_NOT_IN_WHITELIST, mBackend));
}
@Test
public void testHandlePreferenceTreeClick_OptimizationPreference_HandleClick() {
- when(mPreference.getKey()).thenReturn(KEY_OPTIMIZATION);
+ mPreference.setKey(KEY_OPTIMIZATION);
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
@@ -76,7 +91,7 @@
@Test
public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() {
- when(mPreference.getKey()).thenReturn(KEY_OTHER);
+ mPreference.setKey(KEY_OTHER);
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
@@ -85,4 +100,33 @@
anyString(), any(Bundle.class), anyInt(), any(CharSequence.class),
any(Fragment.class), anyInt());
}
+
+ @Test
+ public void testUpdateState_appInWhitelist_showSummaryNotOptimized() {
+ BatteryOptimizationPreferenceController controller =
+ new BatteryOptimizationPreferenceController(mSettingsActivity, mFragment,
+ PKG_IN_WHITELIST, mBackend);
+
+ controller.updateState(mPreference);
+
+ assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_on));
+ }
+
+ @Test
+ public void testUpdateState_appNotInWhitelist_showSummaryOptimized() {
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getSummary()).isEqualTo(mContext.getString(R.string.high_power_off));
+ }
+
+ /**
+ * Create this test class so we could mock it
+ */
+ public static class TestPowerWhitelistBackend extends PowerWhitelistBackend {
+
+ @Override
+ void refreshList() {
+ // Do nothing so we could mock it without error
+ }
+ }
}