Loading src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +1 −1 Original line number Diff line number Diff line Loading @@ -230,7 +230,7 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements 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); Loading src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java +24 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.fuelgauge; 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; Loading @@ -33,14 +34,29 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle 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 Loading @@ -48,6 +64,12 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle 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 public String getPreferenceKey() { return KEY_BACKGROUND_ACTIVITY; Loading @@ -66,4 +88,5 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle R.string.high_power_apps, null, null, 0); return true; } } src/com/android/settings/fuelgauge/PowerWhitelistBackend.java +9 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.settings.fuelgauge; 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; Loading @@ -31,7 +33,7 @@ public class PowerWhitelistBackend { 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<>(); Loading Loading @@ -73,7 +75,8 @@ public class PowerWhitelistBackend { } } private void refreshList() { @VisibleForTesting void refreshList() { mSysWhitelistedApps.clear(); mWhitelistedApps.clear(); try { Loading @@ -91,7 +94,10 @@ public class PowerWhitelistBackend { } public static PowerWhitelistBackend getInstance() { return INSTANCE; if (sInstance == null) { sInstance = new PowerWhitelistBackend(); } return sInstance; } } tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java +49 −5 Original line number Diff line number Diff line Loading @@ -22,14 +22,18 @@ import static org.mockito.Matchers.any; 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; Loading @@ -39,11 +43,14 @@ import org.junit.runner.RunWith; 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 Loading @@ -51,20 +58,28 @@ public class BatteryOptimizationPreferenceControllerTest { @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); Loading @@ -76,7 +91,7 @@ public class BatteryOptimizationPreferenceControllerTest { @Test public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() { when(mPreference.getKey()).thenReturn(KEY_OTHER); mPreference.setKey(KEY_OTHER); final boolean handled = mController.handlePreferenceTreeClick(mPreference); Loading @@ -85,4 +100,33 @@ public class BatteryOptimizationPreferenceControllerTest { 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 } } } Loading
src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +1 −1 Original line number Diff line number Diff line Loading @@ -230,7 +230,7 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements 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); Loading
src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java +24 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.fuelgauge; 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; Loading @@ -33,14 +34,29 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle 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 Loading @@ -48,6 +64,12 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle 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 public String getPreferenceKey() { return KEY_BACKGROUND_ACTIVITY; Loading @@ -66,4 +88,5 @@ public class BatteryOptimizationPreferenceController extends PreferenceControlle R.string.high_power_apps, null, null, 0); return true; } }
src/com/android/settings/fuelgauge/PowerWhitelistBackend.java +9 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.settings.fuelgauge; 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; Loading @@ -31,7 +33,7 @@ public class PowerWhitelistBackend { 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<>(); Loading Loading @@ -73,7 +75,8 @@ public class PowerWhitelistBackend { } } private void refreshList() { @VisibleForTesting void refreshList() { mSysWhitelistedApps.clear(); mWhitelistedApps.clear(); try { Loading @@ -91,7 +94,10 @@ public class PowerWhitelistBackend { } public static PowerWhitelistBackend getInstance() { return INSTANCE; if (sInstance == null) { sInstance = new PowerWhitelistBackend(); } return sInstance; } }
tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java +49 −5 Original line number Diff line number Diff line Loading @@ -22,14 +22,18 @@ import static org.mockito.Matchers.any; 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; Loading @@ -39,11 +43,14 @@ import org.junit.runner.RunWith; 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 Loading @@ -51,20 +58,28 @@ public class BatteryOptimizationPreferenceControllerTest { @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); Loading @@ -76,7 +91,7 @@ public class BatteryOptimizationPreferenceControllerTest { @Test public void testHandlePreferenceTreeClick_OtherPreference_NotHandleClick() { when(mPreference.getKey()).thenReturn(KEY_OTHER); mPreference.setKey(KEY_OTHER); final boolean handled = mController.handlePreferenceTreeClick(mPreference); Loading @@ -85,4 +100,33 @@ public class BatteryOptimizationPreferenceControllerTest { 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 } } }