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; 234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 244b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani/** 254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Per-user information. 264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @hide 274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasanipublic class UserInfo implements Parcelable { 29258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 30df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina /** 8 bits for user type */ 31df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina public static final int FLAG_MASK_USER_TYPE = 0x000000FF; 32258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 334b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 345dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * *************************** NOTE *************************** 355dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * These flag values CAN NOT CHANGE because they are written 365dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * directly to storage. 375dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn */ 385dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn 395dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn /** 404b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Primary user. Only one user can have this flag set. Meaning of this 414b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * flag TBD. 424b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_PRIMARY = 0x00000001; 444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 454b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 464b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * User with administrative privileges. Such a user can create and 474b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * delete users. 484b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 494b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_ADMIN = 0x00000002; 504b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 514b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 524b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Indicates a guest user that may be transient. 534b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 544b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final int FLAG_GUEST = 0x00000004; 554b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 56258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 57258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Indicates the user has restrictions in privileges, in addition to those for normal users. 58258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Exact meaning TBD. For instance, maybe they can't install apps or administer WiFi access pts. 59258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 60258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public static final int FLAG_RESTRICTED = 0x00000008; 61258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 625dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn /** 635dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn * Indicates that this user has gone through its first-time initialization. 645dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn */ 655dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn public static final int FLAG_INITIALIZED = 0x00000010; 665dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn 67a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy /** 68a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy * Indicates that this user is a profile of another user, for example holding a users 69a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy * corporate data. 70a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy */ 71a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy public static final int FLAG_MANAGED_PROFILE = 0x00000020; 72a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 73df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina /** 74df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina * Indicates that this user is disabled. 75df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina */ 76df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina public static final int FLAG_DISABLED = 0x00000040; 77df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina 78a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 792a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy public static final int NO_PROFILE_GROUP_ID = -1; 80a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 814b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int id; 822a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int serialNumber; 834b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public String name; 84b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani public String iconPath; 854b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int flags; 86920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani public long creationTime; 87920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani public long lastLoggedInTime; 882a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy public int profileGroupId; 894b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 90d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn /** User is only partially created. */ 91d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn public boolean partial; 92eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski public boolean guestToRemove; 93d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn 944b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo(int id, String name, int flags) { 95b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani this(id, name, null, flags); 96b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani } 97b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani 98b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani public UserInfo(int id, String name, String iconPath, int flags) { 994b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.id = id; 1004b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.name = name; 1014b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani this.flags = flags; 102b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani this.iconPath = iconPath; 1032a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy this.profileGroupId = NO_PROFILE_GROUP_ID; 1044b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1054b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1064b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isPrimary() { 1074b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_PRIMARY) == FLAG_PRIMARY; 1084b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1094b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1104b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isAdmin() { 1114b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_ADMIN) == FLAG_ADMIN; 1124b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1134b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1144b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean isGuest() { 1154b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return (flags & FLAG_GUEST) == FLAG_GUEST; 1164b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1174b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 11867df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani public boolean isRestricted() { 11967df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani return (flags & FLAG_RESTRICTED) == FLAG_RESTRICTED; 12067df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani } 12167df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani 122a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy public boolean isManagedProfile() { 123a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE; 124a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy } 125a52dc3eb40777b055c0ca8d7885bd2c9577bcd1aKenny Guy 126df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina public boolean isEnabled() { 127df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina return (flags & FLAG_DISABLED) != FLAG_DISABLED; 128df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina } 129df35d570ed25257c6782e632ab1bae5e1603855aAlexandra Gherghina 1301a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy /** 1311a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy * @return true if this user can be switched to. 1321a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy **/ 1331a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy public boolean supportsSwitchTo() { 1341a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy // TODO remove fw.show_hidden_users when we have finished developing managed profiles. 1351a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy return !isManagedProfile() || SystemProperties.getBoolean("fw.show_hidden_users", false); 1361a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy } 1371a447535cef7e3739d5f763dfe13e568568b9789Kenny Guy 1384b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo() { 1394b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1404b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1414b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo(UserInfo orig) { 1424b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani name = orig.name; 143b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani iconPath = orig.iconPath; 1444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani id = orig.id; 1454b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani flags = orig.flags; 1462a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani serialNumber = orig.serialNumber; 147920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani creationTime = orig.creationTime; 148920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani lastLoggedInTime = orig.lastLoggedInTime; 149d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn partial = orig.partial; 1502a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy profileGroupId = orig.profileGroupId; 151eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski guestToRemove = orig.guestToRemove; 1524b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1534b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 154b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey public UserHandle getUserHandle() { 155b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey return new UserHandle(id); 156b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey } 157b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey 1584b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani @Override 1594b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public String toString() { 1600b285499db739ba50f2f839d633e763c70e67f96Amith Yamasani return "UserInfo{" + id + ":" + name + ":" + Integer.toHexString(flags) + "}"; 1614b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1624b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1634b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public int describeContents() { 1644b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return 0; 1654b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1664b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1674b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public void writeToParcel(Parcel dest, int parcelableFlags) { 1684b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeInt(id); 1694b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeString(name); 170b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani dest.writeString(iconPath); 1714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani dest.writeInt(flags); 1722a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani dest.writeInt(serialNumber); 173920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani dest.writeLong(creationTime); 174920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani dest.writeLong(lastLoggedInTime); 175d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn dest.writeInt(partial ? 1 : 0); 1762a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy dest.writeInt(profileGroupId); 177eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski dest.writeInt(guestToRemove ? 1 : 0); 1784b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1794b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1804b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public static final Parcelable.Creator<UserInfo> CREATOR 1814b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani = new Parcelable.Creator<UserInfo>() { 1824b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo createFromParcel(Parcel source) { 1834b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return new UserInfo(source); 1844b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1854b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public UserInfo[] newArray(int size) { 1864b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return new UserInfo[size]; 1874b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 1884b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani }; 1894b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 1904b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani private UserInfo(Parcel source) { 1914b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani id = source.readInt(); 1924b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani name = source.readString(); 193b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani iconPath = source.readString(); 1944b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani flags = source.readInt(); 1952a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani serialNumber = source.readInt(); 196920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani creationTime = source.readLong(); 197920ace0bbc2d4133dbec991d2636c99a57d6245eAmith Yamasani lastLoggedInTime = source.readLong(); 198d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1Dianne Hackborn partial = source.readInt() != 0; 1992a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy profileGroupId = source.readInt(); 200eddeb49a734a524347587e7654025c489fb6331eAdam Lesinski guestToRemove = source.readInt() != 0; 2014b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 2024b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani} 203