• 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 static java.util.Objects.requireNonNull;
20 
21 import android.content.Context;
22 
23 import com.android.managedprovisioning.R;
24 import com.android.managedprovisioning.common.SettingsFacade;
25 import com.android.managedprovisioning.common.Utils;
26 import com.android.managedprovisioning.model.ProvisioningParams;
27 import com.android.managedprovisioning.task.AbstractProvisioningTask;
28 import com.android.managedprovisioning.task.AddWifiNetworkTask;
29 import com.android.managedprovisioning.task.ConnectMobileNetworkTask;
30 import com.android.managedprovisioning.task.DownloadPackageTask;
31 import com.android.managedprovisioning.task.InstallPackageTask;
32 import com.android.managedprovisioning.task.VerifyAdminPackageTask;
33 
34 /**
35  * Controller for preparing admin integrated flow. This includes connecting to wi-fi and
36  * mobile network, downloading, verifying and installing the admin app.
37  */
38 public class AdminIntegratedFlowPrepareController extends AbstractProvisioningController {
39 
40     private final Utils mUtils;
41     private final SettingsFacade mSettingsFacade;
42 
43     /**
44      * Instantiates a new {@link AdminIntegratedFlowPrepareController} instance and creates the
45      * relevant tasks.
46      *
47      * @return the newly created instance
48      */
createInstance( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback, Utils utils, SettingsFacade settingsFacade)49     static AdminIntegratedFlowPrepareController createInstance(
50             Context context,
51             ProvisioningParams params,
52             int userId,
53             ProvisioningControllerCallback callback,
54             Utils utils,
55             SettingsFacade settingsFacade) {
56         AdminIntegratedFlowPrepareController controller =
57                 new AdminIntegratedFlowPrepareController(
58                         context, params, userId, callback, utils, settingsFacade);
59         controller.setUpTasks();
60         return controller;
61     }
62 
AdminIntegratedFlowPrepareController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback, Utils utils, SettingsFacade settingsFacade)63     private AdminIntegratedFlowPrepareController(
64             Context context,
65             ProvisioningParams params,
66             int userId,
67             ProvisioningControllerCallback callback,
68             Utils utils,
69             SettingsFacade settingsFacade) {
70         super(context, params, userId, callback);
71         mUtils = requireNonNull(utils);
72         mSettingsFacade = requireNonNull(settingsFacade);
73     }
74 
75     @Override
setUpTasks()76     protected void setUpTasks() {
77         if (mParams.wifiInfo != null) {
78             addTasks(new AddWifiNetworkTask(mContext, mParams, this));
79         } else if (mParams.useMobileData) {
80             addTasks(new ConnectMobileNetworkTask(mContext, mParams, this));
81         }
82 
83         addDownloadAndInstallDeviceOwnerPackageTasks();
84     }
85 
86     @Override
getErrorTitle()87     protected int getErrorTitle() {
88         return R.string.cant_set_up_device;
89     }
90 
91     @Override
getErrorMsgId(AbstractProvisioningTask task, int errorCode)92     protected String getErrorMsgId(AbstractProvisioningTask task, int errorCode) {
93         if (task instanceof AddWifiNetworkTask) {
94             return mContext.getString(R.string.error_wifi);
95         } else if (task instanceof DownloadPackageTask) {
96             switch (errorCode) {
97                 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED:
98                     return mContext.getString(R.string.error_download_failed);
99                 case DownloadPackageTask.ERROR_OTHER:
100                     return mContext.getString(R.string.cant_set_up_device);
101             }
102         } else if (task instanceof VerifyAdminPackageTask) {
103             switch (errorCode) {
104                 case VerifyAdminPackageTask.ERROR_HASH_MISMATCH:
105                     return mContext.getString(R.string.error_hash_mismatch);
106                 case VerifyAdminPackageTask.ERROR_DEVICE_ADMIN_MISSING:
107                     return mContext.getString(R.string.error_package_invalid);
108             }
109         } else if (task instanceof InstallPackageTask) {
110             switch (errorCode) {
111                 case InstallPackageTask.ERROR_PACKAGE_INVALID:
112                     return mContext.getString(R.string.error_package_invalid);
113                 case InstallPackageTask.ERROR_INSTALLATION_FAILED:
114                     return mContext.getString(R.string.error_installation_failed);
115             }
116         }
117 
118         return mContext.getString(R.string.cant_set_up_device);
119     }
120 
121     @Override
getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)122     protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) {
123         return !mSettingsFacade.isDeviceProvisioned(mContext)
124                 && mUtils.isOrganizationOwnedAllowed(mParams)
125                 && !(task instanceof AddWifiNetworkTask);
126     }
127 }
128