• 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 import android.os.UserHandle;
21 
22 import com.android.internal.annotations.VisibleForTesting;
23 import com.android.managedprovisioning.R;
24 import com.android.managedprovisioning.finalization.FinalizationController;
25 import com.android.managedprovisioning.model.ProvisioningParams;
26 import com.android.managedprovisioning.task.AbstractProvisioningTask;
27 import com.android.managedprovisioning.task.AddWifiNetworkTask;
28 import com.android.managedprovisioning.task.ConnectMobileNetworkTask;
29 import com.android.managedprovisioning.task.CopyAccountToUserTask;
30 import com.android.managedprovisioning.task.DeleteNonRequiredAppsTask;
31 import com.android.managedprovisioning.task.DeviceOwnerInitializeProvisioningTask;
32 import com.android.managedprovisioning.task.DisallowAddUserTask;
33 import com.android.managedprovisioning.task.DownloadPackageTask;
34 import com.android.managedprovisioning.task.InstallPackageTask;
35 import com.android.managedprovisioning.task.SetDevicePolicyTask;
36 import com.android.managedprovisioning.task.VerifyPackageTask;
37 
38 /**
39  * Controller for Device Owner provisioning.
40  */
41 public class DeviceOwnerProvisioningController extends AbstractProvisioningController {
42 
DeviceOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback)43     public DeviceOwnerProvisioningController(
44             Context context,
45             ProvisioningParams params,
46             int userId,
47             ProvisioningControllerCallback callback) {
48         this(context, params, userId, callback, new FinalizationController(context));
49     }
50 
51     @VisibleForTesting
DeviceOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback, FinalizationController finalizationController)52     DeviceOwnerProvisioningController(
53             Context context,
54             ProvisioningParams params,
55             int userId,
56             ProvisioningControllerCallback callback,
57             FinalizationController finalizationController) {
58         super(context, params, userId, callback, finalizationController);
59     }
60 
setUpTasks()61     protected void setUpTasks() {
62         addTasks(new DeviceOwnerInitializeProvisioningTask(mContext, mParams, this));
63 
64         if (mParams.wifiInfo != null) {
65             addTasks(new AddWifiNetworkTask(mContext, mParams, this));
66         } else if (mParams.useMobileData) {
67             addTasks(new ConnectMobileNetworkTask(mContext, mParams, this));
68         }
69 
70         if (mParams.deviceAdminDownloadInfo != null) {
71             DownloadPackageTask downloadTask = new DownloadPackageTask(mContext, mParams, this);
72             addTasks(downloadTask,
73                     new VerifyPackageTask(downloadTask, mContext, mParams, this),
74                     new InstallPackageTask(downloadTask, mContext, mParams, this));
75         }
76 
77         addTasks(
78                 new DeleteNonRequiredAppsTask(true /* new profile */, mContext, mParams, this),
79                 new SetDevicePolicyTask(mContext, mParams, this),
80                 new DisallowAddUserTask(mContext, mParams, this)
81         );
82 
83         if (mParams.accountToMigrate != null) {
84             addTasks(new CopyAccountToUserTask(UserHandle.USER_SYSTEM, mContext, mParams, this));
85         }
86     }
87 
getErrorTitle()88     @Override protected int getErrorTitle() {
89         return R.string.cant_set_up_device;
90     }
91 
92     @Override
getErrorMsgId(AbstractProvisioningTask task, int errorCode)93     protected int getErrorMsgId(AbstractProvisioningTask task, int errorCode) {
94         if (task instanceof AddWifiNetworkTask) {
95             return R.string.device_owner_error_wifi;
96         } else if (task instanceof DownloadPackageTask) {
97             switch (errorCode) {
98                 case DownloadPackageTask.ERROR_DOWNLOAD_FAILED:
99                     return R.string.device_owner_error_download_failed;
100                 case DownloadPackageTask.ERROR_OTHER:
101                     return R.string.cant_set_up_device;
102             }
103         } else if (task instanceof VerifyPackageTask) {
104             switch (errorCode) {
105                 case VerifyPackageTask.ERROR_HASH_MISMATCH:
106                     return R.string.device_owner_error_hash_mismatch;
107                 case VerifyPackageTask.ERROR_DEVICE_ADMIN_MISSING:
108                     return R.string.device_owner_error_package_invalid;
109             }
110         } else if (task instanceof InstallPackageTask) {
111             switch (errorCode) {
112                 case InstallPackageTask.ERROR_PACKAGE_INVALID:
113                     return R.string.device_owner_error_package_invalid;
114                 case InstallPackageTask.ERROR_INSTALLATION_FAILED:
115                     return R.string.device_owner_error_installation_failed;
116             }
117         }
118 
119         return R.string.cant_set_up_device;
120     }
121 
122     @Override
getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)123     protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) {
124         return !((task instanceof AddWifiNetworkTask)
125                 || (task instanceof DeviceOwnerInitializeProvisioningTask));
126     }
127 
128     @Override
performCleanup()129     protected void performCleanup() {
130         // Do nothing, because a factory reset will be triggered.
131     }
132 }
133