1068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki/*
2ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov * Copyright (C) 2016 The Android Open Source Project
3068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki *
4068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
5068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * you may not use this file except in compliance with the License.
6068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * You may obtain a copy of the License at
7068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki *
8068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
9068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki *
10068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * Unless required by applicable law or agreed to in writing, software
11068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
12068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * See the License for the specific language governing permissions and
14ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov * limitations under the License
15068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki */
16068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onukipackage android.os;
17068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki
181a2cd74526113b45d9108b6997609122c4311fb1Makoto Onukiimport android.annotation.NonNull;
191a2cd74526113b45d9108b6997609122c4311fb1Makoto Onukiimport android.annotation.Nullable;
20e9c440638e27a123a82feb5e4677ce1242785288phweissimport android.content.pm.UserInfo;
217f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyiimport android.graphics.Bitmap;
221a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki
23068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki/**
24068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki * @hide Only for use within the system server.
25068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki */
26068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onukipublic abstract class UserManagerInternal {
27d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    public interface UserRestrictionsListener {
28d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki        /**
29d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         * Called when a user restriction changes.
30d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         *
31d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         * @param userId target user id
32d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         * @param newRestrictions new user restrictions
33d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         * @param prevRestrictions user restrictions that were previously set
34d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki         */
35d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki        void onUserRestrictionsChanged(int userId, Bundle newRestrictions, Bundle prevRestrictions);
36d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    }
37d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki
38068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki    /**
391a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService}
401a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     * to set per-user as well as global user restrictions.
41068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     *
421a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     * @param userId target user id for the local restrictions.
431a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     * @param localRestrictions per-user restrictions.
441a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     *     Caller must not change it once passed to this method.
451a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     * @param globalRestrictions global restrictions set by DO.  Must be null when PO changed user
461a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     *     restrictions, in which case global restrictions won't change.
471a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki     *     Caller must not change it once passed to this method.
48068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     */
491a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki    public abstract void setDevicePolicyUserRestrictions(int userId,
501a2cd74526113b45d9108b6997609122c4311fb1Makoto Onuki            @NonNull Bundle localRestrictions, @Nullable Bundle globalRestrictions);
51068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki    /**
52068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     * Returns the "base" user restrictions.
53068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     *
54068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     * Used by {@link com.android.server.devicepolicy.DevicePolicyManagerService} for upgrading
55068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     * from MNC.
56068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     */
57068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki    public abstract Bundle getBaseUserRestrictions(int userId);
58068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki
59068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki    /**
60068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} for upgrading
61068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     * from MNC.
62068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki     */
63068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki    public abstract void setBaseUserRestrictionsByDpmsForMigration(int userId,
64068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki            Bundle baseRestrictions);
65d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki
66d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    /** Return a user restriction. */
67d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    public abstract boolean getUserRestriction(int userId, String key);
68d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki
69d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    /** Adds a listener to user restriction changes. */
70d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    public abstract void addUserRestrictionsListener(UserRestrictionsListener listener);
71d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki
72d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    /** Remove a {@link UserRestrictionsListener}. */
73d45a4a2ecb18701b4cfadcb4a26663f2eab642feMakoto Onuki    public abstract void removeUserRestrictionsListener(UserRestrictionsListener listener);
74e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki
75e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki    /**
76e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} to update
77e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     * whether the device is managed by device owner.
78e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     */
79e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki    public abstract void setDeviceManaged(boolean isManaged);
80e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki
81e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki    /**
82e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} to update
83e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     * whether the user is managed by profile owner.
84e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki     */
85e7927da1b6dc4f96714aa9bc4fbb71b3659f8ceaMakoto Onuki    public abstract void setUserManaged(int userId, boolean isManaged);
867f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi
877f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi    /**
887f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} to omit
897f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     * restriction check, because DevicePolicyManager must always be able to set user icon
907f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     * regardless of any restriction.
917f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     * Also called by {@link com.android.server.pm.UserManagerService} because the logic of setting
927f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     * the icon is in this method.
937f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi     */
947f1f1dfc8713fbecbab60cfbe14ab4d97d27deeeOleksandr Peletskyi    public abstract void setUserIcon(int userId, Bitmap bitmap);
95f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova
96f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova    /**
97f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} to inform the
98f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * user manager whether all users should be created ephemeral.
99f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     */
100f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova    public abstract void setForceEphemeralUsers(boolean forceEphemeralUsers);
101f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova
102f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova    /**
103f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * Switches to the system user and deletes all other users.
104f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     *
105f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * <p>Called by the {@link com.android.server.devicepolicy.DevicePolicyManagerService} when
106f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * the force-ephemeral-users policy is toggled on to make sure there are no pre-existing
107f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     * non-ephemeral users left.
108f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova     */
109f348e8e22bed4b56fdb0c02702d12b36467dedd7Lenka Trochtova    public abstract void removeAllUsers();
110e9c440638e27a123a82feb5e4677ce1242785288phweiss
111e9c440638e27a123a82feb5e4677ce1242785288phweiss    /**
1121ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     * Called by the activity manager when the ephemeral user goes to background and its removal
1131ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     * starts as a result.
1141ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     *
1151ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     * <p>It marks the ephemeral user as disabled in order to prevent it from being re-entered
1161ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     * before its removal finishes.
1171ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     *
1181ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     * @param userId the ID of the ephemeral user.
1191ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova     */
1201ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova    public abstract void onEphemeralUserStop(int userId);
1211ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova
1221ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova    /**
123e9c440638e27a123a82feb5e4677ce1242785288phweiss     * Same as UserManager.createUser(), but bypasses the check for DISALLOW_ADD_USER.
124e9c440638e27a123a82feb5e4677ce1242785288phweiss     *
125e9c440638e27a123a82feb5e4677ce1242785288phweiss     * <p>Called by the {@link com.android.server.devicepolicy.DevicePolicyManagerService} when
126e9c440638e27a123a82feb5e4677ce1242785288phweiss     * createAndManageUser is called by the device owner.
127e9c440638e27a123a82feb5e4677ce1242785288phweiss     */
128e9c440638e27a123a82feb5e4677ce1242785288phweiss    public abstract UserInfo createUserEvenWhenDisallowed(String name, int flags);
1296c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov
1306c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov    /**
1316c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov     * Return whether the given user is running in an
132ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     * {@code UserState.STATE_RUNNING_UNLOCKING} or
133ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     * {@code UserState.STATE_RUNNING_UNLOCKED} state.
1346c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov     */
1356c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov    public abstract boolean isUserUnlockingOrUnlocked(int userId);
1366c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov
1376c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov    /**
138ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     * Return whether the given user is running
1396c915ead38db0a2a6393c40d4fbac959399439c5Fyodor Kupolov     */
140ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov    public abstract boolean isUserRunning(int userId);
141ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov
142ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov    /**
143ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     * Set user's running state
144ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     */
145ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov    public abstract void setUserState(int userId, int userState);
146ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov
147ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov    /**
148ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     * Remove user's running state
149ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov     */
150ac06a4907bff7d5ee0612dbb85180222e1455791Fyodor Kupolov    public abstract void removeUserState(int userId);
151068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki}
152