1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cts.verifier.managedprovisioning; 18 19 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE; 20 21 import android.app.admin.DeviceAdminReceiver; 22 import android.app.admin.DevicePolicyManager; 23 import android.content.ComponentName; 24 import android.content.Context; 25 import android.content.Intent; 26 import android.content.IntentFilter; 27 import android.os.PersistableBundle; 28 import android.util.Log; 29 30 import com.android.cts.verifier.R; 31 import com.android.cts.verifier.location.LocationListenerActivity; 32 33 /** 34 * Profile owner receiver for BYOD flow test. 35 * Setup cross-profile intent filter after successful provisioning. 36 */ 37 public class DeviceAdminTestReceiver extends DeviceAdminReceiver { 38 public static final String KEY_BUNDLE_WIPE_IMMEDIATELY = "wipe_immediately"; 39 private static final String TAG = "DeviceAdminTestReceiver"; 40 private static final String DEVICE_OWNER_PKG = 41 "com.android.cts.verifier"; 42 private static final String ADMIN_RECEIVER_TEST_CLASS = 43 DEVICE_OWNER_PKG + ".managedprovisioning.DeviceAdminTestReceiver"; 44 private static final ComponentName RECEIVER_COMPONENT_NAME = new ComponentName( 45 DEVICE_OWNER_PKG, ADMIN_RECEIVER_TEST_CLASS); 46 getReceiverComponentName()47 public static ComponentName getReceiverComponentName() { 48 return RECEIVER_COMPONENT_NAME; 49 } 50 51 @Override onProfileProvisioningComplete(Context context, Intent intent)52 public void onProfileProvisioningComplete(Context context, Intent intent) { 53 Log.d(TAG, "Provisioning complete intent received"); 54 setupProfile(context); 55 wipeIfNecessary(context, intent); 56 } 57 58 @Override onBugreportSharingDeclined(Context context, Intent intent)59 public void onBugreportSharingDeclined(Context context, Intent intent) { 60 Log.i(TAG, "Bugreport sharing declined"); 61 Utils.showBugreportNotification(context, context.getString( 62 R.string.bugreport_sharing_declined), Utils.BUGREPORT_NOTIFICATION_ID); 63 } 64 65 @Override onBugreportShared(Context context, Intent intent, String bugreportFileHash)66 public void onBugreportShared(Context context, Intent intent, String bugreportFileHash) { 67 Log.i(TAG, "Bugreport shared"); 68 Utils.showBugreportNotification(context, context.getString( 69 R.string.bugreport_shared_successfully), Utils.BUGREPORT_NOTIFICATION_ID); 70 } 71 72 @Override onBugreportFailed(Context context, Intent intent, int failureCode)73 public void onBugreportFailed(Context context, Intent intent, int failureCode) { 74 Log.i(TAG, "Bugreport collection operation failed, code: " + failureCode); 75 Utils.showBugreportNotification(context, context.getString( 76 R.string.bugreport_failed_completing), Utils.BUGREPORT_NOTIFICATION_ID); 77 } 78 setupProfile(Context context)79 private void setupProfile(Context context) { 80 DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); 81 dpm.setProfileEnabled(new ComponentName(context.getApplicationContext(), getClass())); 82 83 // Setup cross-profile intent filter to allow communications between the two versions of CtsVerifier 84 // Primary -> work direction 85 IntentFilter filter = new IntentFilter(); 86 filter.addAction(ByodHelperActivity.ACTION_QUERY_PROFILE_OWNER); 87 filter.addAction(ByodHelperActivity.ACTION_REMOVE_MANAGED_PROFILE); 88 filter.addAction(ByodHelperActivity.ACTION_CHECK_DISK_ENCRYPTION); 89 filter.addAction(ByodHelperActivity.ACTION_INSTALL_APK); 90 filter.addAction(ByodHelperActivity.ACTION_CHECK_INTENT_FILTERS); 91 filter.addAction(ByodHelperActivity.ACTION_CAPTURE_AND_CHECK_IMAGE); 92 filter.addAction(ByodHelperActivity.ACTION_CAPTURE_AND_CHECK_VIDEO_WITH_EXTRA_OUTPUT); 93 filter.addAction(ByodHelperActivity.ACTION_CAPTURE_AND_CHECK_VIDEO_WITHOUT_EXTRA_OUTPUT); 94 filter.addAction(ByodHelperActivity.ACTION_CAPTURE_AND_CHECK_AUDIO); 95 filter.addAction(ByodHelperActivity.ACTION_KEYGUARD_DISABLED_FEATURES); 96 filter.addAction(ByodHelperActivity.ACTION_LOCKNOW); 97 filter.addAction(ByodHelperActivity.ACTION_TEST_NFC_BEAM); 98 filter.addAction(ByodHelperActivity.ACTION_TEST_CROSS_PROFILE_INTENTS_DIALOG); 99 filter.addAction(ByodHelperActivity.ACTION_TEST_APP_LINKING_DIALOG); 100 filter.addAction(ByodHelperActivity.ACTION_NOTIFICATION); 101 filter.addAction(ByodHelperActivity.ACTION_NOTIFICATION_ON_LOCKSCREEN); 102 filter.addAction(ByodHelperActivity.ACTION_CLEAR_NOTIFICATION); 103 filter.addAction(ByodHelperActivity.ACTION_SET_USER_RESTRICTION); 104 filter.addAction(ByodHelperActivity.ACTION_CLEAR_USER_RESTRICTION); 105 filter.addAction(CrossProfileTestActivity.ACTION_CROSS_PROFILE_TO_WORK); 106 filter.addAction(WorkStatusTestActivity.ACTION_WORK_STATUS_TOAST); 107 filter.addAction(WorkStatusTestActivity.ACTION_WORK_STATUS_ICON); 108 filter.addAction( 109 PermissionLockdownTestActivity.ACTION_MANAGED_PROFILE_CHECK_PERMISSION_LOCKDOWN); 110 filter.addAction(AuthenticationBoundKeyTestActivity.ACTION_AUTH_BOUND_KEY_TEST); 111 filter.addAction(ByodHelperActivity.ACTION_BYOD_SET_LOCATION_AND_CHECK_UPDATES); 112 filter.addAction(VpnTestActivity.ACTION_VPN); 113 filter.addAction(RecentsRedactionActivity.ACTION_RECENTS); 114 filter.addAction(ByodHelperActivity.ACTION_TEST_SELECT_WORK_CHALLENGE); 115 filter.addAction(ByodHelperActivity.ACTION_LAUNCH_CONFIRM_WORK_CREDENTIALS); 116 filter.addAction(ByodHelperActivity.ACTION_SET_ORGANIZATION_INFO); 117 filter.addAction(ByodHelperActivity.ACTION_TEST_PARENT_PROFILE_PASSWORD); 118 filter.addAction(SetSupportMessageActivity.ACTION_SET_SUPPORT_MSG); 119 filter.addAction(CommandReceiverActivity.ACTION_EXECUTE_COMMAND); 120 dpm.addCrossProfileIntentFilter(getWho(context), filter, 121 DevicePolicyManager.FLAG_MANAGED_CAN_ACCESS_PARENT); 122 123 // Work -> primary direction 124 filter = new IntentFilter(); 125 filter.addAction(ByodHelperActivity.ACTION_PROFILE_OWNER_STATUS); 126 filter.addAction(ByodHelperActivity.ACTION_DISK_ENCRYPTION_STATUS); 127 filter.addAction(CrossProfileTestActivity.ACTION_CROSS_PROFILE_TO_PERSONAL); 128 filter.addAction(LocationListenerActivity.ACTION_SET_LOCATION_AND_CHECK_UPDATES); 129 dpm.addCrossProfileIntentFilter(getWho(context), filter, 130 DevicePolicyManager.FLAG_PARENT_CAN_ACCESS_MANAGED); 131 132 Intent intent = new Intent(context, ByodHelperActivity.class); 133 intent.setAction(ByodHelperActivity.ACTION_PROFILE_PROVISIONED); 134 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 135 context.startActivity(intent); 136 } 137 wipeIfNecessary(Context context, Intent intent)138 private void wipeIfNecessary(Context context, Intent intent) { 139 PersistableBundle bundle = intent.getParcelableExtra( 140 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE); 141 if (bundle != null && bundle.getBoolean(KEY_BUNDLE_WIPE_IMMEDIATELY, false)) { 142 getManager(context).wipeData(0); 143 } 144 } 145 } 146