1 /* 2 * Copyright (C) 2021 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.managedprovisioning.common; 18 19 import static android.app.admin.DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE; 20 import static android.app.admin.DevicePolicyManager.EXTRA_ROLE_HOLDER_PROVISIONING_INITIATOR_PACKAGE; 21 import static android.app.admin.DevicePolicyManager.EXTRA_ROLE_HOLDER_STATE; 22 23 import static com.android.managedprovisioning.TestUtils.assertIntentsEqual; 24 25 import static com.google.common.truth.Truth.assertThat; 26 27 import static org.junit.Assert.assertThrows; 28 29 import android.app.admin.DevicePolicyManager; 30 import android.content.Context; 31 import android.content.Intent; 32 import android.os.Bundle; 33 import android.os.PersistableBundle; 34 35 import androidx.test.core.app.ApplicationProvider; 36 import androidx.test.filters.SmallTest; 37 38 import com.google.android.setupcompat.util.WizardManagerHelper; 39 40 import org.junit.After; 41 import org.junit.Before; 42 import org.junit.Test; 43 import org.junit.runner.RunWith; 44 import org.junit.runners.JUnit4; 45 46 import java.util.HashSet; 47 import java.util.Set; 48 49 50 @SmallTest 51 @RunWith(JUnit4.class) 52 public class DeviceManagementRoleHolderHelperTest { 53 private static final String ROLE_HOLDER_PACKAGE_NAME = "com.test.package"; 54 private static final String ROLE_HOLDER_EMPTY_PACKAGE_NAME = ""; 55 private static final String ROLE_HOLDER_NULL_PACKAGE_NAME = null; 56 private static final PersistableBundle TEST_ROLE_HOLDER_STATE = new PersistableBundle(); 57 private static final String TEST_CALLING_PACKAGE = "test.calling.package"; 58 private static final Bundle TEST_ADDITIONAL_EXTRAS = new Bundle(); 59 private final Context mContext = ApplicationProvider.getApplicationContext(); 60 public static final String TEST_EXTRA_KEY = "test_extra_key"; 61 public static final String TEST_EXTRA_VALUE = "test_extra_value"; 62 private static final Intent MANAGED_PROFILE_INTENT = 63 new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) 64 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); 65 private static final Intent MANAGED_PROFILE_ROLE_HOLDER_INTENT = 66 createManagedProfileRoleHolderIntent(); 67 private static final Intent MANAGED_PROFILE_ROLE_HOLDER_INTENT_WITH_MINIMAL_EXTRAS = 68 createManagedProfileRoleHolderIntentWithMinimalExtras(); 69 private static final Intent PROVISION_TRUSTED_SOURCE_INTENT = 70 new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE) 71 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); 72 private static final Intent PROVISION_TRUSTED_SOURCE_ROLE_HOLDER_INTENT = 73 createTrustedSourceRoleHolderIntent(); 74 private static final Intent PROVISION_TRUSTED_SOURCE_ROLE_HOLDER_INTENT_WITH_MINIMAL_EXTRAS = 75 createTrustedSourceRoleHolderIntentWithMinimalExtras(); 76 private static final Intent FINANCED_DEVICE_INTENT = 77 new Intent(DevicePolicyManager.ACTION_PROVISION_FINANCED_DEVICE) 78 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); 79 private static final Intent PROVISION_FINALIZATION_INTENT = 80 new Intent(DevicePolicyManager.ACTION_PROVISION_FINALIZATION); 81 private static final Intent PROVISION_FINALIZATION_ROLE_HOLDER_INTENT = 82 new Intent(DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_FINALIZATION) 83 .setPackage(ROLE_HOLDER_PACKAGE_NAME); 84 private static final Intent MANAGED_PROVISIONING_INTENT = MANAGED_PROFILE_INTENT; 85 private static final Intent INVALID_MANAGED_PROVISIONING_INTENT = 86 new Intent("action.intent.test"); 87 private Set<String> mRoleHolderHandledIntents; 88 private boolean mCanDelegateProvisioningToRoleHolder; 89 private final FeatureFlagChecker mFeatureFlagChecker = 90 () -> mCanDelegateProvisioningToRoleHolder; 91 92 @Before setUp()93 public void setUp() { 94 enableRoleHolderDelegation(); 95 mRoleHolderHandledIntents = createRoleHolderRequiredIntentActionsSet(); 96 } 97 98 @After tearDown()99 public void tearDown() { 100 disableRoleHolderDelegation(); 101 } 102 103 @Test roleHolderHelperConstructor_roleHolderPackageNameNull_noExceptionThrown()104 public void roleHolderHelperConstructor_roleHolderPackageNameNull_noExceptionThrown() { 105 createRoleHolderHelper(ROLE_HOLDER_NULL_PACKAGE_NAME); 106 } 107 108 @Test roleHolderHelperConstructor_roleHolderPackageNameEmpty_noExceptionThrown()109 public void roleHolderHelperConstructor_roleHolderPackageNameEmpty_noExceptionThrown() { 110 createRoleHolderHelper(ROLE_HOLDER_EMPTY_PACKAGE_NAME); 111 } 112 113 @Test isRoleHolderReadyForProvisioning_works()114 public void isRoleHolderReadyForProvisioning_works() { 115 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 116 117 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 118 mContext, MANAGED_PROVISIONING_INTENT)).isTrue(); 119 } 120 121 @Test isRoleHolderReadyForProvisioning_nullRoleHolderPackageName_isFalse()122 public void isRoleHolderReadyForProvisioning_nullRoleHolderPackageName_isFalse() { 123 DeviceManagementRoleHolderHelper roleHolderHelper = 124 createRoleHolderHelper(ROLE_HOLDER_NULL_PACKAGE_NAME); 125 126 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 127 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 128 } 129 130 @Test isRoleHolderReadyForProvisioning_emptyRoleHolderPackageName_isFalse()131 public void isRoleHolderReadyForProvisioning_emptyRoleHolderPackageName_isFalse() { 132 DeviceManagementRoleHolderHelper roleHolderHelper = 133 createRoleHolderHelper(ROLE_HOLDER_EMPTY_PACKAGE_NAME); 134 135 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 136 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 137 } 138 139 @Test isRoleHolderReadyForProvisioning_roleHolderDelegationDisabled_returnsFalse()140 public void isRoleHolderReadyForProvisioning_roleHolderDelegationDisabled_returnsFalse() { 141 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 142 disableRoleHolderDelegation(); 143 144 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 145 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 146 } 147 148 @Test isRoleHolderReadyForProvisioning_roleHolderNotInstalled_returnsFalse()149 public void isRoleHolderReadyForProvisioning_roleHolderNotInstalled_returnsFalse() { 150 DeviceManagementRoleHolderHelper roleHolderHelper = 151 createRoleHolderHelperWithRoleHolderNotInstalled(); 152 153 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 154 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 155 } 156 157 @Test isRoleHolderReadyForProvisioning_roleHolderStub_returnsFalse()158 public void isRoleHolderReadyForProvisioning_roleHolderStub_returnsFalse() { 159 DeviceManagementRoleHolderHelper roleHolderHelper = 160 createRoleHolderHelperWithStubRoleHolder(); 161 162 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 163 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 164 } 165 166 @Test isRoleHolderReadyForProvisioning_roleHolderInvalid_returnsFalse()167 public void isRoleHolderReadyForProvisioning_roleHolderInvalid_returnsFalse() { 168 DeviceManagementRoleHolderHelper roleHolderHelper = 169 createRoleHolderHelperWithInvalidRoleHolder(); 170 171 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 172 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 173 } 174 175 @Test isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntents_returnsTrue()176 public void isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntents_returnsTrue() { 177 DeviceManagementRoleHolderHelper roleHolderHelper = 178 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 179 mRoleHolderHandledIntents); 180 181 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 182 mContext, MANAGED_PROVISIONING_INTENT)).isTrue(); 183 } 184 185 @Test isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptManagedProfile_returnsFalse()186 public void isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptManagedProfile_returnsFalse() { 187 mRoleHolderHandledIntents.remove( 188 DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_MANAGED_PROFILE); 189 DeviceManagementRoleHolderHelper roleHolderHelper = 190 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 191 mRoleHolderHandledIntents); 192 193 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 194 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 195 } 196 197 @Test isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptTrustedSource_returnsFalse()198 public void isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptTrustedSource_returnsFalse() { 199 mRoleHolderHandledIntents.remove( 200 ACTION_ROLE_HOLDER_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE); 201 DeviceManagementRoleHolderHelper roleHolderHelper = 202 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 203 mRoleHolderHandledIntents); 204 205 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 206 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 207 } 208 209 @Test isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptFinalization_returnsFalse()210 public void isRoleHolderReadyForProvisioning_roleHolderResolvesRequiredIntentsExceptFinalization_returnsFalse() { 211 mRoleHolderHandledIntents.remove( 212 DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_FINALIZATION); 213 DeviceManagementRoleHolderHelper roleHolderHelper = 214 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 215 mRoleHolderHandledIntents); 216 217 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 218 mContext, MANAGED_PROVISIONING_INTENT)).isFalse(); 219 } 220 221 @Test isRoleHolderReadyForProvisioning_provisioningStartedViaManagedProfileIntent_returnsTrue()222 public void isRoleHolderReadyForProvisioning_provisioningStartedViaManagedProfileIntent_returnsTrue() { 223 DeviceManagementRoleHolderHelper roleHolderHelper = 224 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 225 mRoleHolderHandledIntents); 226 227 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 228 mContext, MANAGED_PROFILE_INTENT)).isTrue(); 229 } 230 231 @Test isRoleHolderReadyForProvisioning_provisioningStartedViaTrustedSourceIntent_returnsTrue()232 public void isRoleHolderReadyForProvisioning_provisioningStartedViaTrustedSourceIntent_returnsTrue() { 233 DeviceManagementRoleHolderHelper roleHolderHelper = 234 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 235 mRoleHolderHandledIntents); 236 237 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 238 mContext, PROVISION_TRUSTED_SOURCE_INTENT)).isTrue(); 239 } 240 241 @Test isRoleHolderReadyForProvisioning_provisioningStartedViaFinancedDeviceIntent_returnsFalse()242 public void isRoleHolderReadyForProvisioning_provisioningStartedViaFinancedDeviceIntent_returnsFalse() { 243 DeviceManagementRoleHolderHelper roleHolderHelper = 244 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 245 mRoleHolderHandledIntents); 246 247 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 248 mContext, FINANCED_DEVICE_INTENT)).isFalse(); 249 } 250 251 @Test isRoleHolderReadyForProvisioning_provisioningStartedViaFinalizationIntent_returnsFalse()252 public void isRoleHolderReadyForProvisioning_provisioningStartedViaFinalizationIntent_returnsFalse() { 253 DeviceManagementRoleHolderHelper roleHolderHelper = 254 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 255 mRoleHolderHandledIntents); 256 257 assertThat(roleHolderHelper.isRoleHolderReadyForProvisioning( 258 mContext, PROVISION_FINALIZATION_INTENT)).isFalse(); 259 } 260 261 @Test createRoleHolderProvisioningIntent_invalidProvisioningIntent_throwsException()262 public void createRoleHolderProvisioningIntent_invalidProvisioningIntent_throwsException() { 263 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 264 265 assertThrows(IllegalArgumentException.class, () -> 266 roleHolderHelper.createRoleHolderProvisioningIntent( 267 INVALID_MANAGED_PROVISIONING_INTENT, 268 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 269 )); 270 } 271 272 @Test createRoleHolderProvisioningIntent_managedProfileProvisioningIntent_works()273 public void createRoleHolderProvisioningIntent_managedProfileProvisioningIntent_works() { 274 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 275 276 assertIntentsEqual( 277 roleHolderHelper.createRoleHolderProvisioningIntent( 278 MANAGED_PROFILE_INTENT, 279 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 280 ), 281 MANAGED_PROFILE_ROLE_HOLDER_INTENT); 282 } 283 284 @Test 285 public void createRoleHolderProvisioningIntent_managedProfileProvisioningIntentWithNoStateOrCallingPackage_works()286 createRoleHolderProvisioningIntent_managedProfileProvisioningIntentWithNoStateOrCallingPackage_works() { 287 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 288 289 assertIntentsEqual( 290 roleHolderHelper.createRoleHolderProvisioningIntent( 291 MANAGED_PROFILE_INTENT, 292 /* roleHolderState= */ TEST_ADDITIONAL_EXTRAS, null, null 293 /* callingPackage= */), 294 MANAGED_PROFILE_ROLE_HOLDER_INTENT_WITH_MINIMAL_EXTRAS); 295 } 296 297 @Test createRoleHolderProvisioningIntent_nullRoleHolderPackageName_throwsException()298 public void createRoleHolderProvisioningIntent_nullRoleHolderPackageName_throwsException() { 299 DeviceManagementRoleHolderHelper roleHolderHelper = 300 createRoleHolderHelper(ROLE_HOLDER_NULL_PACKAGE_NAME); 301 302 assertThrows(IllegalStateException.class, () -> 303 roleHolderHelper.createRoleHolderProvisioningIntent( 304 MANAGED_PROFILE_INTENT, 305 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 306 )); 307 } 308 309 @Test createRoleHolderProvisioningIntent_emptyRoleHolderPackageName_throwsException()310 public void createRoleHolderProvisioningIntent_emptyRoleHolderPackageName_throwsException() { 311 DeviceManagementRoleHolderHelper roleHolderHelper = 312 createRoleHolderHelper(ROLE_HOLDER_EMPTY_PACKAGE_NAME); 313 314 assertThrows(IllegalStateException.class, () -> 315 roleHolderHelper.createRoleHolderProvisioningIntent( 316 MANAGED_PROFILE_INTENT, 317 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 318 )); 319 } 320 321 @Test createRoleHolderProvisioningIntent_trustedSourceProvisioningIntent_works()322 public void createRoleHolderProvisioningIntent_trustedSourceProvisioningIntent_works() { 323 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 324 325 assertIntentsEqual( 326 roleHolderHelper.createRoleHolderProvisioningIntent( 327 PROVISION_TRUSTED_SOURCE_INTENT, 328 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 329 ), 330 PROVISION_TRUSTED_SOURCE_ROLE_HOLDER_INTENT); 331 } 332 333 @Test 334 public void createRoleHolderProvisioningIntent_trustedSourceProvisioningIntentWithNoStateOrCallingPackage_works()335 createRoleHolderProvisioningIntent_trustedSourceProvisioningIntentWithNoStateOrCallingPackage_works() { 336 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 337 338 assertIntentsEqual( 339 roleHolderHelper.createRoleHolderProvisioningIntent( 340 PROVISION_TRUSTED_SOURCE_INTENT, 341 /* roleHolderState= */ TEST_ADDITIONAL_EXTRAS, null, null 342 /* callingPackage= */), 343 PROVISION_TRUSTED_SOURCE_ROLE_HOLDER_INTENT_WITH_MINIMAL_EXTRAS); 344 } 345 346 @Test createRoleHolderProvisioningIntent_financedDeviceProvisioningIntent_throwsException()347 public void createRoleHolderProvisioningIntent_financedDeviceProvisioningIntent_throwsException() { 348 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 349 350 assertThrows( 351 IllegalArgumentException.class, 352 () -> roleHolderHelper.createRoleHolderProvisioningIntent( 353 FINANCED_DEVICE_INTENT, 354 TEST_ADDITIONAL_EXTRAS, TEST_CALLING_PACKAGE, TEST_ROLE_HOLDER_STATE 355 )); 356 } 357 358 @Test createRoleHolderFinalizationIntent_works()359 public void createRoleHolderFinalizationIntent_works() { 360 DeviceManagementRoleHolderHelper roleHolderHelper = createRoleHolderHelper(); 361 362 assertIntentsEqual( 363 roleHolderHelper.createRoleHolderFinalizationIntent( 364 /* parentActivityIntent= */ null), 365 PROVISION_FINALIZATION_ROLE_HOLDER_INTENT); 366 } 367 368 @Test createRoleHolderFinalizationIntent_nullRoleHolderPackageName_throwsException()369 public void createRoleHolderFinalizationIntent_nullRoleHolderPackageName_throwsException() { 370 DeviceManagementRoleHolderHelper roleHolderHelper = 371 createRoleHolderHelper(ROLE_HOLDER_NULL_PACKAGE_NAME); 372 373 assertThrows(IllegalStateException.class, 374 () -> roleHolderHelper.createRoleHolderFinalizationIntent( 375 /* parentActivityIntent= */ null)); 376 } 377 378 @Test createRoleHolderFinalizationIntent_emptyRoleHolderPackageName_throwsException()379 public void createRoleHolderFinalizationIntent_emptyRoleHolderPackageName_throwsException() { 380 DeviceManagementRoleHolderHelper roleHolderHelper = 381 createRoleHolderHelper(ROLE_HOLDER_EMPTY_PACKAGE_NAME); 382 383 assertThrows(IllegalStateException.class, 384 () -> roleHolderHelper.createRoleHolderFinalizationIntent( 385 /* parentActivityIntent= */ null)); 386 } 387 388 @Test isRoleHolderProvisioningEnabled_roleHolderConfigured_returnsTrue()389 public void isRoleHolderProvisioningEnabled_roleHolderConfigured_returnsTrue() { 390 DeviceManagementRoleHolderHelper roleHolderHelper = 391 createRoleHolderHelper(ROLE_HOLDER_PACKAGE_NAME); 392 393 assertThat(roleHolderHelper.isRoleHolderProvisioningEnabled()).isTrue(); 394 } 395 396 @Test isRoleHolderProvisioningEnabled_roleHolderNotConfigured_returnsFalse()397 public void isRoleHolderProvisioningEnabled_roleHolderNotConfigured_returnsFalse() { 398 DeviceManagementRoleHolderHelper roleHolderHelper = 399 createRoleHolderHelper(ROLE_HOLDER_EMPTY_PACKAGE_NAME); 400 401 assertThat(roleHolderHelper.isRoleHolderProvisioningEnabled()).isFalse(); 402 } 403 404 @Test isRoleHolderProvisioningEnabled_featureFlagDisabled_returnsFalse()405 public void isRoleHolderProvisioningEnabled_featureFlagDisabled_returnsFalse() { 406 mCanDelegateProvisioningToRoleHolder = false; 407 DeviceManagementRoleHolderHelper roleHolderHelper = 408 createRoleHolderHelper(ROLE_HOLDER_PACKAGE_NAME); 409 410 assertThat(roleHolderHelper.isRoleHolderProvisioningEnabled()).isFalse(); 411 } 412 createRoleHolderHelper()413 private DeviceManagementRoleHolderHelper createRoleHolderHelper() { 414 return new DeviceManagementRoleHolderHelper( 415 ROLE_HOLDER_PACKAGE_NAME, 416 /* packageInstallChecker= */ (roleHolderPackageName) -> true, 417 /* resolveIntentChecker= */ (intent, packageManager) -> true, 418 /* roleHolderStubChecker= */ (packageName, packageManager) -> false, 419 mFeatureFlagChecker); 420 } 421 createRoleHolderHelper( String roleHolderPackageName)422 private DeviceManagementRoleHolderHelper createRoleHolderHelper( 423 String roleHolderPackageName) { 424 return new DeviceManagementRoleHolderHelper( 425 roleHolderPackageName, 426 /* packageInstallChecker= */ (packageName) -> true, 427 /* resolveIntentChecker= */ (intent, packageManager) -> true, 428 /* roleHolderStubChecker= */ (packageName, packageManager) -> false, 429 mFeatureFlagChecker); 430 } 431 createRoleHolderHelperWithRoleHolderNotInstalled()432 private DeviceManagementRoleHolderHelper createRoleHolderHelperWithRoleHolderNotInstalled() { 433 return new DeviceManagementRoleHolderHelper( 434 ROLE_HOLDER_PACKAGE_NAME, 435 /* packageInstallChecker= */ (roleHolderPackageName) -> false, 436 /* resolveIntentChecker= */ (intent, packageManager) -> true, 437 /* roleHolderStubChecker= */ (packageName, packageManager) -> false, 438 mFeatureFlagChecker); 439 } 440 createRoleHolderHelperWithStubRoleHolder()441 private DeviceManagementRoleHolderHelper createRoleHolderHelperWithStubRoleHolder() { 442 return new DeviceManagementRoleHolderHelper( 443 ROLE_HOLDER_PACKAGE_NAME, 444 /* packageInstallChecker= */ (roleHolderPackageName) -> true, 445 /* resolveIntentChecker= */ (intent, packageManager) -> true, 446 /* roleHolderStubChecker= */ (packageName, packageManager) -> true, 447 mFeatureFlagChecker); 448 } 449 createRoleHolderHelperWithInvalidRoleHolder()450 private DeviceManagementRoleHolderHelper createRoleHolderHelperWithInvalidRoleHolder() { 451 // A role holder is considered invalid if it is not able to resolve all the required intents 452 return new DeviceManagementRoleHolderHelper( 453 ROLE_HOLDER_PACKAGE_NAME, 454 /* packageInstallChecker= */ (roleHolderPackageName) -> true, 455 /* resolveIntentChecker= */ (intent, packageManager) -> false, 456 /* roleHolderStubChecker= */ (packageName, packageManager) -> false, 457 mFeatureFlagChecker); 458 } 459 460 private DeviceManagementRoleHolderHelper createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( Set<String> roleHolderHandledIntents)461 createRoleHolderHelperWithRoleHolderResolvesRequiredIntents( 462 Set<String> roleHolderHandledIntents) { 463 // A role holder is considered invalid if it is not able to resolve all the required intents 464 return new DeviceManagementRoleHolderHelper( 465 ROLE_HOLDER_PACKAGE_NAME, 466 /* packageInstallChecker= */ (roleHolderPackageName) -> true, 467 /* resolveIntentChecker= */ (intent, packageManager) -> 468 roleHolderHandledIntents.contains(intent.getAction()), 469 /* roleHolderStubChecker= */ (packageName, packageManager) -> false, 470 mFeatureFlagChecker); 471 } 472 createRoleHolderRequiredIntentActionsSet()473 private static Set<String> createRoleHolderRequiredIntentActionsSet() { 474 Set<String> result = new HashSet<>(); 475 result.add(DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_MANAGED_PROFILE); 476 result.add(ACTION_ROLE_HOLDER_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE); 477 result.add(DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_FINALIZATION); 478 return result; 479 } 480 createManagedProfileRoleHolderIntent()481 private static Intent createManagedProfileRoleHolderIntent() { 482 Intent intent = new Intent(DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_MANAGED_PROFILE) 483 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE) 484 .setPackage(ROLE_HOLDER_PACKAGE_NAME) 485 .putExtra(EXTRA_ROLE_HOLDER_PROVISIONING_INITIATOR_PACKAGE, TEST_CALLING_PACKAGE) 486 .putExtra(EXTRA_ROLE_HOLDER_STATE, TEST_ROLE_HOLDER_STATE); 487 WizardManagerHelper.copyWizardManagerExtras(MANAGED_PROFILE_INTENT, intent); 488 return intent; 489 } 490 createManagedProfileRoleHolderIntentWithMinimalExtras()491 private static Intent createManagedProfileRoleHolderIntentWithMinimalExtras() { 492 Intent intent = new Intent(DevicePolicyManager.ACTION_ROLE_HOLDER_PROVISION_MANAGED_PROFILE) 493 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE) 494 .setPackage(ROLE_HOLDER_PACKAGE_NAME); 495 WizardManagerHelper.copyWizardManagerExtras(MANAGED_PROFILE_INTENT, intent); 496 return intent; 497 } 498 createTrustedSourceRoleHolderIntent()499 private static Intent createTrustedSourceRoleHolderIntent() { 500 Intent intent = new Intent(ACTION_ROLE_HOLDER_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE) 501 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE) 502 .setPackage(ROLE_HOLDER_PACKAGE_NAME) 503 .putExtra(EXTRA_ROLE_HOLDER_PROVISIONING_INITIATOR_PACKAGE, TEST_CALLING_PACKAGE) 504 .putExtra(EXTRA_ROLE_HOLDER_STATE, TEST_ROLE_HOLDER_STATE); 505 WizardManagerHelper.copyWizardManagerExtras(PROVISION_TRUSTED_SOURCE_INTENT, intent); 506 return intent; 507 } 508 createTrustedSourceRoleHolderIntentWithMinimalExtras()509 private static Intent createTrustedSourceRoleHolderIntentWithMinimalExtras() { 510 Intent intent = new Intent(ACTION_ROLE_HOLDER_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE) 511 .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE) 512 .setPackage(ROLE_HOLDER_PACKAGE_NAME); 513 WizardManagerHelper.copyWizardManagerExtras(PROVISION_TRUSTED_SOURCE_INTENT, intent); 514 return intent; 515 } 516 enableRoleHolderDelegation()517 private void enableRoleHolderDelegation() { 518 mCanDelegateProvisioningToRoleHolder = true; 519 } 520 disableRoleHolderDelegation()521 private void disableRoleHolderDelegation() { 522 mCanDelegateProvisioningToRoleHolder = false; 523 } 524 } 525