UserManager.java revision 1952637425eece18aa1ce3d80d4b49086ef3bcf7
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; 21258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport android.util.Log; 22258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 23258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport java.util.List; 24258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 25258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani/** 26258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Manages users and user details on a multi-user system. 27258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 28258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasanipublic class UserManager { 29258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 30258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private static String TAG = "UserManager"; 31258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private final IUserManager mService; 32258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani private final Context mContext; 33258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 34258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** @hide */ 35258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserManager(Context context, IUserManager service) { 36258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService = service; 37258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mContext = context; 38258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 39258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 40258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 41258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns whether the system supports multiple users. 42258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return true if multiple users can be created, false if it is a single user device. 43258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 44258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public boolean supportsMultipleUsers() { 45258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return getMaxSupportedUsers() > 1; 46258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 47258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 48258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 49258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the user handle for the user that this application is running for. 50258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the user handle of the user making this call. 51258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 52258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * */ 53258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public int getUserHandle() { 5479af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn return UserHandle.myUserId(); 55258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 56258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 57258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 58258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the user name of the user making this call. 591952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 60258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the user name 61258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 62258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public String getUserName() { 63258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 64258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUserInfo(getUserHandle()).name; 65258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 66258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user name", re); 67258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return ""; 68258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 69258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 70258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 71258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 72258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the UserInfo object describing a specific user. 731952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 74258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user handle of the user whose information is being requested. 75258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the UserInfo object for a specific user. 76258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 77258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * */ 78258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserInfo getUserInfo(int userHandle) { 79258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 80258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUserInfo(userHandle); 81258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 82258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user info", re); 83258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 84258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 85258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 86258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 87258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 88258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Creates a user with the specified name and options. 891952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 90258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 91258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param name the user's name 92258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param flags flags that identify the type of user and other properties. 93258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @see UserInfo 94258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 95258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the UserInfo object for the created user, or null if the user could not be created. 96258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 97258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 98258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public UserInfo createUser(String name, int flags) { 99258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 100258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.createUser(name, flags); 101258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 102258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not create a user", re); 103258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 104258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 105258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 106258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 107258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 108258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns information for all users on this device. 1091952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 110258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return the list of users that were created. 111258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 112258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 113258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public List<UserInfo> getUsers() { 114258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 115258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.getUsers(); 116258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 117258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not get user list", re); 118258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 119258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 120258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 121258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 122258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 123258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Removes a user and all associated data. 1241952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 125258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the integer handle of the user, where 0 is the primary user. 126258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 127258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 128258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public boolean removeUser(int userHandle) { 129258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 130258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.removeUser(userHandle); 131258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 132258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not remove user ", re); 133258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return false; 134258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 135258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 136258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 137258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 138258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Updates the user's name. 1391952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 140258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * 141258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user's integer handle 142258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param name the new name for the user 143258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 144258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 145258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void setUserName(int userHandle, String name) { 146258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 147258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.setUserName(userHandle, name); 148258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 149258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not set the user name ", re); 150258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 151258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 152258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 153258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 154258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns a file descriptor for the user's photo. PNG data can be written into this file. 155258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle the user for whom to change the photo. 156258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return a {@link ParcelFileDescriptor} to which to write the photo. 157258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 158258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 159258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public ParcelFileDescriptor setUserIcon(int userHandle) { 160258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 161258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.setUserIcon(userHandle); 162258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 163258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not set the user icon ", re); 164258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return null; 165258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 166258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 167258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 168258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 169258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Enable or disable the use of a guest account. If disabled, the existing guest account 170258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * will be wiped. 1711952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 172258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param enable whether to enable a guest account. 173258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 174258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 175258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void setGuestEnabled(boolean enable) { 176258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 177258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.setGuestEnabled(enable); 178258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 179258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not change guest account availability to " + enable); 180258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 181258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 182258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 183258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 184258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Checks if a guest user is enabled for this device. 1851952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 186258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return whether a guest user is enabled 187258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 188258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 189258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public boolean isGuestEnabled() { 190258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 191258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mService.isGuestEnabled(); 192258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 193258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not retrieve guest enabled state"); 194258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return false; 195258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 196258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 197258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 198258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 199258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Wipes all the data for a user, but doesn't remove the user. 2001952637425eece18aa1ce3d80d4b49086ef3bcf7Amith Yamasani * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 201258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @param userHandle 202258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 203258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 204258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public void wipeUser(int userHandle) { 205258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani try { 206258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani mService.wipeUser(userHandle); 207258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } catch (RemoteException re) { 208258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani Log.w(TAG, "Could not wipe user " + userHandle); 209258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 210258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 211258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani 212258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani /** 213258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * Returns the maximum number of users that can be created on this device. A return value 214258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * of 1 means that it is a single user device. 215258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @hide 216258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani * @return a value greater than or equal to 1 217258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani */ 218258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani public int getMaxSupportedUsers() { 219258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani return mContext.getResources().getInteger(R.integer.config_multiuserMaximumUsers); 220258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani } 2212a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2222a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani /** 2232a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * Returns a serial number on this device for a given userHandle. User handles can be recycled 2242a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * when deleting and creating users, but serial numbers are not reused until the device is wiped. 2252a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @param userHandle 2262a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @return a serial number associated with that user, or -1 if the userHandle is not valid. 2272a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @hide 2282a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani */ 2292a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int getUserSerialNumber(int userHandle) { 2302a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani try { 2312a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return mService.getUserSerialNumber(userHandle); 2322a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } catch (RemoteException re) { 2332a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani Log.w(TAG, "Could not get serial number for user " + userHandle); 2342a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2352a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return -1; 2362a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2372a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2382a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani /** 2392a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * Returns a userHandle on this device for a given user serial number. User handles can be 2402a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * recycled when deleting and creating users, but serial numbers are not reused until the device 2412a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * is wiped. 2422a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @param userSerialNumber 2432a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @return the userHandle associated with that user serial number, or -1 if the serial number 2442a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * is not valid. 2452a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani * @hide 2462a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani */ 2472a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani public int getUserHandle(int userSerialNumber) { 2482a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani try { 2492a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return mService.getUserHandle(userSerialNumber); 2502a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } catch (RemoteException re) { 2512a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani Log.w(TAG, "Could not get userHandle for user " + userSerialNumber); 2522a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2532a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani return -1; 2542a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani } 2552a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 2562a00329c6d55c6cd9166e01963d7410e95d80d21Amith Yamasani 257258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasani} 258