17ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway/* 27ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * Copyright 2015, The Android Open Source Project 37ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * 47ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * Licensed under the Apache License, Version 2.0 (the "License"); 57ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * you may not use this file except in compliance with the License. 67ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * You may obtain a copy of the License at 77ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * 87ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * http://www.apache.org/licenses/LICENSE-2.0 97ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * 107ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * Unless required by applicable law or agreed to in writing, software 117ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * distributed under the License is distributed on an "AS IS" BASIS, 127ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * See the License for the specific language governing permissions and 147ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * limitations under the License. 157ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway */ 167ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 177ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadwaypackage com.android.managedprovisioning.task; 187ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 199df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport android.content.Context; 207ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadwayimport android.content.pm.UserInfo; 217ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadwayimport android.os.UserHandle; 227ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadwayimport android.os.UserManager; 237ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 249df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport com.android.internal.annotations.VisibleForTesting; 25f7a9eea8fe577f2f5edbbe6e73891a54351286c6Benjamin Franzimport com.android.managedprovisioning.common.ProvisionLogger; 269df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport com.android.managedprovisioning.R; 279df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 287ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 297ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway/** 307ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway * Disables user addition for all users on the device. 317ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway */ 329df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzpublic class DisallowAddUserTask extends AbstractProvisioningTask { 337ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway private final boolean mIsSplitSystemUser; 349df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz private final UserManager mUserManager; 359df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 369df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public DisallowAddUserTask( 379df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Context context, 389df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz ProvisioningParams params, 399df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Callback callback) { 409df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz this(UserManager.isSplitSystemUser(), context, params, callback); 419df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz } 427ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 439df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz @VisibleForTesting 449df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz DisallowAddUserTask(boolean splitSystemUser, 459df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Context context, 469df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz ProvisioningParams params, 479df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Callback callback) { 489df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz super(context, params, callback); 499df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz mIsSplitSystemUser = splitSystemUser; 509df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 517ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway } 527ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway 539df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz @Override 549df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public void run(int userId) { 559df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 569df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz if (mIsSplitSystemUser && (userId == UserHandle.USER_SYSTEM)) { 577ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway ProvisionLogger.logi("Not setting DISALLOW_ADD_USER as system device-owner detected."); 589df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz success(); 597ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway return; 607ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway } 619df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 627ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway for (UserInfo userInfo : mUserManager.getUsers()) { 637ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway UserHandle userHandle = userInfo.getUserHandle(); 647ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER, userHandle)) { 657ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway mUserManager.setUserRestriction(UserManager.DISALLOW_ADD_USER, true, userHandle); 667ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway ProvisionLogger.logi("DISALLOW_ADD_USER restriction set on user: " + userInfo.id); 677ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway } 687ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway } 699df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz success(); 709df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz } 719df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 729df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz @Override 739df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public int getStatusMsgId() { 749df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz return R.string.progress_finishing_touches; 757ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway } 767ca687ff36936e45d27bb8c901239c146e5c8971Alan Treadway} 77