14b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani/* 24b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Copyright (C) 2011 The Android Open Source Project 34b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * 44b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 54b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * you may not use this file except in compliance with the License. 64b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * You may obtain a copy of the License at 74b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * 84b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 94b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * 104b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Unless required by applicable law or agreed to in writing, software 114b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 124b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * See the License for the specific language governing permissions and 144b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * limitations under the License. 154b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 164b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 174b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasanipackage android.content.pm; 184b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 194b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.Parcel; 204b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.Parcelable; 211a447535cef7e3739d5f763dfe13e568568b9789Kenny Guyimport android.os.SystemProperties; 22b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkeyimport android.os.UserHandle; 237cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chenimport android.os.UserManager; 244b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani/** 264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Per-user information. 274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @hide 284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 294b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasanipublic class UserInfo implements Parcelable { 30258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 31eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani /** 16 bits for user type */ 32eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani public static final int FLAG_MASK_USER_TYPE = 0x0000FFFF; 33258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 344b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 355dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * *************************** NOTE *************************** 365dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * These flag values CAN NOT CHANGE because they are written 375dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * directly to storage. 385dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn */ 395dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn 405dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn /** 4170f6c38644a4a6e28c016c265e6987bf00dd61f1Xiaohui Chen * Primary user. Only one user can have this flag set. It identifies the first human user 4270f6c38644a4a6e28c016c265e6987bf00dd61f1Xiaohui Chen * on a device. 434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_PRIMARY = 0x00000001; 454b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 464b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 474b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * User with administrative privileges. Such a user can create and 484b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * delete users. 494b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 504b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_ADMIN = 0x00000002; 514b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 524b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 534b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Indicates a guest user that may be transient. 544b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 554b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_GUEST = 0x00000004; 564b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 57258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 58258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Indicates the user has restrictions in privileges, in addition to those for normal users. 59258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Exact meaning TBD. For instance, maybe they can't install apps or administer WiFi access pts. 60258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 61258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public static final int FLAG_RESTRICTED = 0x00000008; 62258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 635dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn /** 645dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * Indicates that this user has gone through its first-time initialization. 655dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn */ 665dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn public static final int FLAG_INITIALIZED = 0x00000010; 675dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn 68a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy /** 69a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy * Indicates that this user is a profile of another user, for example holding a users 70a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy * corporate data. 71a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy */ 72a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy public static final int FLAG_MANAGED_PROFILE = 0x00000020; 73a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 74df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina /** 75df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina * Indicates that this user is disabled. 761ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova * 771ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova * <p>Note: If an ephemeral user is disabled, it shouldn't be later re-enabled. Ephemeral users 781ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova * are disabled as their removal is in progress to indicate that they shouldn't be re-entered. 79df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina */ 80df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina public static final int FLAG_DISABLED = 0x00000040; 81df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina 820a29ecd8a53b5ac63b628e870a344650ff34c4b0Rubin Xu public static final int FLAG_QUIET_MODE = 0x00000080; 83a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 84c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova /** 85c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova * Indicates that this user is ephemeral. I.e. the user will be removed after leaving 86c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova * the foreground. 87c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova */ 88c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova public static final int FLAG_EPHEMERAL = 0x00000100; 89c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova 90eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani /** 91eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani * User is for demo purposes only and can be removed at any time. 92eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani */ 93eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani public static final int FLAG_DEMO = 0x00000200; 94eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani 9506a484adb93c6c969321147b07112684383305f6Fyodor Kupolov public static final int NO_PROFILE_GROUP_ID = UserHandle.USER_NULL; 96a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 974b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int id; 982a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int serialNumber; 994b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public String name; 100b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani public String iconPath; 1014b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int flags; 102920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani public long creationTime; 103920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani public long lastLoggedInTime; 104bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey public String lastLoggedInFingerprint; 105d3986be5e40115158cb3e41f251cad41cf08eeabTony Mak /** 106d3986be5e40115158cb3e41f251cad41cf08eeabTony Mak * If this user is a parent user, it would be its own user id. 107d3986be5e40115158cb3e41f251cad41cf08eeabTony Mak * If this user is a child user, it would be its parent user id. 108d3986be5e40115158cb3e41f251cad41cf08eeabTony Mak * Otherwise, it would be {@link #NO_PROFILE_GROUP_ID}. 109d3986be5e40115158cb3e41f251cad41cf08eeabTony Mak */ 1102a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy public int profileGroupId; 11106a484adb93c6c969321147b07112684383305f6Fyodor Kupolov public int restrictedProfileParentId; 11202c8990bd6125f05cb32561727d559dc9327a601Kenny Guy /** Which profile badge color/label to use. */ 11302c8990bd6125f05cb32561727d559dc9327a601Kenny Guy public int profileBadge; 1144b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 115d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn /** User is only partially created. */ 116d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn public boolean partial; 117eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski public boolean guestToRemove; 118d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn 1194b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo(int id, String name, int flags) { 120b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani this(id, name, null, flags); 121b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani } 122b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani 123b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani public UserInfo(int id, String name, String iconPath, int flags) { 1244b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.id = id; 1254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.name = name; 1264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.flags = flags; 127b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani this.iconPath = iconPath; 1282a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy this.profileGroupId = NO_PROFILE_GROUP_ID; 12906a484adb93c6c969321147b07112684383305f6Fyodor Kupolov this.restrictedProfileParentId = NO_PROFILE_GROUP_ID; 1304b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1314b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1324b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isPrimary() { 1334b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_PRIMARY) == FLAG_PRIMARY; 1344b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1354b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1364b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isAdmin() { 1374b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_ADMIN) == FLAG_ADMIN; 1384b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1394b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1404b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isGuest() { 1414b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_GUEST) == FLAG_GUEST; 1424b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 14467df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani public boolean isRestricted() { 14567df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani return (flags & FLAG_RESTRICTED) == FLAG_RESTRICTED; 14667df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani } 14767df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani 148a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy public boolean isManagedProfile() { 149a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE; 150a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy } 151a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 152df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina public boolean isEnabled() { 153df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina return (flags & FLAG_DISABLED) != FLAG_DISABLED; 154df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina } 155df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina 1560a29ecd8a53b5ac63b628e870a344650ff34c4b0Rubin Xu public boolean isQuietModeEnabled() { 1570a29ecd8a53b5ac63b628e870a344650ff34c4b0Rubin Xu return (flags & FLAG_QUIET_MODE) == FLAG_QUIET_MODE; 1580a29ecd8a53b5ac63b628e870a344650ff34c4b0Rubin Xu } 159c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova 160c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova public boolean isEphemeral() { 161c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova return (flags & FLAG_EPHEMERAL) == FLAG_EPHEMERAL; 162c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova } 163c4dd021322d38ea32ac49930e904b6d08ce6490cLenka Trochtova 16412747879b0204b9dfee997eddc981d09289e8b77Amith Yamasani public boolean isInitialized() { 16512747879b0204b9dfee997eddc981d09289e8b77Amith Yamasani return (flags & FLAG_INITIALIZED) == FLAG_INITIALIZED; 16612747879b0204b9dfee997eddc981d09289e8b77Amith Yamasani } 167eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani 168eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani public boolean isDemo() { 169eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani return (flags & FLAG_DEMO) == FLAG_DEMO; 170eb437d4dffb310857e19bb619778dc5b6b7febffAmith Yamasani } 17112747879b0204b9dfee997eddc981d09289e8b77Amith Yamasani 1721a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy /** 1737db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov * Returns true if the user is a split system user. 1747db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov * <p>If {@link UserManager#isSplitSystemUser split system user mode} is not enabled, 1757db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov * the method always returns false. 1767db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov */ 1777db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov public boolean isSystemOnly() { 178a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen return isSystemOnly(id); 179a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen } 180a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen 181a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen /** 182a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen * Returns true if the given user is a split system user. 183a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen * <p>If {@link UserManager#isSplitSystemUser split system user mode} is not enabled, 184a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen * the method always returns false. 185a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen */ 186a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen public static boolean isSystemOnly(int userId) { 187a4490622207804ef85f39439ff7b9cb2470f6287Xiaohui Chen return userId == UserHandle.USER_SYSTEM && UserManager.isSplitSystemUser(); 1887db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov } 1897db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov 1907db5af124e551554f7a2f1abdd2a486c937910feFyodor Kupolov /** 1911a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy * @return true if this user can be switched to. 1921a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy **/ 1931a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy public boolean supportsSwitchTo() { 1941ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova if (isEphemeral() && !isEnabled()) { 1951ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova // Don't support switching to an ephemeral user with removal in progress. 1961ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova return false; 1971ddda4793c26fd249590fd3549cf060ecb7c157bLenka Trochtova } 198434a74f5589844987048cf51e05cc20e5321a2a2Robin Lee return !isManagedProfile(); 1991a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy } 2001a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy 2017cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen /** 2027cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen * @return true if this user can be switched to by end user through UI. 2037cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen */ 2047cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen public boolean supportsSwitchToByUser() { 2057cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen // Hide the system user when it does not represent a human user. 2067cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen boolean hideSystemUser = UserManager.isSplitSystemUser(); 2077cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen return (!hideSystemUser || id != UserHandle.USER_SYSTEM) && supportsSwitchTo(); 2087cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen } 2097cb69df507f5f7956c52a2868a0d6e89aec6dde2Xiaohui Chen 210b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot /* @hide */ 211b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot public boolean canHaveProfile() { 212b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot if (isManagedProfile() || isGuest() || isRestricted()) { 213b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot return false; 214b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot } 215b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot if (UserManager.isSplitSystemUser()) { 216b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot return id != UserHandle.USER_SYSTEM; 217bd0e03bb763ae7956ecba35fe5759d4b443158caXiaohui Chen } else { 218bd0e03bb763ae7956ecba35fe5759d4b443158caXiaohui Chen return id == UserHandle.USER_SYSTEM; 219b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot } 220b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot } 221b818681dcae157412b897587ff856cd0c531c3f4Nicolas Prevot 2224b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo() { 2234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2244b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 2254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo(UserInfo orig) { 2264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani name = orig.name; 227b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani iconPath = orig.iconPath; 2284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani id = orig.id; 2294b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani flags = orig.flags; 2302a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani serialNumber = orig.serialNumber; 231920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani creationTime = orig.creationTime; 232920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani lastLoggedInTime = orig.lastLoggedInTime; 233bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey lastLoggedInFingerprint = orig.lastLoggedInFingerprint; 234d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn partial = orig.partial; 2352a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy profileGroupId = orig.profileGroupId; 2366f48d6ef35df55e092d18619fe1f92a2593682d4Amith Yamasani restrictedProfileParentId = orig.restrictedProfileParentId; 237eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski guestToRemove = orig.guestToRemove; 23802c8990bd6125f05cb32561727d559dc9327a601Kenny Guy profileBadge = orig.profileBadge; 2394b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2404b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 241b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public UserHandle getUserHandle() { 242b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return new UserHandle(id); 243b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 244b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 2454b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani @Override 2464b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public String toString() { 2470b285499db739ba50f2f839d633e763c70e67f96Amith Yamasani return "UserInfo{" + id + ":" + name + ":" + Integer.toHexString(flags) + "}"; 2484b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2494b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 2504b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int describeContents() { 2514b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return 0; 2524b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2534b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 2544b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public void writeToParcel(Parcel dest, int parcelableFlags) { 2554b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeInt(id); 2564b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeString(name); 257b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani dest.writeString(iconPath); 2584b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeInt(flags); 2592a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani dest.writeInt(serialNumber); 260920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani dest.writeLong(creationTime); 261920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani dest.writeLong(lastLoggedInTime); 262bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey dest.writeString(lastLoggedInFingerprint); 263d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn dest.writeInt(partial ? 1 : 0); 2642a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy dest.writeInt(profileGroupId); 265eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski dest.writeInt(guestToRemove ? 1 : 0); 26606a484adb93c6c969321147b07112684383305f6Fyodor Kupolov dest.writeInt(restrictedProfileParentId); 26702c8990bd6125f05cb32561727d559dc9327a601Kenny Guy dest.writeInt(profileBadge); 2684b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2694b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 2704b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final Parcelable.Creator<UserInfo> CREATOR 2714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani = new Parcelable.Creator<UserInfo>() { 2724b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo createFromParcel(Parcel source) { 2734b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return new UserInfo(source); 2744b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2754b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo[] newArray(int size) { 2764b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return new UserInfo[size]; 2774b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2784b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani }; 2794b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 2804b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani private UserInfo(Parcel source) { 2814b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani id = source.readInt(); 2824b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani name = source.readString(); 283b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani iconPath = source.readString(); 2844b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani flags = source.readInt(); 2852a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani serialNumber = source.readInt(); 286920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani creationTime = source.readLong(); 287920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani lastLoggedInTime = source.readLong(); 288bd91e2f3f6aca512a02be645b2515b5e3331e177Jeff Sharkey lastLoggedInFingerprint = source.readString(); 289d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn partial = source.readInt() != 0; 2902a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy profileGroupId = source.readInt(); 291eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski guestToRemove = source.readInt() != 0; 29206a484adb93c6c969321147b07112684383305f6Fyodor Kupolov restrictedProfileParentId = source.readInt(); 29302c8990bd6125f05cb32561727d559dc9327a601Kenny Guy profileBadge = source.readInt(); 2944b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2954b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani} 296