diff --git a/res/values/strings.xml b/res/values/strings.xml
index 164f6d5de29..2a14ef5c906 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4719,7 +4719,7 @@
%1$s to charge
- Background activity
+ Restricted
Allow the app to run in the background
@@ -7602,6 +7602,11 @@
No
+
+ Yes
+
+ No
+
Require PIN?
diff --git a/res/xml/power_usage_detail.xml b/res/xml/power_usage_detail.xml
index acd63676e96..acc62b6cb8d 100644
--- a/res/xml/power_usage_detail.xml
+++ b/res/xml/power_usage_detail.xml
@@ -27,6 +27,22 @@
android:key="action_buttons"
android:order="-9999"/>
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 819846adea0..de027a3a199 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -374,7 +374,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@Override
public void onLimitBackgroundActivity() {
- mBackgroundActivityPreferenceController.setUnchecked(
+ mBackgroundActivityPreferenceController.setRestricted(
findPreference(mBackgroundActivityPreferenceController.getPreferenceKey()));
}
}
diff --git a/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java b/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
index 8286774226a..01e41825074 100644
--- a/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceController.java
@@ -43,12 +43,12 @@ import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
* Controller to control whether an app can run in the background
*/
public class BackgroundActivityPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
+ implements PreferenceControllerMixin {
private static final String TAG = "BgActivityPrefContr";
- private static final String KEY_BACKGROUND_ACTIVITY = "background_activity";
+ @VisibleForTesting
+ static final String KEY_BACKGROUND_ACTIVITY = "background_activity";
- private final PackageManager mPackageManager;
private final AppOpsManager mAppOpsManager;
private final UserManager mUserManager;
private final int mUid;
@@ -70,7 +70,6 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
int uid, String packageName, PowerWhitelistBackend backend) {
super(context);
mPowerWhitelistBackend = backend;
- mPackageManager = context.getPackageManager();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mDpm = new DevicePolicyManagerWrapper(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE));
@@ -86,11 +85,6 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
final int mode = mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage);
final boolean whitelisted = mPowerWhitelistBackend.isWhitelisted(mTargetPackage);
- // Set checked or not before we may set it disabled
- if (mode != AppOpsManager.MODE_ERRORED) {
- final boolean checked = whitelisted || mode != AppOpsManager.MODE_IGNORED;
- ((SwitchPreference) preference).setChecked(checked);
- }
if (whitelisted || mode == AppOpsManager.MODE_ERRORED
|| Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mTargetPackage)) {
preference.setEnabled(false);
@@ -109,9 +103,8 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
* Called from the warning dialog, if the user decides to go ahead and disable background
* activity for this package
*/
- public void setUnchecked(Preference preference) {
+ public void setRestricted(Preference preference) {
mBatteryUtils.setForceAppStandby(mUid, mTargetPackage, AppOpsManager.MODE_IGNORED);
- ((SwitchPreference) preference).setChecked(false);
updateSummary(preference);
}
@@ -121,17 +114,21 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
}
@Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean switchOn = (Boolean) newValue;
- if (!switchOn) {
- final WarningDialogFragment dialogFragment = new WarningDialogFragment();
- dialogFragment.setTargetFragment(mFragment, 0);
- dialogFragment.show(mFragment.getFragmentManager(), TAG);
- return false;
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (KEY_BACKGROUND_ACTIVITY.equals(preference.getKey())) {
+ final int mode = mAppOpsManager
+ .checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage);
+ final boolean restricted = mode == AppOpsManager.MODE_IGNORED;
+ if (!restricted) {
+ showDialog();
+ return false;
+ }
+ mBatteryUtils.setForceAppStandby(mUid, mTargetPackage, AppOpsManager.MODE_ALLOWED);
+ updateSummary(preference);
+ return true;
}
- mBatteryUtils.setForceAppStandby(mUid, mTargetPackage, AppOpsManager.MODE_ALLOWED);
- updateSummary(preference);
- return true;
+
+ return false;
}
@VisibleForTesting
@@ -146,12 +143,19 @@ public class BackgroundActivityPreferenceController extends AbstractPreferenceCo
if (mode == AppOpsManager.MODE_ERRORED) {
preference.setSummary(R.string.background_activity_summary_disabled);
} else {
- final boolean checked = mode != AppOpsManager.MODE_IGNORED;
- preference.setSummary(checked ? R.string.background_activity_summary_on
- : R.string.background_activity_summary_off);
+ final boolean restricted = mode == AppOpsManager.MODE_IGNORED;
+ preference.setSummary(restricted ? R.string.restricted_true_label
+ : R.string.restricted_false_label);
}
}
+ @VisibleForTesting
+ void showDialog() {
+ final WarningDialogFragment dialogFragment = new WarningDialogFragment();
+ dialogFragment.setTargetFragment(mFragment, 0 /* requestCode */);
+ dialogFragment.show(mFragment.getFragmentManager(), TAG);
+ }
+
interface WarningConfirmationListener {
void onLimitBackgroundActivity();
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
index 0c9e394ffdd..30fdccb23ec 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Matchers.any;
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;
@@ -38,6 +39,7 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.UserManager;
import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
import android.widget.Button;
import com.android.settings.R;
@@ -92,12 +94,12 @@ public class BackgroundActivityPreferenceControllerTest {
private DevicePolicyManager mDevicePolicyManager;
@Mock
private DevicePolicyManagerWrapper mDevicePolicyManagerWrapper;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private AdvancedPowerUsageDetail mFragment;
@Mock
private PowerWhitelistBackend mPowerWhitelistBackend;
private BackgroundActivityPreferenceController mController;
- private SwitchPreference mPreference;
+ private Preference mPreference;
private Context mShadowContext;
private BatteryUtils mBatteryUtils;
@@ -125,7 +127,8 @@ public class BackgroundActivityPreferenceControllerTest {
mBatteryUtils = spy(new BatteryUtils(mShadowContext));
doNothing().when(mBatteryUtils).setForceAppStandby(anyInt(), anyString(), anyInt());
- mPreference = new SwitchPreference(mShadowContext);
+ mPreference = new Preference(mShadowContext);
+ mPreference.setKey(BackgroundActivityPreferenceController.KEY_BACKGROUND_ACTIVITY);
mController = spy(new BackgroundActivityPreferenceController(
mContext, mFragment, UID_LOW_SDK, LOW_SDK_PACKAGE, mPowerWhitelistBackend));
mController.mDpm = mDevicePolicyManagerWrapper;
@@ -133,49 +136,33 @@ public class BackgroundActivityPreferenceControllerTest {
}
@Test
- public void testOnPreferenceChange_TurnOnCheck_MethodInvoked() {
- mController.onPreferenceChange(mPreference, true);
+ public void testHandlePreferenceTreeClick_restrictApp_showDialog() {
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).checkOpNoThrow(anyInt(),
+ anyInt(), anyString());
+
+ mController.handlePreferenceTreeClick(mPreference);
+
+ verify(mController).showDialog();
+ }
+
+ @Test
+ public void testHandlePreferenceTreeClick_unRestrictApp_setModeAllowed() {
+ doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(anyInt(),
+ anyInt(), anyString());
+
+ mController.handlePreferenceTreeClick(mPreference);
verify(mBatteryUtils).setForceAppStandby(UID_LOW_SDK, LOW_SDK_PACKAGE,
AppOpsManager.MODE_ALLOWED);
- assertThat(mPreference.getSummary())
- .isEqualTo(mShadowContext.getText(R.string.background_activity_summary_on));
}
@Test
- public void testOnPreferenceChange_TurnOnCheckHighSDK_MethodInvoked() {
- mController = new BackgroundActivityPreferenceController(mContext, mFragment, UID_HIGH_SDK,
- HIGH_SDK_PACKAGE, mPowerWhitelistBackend);
- mController.mBatteryUtils = mBatteryUtils;
-
- mController.onPreferenceChange(mPreference, true);
-
- verify(mBatteryUtils).setForceAppStandby(UID_HIGH_SDK, HIGH_SDK_PACKAGE,
- AppOpsManager.MODE_ALLOWED);
- assertThat(mPreference.getSummary())
- .isEqualTo(mShadowContext.getText(R.string.background_activity_summary_on));
- }
-
- @Test
- public void testUpdateState_CheckOn_SetCheckedTrue() {
+ public void testUpdateState_noError_setEnabled() {
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_ALLOWED);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isTrue();
- assertThat(mPreference.isEnabled()).isTrue();
- verify(mController).updateSummary(mPreference);
- }
-
- @Test
- public void testUpdateState_CheckOff_SetCheckedFalse() {
- when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
- LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isFalse();
assertThat(mPreference.isEnabled()).isTrue();
verify(mController).updateSummary(mPreference);
}
@@ -184,7 +171,6 @@ public class BackgroundActivityPreferenceControllerTest {
public void testUpdateState_whitelisted() {
when(mPowerWhitelistBackend.isWhitelisted(LOW_SDK_PACKAGE)).thenReturn(true);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isTrue();
assertThat(mPreference.isEnabled()).isFalse();
assertThat(mPreference.getSummary()).isEqualTo(
mShadowContext.getText(R.string.background_activity_summary_whitelisted));
@@ -202,27 +188,23 @@ public class BackgroundActivityPreferenceControllerTest {
}
@Test
- public void testUpdateSummary_modeDefault_showSummaryOn() {
+ public void testUpdateSummary_modeDefault_showNotRestricted() {
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_DEFAULT);
- final CharSequence expectedSummary = mShadowContext.getText(
- R.string.background_activity_summary_on);
mController.updateSummary(mPreference);
- assertThat(mPreference.getSummary()).isEqualTo(expectedSummary);
+ assertThat(mPreference.getSummary()).isEqualTo("No");
}
@Test
- public void testUpdateSummary_modeIgnored_showSummaryOff() {
+ public void testUpdateSummary_modeIgnored_showRestricted() {
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID_LOW_SDK,
LOW_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED);
- final CharSequence expectedSummary = mShadowContext.getText(
- R.string.background_activity_summary_off);
mController.updateSummary(mPreference);
- assertThat(mPreference.getSummary()).isEqualTo(expectedSummary);
+ assertThat(mPreference.getSummary()).isEqualTo("Yes");
}
@Test