UserManager.java revision 4673e7ea8d1f869910a9c0f9c211d4d27ad50b41
1258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani/* 2258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Copyright (C) 2012 The Android Open Source Project 3258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 4258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 5258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * you may not use this file except in compliance with the License. 6258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * You may obtain a copy of the License at 7258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 8258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 9258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 10258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Unless required by applicable law or agreed to in writing, software 11258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 12258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * See the License for the specific language governing permissions and 14258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * limitations under the License. 15258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 16258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasanipackage android.os; 17258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 18258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport com.android.internal.R; 19258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport android.content.Context; 20258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport android.content.pm.UserInfo; 21e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasaniimport android.graphics.Bitmap; 2227bd34d9d9fe99f11b80aa0bbdb402fb47ef4158Jeff Sharkeyimport android.content.res.Resources; 23258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport android.util.Log; 24258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 25258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport java.util.List; 26258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 27258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani/** 28258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Manages users and user details on a multi-user system. 29258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 30258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasanipublic class UserManager { 31258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 32258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private static String TAG = "UserManager"; 33258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private final IUserManager mService; 34258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private final Context mContext; 35258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 36258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** @hide */ 37258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserManager(Context context, IUserManager service) { 38258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService = service; 39258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mContext = context; 40258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 41258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 42258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 43258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns whether the system supports multiple users. 44258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return true if multiple users can be created, false if it is a single user device. 45e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani * @hide 46258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 474673e7ea8d1f869910a9c0f9c211d4d27ad50b41Jeff Sharkey public static boolean supportsMultipleUsers() { 48258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return getMaxSupportedUsers() > 1; 49258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 50258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 51258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 52258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the user handle for the user that this application is running for. 53258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the user handle of the user making this call. 54258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 55258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * */ 56258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public int getUserHandle() { 5779af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn return UserHandle.myUserId(); 58258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 59258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 60258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 618832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn * Returns the user name of the user making this call. This call is only 628832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn * available to applications on the system image; it requires the 638832c18d8b63367929c2d394c9c508f56003d400Dianne Hackborn * MANAGE_USERS permission. 64258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the user name 65258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 66258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public String getUserName() { 67258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 68258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUserInfo(getUserHandle()).name; 69258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 70258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user name", re); 71258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return ""; 72258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 73258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 74258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 75258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 76258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the UserInfo object describing a specific user. 771952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 78258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user handle of the user whose information is being requested. 79258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the UserInfo object for a specific user. 80258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 81258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * */ 82258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserInfo getUserInfo(int userHandle) { 83258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 84258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUserInfo(userHandle); 85258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 86258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user info", re); 87258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 88258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 89258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 90258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 91258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 92258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Creates a user with the specified name and options. 931952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 94258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 95258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param name the user's name 96258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param flags flags that identify the type of user and other properties. 97258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @see UserInfo 98258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 99258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the UserInfo object for the created user, or null if the user could not be created. 100258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 101258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 102258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserInfo createUser(String name, int flags) { 103258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 104258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.createUser(name, flags); 105258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 106258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not create a user", re); 107258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 108258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 109258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 110258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 111258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 112258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns information for all users on this device. 1131952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 114258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the list of users that were created. 115258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 116258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 117258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public List<UserInfo> getUsers() { 118258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 119258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUsers(); 120258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 121258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user list", re); 122258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 123258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 124258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 125258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 126258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 127258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Removes a user and all associated data. 1281952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 129258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the integer handle of the user, where 0 is the primary user. 130258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 131258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 132258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public boolean removeUser(int userHandle) { 133258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 134258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.removeUser(userHandle); 135258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 136258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not remove user ", re); 137258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return false; 138258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 139258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 140258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 141258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 142258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Updates the user's name. 1431952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 144258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 145258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user's integer handle 146258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param name the new name for the user 147258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 148258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 149258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void setUserName(int userHandle, String name) { 150258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 151258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.setUserName(userHandle, name); 152258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 153258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not set the user name ", re); 154258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 155258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 156258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 157258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 158e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani * Sets the user's photo. 159258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user for whom to change the photo. 160e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani * @param icon the bitmap to set as the photo. 161258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 162258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 163e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani public void setUserIcon(int userHandle, Bitmap icon) { 164258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 165e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani mService.setUserIcon(userHandle, icon); 166258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 167258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not set the user icon ", re); 168258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 169258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 170258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 171258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 1723b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani * Returns a file descriptor for the user's photo. PNG data can be read from this file. 1733b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani * @param userHandle the user whose photo we want to read. 174e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani * @return a {@link Bitmap} of the user's photo, or null if there's no photo. 1753b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani * @hide 1763b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani */ 177e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani public Bitmap getUserIcon(int userHandle) { 1783b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani try { 1793b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani return mService.getUserIcon(userHandle); 1803b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani } catch (RemoteException re) { 181e928d7d95dbb64627e6ff3a0572190c555b59d96Amith Yamasani Log.w(TAG, "Could not get the user icon ", re); 1823b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani return null; 1833b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani } 1843b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani } 1853b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani 1863b49f07a452e0a77c1d22db2065255689a461d31Amith Yamasani /** 187258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Enable or disable the use of a guest account. If disabled, the existing guest account 188258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * will be wiped. 1891952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 190258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param enable whether to enable a guest account. 191258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 192258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 193258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void setGuestEnabled(boolean enable) { 194258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 195258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.setGuestEnabled(enable); 196258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 197258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not change guest account availability to " + enable); 198258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 199258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 200258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 201258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 202258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Checks if a guest user is enabled for this device. 2031952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 204258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return whether a guest user is enabled 205258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 206258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 207258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public boolean isGuestEnabled() { 208258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 209258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.isGuestEnabled(); 210258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 211258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not retrieve guest enabled state"); 212258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return false; 213258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 214258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 215258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 216258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 217258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Wipes all the data for a user, but doesn't remove the user. 2181952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 219258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle 220258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 221258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 222258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void wipeUser(int userHandle) { 223258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 224258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.wipeUser(userHandle); 225258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 226258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not wipe user " + userHandle); 227258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 228258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 229258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 230258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 231258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the maximum number of users that can be created on this device. A return value 232258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * of 1 means that it is a single user device. 233258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 234258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return a value greater than or equal to 1 235258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 23627bd34d9d9fe99f11b80aa0bbdb402fb47ef4158Jeff Sharkey public static int getMaxSupportedUsers() { 23727bd34d9d9fe99f11b80aa0bbdb402fb47ef4158Jeff Sharkey return SystemProperties.getInt("fw.max_users", 23827bd34d9d9fe99f11b80aa0bbdb402fb47ef4158Jeff Sharkey Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers)); 239258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 2402a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2412a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani /** 2422a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * Returns a serial number on this device for a given userHandle. User handles can be recycled 2432a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * when deleting and creating users, but serial numbers are not reused until the device is wiped. 2442a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @param userHandle 2452a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @return a serial number associated with that user, or -1 if the userHandle is not valid. 2462a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @hide 2472a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani */ 2482a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int getUserSerialNumber(int userHandle) { 2492a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani try { 2502a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return mService.getUserSerialNumber(userHandle); 2512a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } catch (RemoteException re) { 2522a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani Log.w(TAG, "Could not get serial number for user " + userHandle); 2532a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2542a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return -1; 2552a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2562a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2572a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani /** 2582a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * Returns a userHandle on this device for a given user serial number. User handles can be 2592a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * recycled when deleting and creating users, but serial numbers are not reused until the device 2602a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * is wiped. 2612a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @param userSerialNumber 2622a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @return the userHandle associated with that user serial number, or -1 if the serial number 2632a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * is not valid. 2642a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @hide 2652a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani */ 2662a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int getUserHandle(int userSerialNumber) { 2672a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani try { 2682a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return mService.getUserHandle(userSerialNumber); 2692a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } catch (RemoteException re) { 2702a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani Log.w(TAG, "Could not get userHandle for user " + userSerialNumber); 2712a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2722a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return -1; 2732a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2742a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2752a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 276258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani} 277