blob: db0135313739ddc60e52c19b2a0fb4586a95d9ac [file]
/*
* 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;
}
}