UserInfo.java revision 5dc5a00e7ebadc085ded7e29feacd17e53698486
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;
21b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkeyimport android.os.UserHandle;
224b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani/**
244b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * Per-user information.
254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @hide
264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */
274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasanipublic class UserInfo implements Parcelable {
28258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
29258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /** 6 bits for user type */
30258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    public static final int FLAG_MASK_USER_TYPE = 0x0000003F;
31258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
324b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    /**
335dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     * *************************** NOTE ***************************
345dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     * These flag values CAN NOT CHANGE because they are written
355dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     * directly to storage.
365dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     */
375dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn
385dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn    /**
394b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * Primary user. Only one user can have this flag set. Meaning of this
404b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * flag TBD.
414b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     */
424b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public static final int FLAG_PRIMARY = 0x00000001;
434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    /**
454b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * User with administrative privileges. Such a user can create and
464b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * delete users.
474b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     */
484b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public static final int FLAG_ADMIN   = 0x00000002;
494b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
504b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    /**
514b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * Indicates a guest user that may be transient.
524b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     */
534b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public static final int FLAG_GUEST   = 0x00000004;
544b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
55258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    /**
56258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Indicates the user has restrictions in privileges, in addition to those for normal users.
57258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     * Exact meaning TBD. For instance, maybe they can't install apps or administer WiFi access pts.
58258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani     */
59258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani    public static final int FLAG_RESTRICTED = 0x00000008;
60258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani
615dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn    /**
625dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     * Indicates that this user has gone through its first-time initialization.
635dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn     */
645dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn    public static final int FLAG_INITIALIZED = 0x00000010;
655dc5a00e7ebadc085ded7e29feacd17e53698486Dianne Hackborn
664b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public int id;
672a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani    public int serialNumber;
684b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public String name;
69b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani    public String iconPath;
704b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public int flags;
714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
724b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public UserInfo(int id, String name, int flags) {
73b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani        this(id, name, null, flags);
74b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani    }
75b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani
76b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani    public UserInfo(int id, String name, String iconPath, int flags) {
774b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        this.id = id;
784b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        this.name = name;
794b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        this.flags = flags;
80b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani        this.iconPath = iconPath;
814b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
824b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
834b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public boolean isPrimary() {
844b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        return (flags & FLAG_PRIMARY) == FLAG_PRIMARY;
854b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
864b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
874b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public boolean isAdmin() {
884b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        return (flags & FLAG_ADMIN) == FLAG_ADMIN;
894b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
904b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
914b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public boolean isGuest() {
924b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        return (flags & FLAG_GUEST) == FLAG_GUEST;
934b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
944b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
954b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public UserInfo() {
964b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
974b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
984b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public UserInfo(UserInfo orig) {
994b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        name = orig.name;
100b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani        iconPath = orig.iconPath;
1014b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        id = orig.id;
1024b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        flags = orig.flags;
1032a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani        serialNumber = orig.serialNumber;
1044b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
1054b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
106b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey    public UserHandle getUserHandle() {
107b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey        return new UserHandle(id);
108b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey    }
109b049e212ab7fe8967893c202efcb30fecfdb82fbJeff Sharkey
1104b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    @Override
1114b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public String toString() {
1120b285499db739ba50f2f839d633e763c70e67f96Amith Yamasani        return "UserInfo{" + id + ":" + name + ":" + Integer.toHexString(flags) + "}";
1134b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
1144b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
1154b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public int describeContents() {
1164b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        return 0;
1174b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
1184b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
1194b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public void writeToParcel(Parcel dest, int parcelableFlags) {
1204b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        dest.writeInt(id);
1214b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        dest.writeString(name);
122b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani        dest.writeString(iconPath);
1234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        dest.writeInt(flags);
1242a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani        dest.writeInt(serialNumber);
1254b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
1264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
1274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public static final Parcelable.Creator<UserInfo> CREATOR
1284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            = new Parcelable.Creator<UserInfo>() {
1294b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        public UserInfo createFromParcel(Parcel source) {
1304b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return new UserInfo(source);
1314b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        }
1324b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        public UserInfo[] newArray(int size) {
1334b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return new UserInfo[size];
1344b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        }
1354b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    };
1364b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
1374b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    private UserInfo(Parcel source) {
1384b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        id = source.readInt();
1394b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        name = source.readString();
140b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97aAmith Yamasani        iconPath = source.readString();
1414b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        flags = source.readInt();
1422a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani        serialNumber = source.readInt();
1434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
1444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani}
145