• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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