• 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 static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
20 
21 import android.content.Context;
22 import android.os.UserManager;
23 
24 import com.android.managedprovisioning.R;
25 import com.android.managedprovisioning.common.ProvisionLogger;
26 import com.android.managedprovisioning.model.ProvisioningParams;
27 import com.android.managedprovisioning.task.AbstractProvisioningTask;
28 import com.android.managedprovisioning.task.CopyAccountToUserTask;
29 import com.android.managedprovisioning.task.CreateManagedProfileTask;
30 import com.android.managedprovisioning.task.DeleteNonRequiredAppsTask;
31 import com.android.managedprovisioning.task.DisableInstallShortcutListenersTask;
32 import com.android.managedprovisioning.task.InstallExistingPackageTask;
33 import com.android.managedprovisioning.task.ManagedProfileSettingsTask;
34 import com.android.managedprovisioning.task.SetDevicePolicyTask;
35 import com.android.managedprovisioning.task.StartManagedProfileTask;
36 
37 /**
38  * Controller for Profile Owner provisioning.
39  */
40 // TODO: Consider splitting this controller into one for managed profile and one for user owner
41 public class ProfileOwnerProvisioningController extends AbstractProvisioningController {
42     private final int mParentUserId;
43 
ProfileOwnerProvisioningController( Context context, ProvisioningParams params, int userId, ProvisioningControllerCallback callback)44     public ProfileOwnerProvisioningController(
45             Context context,
46             ProvisioningParams params,
47             int userId,
48             ProvisioningControllerCallback callback) {
49         super(context, params, userId, callback);
50         mParentUserId = userId;
51     }
52 
setUpTasks()53     protected void setUpTasks() {
54         if (ACTION_PROVISION_MANAGED_PROFILE.equals(mParams.provisioningAction)) {
55             setUpTasksManagedProfile();
56         } else {
57             setUpTasksManagedUser();
58         }
59     }
60 
setUpTasksManagedProfile()61     private void setUpTasksManagedProfile() {
62         addTasks(
63                 new CreateManagedProfileTask(mContext, mParams, this),
64                 new InstallExistingPackageTask(mParams.inferDeviceAdminPackageName(), mContext,
65                         mParams, this),
66                 new SetDevicePolicyTask(mContext, mParams, this),
67                 new ManagedProfileSettingsTask(mContext, mParams, this),
68                 new DisableInstallShortcutListenersTask(mContext, mParams, this),
69                 new StartManagedProfileTask(mContext, mParams, this),
70                 new CopyAccountToUserTask(mParentUserId, mContext, mParams, this));
71     }
72 
setUpTasksManagedUser()73     private void setUpTasksManagedUser() {
74         addTasks(
75                 new DeleteNonRequiredAppsTask(true /* new profile */, mContext, mParams, this),
76                 new InstallExistingPackageTask(mParams.inferDeviceAdminPackageName(), mContext,
77                         mParams, this),
78                 new SetDevicePolicyTask(mContext, mParams, this));
79     }
80 
81     @Override
onSuccess(AbstractProvisioningTask task)82     public synchronized void onSuccess(AbstractProvisioningTask task) {
83         if (task instanceof CreateManagedProfileTask) {
84             // If the task was creating a managed profile, store the profile id
85             mUserId = ((CreateManagedProfileTask) task).getProfileUserId();
86         }
87         super.onSuccess(task);
88     }
89 
90     @Override
performCleanup()91     protected void performCleanup() {
92         if (ACTION_PROVISION_MANAGED_PROFILE.equals(mParams.provisioningAction)
93                 && mCurrentTaskIndex != 0) {
94             ProvisionLogger.logd("Removing managed profile");
95             UserManager um = mContext.getSystemService(UserManager.class);
96             um.removeUserEvenWhenDisallowed(mUserId);
97         }
98     }
99 
getErrorTitle()100     @Override protected int getErrorTitle() {
101         return R.string.cant_set_up_profile;
102     }
103 
104     @Override
getErrorMsgId(AbstractProvisioningTask task, int errorCode)105     protected int getErrorMsgId(AbstractProvisioningTask task, int errorCode) {
106         return R.string.managed_provisioning_error_text;
107     }
108 
109     @Override
getRequireFactoryReset(AbstractProvisioningTask task, int errorCode)110     protected boolean getRequireFactoryReset(AbstractProvisioningTask task, int errorCode) {
111         if (mParams.isOrganizationOwnedProvisioning) {
112             // Do factory reset if any error occurs during PO provisioning in the admin
113             // integrated flow.
114             return true;
115         } else {
116             return false;
117         }
118     }
119 }
120