• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.VerifyAdminPackageTask;
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 String getErrorMsgId(AbstractProvisioningTask task, int errorCode) {
88         if (task instanceof AddWifiNetworkTask) {
89             return mContext.getString(R.string.error_wifi);
90         } else if (task instanceof DownloadPackageTask) {
91             switch (errorCode) {
92                 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED:
93                     return mContext.getString(R.string.error_download_failed);
94                 case DownloadPackageTask.ERROR_OTHER:
95                     return mContext.getString(R.string.cant_set_up_device);
96             }
97         } else if (task instanceof VerifyAdminPackageTask) {
98             switch (errorCode) {
99                 case VerifyAdminPackageTask.ERROR_HASH_MISMATCH:
100                     return mContext.getString(R.string.error_hash_mismatch);
101                 case VerifyAdminPackageTask.ERROR_DEVICE_ADMIN_MISSING:
102                     return mContext.getString(R.string.error_package_invalid);
103             }
104         } else if (task instanceof InstallPackageTask) {
105             switch (errorCode) {
106                 case InstallPackageTask.ERROR_PACKAGE_INVALID:
107                     return mContext.getString(R.string.error_package_invalid);
108                 case InstallPackageTask.ERROR_INSTALLATION_FAILED:
109                     return mContext.getString(R.string.error_installation_failed);
110             }
111         } else if (task instanceof ProvisionFullyManagedDeviceTask) {
112             switch (errorCode) {
113                 case ProvisionFullyManagedDeviceTask.ERROR_FULLY_MANAGED_MODE_UNSUPPORTED_IN_HEADLESS:
114                     return mContext.getString(R.string.fully_managed_device_unsupported_DPC_in_headless_mode_subheader);
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 !(task instanceof AddWifiNetworkTask);
124     }
125 }
126