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