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 21 import com.android.managedprovisioning.R; 22 import com.android.managedprovisioning.common.Utils; 23 import com.android.managedprovisioning.model.ProvisioningParams; 24 import com.android.managedprovisioning.task.AbstractProvisioningTask; 25 import com.android.managedprovisioning.task.AddWifiNetworkTask; 26 import com.android.managedprovisioning.task.ConnectMobileNetworkTask; 27 import com.android.managedprovisioning.task.DownloadPackageTask; 28 import com.android.managedprovisioning.task.InstallPackageTask; 29 import com.android.managedprovisioning.task.ProvisionFullyManagedDeviceTask; 30 import com.android.managedprovisioning.task.VerifyPackageTask; 31 32 /** 33 * Controller for Device Owner provisioning. 34 */ 35 public class DeviceOwnerProvisioningController extends AbstractProvisioningController { 36 37 private Utils mUtils; 38 39 /** 40 * Instantiates a new {@link DeviceOwnerProvisioningController} instance and creates the 41 * relevant tasks. 42 * 43 * @return the newly created instance 44 */ createInstance( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback, Utils utils)45 static DeviceOwnerProvisioningController createInstance( 46 Context context, 47 ProvisioningParams params, 48 int userId, 49 ProvisioningControllerCallback callback, 50 Utils utils) { 51 DeviceOwnerProvisioningController controller = 52 new DeviceOwnerProvisioningController(context, params, userId, callback); 53 controller.mUtils = utils; 54 controller.setUpTasks(); 55 return controller; 56 } 57 DeviceOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback)58 private DeviceOwnerProvisioningController( 59 Context context, 60 ProvisioningParams params, 61 int userId, 62 ProvisioningControllerCallback callback) { 63 super(context, params, userId, callback); 64 } 65 setUpTasks()66 protected void setUpTasks() { 67 // If the admin-integrated flow preconditions aren't met, then the admin app was not 68 // installed as part of the admin-integrated flow preparation. 69 // We must install the admin app here instead. 70 if (!mUtils.checkAdminIntegratedFlowPreconditions(mParams)) { 71 if (mParams.wifiInfo != null) { 72 addTasks(new AddWifiNetworkTask(mContext, mParams, this)); 73 } else if (mParams.useMobileData) { 74 addTasks(new ConnectMobileNetworkTask(mContext, mParams, this)); 75 } 76 77 addDownloadAndInstallDeviceOwnerPackageTasks(); 78 } 79 addTasks(new ProvisionFullyManagedDeviceTask(mContext, mParams, this)); 80 } 81 getErrorTitle()82 @Override protected int getErrorTitle() { 83 return R.string.cant_set_up_device; 84 } 85 86 @Override getErrorMsgId(AbstractProvisioningTask task, int errorCode)87 protected int getErrorMsgId(AbstractProvisioningTask task, int errorCode) { 88 if (task instanceof AddWifiNetworkTask) { 89 return R.string.error_wifi; 90 } else if (task instanceof DownloadPackageTask) { 91 switch (errorCode) { 92 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED: 93 return R.string.error_download_failed; 94 case DownloadPackageTask.ERROR_OTHER: 95 return R.string.cant_set_up_device; 96 } 97 } else if (task instanceof VerifyPackageTask) { 98 switch (errorCode) { 99 case VerifyPackageTask.ERROR_HASH_MISMATCH: 100 return R.string.error_hash_mismatch; 101 case VerifyPackageTask.ERROR_DEVICE_ADMIN_MISSING: 102 return R.string.error_package_invalid; 103 } 104 } else if (task instanceof InstallPackageTask) { 105 switch (errorCode) { 106 case InstallPackageTask.ERROR_PACKAGE_INVALID: 107 return R.string.error_package_invalid; 108 case InstallPackageTask.ERROR_INSTALLATION_FAILED: 109 return R.string.error_installation_failed; 110 } 111 } 112 113 return R.string.cant_set_up_device; 114 } 115 116 @Override getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)117 protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) { 118 return !(task instanceof AddWifiNetworkTask); 119 } 120 } 121