Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebcd8e86 authored by Jonathan Scott's avatar Jonathan Scott Committed by android-build-merger
Browse files

Merge "Whitelist background activity starts from device admin in...

Merge "Whitelist background activity starts from device admin in #sendAdminCommandLocked." into qt-dev
am: 33352021

Change-Id: I07380bcc5dc33bd6f1c41483ea12cfef6492015e
parents 068fd46d 33352021
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -108,6 +108,8 @@ import android.app.ActivityTaskManager;
import android.app.ActivityThread;
import android.app.ActivityThread;
import android.app.AlarmManager;
import android.app.AlarmManager;
import android.app.AppGlobals;
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.BroadcastOptions;
import android.app.IActivityManager;
import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.app.IActivityTaskManager;
import android.app.IApplicationThread;
import android.app.IApplicationThread;
@@ -2897,12 +2899,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                admin.getUserHandle()).isEmpty()) {
                admin.getUserHandle()).isEmpty()) {
            return false;
            return false;
        }
        }
        final BroadcastOptions options = BroadcastOptions.makeBasic();
        options.setBackgroundActivityStartsAllowed(true);
        if (result != null) {
        if (result != null) {
            mContext.sendOrderedBroadcastAsUser(intent, admin.getUserHandle(),
            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 {
        } else {
            mContext.sendBroadcastAsUser(intent, admin.getUserHandle());
            mContext.sendBroadcastAsUser(intent, admin.getUserHandle(), null, options.toBundle());
        }
        }
        return true;
        return true;
    }
    }
+23 −6
Original line number Original line Diff line number Diff line
@@ -57,6 +57,7 @@ import static org.testng.Assert.assertThrows;
import android.Manifest.permission;
import android.Manifest.permission;
import android.annotation.RawRes;
import android.annotation.RawRes;
import android.app.Activity;
import android.app.Activity;
import android.app.AppOpsManager;
import android.app.Notification;
import android.app.Notification;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager;
@@ -379,7 +380,9 @@ public class DevicePolicyManagerTest extends DpmTestBase {
        verify(mContext.spiedContext).sendBroadcastAsUser(
        verify(mContext.spiedContext).sendBroadcastAsUser(
                MockUtils.checkIntentAction(
                MockUtils.checkIntentAction(
                        DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
                        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(
        verify(getServices().ipackageManager, times(1)).setApplicationEnabledSetting(
                eq(admin1.getPackageName()),
                eq(admin1.getPackageName()),
@@ -657,6 +660,8 @@ public class DevicePolicyManagerTest extends DpmTestBase {
                        DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
                        DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
                isNull(String.class),
                isNull(String.class),
                eq(AppOpsManager.OP_NONE),
                any(Bundle.class),
                any(BroadcastReceiver.class),
                any(BroadcastReceiver.class),
                eq(dpms.mHandler),
                eq(dpms.mHandler),
                eq(Activity.RESULT_OK),
                eq(Activity.RESULT_OK),
@@ -707,6 +712,8 @@ public class DevicePolicyManagerTest extends DpmTestBase {
                        DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
                        DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED),
                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
                MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE),
                isNull(String.class),
                isNull(String.class),
                eq(AppOpsManager.OP_NONE),
                any(Bundle.class),
                any(BroadcastReceiver.class),
                any(BroadcastReceiver.class),
                eq(dpms.mHandler),
                eq(dpms.mHandler),
                eq(Activity.RESULT_OK),
                eq(Activity.RESULT_OK),
@@ -788,10 +795,14 @@ public class DevicePolicyManagerTest extends DpmTestBase {


        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
                MockUtils.checkIntent(intent),
                MockUtils.checkIntent(intent),
                MockUtils.checkUserHandle(UserHandle.USER_SYSTEM));
                MockUtils.checkUserHandle(UserHandle.USER_SYSTEM),
                eq(null),
                any(Bundle.class));
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
                MockUtils.checkIntent(intent),
                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(
        verify(mContext.spiedContext, never()).sendBroadcastAsUser(
                MockUtils.checkIntent(intent),
                MockUtils.checkIntent(intent),
                MockUtils.checkUserHandle(UserHandle.USER_SYSTEM));
                MockUtils.checkUserHandle(UserHandle.USER_SYSTEM),
                eq(null),
                any(Bundle.class));
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
                MockUtils.checkIntent(intent),
                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(
        verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
                MockUtils.checkIntent(intent),
                MockUtils.checkIntent(intent),
                MockUtils.checkUserHandle(userHandle));
                MockUtils.checkUserHandle(userHandle),
                eq(null),
                any());


        // CertificateMonitor.updateInstalledCertificates is called on the background thread,
        // CertificateMonitor.updateInstalledCertificates is called on the background thread,
        // let it finish with system uid, otherwise it will throw and crash.
        // let it finish with system uid, otherwise it will throw and crash.
+13 −4
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.server.devicepolicy;


import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;


import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
@@ -323,6 +325,12 @@ public class DpmMockContext extends MockContext {
        spiedContext.sendBroadcastAsUser(intent, user);
        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
    @Override
    public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
    public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
        spiedContext.sendBroadcastAsUser(intent, user, receiverPermission);
        spiedContext.sendBroadcastAsUser(intent, user, receiverPermission);
@@ -338,17 +346,17 @@ public class DpmMockContext extends MockContext {
    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
            int initialCode, String initialData, Bundle initialExtras) {
            int initialCode, String initialData, Bundle initialExtras) {
        spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
        sendOrderedBroadcastAsUser(
                intent, user, receiverPermission, AppOpsManager.OP_NONE, resultReceiver,
                scheduler, initialCode, initialData, initialExtras);
                scheduler, initialCode, initialData, initialExtras);
        resultReceiver.onReceive(spiedContext, intent);
    }
    }


    @Override
    @Override
    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
    public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
        spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp,
        sendOrderedBroadcastAsUser(
                resultReceiver,
                intent, user, receiverPermission, appOp, null, resultReceiver,
                scheduler, initialCode, initialData, initialExtras);
                scheduler, initialCode, initialData, initialExtras);
    }
    }


@@ -358,6 +366,7 @@ public class DpmMockContext extends MockContext {
            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
            Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
        spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
        spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
                resultReceiver, scheduler, initialCode, initialData, initialExtras);
                resultReceiver, scheduler, initialCode, initialData, initialExtras);
        resultReceiver.onReceive(spiedContext, intent);
    }
    }


    @Override
    @Override