1 /* 2 * Copyright 2016, 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.provisioning; 18 19 import android.content.Context; 20 import android.os.UserHandle; 21 22 import com.android.internal.annotations.VisibleForTesting; 23 import com.android.managedprovisioning.R; 24 import com.android.managedprovisioning.finalization.FinalizationController; 25 import com.android.managedprovisioning.model.ProvisioningParams; 26 import com.android.managedprovisioning.task.AbstractProvisioningTask; 27 import com.android.managedprovisioning.task.AddWifiNetworkTask; 28 import com.android.managedprovisioning.task.ConnectMobileNetworkTask; 29 import com.android.managedprovisioning.task.CopyAccountToUserTask; 30 import com.android.managedprovisioning.task.DeleteNonRequiredAppsTask; 31 import com.android.managedprovisioning.task.DeviceOwnerInitializeProvisioningTask; 32 import com.android.managedprovisioning.task.DisallowAddUserTask; 33 import com.android.managedprovisioning.task.DownloadPackageTask; 34 import com.android.managedprovisioning.task.InstallPackageTask; 35 import com.android.managedprovisioning.task.SetDevicePolicyTask; 36 import com.android.managedprovisioning.task.VerifyPackageTask; 37 38 /** 39 * Controller for Device Owner provisioning. 40 */ 41 public class DeviceOwnerProvisioningController extends AbstractProvisioningController { 42 DeviceOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback)43 public DeviceOwnerProvisioningController( 44 Context context, 45 ProvisioningParams params, 46 int userId, 47 ProvisioningControllerCallback callback) { 48 this(context, params, userId, callback, new FinalizationController(context)); 49 } 50 51 @VisibleForTesting DeviceOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback, FinalizationController finalizationController)52 DeviceOwnerProvisioningController( 53 Context context, 54 ProvisioningParams params, 55 int userId, 56 ProvisioningControllerCallback callback, 57 FinalizationController finalizationController) { 58 super(context, params, userId, callback, finalizationController); 59 } 60 setUpTasks()61 protected void setUpTasks() { 62 addTasks(new DeviceOwnerInitializeProvisioningTask(mContext, mParams, this)); 63 64 if (mParams.wifiInfo != null) { 65 addTasks(new AddWifiNetworkTask(mContext, mParams, this)); 66 } else if (mParams.useMobileData) { 67 addTasks(new ConnectMobileNetworkTask(mContext, mParams, this)); 68 } 69 70 if (mParams.deviceAdminDownloadInfo != null) { 71 DownloadPackageTask downloadTask = new DownloadPackageTask(mContext, mParams, this); 72 addTasks(downloadTask, 73 new VerifyPackageTask(downloadTask, mContext, mParams, this), 74 new InstallPackageTask(downloadTask, mContext, mParams, this)); 75 } 76 77 addTasks( 78 new DeleteNonRequiredAppsTask(true /* new profile */, mContext, mParams, this), 79 new SetDevicePolicyTask(mContext, mParams, this), 80 new DisallowAddUserTask(mContext, mParams, this) 81 ); 82 83 if (mParams.accountToMigrate != null) { 84 addTasks(new CopyAccountToUserTask(UserHandle.USER_SYSTEM, mContext, mParams, this)); 85 } 86 } 87 getErrorTitle()88 @Override protected int getErrorTitle() { 89 return R.string.cant_set_up_device; 90 } 91 92 @Override getErrorMsgId(AbstractProvisioningTask task, int errorCode)93 protected int getErrorMsgId(AbstractProvisioningTask task, int errorCode) { 94 if (task instanceof AddWifiNetworkTask) { 95 return R.string.device_owner_error_wifi; 96 } else if (task instanceof DownloadPackageTask) { 97 switch (errorCode) { 98 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED: 99 return R.string.device_owner_error_download_failed; 100 case DownloadPackageTask.ERROR_OTHER: 101 return R.string.cant_set_up_device; 102 } 103 } else if (task instanceof VerifyPackageTask) { 104 switch (errorCode) { 105 case VerifyPackageTask.ERROR_HASH_MISMATCH: 106 return R.string.device_owner_error_hash_mismatch; 107 case VerifyPackageTask.ERROR_DEVICE_ADMIN_MISSING: 108 return R.string.device_owner_error_package_invalid; 109 } 110 } else if (task instanceof InstallPackageTask) { 111 switch (errorCode) { 112 case InstallPackageTask.ERROR_PACKAGE_INVALID: 113 return R.string.device_owner_error_package_invalid; 114 case InstallPackageTask.ERROR_INSTALLATION_FAILED: 115 return R.string.device_owner_error_installation_failed; 116 } 117 } 118 119 return R.string.cant_set_up_device; 120 } 121 122 @Override getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)123 protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) { 124 return !((task instanceof AddWifiNetworkTask) 125 || (task instanceof DeviceOwnerInitializeProvisioningTask)); 126 } 127 128 @Override performCleanup()129 protected void performCleanup() { 130 // Do nothing, because a factory reset will be triggered. 131 } 132 } 133