Update Summary for Battery Optimization
Bug: 37221696 Test: RunSettingsRoboTests Change-Id: I7dc24879521a1375e0ad4b4b73e9a40633b93c3f
This commit is contained in:
@@ -230,7 +230,7 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements
|
|||||||
|
|
||||||
controllers.add(new BackgroundActivityPreferenceController(context, uid));
|
controllers.add(new BackgroundActivityPreferenceController(context, uid));
|
||||||
controllers.add(new BatteryOptimizationPreferenceController(
|
controllers.add(new BatteryOptimizationPreferenceController(
|
||||||
(SettingsActivity) getActivity(), this));
|
(SettingsActivity) getActivity(), this, packageName));
|
||||||
mAppButtonsPreferenceController = new AppButtonsPreferenceController(
|
mAppButtonsPreferenceController = new AppButtonsPreferenceController(
|
||||||
(SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
|
(SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm,
|
||||||
mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
|
mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
|
||||||
|
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge;
|
|||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
@@ -33,14 +34,29 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle
|
|||||||
|
|
||||||
private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";
|
private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";
|
||||||
|
|
||||||
|
|
||||||
|
private PowerWhitelistBackend mBackend;
|
||||||
private Fragment mFragment;
|
private Fragment mFragment;
|
||||||
private SettingsActivity mSettingsActivity;
|
private SettingsActivity mSettingsActivity;
|
||||||
|
private String mPackageName;
|
||||||
|
|
||||||
public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
|
public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
|
||||||
Fragment fragment) {
|
Fragment fragment, String packageName) {
|
||||||
super(settingsActivity);
|
super(settingsActivity);
|
||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mSettingsActivity = settingsActivity;
|
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
|
@Override
|
||||||
@@ -48,6 +64,12 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Override
|
||||||
public String getPreferenceKey() {
|
public String getPreferenceKey() {
|
||||||
return KEY_BACKGROUND_ACTIVITY;
|
return KEY_BACKGROUND_ACTIVITY;
|
||||||
@@ -66,4 +88,5 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle
|
|||||||
R.string.high_power_apps, null, null, 0);
|
R.string.high_power_apps, null, null, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,8 @@ package com.android.settings.fuelgauge;
|
|||||||
import android.os.IDeviceIdleController;
|
import android.os.IDeviceIdleController;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
|
import android.support.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -31,7 +33,7 @@ public class PowerWhitelistBackend {
|
|||||||
|
|
||||||
private static final String DEVICE_IDLE_SERVICE = "deviceidle";
|
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 IDeviceIdleController mDeviceIdleService;
|
||||||
private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
|
private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
|
||||||
@@ -73,7 +75,8 @@ public class PowerWhitelistBackend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshList() {
|
@VisibleForTesting
|
||||||
|
void refreshList() {
|
||||||
mSysWhitelistedApps.clear();
|
mSysWhitelistedApps.clear();
|
||||||
mWhitelistedApps.clear();
|
mWhitelistedApps.clear();
|
||||||
try {
|
try {
|
||||||
@@ -91,7 +94,10 @@ public class PowerWhitelistBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static PowerWhitelistBackend getInstance() {
|
public static PowerWhitelistBackend getInstance() {
|
||||||
return INSTANCE;
|
if (sInstance == null) {
|
||||||
|
sInstance = new PowerWhitelistBackend();
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -22,14 +22,18 @@ import static org.mockito.Matchers.any;
|
|||||||
import static org.mockito.Matchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v14.preference.SwitchPreference;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
|
|
||||||
@@ -39,11 +43,14 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
public class BatteryOptimizationPreferenceControllerTest {
|
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_OPTIMIZATION = "battery_optimization";
|
||||||
private static final String KEY_OTHER = "other";
|
private static final String KEY_OTHER = "other";
|
||||||
@Mock
|
@Mock
|
||||||
@@ -51,20 +58,28 @@ public class BatteryOptimizationPreferenceControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private Fragment mFragment;
|
private Fragment mFragment;
|
||||||
@Mock
|
@Mock
|
||||||
private Preference mPreference;
|
private TestPowerWhitelistBackend mBackend;
|
||||||
|
|
||||||
private BatteryOptimizationPreferenceController mController;
|
private BatteryOptimizationPreferenceController mController;
|
||||||
|
private Preference mPreference;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
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
|
@Test
|
||||||
public void testHandlePreferenceTreeClick_OptimizationPreference_HandleClick() {
|
public void testHandlePreferenceTreeClick_OptimizationPreference_HandleClick() {
|
||||||
when(mPreference.getKey()).thenReturn(KEY_OPTIMIZATION);
|
mPreference.setKey(KEY_OPTIMIZATION);
|
||||||
|
|
||||||
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
|
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
|
||||||
|
|
||||||
@@ -76,7 +91,7 @@ public class BatteryOptimizationPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() {
|
public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() {
|
||||||
when(mPreference.getKey()).thenReturn(KEY_OTHER);
|
mPreference.setKey(KEY_OTHER);
|
||||||
|
|
||||||
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
|
final boolean handled = mController.handlePreferenceTreeClick(mPreference);
|
||||||
|
|
||||||
@@ -85,4 +100,33 @@ public class BatteryOptimizationPreferenceControllerTest {
|
|||||||
anyString(), any(Bundle.class), anyInt(), any(CharSequence.class),
|
anyString(), any(Bundle.class), anyInt(), any(CharSequence.class),
|
||||||
any(Fragment.class), anyInt());
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user