• 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.EXTRA_FORCE_UPDATE_ROLE_HOLDER;
20  import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TRIGGER;
21  
22  import static com.android.managedprovisioning.TestUtils.assertIntentsEqual;
23  
24  import static com.google.common.truth.Truth.assertThat;
25  
26  import static org.junit.Assert.assertThrows;
27  
28  import android.app.admin.DevicePolicyManager;
29  import android.content.ComponentName;
30  import android.content.Context;
31  import android.content.Intent;
32  
33  import androidx.test.core.app.ApplicationProvider;
34  import androidx.test.filters.SmallTest;
35  
36  import com.android.managedprovisioning.model.PackageDownloadInfo;
37  import com.android.managedprovisioning.model.ProvisioningParams;
38  
39  import org.junit.Before;
40  import org.junit.Test;
41  import org.junit.runner.RunWith;
42  import org.junit.runners.JUnit4;
43  
44  
45  @SmallTest
46  @RunWith(JUnit4.class)
47  public class DeviceManagementRoleHolderUpdaterHelperTest {
48  
49      private static final String ROLE_HOLDER_UPDATER_PACKAGE_NAME = "com.test.updater.package";
50      private static final String ROLE_HOLDER_PACKAGE_NAME = "com.test.roleholder.package";
51      private static final String ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME = "";
52      private static final String ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME = null;
53      private static final String ROLE_HOLDER_EMPTY_PACKAGE_NAME = "";
54      private static final String ROLE_HOLDER_NULL_PACKAGE_NAME = null;
55      private static final int TEST_PROVISIONING_TRIGGER =
56              DevicePolicyManager.PROVISIONING_TRIGGER_QR_CODE;
57      private static final Intent ROLE_HOLDER_UPDATER_INTENT =
58              new Intent(DevicePolicyManager.ACTION_UPDATE_DEVICE_POLICY_MANAGEMENT_ROLE_HOLDER)
59                      .setPackage(ROLE_HOLDER_UPDATER_PACKAGE_NAME)
60                      .putExtra(EXTRA_PROVISIONING_TRIGGER, TEST_PROVISIONING_TRIGGER)
61                      .putExtra(EXTRA_FORCE_UPDATE_ROLE_HOLDER, false);
62      private static final Intent ROLE_HOLDER_UPDATER_INTENT_WITH_FORCE_UPDATE =
63              new Intent(DevicePolicyManager.ACTION_UPDATE_DEVICE_POLICY_MANAGEMENT_ROLE_HOLDER)
64                      .setPackage(ROLE_HOLDER_UPDATER_PACKAGE_NAME)
65                      .putExtra(EXTRA_FORCE_UPDATE_ROLE_HOLDER, true)
66                      .putExtra(EXTRA_PROVISIONING_TRIGGER, TEST_PROVISIONING_TRIGGER);
67      public static final String TEST_EXTRA_KEY = "test_extra_key";
68      public static final String TEST_EXTRA_VALUE = "test_extra_value";
69      private static final Intent MANAGED_PROFILE_INTENT =
70              new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)
71                      .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE);
72      private static final Intent FINANCED_DEVICE_INTENT =
73              new Intent(DevicePolicyManager.ACTION_PROVISION_FINANCED_DEVICE)
74                      .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE);
75      private static final Intent PROVISION_TRUSTED_SOURCE_INTENT =
76              new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE)
77                      .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE);
78      private static final Intent MANAGED_PROVISIONING_INTENT = MANAGED_PROFILE_INTENT;
79      private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver");
80      private static final ProvisioningParams PARAMS = ProvisioningParams.Builder.builder()
81              .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)
82              .setDeviceAdminComponentName(ADMIN)
83              .build();
84      private static final String TEST_DOWNLOAD_LOCATION =
85              "http://example/dpc.apk";
86      private static final String TEST_COOKIE_HEADER =
87              "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT";
88      private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' };
89      private static final PackageDownloadInfo ROLE_HOLDER_DOWNLOAD_INFO =
90              PackageDownloadInfo.Builder.builder()
91                      .setLocation(TEST_DOWNLOAD_LOCATION)
92                      .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM)
93                      .setCookieHeader(TEST_COOKIE_HEADER)
94                      .build();
95      private static final ProvisioningParams PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO =
96              ProvisioningParams.Builder.builder()
97                      .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)
98                      .setDeviceAdminComponentName(ADMIN)
99                      .setRoleHolderDownloadInfo(ROLE_HOLDER_DOWNLOAD_INFO)
100                      .build();
101  
102      private final Context mContext = ApplicationProvider.getApplicationContext();
103      private boolean mCanDelegateProvisioningToRoleHolder;
104  
105      @Before
setUp()106      public void setUp() {
107          enableRoleHolderDelegation();
108      }
109  
110      @Test
roleHolderHelperConstructor_roleHolderPackageNameNull_noExceptionThrown()111      public void roleHolderHelperConstructor_roleHolderPackageNameNull_noExceptionThrown() {
112          createRoleHolderUpdaterHelperWithUpdaterPackageName(ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME);
113      }
114  
115      @Test
roleHolderHelperConstructor_roleHolderPackageNameEmpty_noExceptionThrown()116      public void roleHolderHelperConstructor_roleHolderPackageNameEmpty_noExceptionThrown() {
117          createRoleHolderUpdaterHelperWithUpdaterPackageName(ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME);
118      }
119  
120      @Test
shouldStartRoleHolderUpdater_works()121      public void shouldStartRoleHolderUpdater_works() {
122          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
123                  createRoleHolderUpdaterHelper();
124  
125          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
126                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isTrue();
127      }
128  
129      @Test
shouldStartRoleHolderUpdater_managedProfileIntent_works()130      public void shouldStartRoleHolderUpdater_managedProfileIntent_works() {
131          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
132                  createRoleHolderUpdaterHelper();
133  
134          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
135                  mContext, MANAGED_PROFILE_INTENT, PARAMS)).isTrue();
136      }
137  
138      @Test
shouldStartRoleHolderUpdater_trustedSourceIntent_works()139      public void shouldStartRoleHolderUpdater_trustedSourceIntent_works() {
140          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
141                  createRoleHolderUpdaterHelper();
142  
143          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
144                  mContext, PROVISION_TRUSTED_SOURCE_INTENT, PARAMS)).isTrue();
145      }
146  
147      @Test
shouldStartRoleHolderUpdater_financedDeviceIntent_returnsFalse()148      public void shouldStartRoleHolderUpdater_financedDeviceIntent_returnsFalse() {
149          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
150                  createRoleHolderUpdaterHelper();
151  
152          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
153                  mContext, FINANCED_DEVICE_INTENT, PARAMS)).isFalse();
154      }
155  
156      @Test
shouldStartRoleHolderUpdater_nullRoleHolderPackageName_returnsFalse()157      public void shouldStartRoleHolderUpdater_nullRoleHolderPackageName_returnsFalse() {
158          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
159                  createRoleHolderUpdaterHelperWithRoleHolderPackageName(
160                          ROLE_HOLDER_NULL_PACKAGE_NAME);
161  
162          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
163                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
164      }
165  
166      @Test
shouldStartRoleHolderUpdater_emptyRoleHolderPackageName_returnsFalse()167      public void shouldStartRoleHolderUpdater_emptyRoleHolderPackageName_returnsFalse() {
168          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
169                  createRoleHolderUpdaterHelperWithRoleHolderPackageName(
170                          ROLE_HOLDER_EMPTY_PACKAGE_NAME);
171  
172          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
173                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
174      }
175  
176      @Test
shouldStartRoleHolderUpdater_nullRoleHolderUpdaterPackageName_returnsFalse()177      public void shouldStartRoleHolderUpdater_nullRoleHolderUpdaterPackageName_returnsFalse() {
178          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
179                  createRoleHolderUpdaterHelperWithUpdaterPackageName(
180                          ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME);
181  
182          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
183                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
184      }
185  
186      @Test
shouldStartRoleHolderUpdater_emptyRoleHolderUpdaterPackageName_returnsFalse()187      public void shouldStartRoleHolderUpdater_emptyRoleHolderUpdaterPackageName_returnsFalse() {
188          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
189                  createRoleHolderUpdaterHelperWithUpdaterPackageName(
190                          ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME);
191  
192          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
193                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
194      }
195  
196      @Test
shouldStartRoleHolderUpdater_roleHolderDelegationDisabled_returnsFalse()197      public void shouldStartRoleHolderUpdater_roleHolderDelegationDisabled_returnsFalse() {
198          disableRoleHolderDelegation();
199          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
200                  createRoleHolderUpdaterHelper();
201  
202          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
203                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
204      }
205  
206      @Test
shouldStartRoleHolderUpdater_roleHolderUpdaterNotInstalled_returnsFalse()207      public void shouldStartRoleHolderUpdater_roleHolderUpdaterNotInstalled_returnsFalse() {
208          disableRoleHolderDelegation();
209          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
210                  createRoleHolderUpdaterHelperWithUpdaterNotInstalled();
211  
212          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
213                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
214      }
215  
216      @Test
shouldStartRoleHolderUpdater_roleHolderUpdaterNotResolvable_returnsFalse()217      public void shouldStartRoleHolderUpdater_roleHolderUpdaterNotResolvable_returnsFalse() {
218          disableRoleHolderDelegation();
219          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
220                  createRoleHolderUpdaterHelperWithUpdaterNotResolvable();
221  
222          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
223                  mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse();
224      }
225  
226      @Test
shouldStartRoleHolderUpdater_withRoleHolderDownloadInfo_returnsFalse()227      public void shouldStartRoleHolderUpdater_withRoleHolderDownloadInfo_returnsFalse() {
228          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
229                  createRoleHolderUpdaterHelper();
230  
231          assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater(
232                  mContext, PROVISION_TRUSTED_SOURCE_INTENT,
233                  PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
234      }
235  
236      @Test
createRoleHolderUpdaterIntent_works()237      public void createRoleHolderUpdaterIntent_works() {
238          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
239                  createRoleHolderUpdaterHelper();
240  
241          assertIntentsEqual(
242                  roleHolderUpdaterHelper.createRoleHolderUpdaterIntent(
243                          /* parentActivityIntent= */ null,
244                          TEST_PROVISIONING_TRIGGER,
245                          /* isRoleHolderRequestedUpdate= */ false),
246                  ROLE_HOLDER_UPDATER_INTENT);
247      }
248  
249      @Test
createRoleHolderUpdaterIntent_withForceUpdate_works()250      public void createRoleHolderUpdaterIntent_withForceUpdate_works() {
251          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
252                  createRoleHolderUpdaterHelper();
253  
254          assertIntentsEqual(
255                  roleHolderUpdaterHelper.createRoleHolderUpdaterIntent(
256                          /* parentActivityIntent= */ null,
257                          TEST_PROVISIONING_TRIGGER,
258                          /* isRoleHolderRequestedUpdate= */ true),
259                  ROLE_HOLDER_UPDATER_INTENT_WITH_FORCE_UPDATE);
260      }
261  
262      @Test
createRoleHolderUpdaterIntent_nullRoleHolderUpdaterPackageName_throwsException()263      public void createRoleHolderUpdaterIntent_nullRoleHolderUpdaterPackageName_throwsException() {
264          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
265                  createRoleHolderUpdaterHelperWithUpdaterPackageName(
266                          ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME);
267  
268          assertThrows(IllegalStateException.class,
269                  () -> roleHolderUpdaterHelper.createRoleHolderUpdaterIntent(
270                          /* parentActivityIntent= */ null,
271                          TEST_PROVISIONING_TRIGGER,
272                          /* isRoleHolderRequestedUpdate= */ false));
273      }
274  
275      @Test
createRoleHolderUpdaterIntent_emptyRoleHolderUpdaterPackageName_throwsException()276      public void createRoleHolderUpdaterIntent_emptyRoleHolderUpdaterPackageName_throwsException() {
277          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
278                  createRoleHolderUpdaterHelperWithUpdaterPackageName(
279                          ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME);
280  
281          assertThrows(IllegalStateException.class,
282                  () -> roleHolderUpdaterHelper.createRoleHolderUpdaterIntent(
283                          /* parentActivityIntent= */ null,
284                          TEST_PROVISIONING_TRIGGER,
285                          /* isRoleHolderRequestedUpdate= */ false));
286      }
287  
288      @Test
shouldPlatformDownloadRoleHolder_works()289      public void shouldPlatformDownloadRoleHolder_works() {
290          enableRoleHolderDelegation();
291          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
292                  createRoleHolderUpdaterHelper();
293  
294          assertThat(roleHolderUpdaterHelper
295                  .shouldPlatformDownloadRoleHolder(
296                          PROVISION_TRUSTED_SOURCE_INTENT,
297                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isTrue();
298      }
299  
300      @Test
shouldPlatformDownloadRoleHolder_noRoleHolderDownloadInfoSupplied_returnsFalse()301      public void shouldPlatformDownloadRoleHolder_noRoleHolderDownloadInfoSupplied_returnsFalse() {
302          enableRoleHolderDelegation();
303          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
304                  createRoleHolderUpdaterHelper();
305  
306          assertThat(roleHolderUpdaterHelper
307                  .shouldPlatformDownloadRoleHolder(PROVISION_TRUSTED_SOURCE_INTENT, PARAMS))
308                          .isFalse();
309      }
310  
311      @Test
shouldPlatformDownloadRoleHolder_managedProfileIntent_returnsFalse()312      public void shouldPlatformDownloadRoleHolder_managedProfileIntent_returnsFalse() {
313          enableRoleHolderDelegation();
314          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
315                  createRoleHolderUpdaterHelper();
316  
317          assertThat(roleHolderUpdaterHelper
318                  .shouldPlatformDownloadRoleHolder(
319                          MANAGED_PROFILE_INTENT,
320                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
321      }
322  
323      @Test
shouldPlatformDownloadRoleHolder_financedDeviceIntent_returnsFalse()324      public void shouldPlatformDownloadRoleHolder_financedDeviceIntent_returnsFalse() {
325          enableRoleHolderDelegation();
326          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
327                  createRoleHolderUpdaterHelper();
328  
329          assertThat(roleHolderUpdaterHelper
330                  .shouldPlatformDownloadRoleHolder(
331                          FINANCED_DEVICE_INTENT,
332                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
333      }
334  
335      @Test
shouldPlatformDownloadRoleHolder_featureFlagDisabled_returnsFalse()336      public void shouldPlatformDownloadRoleHolder_featureFlagDisabled_returnsFalse() {
337          disableRoleHolderDelegation();
338          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
339                  createRoleHolderUpdaterHelper();
340  
341          assertThat(roleHolderUpdaterHelper
342                  .shouldPlatformDownloadRoleHolder(
343                          PROVISION_TRUSTED_SOURCE_INTENT,
344                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
345      }
346  
347      @Test
shouldPlatformDownloadRoleHolder_emptyRoleHolderPackage_returnsFalse()348      public void shouldPlatformDownloadRoleHolder_emptyRoleHolderPackage_returnsFalse() {
349          disableRoleHolderDelegation();
350          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
351                  createRoleHolderUpdaterHelperWithRoleHolderPackageName(
352                          ROLE_HOLDER_EMPTY_PACKAGE_NAME);
353  
354          assertThat(roleHolderUpdaterHelper
355                  .shouldPlatformDownloadRoleHolder(
356                          PROVISION_TRUSTED_SOURCE_INTENT,
357                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
358      }
359  
360      @Test
shouldPlatformDownloadRoleHolder_nullRoleHolderPackage_returnsFalse()361      public void shouldPlatformDownloadRoleHolder_nullRoleHolderPackage_returnsFalse() {
362          disableRoleHolderDelegation();
363          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
364                  createRoleHolderUpdaterHelperWithRoleHolderPackageName(
365                          ROLE_HOLDER_NULL_PACKAGE_NAME);
366  
367          assertThat(roleHolderUpdaterHelper
368                  .shouldPlatformDownloadRoleHolder(
369                          PROVISION_TRUSTED_SOURCE_INTENT,
370                          PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse();
371      }
372  
373      @Test
isRoleHolderUpdaterDefined_actuallyDefined_returnsTrue()374      public void isRoleHolderUpdaterDefined_actuallyDefined_returnsTrue() {
375          enableRoleHolderDelegation();
376          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
377                  createRoleHolderUpdaterHelper();
378  
379          assertThat(roleHolderUpdaterHelper.isRoleHolderUpdaterDefined()).isTrue();
380      }
381  
382      @Test
isRoleHolderUpdaterDefined_actuallyNotDefined_returnsFalse()383      public void isRoleHolderUpdaterDefined_actuallyNotDefined_returnsFalse() {
384          enableRoleHolderDelegation();
385          DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper =
386                  createRoleHolderUpdaterHelperWithUpdaterPackageName(
387                          ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME);
388  
389          assertThat(roleHolderUpdaterHelper.isRoleHolderUpdaterDefined()).isFalse();
390      }
391  
createFeatureFlagChecker()392      private FeatureFlagChecker createFeatureFlagChecker() {
393          return () -> mCanDelegateProvisioningToRoleHolder;
394      }
395  
396      private DeviceManagementRoleHolderUpdaterHelper
createRoleHolderUpdaterHelperWithUpdaterPackageName( String packageName)397      createRoleHolderUpdaterHelperWithUpdaterPackageName(
398              String packageName) {
399          return new DeviceManagementRoleHolderUpdaterHelper(
400                  packageName,
401                  ROLE_HOLDER_PACKAGE_NAME,
402                  /* packageInstallChecker= */ (roleHolderPackageName) -> true,
403                  /* intentResolverChecker= */ (intent) -> true,
404                  createFeatureFlagChecker());
405      }
406  
407      private DeviceManagementRoleHolderUpdaterHelper
createRoleHolderUpdaterHelperWithRoleHolderPackageName( String roleHolderPackageName)408      createRoleHolderUpdaterHelperWithRoleHolderPackageName(
409              String roleHolderPackageName) {
410          return new DeviceManagementRoleHolderUpdaterHelper(
411                  ROLE_HOLDER_UPDATER_PACKAGE_NAME,
412                  roleHolderPackageName,
413                  /* packageInstallChecker= */ (packageName) -> true,
414                  /* intentResolverChecker= */ (intent) -> true,
415                  createFeatureFlagChecker());
416      }
417  
createRoleHolderUpdaterHelper()418      private DeviceManagementRoleHolderUpdaterHelper createRoleHolderUpdaterHelper() {
419          return new DeviceManagementRoleHolderUpdaterHelper(
420                  ROLE_HOLDER_UPDATER_PACKAGE_NAME,
421                  ROLE_HOLDER_PACKAGE_NAME,
422                  /* packageInstallChecker= */ (roleHolderPackageName) -> true,
423                  /* intentResolverChecker= */ (intent) -> true,
424                  createFeatureFlagChecker());
425      }
426  
427      private DeviceManagementRoleHolderUpdaterHelper
createRoleHolderUpdaterHelperWithUpdaterNotInstalled()428              createRoleHolderUpdaterHelperWithUpdaterNotInstalled() {
429          return new DeviceManagementRoleHolderUpdaterHelper(
430                  ROLE_HOLDER_UPDATER_PACKAGE_NAME,
431                  ROLE_HOLDER_PACKAGE_NAME,
432                  /* packageInstallChecker= */ (roleHolderPackageName) -> false,
433                  /* intentResolverChecker= */ (intent) -> true,
434                  createFeatureFlagChecker());
435      }
436  
437      private DeviceManagementRoleHolderUpdaterHelper
createRoleHolderUpdaterHelperWithUpdaterNotResolvable()438              createRoleHolderUpdaterHelperWithUpdaterNotResolvable() {
439          return new DeviceManagementRoleHolderUpdaterHelper(
440                  ROLE_HOLDER_UPDATER_PACKAGE_NAME,
441                  ROLE_HOLDER_PACKAGE_NAME,
442                  /* packageInstallChecker= */ (roleHolderPackageName) -> true,
443                  /* intentResolverChecker= */ (intent) -> false,
444                  createFeatureFlagChecker());
445      }
446  
enableRoleHolderDelegation()447      private void enableRoleHolderDelegation() {
448          mCanDelegateProvisioningToRoleHolder = true;
449      }
450  
disableRoleHolderDelegation()451      private void disableRoleHolderDelegation() {
452          mCanDelegateProvisioningToRoleHolder = false;
453      }
454  }
455