Use bg appop ALLOWED, not DEFAULT

DEFAULT is not actually the right thing; it's a subtlety used for
other things that have compound state.  ALLOWED is the proper
outright "let this thing run free" state for this appop.

Also, set the appop only for the target package, not for the
entire uid.

Bug 37226920
Bug 37242946
Test: make RunSettingsRoboTests

Change-Id: I8c0a995b9519f980685e8573da946dcc93ac4e7c
This commit is contained in:
Christopher Tate
2017-04-11 10:52:06 -07:00
parent b1c336de5f
commit 65cb0d6488
2 changed files with 12 additions and 8 deletions

View File

@@ -90,12 +90,16 @@ public class BackgroundActivityPreferenceController extends PreferenceController
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean switchOn = (Boolean) newValue; boolean switchOn = (Boolean) newValue;
mAppOpsManager.setUidMode(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mAppOpsManager.setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, mUid, mTargetPackage,
switchOn ? AppOpsManager.MODE_DEFAULT : AppOpsManager.MODE_IGNORED); switchOn ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
return true; return true;
} }
@VisibleForTesting
String getTargetPackage() {
return mTargetPackage;
}
@VisibleForTesting @VisibleForTesting
boolean isLegacyApp(final String packageName) { boolean isLegacyApp(final String packageName) {
try { try {

View File

@@ -85,16 +85,16 @@ public class BackgroundActivityPreferenceControllerTest {
public void testOnPreferenceChange_TurnOnCheck_MethodInvoked() { public void testOnPreferenceChange_TurnOnCheck_MethodInvoked() {
mController.onPreferenceChange(mPreference, true); mController.onPreferenceChange(mPreference, true);
verify(mAppOpsManager).setUidMode(AppOpsManager.OP_RUN_IN_BACKGROUND, verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL,
UID_NORMAL, AppOpsManager.MODE_DEFAULT); mController.getTargetPackage(), AppOpsManager.MODE_ALLOWED);
} }
@Test @Test
public void testOnPreferenceChange_TurnOffCheck_MethodInvoked() { public void testOnPreferenceChange_TurnOffCheck_MethodInvoked() {
mController.onPreferenceChange(null, false); mController.onPreferenceChange(null, false);
verify(mAppOpsManager).setUidMode(AppOpsManager.OP_RUN_IN_BACKGROUND, verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_NORMAL,
UID_NORMAL, AppOpsManager.MODE_IGNORED); mController.getTargetPackage(), AppOpsManager.MODE_IGNORED);
} }
@Test @Test
@@ -134,7 +134,7 @@ public class BackgroundActivityPreferenceControllerTest {
mController = new BackgroundActivityPreferenceController(mContext, UID_SPECIAL); mController = new BackgroundActivityPreferenceController(mContext, UID_SPECIAL);
when(mAppOpsManager when(mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_SPECIAL, LOW_SDK_PACKAGE)) .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_SPECIAL, LOW_SDK_PACKAGE))
.thenReturn(AppOpsManager.MODE_DEFAULT); .thenReturn(AppOpsManager.MODE_ALLOWED);
when(mAppOpsManager when(mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_SPECIAL, HIGH_SDK_PACKAGE)) .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID_SPECIAL, HIGH_SDK_PACKAGE))
.thenReturn(AppOpsManager.MODE_IGNORED); .thenReturn(AppOpsManager.MODE_IGNORED);