Merge "Whitelist background activity starts from device admin in #sendAdminCommandLocked." into qt-dev
am: 3335202167
Change-Id: Ic73dfece580ac3edc38444cfcc0ad4e5e639ebcd
This commit is contained in:
@@ -108,6 +108,8 @@ import android.app.ActivityTaskManager;
|
||||
import android.app.ActivityThread;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.AppGlobals;
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.BroadcastOptions;
|
||||
import android.app.IActivityManager;
|
||||
import android.app.IActivityTaskManager;
|
||||
import android.app.IApplicationThread;
|
||||
@@ -2897,12 +2899,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
admin.getUserHandle()).isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
options.setBackgroundActivityStartsAllowed(true);
|
||||
|
||||
if (result != null) {
|
||||
mContext.sendOrderedBroadcastAsUser(intent, admin.getUserHandle(),
|
||||
null, result, mHandler, Activity.RESULT_OK, null, null);
|
||||
null, AppOpsManager.OP_NONE, options.toBundle(),
|
||||
result, mHandler, Activity.RESULT_OK, null, null);
|
||||
} else {
|
||||
mContext.sendBroadcastAsUser(intent, admin.getUserHandle());
|
||||
mContext.sendBroadcastAsUser(intent, admin.getUserHandle(), null, options.toBundle());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,7 @@ import static org.testng.Assert.assertThrows;
|
||||
import android.Manifest.permission;
|
||||
import android.annotation.RawRes;
|
||||
import android.app.Activity;
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.Notification;
|
||||
import android.app.admin.DeviceAdminReceiver;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
@@ -379,7 +380,9 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
verify(mContext.spiedContext).sendBroadcastAsUser(
|
||||
MockUtils.checkIntentAction(
|
||||
DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
|
||||
MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE));
|
||||
MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
|
||||
eq(null),
|
||||
any(Bundle.class));
|
||||
|
||||
verify(getServices().ipackageManager, times(1)).setApplicationEnabledSetting(
|
||||
eq(admin1.getPackageName()),
|
||||
@@ -657,6 +660,8 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
|
||||
MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
|
||||
isNull(String.class),
|
||||
eq(AppOpsManager.OP_NONE),
|
||||
any(Bundle.class),
|
||||
any(BroadcastReceiver.class),
|
||||
eq(dpms.mHandler),
|
||||
eq(Activity.RESULT_OK),
|
||||
@@ -707,6 +712,8 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
|
||||
MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
|
||||
isNull(String.class),
|
||||
eq(AppOpsManager.OP_NONE),
|
||||
any(Bundle.class),
|
||||
any(BroadcastReceiver.class),
|
||||
eq(dpms.mHandler),
|
||||
eq(Activity.RESULT_OK),
|
||||
@@ -788,10 +795,14 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
|
||||
verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
|
||||
MockUtils.checkIntent(intent),
|
||||
MockUtils.checkUserHandle(UserHandle.USER_SYSTEM));
|
||||
MockUtils.checkUserHandle(UserHandle.USER_SYSTEM),
|
||||
eq(null),
|
||||
any(Bundle.class));
|
||||
verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
|
||||
MockUtils.checkIntent(intent),
|
||||
MockUtils.checkUserHandle(MANAGED_PROFILE_USER_ID));
|
||||
MockUtils.checkUserHandle(MANAGED_PROFILE_USER_ID),
|
||||
eq(null),
|
||||
any(Bundle.class));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -828,10 +839,14 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
|
||||
verify(mContext.spiedContext, never()).sendBroadcastAsUser(
|
||||
MockUtils.checkIntent(intent),
|
||||
MockUtils.checkUserHandle(UserHandle.USER_SYSTEM));
|
||||
MockUtils.checkUserHandle(UserHandle.USER_SYSTEM),
|
||||
eq(null),
|
||||
any(Bundle.class));
|
||||
verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
|
||||
MockUtils.checkIntent(intent),
|
||||
MockUtils.checkUserHandle(MANAGED_PROFILE_USER_ID));
|
||||
MockUtils.checkUserHandle(MANAGED_PROFILE_USER_ID),
|
||||
eq(null),
|
||||
any(Bundle.class));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4298,7 +4313,9 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
|
||||
verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
|
||||
MockUtils.checkIntent(intent),
|
||||
MockUtils.checkUserHandle(userHandle));
|
||||
MockUtils.checkUserHandle(userHandle),
|
||||
eq(null),
|
||||
any());
|
||||
|
||||
// CertificateMonitor.updateInstalledCertificates is called on the background thread,
|
||||
// let it finish with system uid, otherwise it will throw and crash.
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.android.server.devicepolicy;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.AppOpsManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -323,6 +325,12 @@ public class DpmMockContext extends MockContext {
|
||||
spiedContext.sendBroadcastAsUser(intent, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBroadcastAsUser(Intent intent,
|
||||
UserHandle user, @Nullable String receiverPermission, @Nullable Bundle options) {
|
||||
spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
|
||||
spiedContext.sendBroadcastAsUser(intent, user, receiverPermission);
|
||||
@@ -338,17 +346,17 @@ public class DpmMockContext extends MockContext {
|
||||
public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
|
||||
String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
|
||||
int initialCode, String initialData, Bundle initialExtras) {
|
||||
spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
|
||||
sendOrderedBroadcastAsUser(
|
||||
intent, user, receiverPermission, AppOpsManager.OP_NONE, resultReceiver,
|
||||
scheduler, initialCode, initialData, initialExtras);
|
||||
resultReceiver.onReceive(spiedContext, intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
|
||||
String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
|
||||
Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
|
||||
spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp,
|
||||
resultReceiver,
|
||||
sendOrderedBroadcastAsUser(
|
||||
intent, user, receiverPermission, appOp, null, resultReceiver,
|
||||
scheduler, initialCode, initialData, initialExtras);
|
||||
}
|
||||
|
||||
@@ -358,6 +366,7 @@ public class DpmMockContext extends MockContext {
|
||||
Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
|
||||
spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
|
||||
resultReceiver, scheduler, initialCode, initialData, initialExtras);
|
||||
resultReceiver.onReceive(spiedContext, intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user