| /* |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.managedprovisioning.common; |
| |
| import static android.app.admin.DevicePolicyManager.ACTION_GET_PROVISIONING_MODE; |
| |
| import android.app.Activity; |
| import android.app.admin.DevicePolicyManager; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.os.Bundle; |
| |
| import com.android.managedprovisioning.model.ProvisioningParams; |
| |
| import com.google.android.setupcompat.util.WizardManagerHelper; |
| |
| /** |
| * A utility class for checking for the existence of and starting DPC's activity with intent filter |
| * with action {@link DevicePolicyManager#ACTION_GET_PROVISIONING_MODE}. |
| */ |
| public class GetProvisioningModeUtils { |
| |
| /** |
| * Returns {@code true} if the DPC has an intent filter with action {@link |
| * DevicePolicyManager#ACTION_GET_PROVISIONING_MODE}. |
| */ |
| public boolean isGetProvisioningModeActivityResolvable( |
| Context context, ProvisioningParams params) { |
| return getGetProvisioningModeIntent(params) |
| .resolveActivity(context.getPackageManager()) != null; |
| } |
| |
| /** |
| * Starts the DPC activity with action @link DevicePolicyManager#ACTION_GET_PROVISIONING_MODE}, |
| * if one exists. |
| * |
| * @param parentActivity the activity which starts the DPC screen |
| * @param params the {@link ProvisioningParams} used for provisioning |
| * @param additionalExtras a bundle of additional extras to be included for the DPC to read |
| * @param requestCode the request code to be used when started by {@code parentActivity} |
| * @return {@code true} if the activity was successfully started |
| */ |
| public boolean startGetProvisioningModeActivityIfResolved( |
| Activity parentActivity, ProvisioningParams params, Bundle additionalExtras, |
| int requestCode, TransitionHelper transitionHelper) { |
| if (!isGetProvisioningModeActivityResolvable(parentActivity, params)) { |
| return false; |
| } |
| Intent getProvisioningModeIntent = getGetProvisioningModeIntent(params); |
| getProvisioningModeIntent.putExtras(additionalExtras); |
| if (parentActivity.getIntent() != null) { |
| WizardManagerHelper.copyWizardManagerExtras( |
| parentActivity.getIntent(), getProvisioningModeIntent); |
| } |
| transitionHelper.startActivityForResultWithTransition( |
| parentActivity, getProvisioningModeIntent, requestCode); |
| return true; |
| } |
| |
| private Intent getGetProvisioningModeIntent(ProvisioningParams params) { |
| final Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); |
| intentGetMode.setPackage(params.inferDeviceAdminPackageName()); |
| return intentGetMode; |
| } |
| } |