1 /* 2 * Copyright 2019, 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.model.ProvisioningParams; 23 import com.android.managedprovisioning.task.AbstractProvisioningTask; 24 import com.android.managedprovisioning.task.AddWifiNetworkTask; 25 import com.android.managedprovisioning.task.ConnectMobileNetworkTask; 26 import com.android.managedprovisioning.task.DownloadPackageTask; 27 import com.android.managedprovisioning.task.InstallPackageTask; 28 import com.android.managedprovisioning.task.VerifyPackageTask; 29 30 /** 31 * Controller for preparing admin integrated flow. This includes connecting to wi-fi and 32 * mobile network, downloading, verifying and installing the admin app. 33 */ 34 public class AdminIntegratedFlowPrepareController extends AbstractProvisioningController { 35 AdminIntegratedFlowPrepareController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback)36 public AdminIntegratedFlowPrepareController( 37 Context context, 38 ProvisioningParams params, 39 int userId, 40 ProvisioningControllerCallback callback) { 41 super(context, params, userId, callback); 42 } 43 44 @Override setUpTasks()45 protected void setUpTasks() { 46 if (mParams.wifiInfo != null) { 47 addTasks(new AddWifiNetworkTask(mContext, mParams, this)); 48 } else if (mParams.useMobileData) { 49 addTasks(new ConnectMobileNetworkTask(mContext, mParams, this)); 50 } 51 52 if (mParams.deviceAdminDownloadInfo != null) { 53 DownloadPackageTask downloadTask = new DownloadPackageTask(mContext, mParams, this); 54 addTasks(downloadTask, 55 new VerifyPackageTask(downloadTask, mContext, mParams, this), 56 new InstallPackageTask(downloadTask, mContext, mParams, this)); 57 } 58 } 59 60 @Override getErrorTitle()61 protected int getErrorTitle() { 62 return R.string.cant_set_up_device; 63 } 64 65 @Override getErrorMsgId(AbstractProvisioningTask task, int errorCode)66 protected int getErrorMsgId(AbstractProvisioningTask task, int errorCode) { 67 if (task instanceof AddWifiNetworkTask) { 68 return R.string.error_wifi; 69 } else if (task instanceof DownloadPackageTask) { 70 switch (errorCode) { 71 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED: 72 return R.string.error_download_failed; 73 case DownloadPackageTask.ERROR_OTHER: 74 return R.string.cant_set_up_device; 75 } 76 } else if (task instanceof VerifyPackageTask) { 77 switch (errorCode) { 78 case VerifyPackageTask.ERROR_HASH_MISMATCH: 79 return R.string.error_hash_mismatch; 80 case VerifyPackageTask.ERROR_DEVICE_ADMIN_MISSING: 81 return R.string.error_package_invalid; 82 } 83 } else if (task instanceof InstallPackageTask) { 84 switch (errorCode) { 85 case InstallPackageTask.ERROR_PACKAGE_INVALID: 86 return R.string.error_package_invalid; 87 case InstallPackageTask.ERROR_INSTALLATION_FAILED: 88 return R.string.error_installation_failed; 89 } 90 } 91 92 return R.string.cant_set_up_device; 93 } 94 95 @Override getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)96 protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) { 97 return !(task instanceof AddWifiNetworkTask); 98 } 99 100 @Override performCleanup()101 protected void performCleanup() { 102 // Do nothing, because a factory reset will be triggered. 103 } 104 } 105