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