• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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