/* * Copyright (C) 2021 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 android.app.admin; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.content.pm.PackageManager; import android.util.AndroidException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Thrown to indicate a failure during {@link DevicePolicyManager#provisionFullyManagedDevice} and * {@link DevicePolicyManager#createAndProvisionManagedProfile}. * * @hide * */ @SystemApi public class ProvisioningException extends AndroidException { /** * Service-specific error code for {@link DevicePolicyManager#provisionFullyManagedDevice} and * {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates a generic failure. */ public static final int ERROR_UNKNOWN = 0; /** * Service-specific error code for {@link DevicePolicyManager#provisionFullyManagedDevice} and * {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates the call to {@link DevicePolicyManager#checkProvisioningPrecondition} returned an * error code. */ public static final int ERROR_PRE_CONDITION_FAILED = 1; /** * Service-specific error code for {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates that the profile creation failed. */ public static final int ERROR_PROFILE_CREATION_FAILED = 2; /** * Service-specific error code for {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates the call to {@link PackageManager#installExistingPackageAsUser} has failed. */ public static final int ERROR_ADMIN_PACKAGE_INSTALLATION_FAILED = 3; /** * Service-specific error code for {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates that setting the profile owner failed. */ public static final int ERROR_SETTING_PROFILE_OWNER_FAILED = 4; /** * Service-specific error code for {@link DevicePolicyManager#createAndProvisionManagedProfile}: * Indicates that starting the newly created profile has failed. */ public static final int ERROR_STARTING_PROFILE_FAILED = 5; /** * Service-specific error code for {@link DevicePolicyManager#provisionFullyManagedDevice}: * Indicates that removing the non required apps have failed. */ public static final int ERROR_REMOVE_NON_REQUIRED_APPS_FAILED = 6; /** * Service-specific error code for {@link DevicePolicyManager#provisionFullyManagedDevice}: * Indicates that setting the device owner failed. */ public static final int ERROR_SET_DEVICE_OWNER_FAILED = 7; /** * Service-specific error codes for {@link DevicePolicyManager#createAndProvisionManagedProfile} * and {@link DevicePolicyManager#provisionFullyManagedDevice} indicating all the errors * during provisioning. * * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "ERROR_" }, value = { ERROR_UNKNOWN, ERROR_PRE_CONDITION_FAILED, ERROR_PROFILE_CREATION_FAILED, ERROR_ADMIN_PACKAGE_INSTALLATION_FAILED, ERROR_SETTING_PROFILE_OWNER_FAILED, ERROR_STARTING_PROFILE_FAILED, ERROR_REMOVE_NON_REQUIRED_APPS_FAILED, ERROR_SET_DEVICE_OWNER_FAILED }) public @interface ProvisioningError {} private final @ProvisioningError int mProvisioningError; /** * Constructs a {@link ProvisioningException}. * * @param cause the cause * @param provisioningError the error code */ public ProvisioningException(@NonNull Exception cause, @ProvisioningError int provisioningError) { this(cause, provisioningError, /* errorMessage= */ null); } /** * Constructs a {@link ProvisioningException}. * * @param cause the cause * @param provisioningError the error code * @param errorMessage a {@code String} error message that give a more specific * description of the exception; can be {@code null} */ public ProvisioningException(@NonNull Exception cause, @ProvisioningError int provisioningError, @Nullable String errorMessage) { super(errorMessage, cause); mProvisioningError = provisioningError; } /** * Returns the provisioning error specified at construction time. */ public @ProvisioningError int getProvisioningError() { return mProvisioningError; } }