Loading res/xml/power_usage_detail.xml +6 −3 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ limitations under the License. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto"> <com.android.settings.applications.LayoutPreference android:key="header_view" Loading @@ -30,10 +32,11 @@ <PreferenceCategory android:title="@string/battery_detail_manage_title"> <Preference <com.android.settingslib.RestrictedPreference android:key="background_activity" android:title="@string/background_activity_title" android:selectable="true"/> android:selectable="true" settings:userRestriction="no_control_apps"/> <Preference android:key="battery_optimization" Loading src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java +6 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.settings.fuelgauge.batterytip.BatteryTipDialogFragment; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; Loading Loading @@ -76,6 +77,11 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo @Override public void updateState(Preference preference) { final RestrictedPreference restrictedPreference = (RestrictedPreference) preference; if (restrictedPreference.isDisabledByAdmin()) { // If disabled, let RestrictedPreference handle it and do nothing here return; } final int mode = mAppOpsManager .checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage); final boolean whitelisted = mPowerWhitelistBackend.isWhitelisted(mTargetPackage); Loading tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java +23 −12 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package com.android.settings.fuelgauge; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doNothing; 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; Loading @@ -38,6 +41,7 @@ import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; import org.junit.Before; Loading @@ -49,8 +53,6 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import androidx.preference.Preference; @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, ShadowFragment.class}) public class BackgroundActivityPreferenceControllerTest { Loading Loading @@ -80,7 +82,7 @@ public class BackgroundActivityPreferenceControllerTest { @Mock private PowerWhitelistBackend mPowerWhitelistBackend; private BackgroundActivityPreferenceController mController; private Preference mPreference; private RestrictedPreference mPreference; private Context mShadowContext; private BatteryUtils mBatteryUtils; Loading Loading @@ -109,7 +111,7 @@ public class BackgroundActivityPreferenceControllerTest { mBatteryUtils = spy(new BatteryUtils(mShadowContext)); doNothing().when(mBatteryUtils).setForceAppStandby(anyInt(), anyString(), anyInt()); mPreference = new Preference(mShadowContext); mPreference = spy(new RestrictedPreference(mShadowContext, null /* attrs */)); mPreference.setKey(BackgroundActivityPreferenceController.KEY_BACKGROUND_ACTIVITY); mController = spy(new BackgroundActivityPreferenceController( mContext, mFragment, UID_LOW_SDK, LOW_SDK_PACKAGE, mPowerWhitelistBackend)); Loading @@ -118,7 +120,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testHandlePreferenceTreeClick_restrictApp_showDialog() { public void handlePreferenceTreeClick_restrictApp_showDialog() { doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager) .checkOpNoThrow(anyInt(), anyInt(), anyString()); Loading @@ -128,7 +130,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testHandlePreferenceTreeClick_unRestrictApp_showDialog() { public void handlePreferenceTreeClick_unRestrictApp_showDialog() { doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager) .checkOpNoThrow(anyInt(), anyInt(), anyString()); Loading @@ -138,7 +140,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateState_noError_setEnabled() { public void updateState_noError_setEnabled() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ALLOWED); Loading @@ -149,7 +151,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateState_whitelisted() { public void updateState_whitelisted() { when(mPowerWhitelistBackend.isWhitelisted(LOW_SDK_PACKAGE)).thenReturn(true); mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isFalse(); Loading @@ -158,7 +160,16 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeError_showSummaryDisabled() { public void updateState_disabledByAdmin_doNothing() { doReturn(true).when(mPreference).isDisabledByAdmin(); mController.updateState(mPreference); verify(mPreference, never()).setEnabled(anyBoolean()); } @Test public void updateSummary_modeError_showSummaryDisabled() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ERRORED); final CharSequence expectedSummary = mShadowContext.getText( Loading @@ -169,7 +180,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeDefault_showNotRestricted() { public void updateSummary_modeDefault_showNotRestricted() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_DEFAULT); Loading @@ -179,7 +190,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeIgnored_showRestricted() { public void updateSummary_modeIgnored_showRestricted() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED); Loading @@ -189,7 +200,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testIsAvailable_ReturnTrue() { public void isAvailable_ReturnTrue() { assertThat(mController.isAvailable()).isTrue(); } } Loading
res/xml/power_usage_detail.xml +6 −3 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ limitations under the License. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto"> <com.android.settings.applications.LayoutPreference android:key="header_view" Loading @@ -30,10 +32,11 @@ <PreferenceCategory android:title="@string/battery_detail_manage_title"> <Preference <com.android.settingslib.RestrictedPreference android:key="background_activity" android:title="@string/background_activity_title" android:selectable="true"/> android:selectable="true" settings:userRestriction="no_control_apps"/> <Preference android:key="battery_optimization" Loading
src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java +6 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.settings.fuelgauge.batterytip.BatteryTipDialogFragment; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; Loading Loading @@ -76,6 +77,11 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo @Override public void updateState(Preference preference) { final RestrictedPreference restrictedPreference = (RestrictedPreference) preference; if (restrictedPreference.isDisabledByAdmin()) { // If disabled, let RestrictedPreference handle it and do nothing here return; } final int mode = mAppOpsManager .checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage); final boolean whitelisted = mPowerWhitelistBackend.isWhitelisted(mTargetPackage); Loading
tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java +23 −12 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package com.android.settings.fuelgauge; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doNothing; 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; Loading @@ -38,6 +41,7 @@ import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; import org.junit.Before; Loading @@ -49,8 +53,6 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import androidx.preference.Preference; @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, ShadowFragment.class}) public class BackgroundActivityPreferenceControllerTest { Loading Loading @@ -80,7 +82,7 @@ public class BackgroundActivityPreferenceControllerTest { @Mock private PowerWhitelistBackend mPowerWhitelistBackend; private BackgroundActivityPreferenceController mController; private Preference mPreference; private RestrictedPreference mPreference; private Context mShadowContext; private BatteryUtils mBatteryUtils; Loading Loading @@ -109,7 +111,7 @@ public class BackgroundActivityPreferenceControllerTest { mBatteryUtils = spy(new BatteryUtils(mShadowContext)); doNothing().when(mBatteryUtils).setForceAppStandby(anyInt(), anyString(), anyInt()); mPreference = new Preference(mShadowContext); mPreference = spy(new RestrictedPreference(mShadowContext, null /* attrs */)); mPreference.setKey(BackgroundActivityPreferenceController.KEY_BACKGROUND_ACTIVITY); mController = spy(new BackgroundActivityPreferenceController( mContext, mFragment, UID_LOW_SDK, LOW_SDK_PACKAGE, mPowerWhitelistBackend)); Loading @@ -118,7 +120,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testHandlePreferenceTreeClick_restrictApp_showDialog() { public void handlePreferenceTreeClick_restrictApp_showDialog() { doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager) .checkOpNoThrow(anyInt(), anyInt(), anyString()); Loading @@ -128,7 +130,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testHandlePreferenceTreeClick_unRestrictApp_showDialog() { public void handlePreferenceTreeClick_unRestrictApp_showDialog() { doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager) .checkOpNoThrow(anyInt(), anyInt(), anyString()); Loading @@ -138,7 +140,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateState_noError_setEnabled() { public void updateState_noError_setEnabled() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ALLOWED); Loading @@ -149,7 +151,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateState_whitelisted() { public void updateState_whitelisted() { when(mPowerWhitelistBackend.isWhitelisted(LOW_SDK_PACKAGE)).thenReturn(true); mController.updateState(mPreference); assertThat(mPreference.isEnabled()).isFalse(); Loading @@ -158,7 +160,16 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeError_showSummaryDisabled() { public void updateState_disabledByAdmin_doNothing() { doReturn(true).when(mPreference).isDisabledByAdmin(); mController.updateState(mPreference); verify(mPreference, never()).setEnabled(anyBoolean()); } @Test public void updateSummary_modeError_showSummaryDisabled() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ERRORED); final CharSequence expectedSummary = mShadowContext.getText( Loading @@ -169,7 +180,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeDefault_showNotRestricted() { public void updateSummary_modeDefault_showNotRestricted() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_DEFAULT); Loading @@ -179,7 +190,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testUpdateSummary_modeIgnored_showRestricted() { public void updateSummary_modeIgnored_showRestricted() { when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK, LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED); Loading @@ -189,7 +200,7 @@ public class BackgroundActivityPreferenceControllerTest { } @Test public void testIsAvailable_ReturnTrue() { public void isAvailable_ReturnTrue() { assertThat(mController.isAvailable()).isTrue(); } }