1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.os; 18 19 import android.Manifest; 20 import android.accounts.AccountManager; 21 import android.annotation.IntDef; 22 import android.annotation.NonNull; 23 import android.annotation.Nullable; 24 import android.annotation.RequiresPermission; 25 import android.annotation.SystemApi; 26 import android.annotation.SystemService; 27 import android.annotation.TestApi; 28 import android.annotation.UserIdInt; 29 import android.annotation.WorkerThread; 30 import android.app.Activity; 31 import android.app.ActivityManager; 32 import android.app.admin.DevicePolicyManager; 33 import android.content.ComponentName; 34 import android.content.Context; 35 import android.content.Intent; 36 import android.content.IntentFilter; 37 import android.content.IntentSender; 38 import android.content.pm.UserInfo; 39 import android.content.res.Resources; 40 import android.graphics.Bitmap; 41 import android.graphics.BitmapFactory; 42 import android.graphics.Rect; 43 import android.graphics.drawable.Drawable; 44 import android.provider.Settings; 45 import android.telephony.TelephonyManager; 46 import android.view.WindowManager.LayoutParams; 47 48 import com.android.internal.R; 49 import com.android.internal.os.RoSystemProperties; 50 51 import java.io.IOException; 52 import java.lang.annotation.Retention; 53 import java.lang.annotation.RetentionPolicy; 54 import java.util.ArrayList; 55 import java.util.List; 56 57 /** 58 * Manages users and user details on a multi-user system. There are two major categories of 59 * users: fully customizable users with their own login, and managed profiles that share a workspace 60 * with a related user. 61 * <p> 62 * Users are different from accounts, which are managed by 63 * {@link AccountManager}. Each user can have their own set of accounts. 64 * <p> 65 * See {@link DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE} for more on managed profiles. 66 */ 67 @SystemService(Context.USER_SERVICE) 68 public class UserManager { 69 70 private static final String TAG = "UserManager"; 71 private final IUserManager mService; 72 private final Context mContext; 73 74 private Boolean mIsManagedProfileCached; 75 76 /** 77 * @hide 78 * No user restriction. 79 */ 80 @SystemApi 81 public static final int RESTRICTION_NOT_SET = 0x0; 82 83 /** 84 * @hide 85 * User restriction set by system/user. 86 */ 87 @SystemApi 88 public static final int RESTRICTION_SOURCE_SYSTEM = 0x1; 89 90 /** 91 * @hide 92 * User restriction set by a device owner. 93 */ 94 @SystemApi 95 public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 0x2; 96 97 /** 98 * @hide 99 * User restriction set by a profile owner. 100 */ 101 @SystemApi 102 public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 0x4; 103 104 /** @hide */ 105 @Retention(RetentionPolicy.SOURCE) 106 @IntDef(flag=true, value={RESTRICTION_NOT_SET, RESTRICTION_SOURCE_SYSTEM, 107 RESTRICTION_SOURCE_DEVICE_OWNER, RESTRICTION_SOURCE_PROFILE_OWNER}) 108 @SystemApi 109 public @interface UserRestrictionSource {} 110 111 /** 112 * Specifies if a user is disallowed from adding and removing accounts, unless they are 113 * {@link android.accounts.AccountManager#addAccountExplicitly programmatically} added by 114 * Authenticator. 115 * The default value is <code>false</code>. 116 * 117 * <p>From {@link android.os.Build.VERSION_CODES#N} a profile or device owner app can still 118 * use {@link android.accounts.AccountManager} APIs to add or remove accounts when account 119 * management is disallowed. 120 * 121 * <p>Key for user restrictions. 122 * <p>Type: Boolean 123 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 124 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 125 * @see #getUserRestrictions() 126 */ 127 public static final String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts"; 128 129 /** 130 * Specifies if a user is disallowed from changing Wi-Fi 131 * access points. The default value is <code>false</code>. 132 * <p>This restriction has no effect in a managed profile. 133 * 134 * <p>Key for user restrictions. 135 * <p>Type: Boolean 136 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 137 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 138 * @see #getUserRestrictions() 139 */ 140 public static final String DISALLOW_CONFIG_WIFI = "no_config_wifi"; 141 142 /** 143 * Specifies if a user is disallowed from installing applications. 144 * The default value is <code>false</code>. 145 * 146 * <p>Key for user restrictions. 147 * <p>Type: Boolean 148 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 149 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 150 * @see #getUserRestrictions() 151 */ 152 public static final String DISALLOW_INSTALL_APPS = "no_install_apps"; 153 154 /** 155 * Specifies if a user is disallowed from uninstalling applications. 156 * The default value is <code>false</code>. 157 * 158 * <p>Key for user restrictions. 159 * <p>Type: Boolean 160 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 161 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 162 * @see #getUserRestrictions() 163 */ 164 public static final String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps"; 165 166 /** 167 * Specifies if a user is disallowed from turning on location sharing. 168 * The default value is <code>false</code>. 169 * <p>In a managed profile, location sharing always reflects the primary user's setting, but 170 * can be overridden and forced off by setting this restriction to true in the managed profile. 171 * 172 * <p>Key for user restrictions. 173 * <p>Type: Boolean 174 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 175 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 176 * @see #getUserRestrictions() 177 */ 178 public static final String DISALLOW_SHARE_LOCATION = "no_share_location"; 179 180 /** 181 * Specifies if a user is disallowed from enabling the 182 * "Unknown Sources" setting, that allows installation of apps from unknown sources. 183 * The default value is <code>false</code>. 184 * 185 * <p>Key for user restrictions. 186 * <p>Type: Boolean 187 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 188 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 189 * @see #getUserRestrictions() 190 */ 191 public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources"; 192 193 /** 194 * Specifies if a user is disallowed from configuring bluetooth. 195 * This does <em>not</em> restrict the user from turning bluetooth on or off. 196 * The default value is <code>false</code>. 197 * <p>This restriction doesn't prevent the user from using bluetooth. For disallowing usage of 198 * bluetooth completely on the device, use {@link #DISALLOW_BLUETOOTH}. 199 * <p>This restriction has no effect in a managed profile. 200 * 201 * <p>Key for user restrictions. 202 * <p>Type: Boolean 203 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 204 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 205 * @see #getUserRestrictions() 206 */ 207 public static final String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth"; 208 209 /** 210 * Specifies if bluetooth is disallowed on the device. 211 * 212 * <p> This restriction can only be set by the device owner and the profile owner on the 213 * primary user and it applies globally - i.e. it disables bluetooth on the entire device. 214 * <p>The default value is <code>false</code>. 215 * <p>Key for user restrictions. 216 * <p>Type: Boolean 217 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 218 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 219 * @see #getUserRestrictions() 220 */ 221 public static final String DISALLOW_BLUETOOTH = "no_bluetooth"; 222 223 /** 224 * Specifies if outgoing bluetooth sharing is disallowed on the device. Device owner and profile 225 * owner can set this restriction. When it is set by device owner, all users on this device will 226 * be affected. 227 * 228 * <p>Default is <code>true</code> for managed profiles and false for otherwise. When a device 229 * upgrades to {@link android.os.Build.VERSION_CODES#O}, the system sets it for all existing 230 * managed profiles. 231 * 232 * <p>Key for user restrictions. 233 * <p>Type: Boolean 234 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 235 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 236 * @see #getUserRestrictions() 237 */ 238 public static final String DISALLOW_BLUETOOTH_SHARING = "no_bluetooth_sharing"; 239 240 /** 241 * Specifies if a user is disallowed from transferring files over 242 * USB. This can only be set by device owners and profile owners on the primary user. 243 * The default value is <code>false</code>. 244 * 245 * <p>Key for user restrictions. 246 * <p>Type: Boolean 247 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 248 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 249 * @see #getUserRestrictions() 250 */ 251 public static final String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer"; 252 253 /** 254 * Specifies if a user is disallowed from configuring user 255 * credentials. The default value is <code>false</code>. 256 * 257 * <p>Key for user restrictions. 258 * <p>Type: Boolean 259 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 260 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 261 * @see #getUserRestrictions() 262 */ 263 public static final String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials"; 264 265 /** 266 * When set on the primary user this specifies if the user can remove other users. 267 * When set on a secondary user, this specifies if the user can remove itself. 268 * This restriction has no effect on managed profiles. 269 * The default value is <code>false</code>. 270 * 271 * <p>Key for user restrictions. 272 * <p>Type: Boolean 273 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 274 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 275 * @see #getUserRestrictions() 276 */ 277 public static final String DISALLOW_REMOVE_USER = "no_remove_user"; 278 279 /** 280 * Specifies if managed profiles of this user can be removed, other than by its profile owner. 281 * The default value is <code>false</code>. 282 * <p> 283 * This restriction has no effect on managed profiles. 284 * 285 * <p>Key for user restrictions. 286 * <p>Type: Boolean 287 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 288 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 289 * @see #getUserRestrictions() 290 */ 291 public static final String DISALLOW_REMOVE_MANAGED_PROFILE = "no_remove_managed_profile"; 292 293 /** 294 * Specifies if a user is disallowed from enabling or 295 * accessing debugging features. The default value is <code>false</code>. 296 * 297 * <p>Key for user restrictions. 298 * <p>Type: Boolean 299 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 300 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 301 * @see #getUserRestrictions() 302 */ 303 public static final String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; 304 305 /** 306 * Specifies if a user is disallowed from configuring VPN. 307 * The default value is <code>false</code>. 308 * This restriction has an effect in a managed profile only from 309 * {@link android.os.Build.VERSION_CODES#M} 310 * 311 * <p>Key for user restrictions. 312 * <p>Type: Boolean 313 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 314 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 315 * @see #getUserRestrictions() 316 */ 317 public static final String DISALLOW_CONFIG_VPN = "no_config_vpn"; 318 319 /** 320 * Specifies if a user is disallowed from configuring Tethering 321 * & portable hotspots. This can only be set by device owners and profile owners on the 322 * primary user. The default value is <code>false</code>. 323 * 324 * <p>Key for user restrictions. 325 * <p>Type: Boolean 326 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 327 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 328 * @see #getUserRestrictions() 329 */ 330 public static final String DISALLOW_CONFIG_TETHERING = "no_config_tethering"; 331 332 /** 333 * Specifies if a user is disallowed from resetting network settings 334 * from Settings. This can only be set by device owners and profile owners on the primary user. 335 * The default value is <code>false</code>. 336 * <p>This restriction has no effect on secondary users and managed profiles since only the 337 * primary user can reset the network settings of the device. 338 * 339 * <p>Key for user restrictions. 340 * <p>Type: Boolean 341 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 342 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 343 * @see #getUserRestrictions() 344 */ 345 public static final String DISALLOW_NETWORK_RESET = "no_network_reset"; 346 347 /** 348 * Specifies if a user is disallowed from factory resetting 349 * from Settings. This can only be set by device owners and profile owners on the primary user. 350 * The default value is <code>false</code>. 351 * <p>This restriction has no effect on secondary users and managed profiles since only the 352 * primary user can factory reset the device. 353 * 354 * <p>Key for user restrictions. 355 * <p>Type: Boolean 356 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 357 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 358 * @see #getUserRestrictions() 359 */ 360 public static final String DISALLOW_FACTORY_RESET = "no_factory_reset"; 361 362 /** 363 * Specifies if a user is disallowed from adding new users. This can only be set by device 364 * owners and profile owners on the primary user. 365 * The default value is <code>false</code>. 366 * <p>This restriction has no effect on secondary users and managed profiles since only the 367 * primary user can add other users. 368 * 369 * <p>Key for user restrictions. 370 * <p>Type: Boolean 371 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 372 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 373 * @see #getUserRestrictions() 374 */ 375 public static final String DISALLOW_ADD_USER = "no_add_user"; 376 377 /** 378 * Specifies if a user is disallowed from adding managed profiles. 379 * <p>The default value for an unmanaged user is <code>false</code>. 380 * For users with a device owner set, the default is <code>true</code>. 381 * <p>This restriction has no effect on managed profiles. 382 * 383 * <p>Key for user restrictions. 384 * <p>Type: Boolean 385 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 386 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 387 * @see #getUserRestrictions() 388 */ 389 public static final String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile"; 390 391 /** 392 * Specifies if a user is disallowed from disabling application verification. 393 * Starting from {@link android.os.Build.VERSION_CODES#O}, application verification 394 * is enforced across all users on the device if a profile owner or device owner sets 395 * this restriction to <code>true</code>. The default value is <code>false</code>. 396 * 397 * <p>Key for user restrictions. 398 * <p>Type: Boolean 399 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 400 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 401 * @see #getUserRestrictions() 402 */ 403 public static final String ENSURE_VERIFY_APPS = "ensure_verify_apps"; 404 405 /** 406 * Specifies if a user is disallowed from configuring cell 407 * broadcasts. This can only be set by device owners and profile owners on the primary user. 408 * The default value is <code>false</code>. 409 * <p>This restriction has no effect on secondary users and managed profiles since only the 410 * primary user can configure cell broadcasts. 411 * 412 * <p>Key for user restrictions. 413 * <p>Type: Boolean 414 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 415 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 416 * @see #getUserRestrictions() 417 */ 418 public static final String DISALLOW_CONFIG_CELL_BROADCASTS = "no_config_cell_broadcasts"; 419 420 /** 421 * Specifies if a user is disallowed from configuring mobile 422 * networks. This can only be set by device owners and profile owners on the primary user. 423 * The default value is <code>false</code>. 424 * <p>This restriction has no effect on secondary users and managed profiles since only the 425 * primary user can configure mobile networks. 426 * 427 * <p>Key for user restrictions. 428 * <p>Type: Boolean 429 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 430 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 431 * @see #getUserRestrictions() 432 */ 433 public static final String DISALLOW_CONFIG_MOBILE_NETWORKS = "no_config_mobile_networks"; 434 435 /** 436 * Specifies if a user is disallowed from modifying 437 * applications in Settings or launchers. The following actions will not be allowed when this 438 * restriction is enabled: 439 * <li>uninstalling apps</li> 440 * <li>disabling apps</li> 441 * <li>clearing app caches</li> 442 * <li>clearing app data</li> 443 * <li>force stopping apps</li> 444 * <li>clearing app defaults</li> 445 * <p> 446 * The default value is <code>false</code>. 447 * 448 * <p><strong>Note:</strong> The user will still be able to perform those actions via other 449 * means (such as adb). Third party apps will also be able to uninstall apps via the 450 * {@link android.content.pm.PackageInstaller}. {@link #DISALLOW_UNINSTALL_APPS} or 451 * {@link DevicePolicyManager#setUninstallBlocked(ComponentName, String, boolean)} should be 452 * used to prevent the user from uninstalling apps completely, and 453 * {@link DevicePolicyManager#addPersistentPreferredActivity(ComponentName, IntentFilter, ComponentName)} 454 * to add a default intent handler for a given intent filter. 455 * 456 * <p>Key for user restrictions. 457 * <p>Type: Boolean 458 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 459 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 460 * @see #getUserRestrictions() 461 */ 462 public static final String DISALLOW_APPS_CONTROL = "no_control_apps"; 463 464 /** 465 * Specifies if a user is disallowed from mounting 466 * physical external media. This can only be set by device owners and profile owners on the 467 * primary user. The default value is <code>false</code>. 468 * 469 * <p>Key for user restrictions. 470 * <p>Type: Boolean 471 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 472 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 473 * @see #getUserRestrictions() 474 */ 475 public static final String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media"; 476 477 /** 478 * Specifies if a user is disallowed from adjusting microphone volume. If set, the microphone 479 * will be muted. This can be set by device owners and profile owners. The default value is 480 * <code>false</code>. 481 * 482 * <p>This restriction has no effect on managed profiles. 483 * <p>Key for user restrictions. 484 * <p>Type: Boolean 485 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 486 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 487 * @see #getUserRestrictions() 488 */ 489 public static final String DISALLOW_UNMUTE_MICROPHONE = "no_unmute_microphone"; 490 491 /** 492 * Specifies if a user is disallowed from adjusting the master volume. If set, the master volume 493 * will be muted. This can be set by device owners and profile owners. The default value is 494 * <code>false</code>. 495 * 496 * <p>This restriction has no effect on managed profiles. 497 * <p>Key for user restrictions. 498 * <p>Type: Boolean 499 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 500 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 501 * @see #getUserRestrictions() 502 */ 503 public static final String DISALLOW_ADJUST_VOLUME = "no_adjust_volume"; 504 505 /** 506 * Specifies that the user is not allowed to make outgoing 507 * phone calls. Emergency calls are still permitted. 508 * The default value is <code>false</code>. 509 * <p>This restriction has no effect on managed profiles. 510 * 511 * <p>Key for user restrictions. 512 * <p>Type: Boolean 513 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 514 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 515 * @see #getUserRestrictions() 516 */ 517 public static final String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls"; 518 519 /** 520 * Specifies that the user is not allowed to send or receive 521 * SMS messages. The default value is <code>false</code>. 522 * 523 * <p>Key for user restrictions. 524 * <p>Type: Boolean 525 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 526 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 527 * @see #getUserRestrictions() 528 */ 529 public static final String DISALLOW_SMS = "no_sms"; 530 531 /** 532 * Specifies if the user is not allowed to have fun. In some cases, the 533 * device owner may wish to prevent the user from experiencing amusement or 534 * joy while using the device. The default value is <code>false</code>. 535 * 536 * <p>Key for user restrictions. 537 * <p>Type: Boolean 538 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 539 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 540 * @see #getUserRestrictions() 541 */ 542 public static final String DISALLOW_FUN = "no_fun"; 543 544 /** 545 * Specifies that windows besides app windows should not be 546 * created. This will block the creation of the following types of windows. 547 * <li>{@link LayoutParams#TYPE_TOAST}</li> 548 * <li>{@link LayoutParams#TYPE_PHONE}</li> 549 * <li>{@link LayoutParams#TYPE_PRIORITY_PHONE}</li> 550 * <li>{@link LayoutParams#TYPE_SYSTEM_ALERT}</li> 551 * <li>{@link LayoutParams#TYPE_SYSTEM_ERROR}</li> 552 * <li>{@link LayoutParams#TYPE_SYSTEM_OVERLAY}</li> 553 * <li>{@link LayoutParams#TYPE_APPLICATION_OVERLAY}</li> 554 * 555 * <p>This can only be set by device owners and profile owners on the primary user. 556 * The default value is <code>false</code>. 557 * 558 * <p>Key for user restrictions. 559 * <p>Type: Boolean 560 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 561 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 562 * @see #getUserRestrictions() 563 */ 564 public static final String DISALLOW_CREATE_WINDOWS = "no_create_windows"; 565 566 /** 567 * Specifies if what is copied in the clipboard of this profile can 568 * be pasted in related profiles. Does not restrict if the clipboard of related profiles can be 569 * pasted in this profile. 570 * The default value is <code>false</code>. 571 * 572 * <p>Key for user restrictions. 573 * <p>Type: Boolean 574 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 575 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 576 * @see #getUserRestrictions() 577 */ 578 public static final String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste"; 579 580 /** 581 * Specifies if the user is not allowed to use NFC to beam out data from apps. 582 * The default value is <code>false</code>. 583 * 584 * <p>Key for user restrictions. 585 * <p>Type: Boolean 586 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 587 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 588 * @see #getUserRestrictions() 589 */ 590 public static final String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam"; 591 592 /** 593 * Hidden user restriction to disallow access to wallpaper manager APIs. This restriction 594 * generally means that wallpapers are not supported for the particular user. This user 595 * restriction is always set for managed profiles, because such profiles don't have wallpapers. 596 * @hide 597 * @see #DISALLOW_SET_WALLPAPER 598 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 599 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 600 * @see #getUserRestrictions() 601 */ 602 public static final String DISALLOW_WALLPAPER = "no_wallpaper"; 603 604 /** 605 * User restriction to disallow setting a wallpaper. Profile owner and device owner 606 * are able to set wallpaper regardless of this restriction. 607 * The default value is <code>false</code>. 608 * 609 * <p>Key for user restrictions. 610 * <p>Type: Boolean 611 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 612 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 613 * @see #getUserRestrictions() 614 */ 615 public static final String DISALLOW_SET_WALLPAPER = "no_set_wallpaper"; 616 617 /** 618 * Specifies if the user is not allowed to reboot the device into safe boot mode. 619 * This can only be set by device owners and profile owners on the primary user. 620 * The default value is <code>false</code>. 621 * 622 * <p>Key for user restrictions. 623 * <p>Type: Boolean 624 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 625 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 626 * @see #getUserRestrictions() 627 */ 628 public static final String DISALLOW_SAFE_BOOT = "no_safe_boot"; 629 630 /** 631 * Specifies if a user is not allowed to record audio. This restriction is always enabled for 632 * background users. The default value is <code>false</code>. 633 * 634 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 635 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 636 * @see #getUserRestrictions() 637 * @hide 638 */ 639 public static final String DISALLOW_RECORD_AUDIO = "no_record_audio"; 640 641 /** 642 * Specifies if a user is not allowed to run in the background and should be stopped during 643 * user switch. The default value is <code>false</code>. 644 * 645 * <p>This restriction can be set by device owners and profile owners. 646 * 647 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 648 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 649 * @see #getUserRestrictions() 650 * @hide 651 */ 652 public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background"; 653 654 /** 655 * Specifies if a user is not allowed to use the camera. 656 * 657 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 658 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 659 * @see #getUserRestrictions() 660 * @hide 661 */ 662 public static final String DISALLOW_CAMERA = "no_camera"; 663 664 /** 665 * Specifies if a user is not allowed to unmute the device's master volume. 666 * 667 * @see DevicePolicyManager#setMasterVolumeMuted(ComponentName, boolean) 668 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 669 * @see #getUserRestrictions() 670 * @hide 671 */ 672 public static final String DISALLOW_UNMUTE_DEVICE = "disallow_unmute_device"; 673 674 /** 675 * Specifies if a user is not allowed to use cellular data when roaming. This can only be set by 676 * device owners. The default value is <code>false</code>. 677 * 678 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 679 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 680 * @see #getUserRestrictions() 681 */ 682 public static final String DISALLOW_DATA_ROAMING = "no_data_roaming"; 683 684 /** 685 * Specifies if a user is not allowed to change their icon. Device owner and profile owner 686 * can set this restriction. When it is set by device owner, only the target user will be 687 * affected. The default value is <code>false</code>. 688 * 689 * <p>Key for user restrictions. 690 * <p>Type: Boolean 691 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 692 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 693 * @see #getUserRestrictions() 694 */ 695 public static final String DISALLOW_SET_USER_ICON = "no_set_user_icon"; 696 697 /** 698 * Specifies if a user is not allowed to enable the oem unlock setting. The default value is 699 * <code>false</code>. Setting this restriction has no effect if the bootloader is already 700 * unlocked. 701 * 702 * <p>Not for use by third-party applications. 703 * 704 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 705 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 706 * @see #getUserRestrictions() 707 * @deprecated use {@link OemLockManager#setOemUnlockAllowedByCarrier(boolean, byte[])} instead. 708 * @hide 709 */ 710 @Deprecated 711 @SystemApi 712 public static final String DISALLOW_OEM_UNLOCK = "no_oem_unlock"; 713 714 /** 715 * Allows apps in the parent profile to handle web links from the managed profile. 716 * 717 * This user restriction has an effect only in a managed profile. 718 * If set: 719 * Intent filters of activities in the parent profile with action 720 * {@link android.content.Intent#ACTION_VIEW}, 721 * category {@link android.content.Intent#CATEGORY_BROWSABLE}, scheme http or https, and which 722 * define a host can handle intents from the managed profile. 723 * The default value is <code>false</code>. 724 * 725 * <p>Key for user restrictions. 726 * <p>Type: Boolean 727 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 728 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 729 * @see #getUserRestrictions() 730 */ 731 public static final String ALLOW_PARENT_PROFILE_APP_LINKING 732 = "allow_parent_profile_app_linking"; 733 734 /** 735 * Specifies if a user is not allowed to use Autofill Services. 736 * 737 * <p>Device owner and profile owner can set this restriction. When it is set by device owner, 738 * only the target user will be affected. 739 * 740 * <p>The default value is <code>false</code>. 741 * 742 * @see DevicePolicyManager#addUserRestriction(ComponentName, String) 743 * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) 744 * @see #getUserRestrictions() 745 */ 746 public static final String DISALLOW_AUTOFILL = "no_autofill"; 747 748 /** 749 * Application restriction key that is used to indicate the pending arrival 750 * of real restrictions for the app. 751 * 752 * <p> 753 * Applications that support restrictions should check for the presence of this key. 754 * A <code>true</code> value indicates that restrictions may be applied in the near 755 * future but are not available yet. It is the responsibility of any 756 * management application that sets this flag to update it when the final 757 * restrictions are enforced. 758 * 759 * <p>Key for application restrictions. 760 * <p>Type: Boolean 761 * @see android.app.admin.DevicePolicyManager#setApplicationRestrictions( 762 * android.content.ComponentName, String, Bundle) 763 * @see android.app.admin.DevicePolicyManager#getApplicationRestrictions( 764 * android.content.ComponentName, String) 765 */ 766 public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; 767 768 private static final String ACTION_CREATE_USER = "android.os.action.CREATE_USER"; 769 770 /** 771 * Extra containing a name for the user being created. Optional parameter passed to 772 * ACTION_CREATE_USER activity. 773 * @hide 774 */ 775 public static final String EXTRA_USER_NAME = "android.os.extra.USER_NAME"; 776 777 /** 778 * Extra containing account name for the user being created. Optional parameter passed to 779 * ACTION_CREATE_USER activity. 780 * @hide 781 */ 782 public static final String EXTRA_USER_ACCOUNT_NAME = "android.os.extra.USER_ACCOUNT_NAME"; 783 784 /** 785 * Extra containing account type for the user being created. Optional parameter passed to 786 * ACTION_CREATE_USER activity. 787 * @hide 788 */ 789 public static final String EXTRA_USER_ACCOUNT_TYPE = "android.os.extra.USER_ACCOUNT_TYPE"; 790 791 /** 792 * Extra containing account-specific data for the user being created. Optional parameter passed 793 * to ACTION_CREATE_USER activity. 794 * @hide 795 */ 796 public static final String EXTRA_USER_ACCOUNT_OPTIONS 797 = "android.os.extra.USER_ACCOUNT_OPTIONS"; 798 799 /** @hide */ 800 public static final int PIN_VERIFICATION_FAILED_INCORRECT = -3; 801 /** @hide */ 802 public static final int PIN_VERIFICATION_FAILED_NOT_SET = -2; 803 /** @hide */ 804 public static final int PIN_VERIFICATION_SUCCESS = -1; 805 806 /** 807 * Sent when user restrictions have changed. 808 * 809 * @hide 810 */ 811 @SystemApi 812 @TestApi // To allow seeing it from CTS. 813 public static final String ACTION_USER_RESTRICTIONS_CHANGED = 814 "android.os.action.USER_RESTRICTIONS_CHANGED"; 815 816 /** 817 * Error result indicating that this user is not allowed to add other users on this device. 818 * This is a result code returned from the activity created by the intent 819 * {@link #createUserCreationIntent(String, String, String, PersistableBundle)}. 820 */ 821 public static final int USER_CREATION_FAILED_NOT_PERMITTED = Activity.RESULT_FIRST_USER; 822 823 /** 824 * Error result indicating that no more users can be created on this device. 825 * This is a result code returned from the activity created by the intent 826 * {@link #createUserCreationIntent(String, String, String, PersistableBundle)}. 827 */ 828 public static final int USER_CREATION_FAILED_NO_MORE_USERS = Activity.RESULT_FIRST_USER + 1; 829 830 /** @hide */ get(Context context)831 public static UserManager get(Context context) { 832 return (UserManager) context.getSystemService(Context.USER_SERVICE); 833 } 834 835 /** @hide */ UserManager(Context context, IUserManager service)836 public UserManager(Context context, IUserManager service) { 837 mService = service; 838 mContext = context.getApplicationContext(); 839 } 840 841 /** 842 * Returns whether this device supports multiple users with their own login and customizable 843 * space. 844 * @return whether the device supports multiple users. 845 */ supportsMultipleUsers()846 public static boolean supportsMultipleUsers() { 847 return getMaxSupportedUsers() > 1 848 && SystemProperties.getBoolean("fw.show_multiuserui", 849 Resources.getSystem().getBoolean(R.bool.config_enableMultiUserUI)); 850 } 851 852 /** 853 * @hide 854 * @return Whether the device is running with split system user. It means the system user and 855 * primary user are two separate users. Previously system user and primary user are combined as 856 * a single owner user. see @link {android.os.UserHandle#USER_OWNER} 857 */ isSplitSystemUser()858 public static boolean isSplitSystemUser() { 859 return RoSystemProperties.FW_SYSTEM_USER_SPLIT; 860 } 861 862 /** 863 * @return Whether guest user is always ephemeral 864 * @hide 865 */ isGuestUserEphemeral()866 public static boolean isGuestUserEphemeral() { 867 return Resources.getSystem() 868 .getBoolean(com.android.internal.R.bool.config_guestUserEphemeral); 869 } 870 871 /** 872 * Returns whether switching users is currently allowed. 873 * <p>For instance switching users is not allowed if the current user is in a phone call, 874 * or system user hasn't been unlocked yet 875 * @hide 876 */ canSwitchUsers()877 public boolean canSwitchUsers() { 878 boolean allowUserSwitchingWhenSystemUserLocked = Settings.Global.getInt( 879 mContext.getContentResolver(), 880 Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED, 0) != 0; 881 boolean isSystemUserUnlocked = isUserUnlocked(UserHandle.SYSTEM); 882 boolean inCall = TelephonyManager.getDefault().getCallState() 883 != TelephonyManager.CALL_STATE_IDLE; 884 return (allowUserSwitchingWhenSystemUserLocked || isSystemUserUnlocked) && !inCall; 885 } 886 887 /** 888 * Returns the user handle for the user that this process is running under. 889 * 890 * @return the user handle of this process. 891 * @hide 892 */ getUserHandle()893 public @UserIdInt int getUserHandle() { 894 return UserHandle.myUserId(); 895 } 896 897 /** 898 * Returns the user name of the user making this call. This call is only 899 * available to applications on the system image; it requires the 900 * MANAGE_USERS permission. 901 * @return the user name 902 */ getUserName()903 public String getUserName() { 904 try { 905 return mService.getUserInfo(getUserHandle()).name; 906 } catch (RemoteException re) { 907 throw re.rethrowFromSystemServer(); 908 } 909 } 910 911 /** 912 * Returns whether user name has been set. 913 * <p>This method can be used to check that the value returned by {@link #getUserName()} was 914 * set by the user and is not a placeholder string provided by the system. 915 * @hide 916 */ isUserNameSet()917 public boolean isUserNameSet() { 918 try { 919 return mService.isUserNameSet(getUserHandle()); 920 } catch (RemoteException re) { 921 throw re.rethrowFromSystemServer(); 922 } 923 } 924 925 /** 926 * Used to determine whether the user making this call is subject to 927 * teleportations. 928 * 929 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can 930 * now automatically identify goats using advanced goat recognition technology.</p> 931 * 932 * @return Returns true if the user making this call is a goat. 933 */ isUserAGoat()934 public boolean isUserAGoat() { 935 return mContext.getPackageManager() 936 .isPackageAvailable("com.coffeestainstudios.goatsimulator"); 937 } 938 939 /** 940 * Used to check if this process is running under the primary user. The primary user 941 * is the first human user on a device. 942 * 943 * @return whether this process is running under the primary user. 944 * @hide 945 */ isPrimaryUser()946 public boolean isPrimaryUser() { 947 UserInfo user = getUserInfo(UserHandle.myUserId()); 948 return user != null && user.isPrimary(); 949 } 950 951 /** 952 * Used to check if this process is running under the system user. The system user 953 * is the initial user that is implicitly created on first boot and hosts most of the 954 * system services. 955 * 956 * @return whether this process is running under the system user. 957 */ isSystemUser()958 public boolean isSystemUser() { 959 return UserHandle.myUserId() == UserHandle.USER_SYSTEM; 960 } 961 962 /** 963 * @hide 964 * Returns whether the caller is running as an admin user. There can be more than one admin 965 * user. 966 */ isAdminUser()967 public boolean isAdminUser() { 968 return isUserAdmin(UserHandle.myUserId()); 969 } 970 971 /** 972 * @hide 973 * Returns whether the provided user is an admin user. There can be more than one admin 974 * user. 975 */ isUserAdmin(@serIdInt int userId)976 public boolean isUserAdmin(@UserIdInt int userId) { 977 UserInfo user = getUserInfo(userId); 978 return user != null && user.isAdmin(); 979 } 980 981 /** 982 * Used to check if the user making this call is linked to another user. Linked users may have 983 * a reduced number of available apps, app restrictions and account restrictions. 984 * @return whether the user making this call is a linked user 985 * @hide 986 */ isLinkedUser()987 public boolean isLinkedUser() { 988 try { 989 return mService.isRestricted(); 990 } catch (RemoteException re) { 991 throw re.rethrowFromSystemServer(); 992 } 993 } 994 995 /** 996 * Checks if specified user can have restricted profile. 997 * @hide 998 */ canHaveRestrictedProfile(@serIdInt int userId)999 public boolean canHaveRestrictedProfile(@UserIdInt int userId) { 1000 try { 1001 return mService.canHaveRestrictedProfile(userId); 1002 } catch (RemoteException re) { 1003 throw re.rethrowFromSystemServer(); 1004 } 1005 } 1006 1007 /** 1008 * Checks if a user is a guest user. 1009 * @return whether user is a guest user. 1010 * @hide 1011 */ isGuestUser(int id)1012 public boolean isGuestUser(int id) { 1013 UserInfo user = getUserInfo(id); 1014 return user != null && user.isGuest(); 1015 } 1016 1017 /** 1018 * Checks if the calling app is running as a guest user. 1019 * @return whether the caller is a guest user. 1020 * @hide 1021 */ isGuestUser()1022 public boolean isGuestUser() { 1023 UserInfo user = getUserInfo(UserHandle.myUserId()); 1024 return user != null && user.isGuest(); 1025 } 1026 1027 /** 1028 * Checks if the calling app is running in a demo user. When running in a demo user, 1029 * apps can be more helpful to the user, or explain their features in more detail. 1030 * 1031 * @return whether the caller is a demo user. 1032 */ isDemoUser()1033 public boolean isDemoUser() { 1034 try { 1035 return mService.isDemoUser(UserHandle.myUserId()); 1036 } catch (RemoteException re) { 1037 throw re.rethrowFromSystemServer(); 1038 } 1039 } 1040 1041 /** 1042 * Checks if the calling app is running in a managed profile. 1043 * 1044 * @return whether the caller is in a managed profile. 1045 * @hide 1046 */ 1047 @SystemApi 1048 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) isManagedProfile()1049 public boolean isManagedProfile() { 1050 // No need for synchronization. Once it becomes non-null, it'll be non-null forever. 1051 // Worst case we might end up calling the AIDL method multiple times but that's fine. 1052 if (mIsManagedProfileCached != null) { 1053 return mIsManagedProfileCached; 1054 } 1055 try { 1056 mIsManagedProfileCached = mService.isManagedProfile(UserHandle.myUserId()); 1057 return mIsManagedProfileCached; 1058 } catch (RemoteException re) { 1059 throw re.rethrowFromSystemServer(); 1060 } 1061 } 1062 1063 /** 1064 * Checks if the specified user is a managed profile. 1065 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission, otherwise the caller 1066 * must be in the same profile group of specified user. 1067 * 1068 * @return whether the specified user is a managed profile. 1069 * @hide 1070 */ 1071 @SystemApi 1072 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) isManagedProfile(@serIdInt int userId)1073 public boolean isManagedProfile(@UserIdInt int userId) { 1074 if (userId == UserHandle.myUserId()) { 1075 return isManagedProfile(); 1076 } 1077 try { 1078 return mService.isManagedProfile(userId); 1079 } catch (RemoteException re) { 1080 throw re.rethrowFromSystemServer(); 1081 } 1082 } 1083 1084 /** 1085 * Gets badge for a managed profile. 1086 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission, otherwise the caller 1087 * must be in the same profile group of specified user. 1088 * 1089 * @return which badge to use for the managed profile badge id will be less than 1090 * UserManagerService.getMaxManagedProfiles() 1091 * @hide 1092 */ getManagedProfileBadge(@serIdInt int userId)1093 public int getManagedProfileBadge(@UserIdInt int userId) { 1094 try { 1095 return mService.getManagedProfileBadge(userId); 1096 } catch (RemoteException re) { 1097 throw re.rethrowFromSystemServer(); 1098 } 1099 } 1100 1101 /** 1102 * Checks if the calling app is running as an ephemeral user. 1103 * 1104 * @return whether the caller is an ephemeral user. 1105 * @hide 1106 */ isEphemeralUser()1107 public boolean isEphemeralUser() { 1108 return isUserEphemeral(UserHandle.myUserId()); 1109 } 1110 1111 /** 1112 * Returns whether the specified user is ephemeral. 1113 * @hide 1114 */ isUserEphemeral(@serIdInt int userId)1115 public boolean isUserEphemeral(@UserIdInt int userId) { 1116 final UserInfo user = getUserInfo(userId); 1117 return user != null && user.isEphemeral(); 1118 } 1119 1120 /** 1121 * Return whether the given user is actively running. This means that 1122 * the user is in the "started" state, not "stopped" -- it is currently 1123 * allowed to run code through scheduled alarms, receiving broadcasts, 1124 * etc. A started user may be either the current foreground user or a 1125 * background user; the result here does not distinguish between the two. 1126 * 1127 * <p>Note prior to Android Nougat MR1 (SDK version <= 24; 1128 * {@link android.os.Build.VERSION_CODES#N), this API required a system permission 1129 * in order to check other profile's status. 1130 * Since Android Nougat MR1 (SDK version >= 25; 1131 * {@link android.os.Build.VERSION_CODES#N_MR1)), the restriction has been relaxed, and now 1132 * it'll accept any {@link UserHandle} within the same profile group as the caller. 1133 * 1134 * @param user The user to retrieve the running state for. 1135 */ 1136 // Note this requires either INTERACT_ACROSS_USERS or MANAGE_USERS. isUserRunning(UserHandle user)1137 public boolean isUserRunning(UserHandle user) { 1138 return isUserRunning(user.getIdentifier()); 1139 } 1140 1141 /** {@hide} */ isUserRunning(@serIdInt int userId)1142 public boolean isUserRunning(@UserIdInt int userId) { 1143 try { 1144 return mService.isUserRunning(userId); 1145 } catch (RemoteException re) { 1146 throw re.rethrowFromSystemServer(); 1147 } 1148 } 1149 1150 /** 1151 * Return whether the given user is actively running <em>or</em> stopping. 1152 * This is like {@link #isUserRunning(UserHandle)}, but will also return 1153 * true if the user had been running but is in the process of being stopped 1154 * (but is not yet fully stopped, and still running some code). 1155 * 1156 * <p>Note prior to Android Nougat MR1 (SDK version <= 24; 1157 * {@link android.os.Build.VERSION_CODES#N), this API required a system permission 1158 * in order to check other profile's status. 1159 * Since Android Nougat MR1 (SDK version >= 25; 1160 * {@link android.os.Build.VERSION_CODES#N_MR1)), the restriction has been relaxed, and now 1161 * it'll accept any {@link UserHandle} within the same profile group as the caller. 1162 * 1163 * @param user The user to retrieve the running state for. 1164 */ 1165 // Note this requires either INTERACT_ACROSS_USERS or MANAGE_USERS. isUserRunningOrStopping(UserHandle user)1166 public boolean isUserRunningOrStopping(UserHandle user) { 1167 try { 1168 // TODO: reconcile stopped vs stopping? 1169 return ActivityManager.getService().isUserRunning( 1170 user.getIdentifier(), ActivityManager.FLAG_OR_STOPPED); 1171 } catch (RemoteException re) { 1172 throw re.rethrowFromSystemServer(); 1173 } 1174 } 1175 1176 /** 1177 * Return whether the calling user is running in an "unlocked" state. 1178 * <p> 1179 * On devices with direct boot, a user is unlocked only after they've 1180 * entered their credentials (such as a lock pattern or PIN). On devices 1181 * without direct boot, a user is unlocked as soon as it starts. 1182 * <p> 1183 * When a user is locked, only device-protected data storage is available. 1184 * When a user is unlocked, both device-protected and credential-protected 1185 * private app data storage is available. 1186 * 1187 * @see Intent#ACTION_USER_UNLOCKED 1188 * @see Context#createDeviceProtectedStorageContext() 1189 */ isUserUnlocked()1190 public boolean isUserUnlocked() { 1191 return isUserUnlocked(Process.myUserHandle()); 1192 } 1193 1194 /** 1195 * Return whether the given user is running in an "unlocked" state. 1196 * <p> 1197 * On devices with direct boot, a user is unlocked only after they've 1198 * entered their credentials (such as a lock pattern or PIN). On devices 1199 * without direct boot, a user is unlocked as soon as it starts. 1200 * <p> 1201 * When a user is locked, only device-protected data storage is available. 1202 * When a user is unlocked, both device-protected and credential-protected 1203 * private app data storage is available. 1204 * <p>Requires {@code android.permission.MANAGE_USERS} or 1205 * {@code android.permission.INTERACT_ACROSS_USERS}, otherwise specified {@link UserHandle user} 1206 * must be the calling user or a managed profile associated with it. 1207 * 1208 * @param user to retrieve the unlocked state for. 1209 * @see Intent#ACTION_USER_UNLOCKED 1210 * @see Context#createDeviceProtectedStorageContext() 1211 */ isUserUnlocked(UserHandle user)1212 public boolean isUserUnlocked(UserHandle user) { 1213 return isUserUnlocked(user.getIdentifier()); 1214 } 1215 1216 /** {@hide} */ isUserUnlocked(@serIdInt int userId)1217 public boolean isUserUnlocked(@UserIdInt int userId) { 1218 try { 1219 return mService.isUserUnlocked(userId); 1220 } catch (RemoteException re) { 1221 throw re.rethrowFromSystemServer(); 1222 } 1223 } 1224 1225 /** {@hide} */ isUserUnlockingOrUnlocked(UserHandle user)1226 public boolean isUserUnlockingOrUnlocked(UserHandle user) { 1227 return isUserUnlockingOrUnlocked(user.getIdentifier()); 1228 } 1229 1230 /** {@hide} */ isUserUnlockingOrUnlocked(@serIdInt int userId)1231 public boolean isUserUnlockingOrUnlocked(@UserIdInt int userId) { 1232 try { 1233 return mService.isUserUnlockingOrUnlocked(userId); 1234 } catch (RemoteException re) { 1235 throw re.rethrowFromSystemServer(); 1236 } 1237 } 1238 1239 /** 1240 * Returns the UserInfo object describing a specific user. 1241 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1242 * @param userHandle the user handle of the user whose information is being requested. 1243 * @return the UserInfo object for a specific user. 1244 * @hide 1245 */ getUserInfo(@serIdInt int userHandle)1246 public UserInfo getUserInfo(@UserIdInt int userHandle) { 1247 try { 1248 return mService.getUserInfo(userHandle); 1249 } catch (RemoteException re) { 1250 throw re.rethrowFromSystemServer(); 1251 } 1252 } 1253 1254 /** 1255 * @hide 1256 * 1257 * Returns who set a user restriction on a user. 1258 * @param restrictionKey the string key representing the restriction 1259 * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. 1260 * @return The source of user restriction. Any combination of {@link #RESTRICTION_NOT_SET}, 1261 * {@link #RESTRICTION_SOURCE_SYSTEM}, {@link #RESTRICTION_SOURCE_DEVICE_OWNER} 1262 * and {@link #RESTRICTION_SOURCE_PROFILE_OWNER} 1263 * @deprecated use {@link #getUserRestrictionSources(String, int)} instead. 1264 */ 1265 @Deprecated 1266 @SystemApi 1267 @UserRestrictionSource 1268 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getUserRestrictionSource(String restrictionKey, UserHandle userHandle)1269 public int getUserRestrictionSource(String restrictionKey, UserHandle userHandle) { 1270 try { 1271 return mService.getUserRestrictionSource(restrictionKey, userHandle.getIdentifier()); 1272 } catch (RemoteException re) { 1273 throw re.rethrowFromSystemServer(); 1274 } 1275 } 1276 1277 /** 1278 * @hide 1279 * 1280 * Returns a list of users who set a user restriction on a given user. 1281 * @param restrictionKey the string key representing the restriction 1282 * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. 1283 * @return a list of user ids enforcing this restriction. 1284 */ 1285 @SystemApi 1286 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getUserRestrictionSources( String restrictionKey, UserHandle userHandle)1287 public List<EnforcingUser> getUserRestrictionSources( 1288 String restrictionKey, UserHandle userHandle) { 1289 try { 1290 return mService.getUserRestrictionSources(restrictionKey, userHandle.getIdentifier()); 1291 } catch (RemoteException re) { 1292 throw re.rethrowFromSystemServer(); 1293 } 1294 } 1295 1296 /** 1297 * Returns the user-wide restrictions imposed on this user. 1298 * @return a Bundle containing all the restrictions. 1299 */ getUserRestrictions()1300 public Bundle getUserRestrictions() { 1301 return getUserRestrictions(Process.myUserHandle()); 1302 } 1303 1304 /** 1305 * Returns the user-wide restrictions imposed on the user specified by <code>userHandle</code>. 1306 * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. 1307 * @return a Bundle containing all the restrictions. 1308 */ getUserRestrictions(UserHandle userHandle)1309 public Bundle getUserRestrictions(UserHandle userHandle) { 1310 try { 1311 return mService.getUserRestrictions(userHandle.getIdentifier()); 1312 } catch (RemoteException re) { 1313 throw re.rethrowFromSystemServer(); 1314 } 1315 } 1316 1317 /** 1318 * @hide 1319 * Returns whether the given user has been disallowed from performing certain actions 1320 * or setting certain settings through UserManager. This method disregards restrictions 1321 * set by device policy. 1322 * @param restrictionKey the string key representing the restriction 1323 * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. 1324 */ hasBaseUserRestriction(String restrictionKey, UserHandle userHandle)1325 public boolean hasBaseUserRestriction(String restrictionKey, UserHandle userHandle) { 1326 try { 1327 return mService.hasBaseUserRestriction(restrictionKey, userHandle.getIdentifier()); 1328 } catch (RemoteException re) { 1329 throw re.rethrowFromSystemServer(); 1330 } 1331 } 1332 1333 /** 1334 * This will no longer work. Device owners and profile owners should use 1335 * {@link DevicePolicyManager#addUserRestriction(ComponentName, String)} instead. 1336 */ 1337 // System apps should use UserManager.setUserRestriction() instead. 1338 @Deprecated setUserRestrictions(Bundle restrictions)1339 public void setUserRestrictions(Bundle restrictions) { 1340 throw new UnsupportedOperationException("This method is no longer supported"); 1341 } 1342 1343 /** 1344 * This will no longer work. Device owners and profile owners should use 1345 * {@link DevicePolicyManager#addUserRestriction(ComponentName, String)} instead. 1346 */ 1347 // System apps should use UserManager.setUserRestriction() instead. 1348 @Deprecated setUserRestrictions(Bundle restrictions, UserHandle userHandle)1349 public void setUserRestrictions(Bundle restrictions, UserHandle userHandle) { 1350 throw new UnsupportedOperationException("This method is no longer supported"); 1351 } 1352 1353 /** 1354 * Sets the value of a specific restriction. 1355 * Requires the MANAGE_USERS permission. 1356 * @param key the key of the restriction 1357 * @param value the value for the restriction 1358 * @deprecated use {@link android.app.admin.DevicePolicyManager#addUserRestriction( 1359 * android.content.ComponentName, String)} or 1360 * {@link android.app.admin.DevicePolicyManager#clearUserRestriction( 1361 * android.content.ComponentName, String)} instead. 1362 */ 1363 @Deprecated setUserRestriction(String key, boolean value)1364 public void setUserRestriction(String key, boolean value) { 1365 setUserRestriction(key, value, Process.myUserHandle()); 1366 } 1367 1368 /** 1369 * @hide 1370 * Sets the value of a specific restriction on a specific user. 1371 * Requires the MANAGE_USERS permission. 1372 * @param key the key of the restriction 1373 * @param value the value for the restriction 1374 * @param userHandle the user whose restriction is to be changed. 1375 * @deprecated use {@link android.app.admin.DevicePolicyManager#addUserRestriction( 1376 * android.content.ComponentName, String)} or 1377 * {@link android.app.admin.DevicePolicyManager#clearUserRestriction( 1378 * android.content.ComponentName, String)} instead. 1379 */ 1380 @Deprecated setUserRestriction(String key, boolean value, UserHandle userHandle)1381 public void setUserRestriction(String key, boolean value, UserHandle userHandle) { 1382 try { 1383 mService.setUserRestriction(key, value, userHandle.getIdentifier()); 1384 } catch (RemoteException re) { 1385 throw re.rethrowFromSystemServer(); 1386 } 1387 } 1388 1389 /** 1390 * Returns whether the current user has been disallowed from performing certain actions 1391 * or setting certain settings. 1392 * 1393 * @param restrictionKey The string key representing the restriction. 1394 * @return {@code true} if the current user has the given restriction, {@code false} otherwise. 1395 */ hasUserRestriction(String restrictionKey)1396 public boolean hasUserRestriction(String restrictionKey) { 1397 return hasUserRestriction(restrictionKey, Process.myUserHandle()); 1398 } 1399 1400 /** 1401 * @hide 1402 * Returns whether the given user has been disallowed from performing certain actions 1403 * or setting certain settings. 1404 * @param restrictionKey the string key representing the restriction 1405 * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. 1406 */ hasUserRestriction(String restrictionKey, UserHandle userHandle)1407 public boolean hasUserRestriction(String restrictionKey, UserHandle userHandle) { 1408 try { 1409 return mService.hasUserRestriction(restrictionKey, 1410 userHandle.getIdentifier()); 1411 } catch (RemoteException re) { 1412 throw re.rethrowFromSystemServer(); 1413 } 1414 } 1415 1416 /** 1417 * Return the serial number for a user. This is a device-unique 1418 * number assigned to that user; if the user is deleted and then a new 1419 * user created, the new users will not be given the same serial number. 1420 * @param user The user whose serial number is to be retrieved. 1421 * @return The serial number of the given user; returns -1 if the 1422 * given UserHandle does not exist. 1423 * @see #getUserForSerialNumber(long) 1424 */ getSerialNumberForUser(UserHandle user)1425 public long getSerialNumberForUser(UserHandle user) { 1426 return getUserSerialNumber(user.getIdentifier()); 1427 } 1428 1429 /** 1430 * Return the user associated with a serial number previously 1431 * returned by {@link #getSerialNumberForUser(UserHandle)}. 1432 * @param serialNumber The serial number of the user that is being 1433 * retrieved. 1434 * @return Return the user associated with the serial number, or null 1435 * if there is not one. 1436 * @see #getSerialNumberForUser(UserHandle) 1437 */ getUserForSerialNumber(long serialNumber)1438 public UserHandle getUserForSerialNumber(long serialNumber) { 1439 int ident = getUserHandle((int) serialNumber); 1440 return ident >= 0 ? new UserHandle(ident) : null; 1441 } 1442 1443 /** 1444 * Creates a user with the specified name and options. For non-admin users, default user 1445 * restrictions are going to be applied. 1446 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1447 * 1448 * @param name the user's name 1449 * @param flags flags that identify the type of user and other properties. 1450 * @see UserInfo 1451 * 1452 * @return the UserInfo object for the created user, or null if the user could not be created. 1453 * @hide 1454 */ createUser(String name, int flags)1455 public UserInfo createUser(String name, int flags) { 1456 UserInfo user = null; 1457 try { 1458 user = mService.createUser(name, flags); 1459 // TODO: Keep this in sync with 1460 // UserManagerService.LocalService.createUserEvenWhenDisallowed 1461 if (user != null && !user.isAdmin()) { 1462 mService.setUserRestriction(DISALLOW_SMS, true, user.id); 1463 mService.setUserRestriction(DISALLOW_OUTGOING_CALLS, true, user.id); 1464 } 1465 } catch (RemoteException re) { 1466 throw re.rethrowFromSystemServer(); 1467 } 1468 return user; 1469 } 1470 1471 /** 1472 * Creates a guest user and configures it. 1473 * @param context an application context 1474 * @param name the name to set for the user 1475 * @hide 1476 */ createGuest(Context context, String name)1477 public UserInfo createGuest(Context context, String name) { 1478 UserInfo guest = null; 1479 try { 1480 guest = mService.createUser(name, UserInfo.FLAG_GUEST); 1481 if (guest != null) { 1482 Settings.Secure.putStringForUser(context.getContentResolver(), 1483 Settings.Secure.SKIP_FIRST_USE_HINTS, "1", guest.id); 1484 } 1485 } catch (RemoteException re) { 1486 throw re.rethrowFromSystemServer(); 1487 } 1488 return guest; 1489 } 1490 1491 /** 1492 * Creates a user with the specified name and options as a profile of another user. 1493 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1494 * 1495 * @param name the user's name 1496 * @param flags flags that identify the type of user and other properties. 1497 * @param userHandle new user will be a profile of this user. 1498 * 1499 * @return the {@link UserInfo} object for the created user, or null if the user 1500 * could not be created. 1501 * @hide 1502 */ createProfileForUser(String name, int flags, @UserIdInt int userHandle)1503 public UserInfo createProfileForUser(String name, int flags, @UserIdInt int userHandle) { 1504 return createProfileForUser(name, flags, userHandle, null); 1505 } 1506 1507 /** 1508 * Version of {@link #createProfileForUser(String, int, int)} that allows you to specify 1509 * any packages that should not be installed in the new profile by default, these packages can 1510 * still be installed later by the user if needed. 1511 * 1512 * @param name the user's name 1513 * @param flags flags that identify the type of user and other properties. 1514 * @param userHandle new user will be a profile of this user. 1515 * @param disallowedPackages packages that will not be installed in the profile being created. 1516 * 1517 * @return the {@link UserInfo} object for the created user, or null if the user 1518 * could not be created. 1519 * @hide 1520 */ createProfileForUser(String name, int flags, @UserIdInt int userHandle, String[] disallowedPackages)1521 public UserInfo createProfileForUser(String name, int flags, @UserIdInt int userHandle, 1522 String[] disallowedPackages) { 1523 try { 1524 return mService.createProfileForUser(name, flags, userHandle, disallowedPackages); 1525 } catch (RemoteException re) { 1526 throw re.rethrowFromSystemServer(); 1527 } 1528 } 1529 1530 /** 1531 * Similar to {@link #createProfileForUser(String, int, int, String[])} 1532 * except bypassing the checking of {@link UserManager#DISALLOW_ADD_MANAGED_PROFILE}. 1533 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1534 * 1535 * @see #createProfileForUser(String, int, int, String[]) 1536 * @hide 1537 */ createProfileForUserEvenWhenDisallowed(String name, int flags, @UserIdInt int userHandle, String[] disallowedPackages)1538 public UserInfo createProfileForUserEvenWhenDisallowed(String name, int flags, 1539 @UserIdInt int userHandle, String[] disallowedPackages) { 1540 try { 1541 return mService.createProfileForUserEvenWhenDisallowed(name, flags, userHandle, 1542 disallowedPackages); 1543 } catch (RemoteException re) { 1544 throw re.rethrowFromSystemServer(); 1545 } 1546 } 1547 1548 /** 1549 * Creates a restricted profile with the specified name. This method also sets necessary 1550 * restrictions and adds shared accounts. 1551 * 1552 * @param name profile's name 1553 * @return UserInfo object for the created user, or null if the user could not be created. 1554 * @hide 1555 */ createRestrictedProfile(String name)1556 public UserInfo createRestrictedProfile(String name) { 1557 try { 1558 UserHandle parentUserHandle = Process.myUserHandle(); 1559 UserInfo user = mService.createRestrictedProfile(name, 1560 parentUserHandle.getIdentifier()); 1561 if (user != null) { 1562 AccountManager.get(mContext).addSharedAccountsFromParentUser(parentUserHandle, 1563 UserHandle.of(user.id)); 1564 } 1565 return user; 1566 } catch (RemoteException re) { 1567 throw re.rethrowFromSystemServer(); 1568 } 1569 } 1570 1571 /** 1572 * Returns an intent to create a user for the provided name and account name. The name 1573 * and account name will be used when the setup process for the new user is started. 1574 * <p> 1575 * The intent should be launched using startActivityForResult and the return result will 1576 * indicate if the user consented to adding a new user and if the operation succeeded. Any 1577 * errors in creating the user will be returned in the result code. If the user cancels the 1578 * request, the return result will be {@link Activity#RESULT_CANCELED}. On success, the 1579 * result code will be {@link Activity#RESULT_OK}. 1580 * <p> 1581 * Use {@link #supportsMultipleUsers()} to first check if the device supports this operation 1582 * at all. 1583 * <p> 1584 * The new user is created but not initialized. After switching into the user for the first 1585 * time, the preferred user name and account information are used by the setup process for that 1586 * user. 1587 * 1588 * @param userName Optional name to assign to the user. 1589 * @param accountName Optional account name that will be used by the setup wizard to initialize 1590 * the user. 1591 * @param accountType Optional account type for the account to be created. This is required 1592 * if the account name is specified. 1593 * @param accountOptions Optional bundle of data to be passed in during account creation in the 1594 * new user via {@link AccountManager#addAccount(String, String, String[], 1595 * Bundle, android.app.Activity, android.accounts.AccountManagerCallback, 1596 * Handler)}. 1597 * @return An Intent that can be launched from an Activity. 1598 * @see #USER_CREATION_FAILED_NOT_PERMITTED 1599 * @see #USER_CREATION_FAILED_NO_MORE_USERS 1600 * @see #supportsMultipleUsers 1601 */ createUserCreationIntent(@ullable String userName, @Nullable String accountName, @Nullable String accountType, @Nullable PersistableBundle accountOptions)1602 public static Intent createUserCreationIntent(@Nullable String userName, 1603 @Nullable String accountName, 1604 @Nullable String accountType, @Nullable PersistableBundle accountOptions) { 1605 Intent intent = new Intent(ACTION_CREATE_USER); 1606 if (userName != null) { 1607 intent.putExtra(EXTRA_USER_NAME, userName); 1608 } 1609 if (accountName != null && accountType == null) { 1610 throw new IllegalArgumentException("accountType must be specified if accountName is " 1611 + "specified"); 1612 } 1613 if (accountName != null) { 1614 intent.putExtra(EXTRA_USER_ACCOUNT_NAME, accountName); 1615 } 1616 if (accountType != null) { 1617 intent.putExtra(EXTRA_USER_ACCOUNT_TYPE, accountType); 1618 } 1619 if (accountOptions != null) { 1620 intent.putExtra(EXTRA_USER_ACCOUNT_OPTIONS, accountOptions); 1621 } 1622 return intent; 1623 } 1624 1625 /** 1626 * @hide 1627 * 1628 * Returns the preferred account name for user creation. 1629 */ 1630 @SystemApi 1631 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getSeedAccountName()1632 public String getSeedAccountName() { 1633 try { 1634 return mService.getSeedAccountName(); 1635 } catch (RemoteException re) { 1636 throw re.rethrowFromSystemServer(); 1637 } 1638 } 1639 1640 /** 1641 * @hide 1642 * 1643 * Returns the preferred account type for user creation. 1644 */ 1645 @SystemApi 1646 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getSeedAccountType()1647 public String getSeedAccountType() { 1648 try { 1649 return mService.getSeedAccountType(); 1650 } catch (RemoteException re) { 1651 throw re.rethrowFromSystemServer(); 1652 } 1653 } 1654 1655 /** 1656 * @hide 1657 * 1658 * Returns the preferred account's options bundle for user creation. 1659 * @return Any options set by the requestor that created the user. 1660 */ 1661 @SystemApi 1662 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getSeedAccountOptions()1663 public PersistableBundle getSeedAccountOptions() { 1664 try { 1665 return mService.getSeedAccountOptions(); 1666 } catch (RemoteException re) { 1667 throw re.rethrowFromSystemServer(); 1668 } 1669 } 1670 1671 /** 1672 * @hide 1673 * 1674 * Called by a system activity to set the seed account information of a user created 1675 * through the user creation intent. 1676 * @param userId 1677 * @param accountName 1678 * @param accountType 1679 * @param accountOptions 1680 * @see #createUserCreationIntent(String, String, String, PersistableBundle) 1681 */ setSeedAccountData(int userId, String accountName, String accountType, PersistableBundle accountOptions)1682 public void setSeedAccountData(int userId, String accountName, String accountType, 1683 PersistableBundle accountOptions) { 1684 try { 1685 mService.setSeedAccountData(userId, accountName, accountType, accountOptions, 1686 /* persist= */ true); 1687 } catch (RemoteException re) { 1688 throw re.rethrowFromSystemServer(); 1689 } 1690 } 1691 1692 /** 1693 * @hide 1694 * Clears the seed information used to create this user. 1695 */ 1696 @SystemApi 1697 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) clearSeedAccountData()1698 public void clearSeedAccountData() { 1699 try { 1700 mService.clearSeedAccountData(); 1701 } catch (RemoteException re) { 1702 throw re.rethrowFromSystemServer(); 1703 } 1704 } 1705 1706 /** 1707 * @hide 1708 * Marks the guest user for deletion to allow a new guest to be created before deleting 1709 * the current user who is a guest. 1710 * @param userHandle 1711 * @return 1712 */ markGuestForDeletion(@serIdInt int userHandle)1713 public boolean markGuestForDeletion(@UserIdInt int userHandle) { 1714 try { 1715 return mService.markGuestForDeletion(userHandle); 1716 } catch (RemoteException re) { 1717 throw re.rethrowFromSystemServer(); 1718 } 1719 } 1720 1721 /** 1722 * Sets the user as enabled, if such an user exists. 1723 * 1724 * <p>Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1725 * 1726 * <p>Note that the default is true, it's only that managed profiles might not be enabled. 1727 * Also ephemeral users can be disabled to indicate that their removal is in progress and they 1728 * shouldn't be re-entered. Therefore ephemeral users should not be re-enabled once disabled. 1729 * 1730 * @param userHandle the id of the profile to enable 1731 * @hide 1732 */ setUserEnabled(@serIdInt int userHandle)1733 public void setUserEnabled(@UserIdInt int userHandle) { 1734 try { 1735 mService.setUserEnabled(userHandle); 1736 } catch (RemoteException re) { 1737 throw re.rethrowFromSystemServer(); 1738 } 1739 } 1740 1741 /** 1742 * Evicts the user's credential encryption key from memory by stopping and restarting the user. 1743 * 1744 * @hide 1745 */ evictCredentialEncryptionKey(@serIdInt int userHandle)1746 public void evictCredentialEncryptionKey(@UserIdInt int userHandle) { 1747 try { 1748 mService.evictCredentialEncryptionKey(userHandle); 1749 } catch (RemoteException re) { 1750 throw re.rethrowFromSystemServer(); 1751 } 1752 } 1753 1754 /** 1755 * Return the number of users currently created on the device. 1756 */ getUserCount()1757 public int getUserCount() { 1758 List<UserInfo> users = getUsers(); 1759 return users != null ? users.size() : 1; 1760 } 1761 1762 /** 1763 * Returns information for all users on this device, including ones marked for deletion. 1764 * To retrieve only users that are alive, use {@link #getUsers(boolean)}. 1765 * <p> 1766 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1767 * @return the list of users that exist on the device. 1768 * @hide 1769 */ getUsers()1770 public List<UserInfo> getUsers() { 1771 try { 1772 return mService.getUsers(false); 1773 } catch (RemoteException re) { 1774 throw re.rethrowFromSystemServer(); 1775 } 1776 } 1777 1778 /** 1779 * Returns serial numbers of all users on this device. 1780 * 1781 * @param excludeDying specify if the list should exclude users being removed. 1782 * @return the list of serial numbers of users that exist on the device. 1783 * @hide 1784 */ 1785 @SystemApi 1786 @RequiresPermission(android.Manifest.permission.MANAGE_USERS) getSerialNumbersOfUsers(boolean excludeDying)1787 public long[] getSerialNumbersOfUsers(boolean excludeDying) { 1788 try { 1789 List<UserInfo> users = mService.getUsers(excludeDying); 1790 long[] result = new long[users.size()]; 1791 for (int i = 0; i < result.length; i++) { 1792 result[i] = users.get(i).serialNumber; 1793 } 1794 return result; 1795 } catch (RemoteException re) { 1796 throw re.rethrowFromSystemServer(); 1797 } 1798 } 1799 1800 /** 1801 * @return the user's account name, null if not found. 1802 * @hide 1803 */ 1804 @RequiresPermission( allOf = { 1805 Manifest.permission.INTERACT_ACROSS_USERS_FULL, 1806 Manifest.permission.MANAGE_USERS 1807 }) getUserAccount(@serIdInt int userHandle)1808 public @Nullable String getUserAccount(@UserIdInt int userHandle) { 1809 try { 1810 return mService.getUserAccount(userHandle); 1811 } catch (RemoteException re) { 1812 throw re.rethrowFromSystemServer(); 1813 } 1814 } 1815 1816 /** 1817 * Set account name for the given user. 1818 * @hide 1819 */ 1820 @RequiresPermission( allOf = { 1821 Manifest.permission.INTERACT_ACROSS_USERS_FULL, 1822 Manifest.permission.MANAGE_USERS 1823 }) setUserAccount(@serIdInt int userHandle, @Nullable String accountName)1824 public void setUserAccount(@UserIdInt int userHandle, @Nullable String accountName) { 1825 try { 1826 mService.setUserAccount(userHandle, accountName); 1827 } catch (RemoteException re) { 1828 throw re.rethrowFromSystemServer(); 1829 } 1830 } 1831 1832 /** 1833 * Returns information for Primary user. 1834 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1835 * 1836 * @return the Primary user, null if not found. 1837 * @hide 1838 */ getPrimaryUser()1839 public @Nullable UserInfo getPrimaryUser() { 1840 try { 1841 return mService.getPrimaryUser(); 1842 } catch (RemoteException re) { 1843 throw re.rethrowFromSystemServer(); 1844 } 1845 } 1846 1847 /** 1848 * Checks whether it's possible to add more users. Caller must hold the MANAGE_USERS 1849 * permission. 1850 * 1851 * @return true if more users can be added, false if limit has been reached. 1852 * @hide 1853 */ canAddMoreUsers()1854 public boolean canAddMoreUsers() { 1855 final List<UserInfo> users = getUsers(true); 1856 final int totalUserCount = users.size(); 1857 int aliveUserCount = 0; 1858 for (int i = 0; i < totalUserCount; i++) { 1859 UserInfo user = users.get(i); 1860 if (!user.isGuest()) { 1861 aliveUserCount++; 1862 } 1863 } 1864 return aliveUserCount < getMaxSupportedUsers(); 1865 } 1866 1867 /** 1868 * Checks whether it's possible to add more managed profiles. Caller must hold the MANAGE_USERS 1869 * permission. 1870 * if allowedToRemoveOne is true and if the user already has a managed profile, then return if 1871 * we could add a new managed profile to this user after removing the existing one. 1872 * 1873 * @return true if more managed profiles can be added, false if limit has been reached. 1874 * @hide 1875 */ canAddMoreManagedProfiles(@serIdInt int userId, boolean allowedToRemoveOne)1876 public boolean canAddMoreManagedProfiles(@UserIdInt int userId, boolean allowedToRemoveOne) { 1877 try { 1878 return mService.canAddMoreManagedProfiles(userId, allowedToRemoveOne); 1879 } catch (RemoteException re) { 1880 throw re.rethrowFromSystemServer(); 1881 } 1882 } 1883 1884 /** 1885 * Returns list of the profiles of userHandle including 1886 * userHandle itself. 1887 * Note that this returns both enabled and not enabled profiles. See 1888 * {@link #getEnabledProfiles(int)} if you need only the enabled ones. 1889 * 1890 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1891 * @param userHandle profiles of this user will be returned. 1892 * @return the list of profiles. 1893 * @hide 1894 */ getProfiles(@serIdInt int userHandle)1895 public List<UserInfo> getProfiles(@UserIdInt int userHandle) { 1896 try { 1897 return mService.getProfiles(userHandle, false /* enabledOnly */); 1898 } catch (RemoteException re) { 1899 throw re.rethrowFromSystemServer(); 1900 } 1901 } 1902 1903 /** 1904 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1905 * @param userId one of the two user ids to check. 1906 * @param otherUserId one of the two user ids to check. 1907 * @return true if the two user ids are in the same profile group. 1908 * @hide 1909 */ isSameProfileGroup(@serIdInt int userId, int otherUserId)1910 public boolean isSameProfileGroup(@UserIdInt int userId, int otherUserId) { 1911 try { 1912 return mService.isSameProfileGroup(userId, otherUserId); 1913 } catch (RemoteException re) { 1914 throw re.rethrowFromSystemServer(); 1915 } 1916 } 1917 1918 /** 1919 * Returns list of the profiles of userHandle including 1920 * userHandle itself. 1921 * Note that this returns only enabled. 1922 * 1923 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 1924 * @param userHandle profiles of this user will be returned. 1925 * @return the list of profiles. 1926 * @hide 1927 */ getEnabledProfiles(@serIdInt int userHandle)1928 public List<UserInfo> getEnabledProfiles(@UserIdInt int userHandle) { 1929 try { 1930 return mService.getProfiles(userHandle, true /* enabledOnly */); 1931 } catch (RemoteException re) { 1932 throw re.rethrowFromSystemServer(); 1933 } 1934 } 1935 1936 /** 1937 * Returns a list of UserHandles for profiles associated with the user that the calling process 1938 * is running on, including the user itself. 1939 * 1940 * @return A non-empty list of UserHandles associated with the calling user. 1941 */ getUserProfiles()1942 public List<UserHandle> getUserProfiles() { 1943 int[] userIds = getProfileIds(UserHandle.myUserId(), true /* enabledOnly */); 1944 List<UserHandle> result = new ArrayList<>(userIds.length); 1945 for (int userId : userIds) { 1946 result.add(UserHandle.of(userId)); 1947 } 1948 return result; 1949 } 1950 1951 /** 1952 * Returns a list of ids for profiles associated with the specified user including the user 1953 * itself. 1954 * 1955 * @param userId id of the user to return profiles for 1956 * @param enabledOnly whether return only {@link UserInfo#isEnabled() enabled} profiles 1957 * @return A non-empty list of ids of profiles associated with the specified user. 1958 * 1959 * @hide 1960 */ getProfileIds(@serIdInt int userId, boolean enabledOnly)1961 public int[] getProfileIds(@UserIdInt int userId, boolean enabledOnly) { 1962 try { 1963 return mService.getProfileIds(userId, enabledOnly); 1964 } catch (RemoteException re) { 1965 throw re.rethrowFromSystemServer(); 1966 } 1967 } 1968 1969 /** 1970 * @see #getProfileIds(int, boolean) 1971 * @hide 1972 */ getProfileIdsWithDisabled(@serIdInt int userId)1973 public int[] getProfileIdsWithDisabled(@UserIdInt int userId) { 1974 return getProfileIds(userId, false /* enabledOnly */); 1975 } 1976 1977 /** 1978 * @see #getProfileIds(int, boolean) 1979 * @hide 1980 */ getEnabledProfileIds(@serIdInt int userId)1981 public int[] getEnabledProfileIds(@UserIdInt int userId) { 1982 return getProfileIds(userId, true /* enabledOnly */); 1983 } 1984 1985 /** 1986 * Returns the device credential owner id of the profile from 1987 * which this method is called, or userHandle if called from a user that 1988 * is not a profile. 1989 * 1990 * @hide 1991 */ getCredentialOwnerProfile(@serIdInt int userHandle)1992 public int getCredentialOwnerProfile(@UserIdInt int userHandle) { 1993 try { 1994 return mService.getCredentialOwnerProfile(userHandle); 1995 } catch (RemoteException re) { 1996 throw re.rethrowFromSystemServer(); 1997 } 1998 } 1999 2000 /** 2001 * Returns the parent of the profile which this method is called from 2002 * or null if called from a user that is not a profile. 2003 * 2004 * @hide 2005 */ getProfileParent(@serIdInt int userHandle)2006 public UserInfo getProfileParent(@UserIdInt int userHandle) { 2007 try { 2008 return mService.getProfileParent(userHandle); 2009 } catch (RemoteException re) { 2010 throw re.rethrowFromSystemServer(); 2011 } 2012 } 2013 2014 /** 2015 * Set quiet mode of a managed profile. 2016 * 2017 * @param userHandle The user handle of the profile. 2018 * @param enableQuietMode Whether quiet mode should be enabled or disabled. 2019 * @hide 2020 */ setQuietModeEnabled(@serIdInt int userHandle, boolean enableQuietMode)2021 public void setQuietModeEnabled(@UserIdInt int userHandle, boolean enableQuietMode) { 2022 try { 2023 mService.setQuietModeEnabled(userHandle, enableQuietMode); 2024 } catch (RemoteException re) { 2025 throw re.rethrowFromSystemServer(); 2026 } 2027 } 2028 2029 /** 2030 * Returns whether the given profile is in quiet mode or not. 2031 * Notes: Quiet mode is only supported for managed profiles. 2032 * 2033 * @param userHandle The user handle of the profile to be queried. 2034 * @return true if the profile is in quiet mode, false otherwise. 2035 */ isQuietModeEnabled(UserHandle userHandle)2036 public boolean isQuietModeEnabled(UserHandle userHandle) { 2037 try { 2038 return mService.isQuietModeEnabled(userHandle.getIdentifier()); 2039 } catch (RemoteException re) { 2040 throw re.rethrowFromSystemServer(); 2041 } 2042 } 2043 2044 /** 2045 * Tries disabling quiet mode for a given user. If the user is still locked, we unlock the user 2046 * first by showing the confirm credentials screen and disable quiet mode upon successful 2047 * unlocking. If the user is already unlocked, we call through to {@link #setQuietModeEnabled} 2048 * directly. 2049 * 2050 * @return true if the quiet mode was disabled immediately 2051 * @hide 2052 */ trySetQuietModeDisabled(@serIdInt int userHandle, IntentSender target)2053 public boolean trySetQuietModeDisabled(@UserIdInt int userHandle, IntentSender target) { 2054 try { 2055 return mService.trySetQuietModeDisabled(userHandle, target); 2056 } catch (RemoteException re) { 2057 throw re.rethrowFromSystemServer(); 2058 } 2059 } 2060 2061 /** 2062 * If the target user is a managed profile of the calling user or the caller 2063 * is itself a managed profile, then this returns a badged copy of the given 2064 * icon to be able to distinguish it from the original icon. For badging an 2065 * arbitrary drawable use {@link #getBadgedDrawableForUser( 2066 * android.graphics.drawable.Drawable, UserHandle, android.graphics.Rect, int)}. 2067 * <p> 2068 * If the original drawable is a BitmapDrawable and the backing bitmap is 2069 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging 2070 * is performed in place and the original drawable is returned. 2071 * </p> 2072 * 2073 * @param icon The icon to badge. 2074 * @param user The target user. 2075 * @return A drawable that combines the original icon and a badge as 2076 * determined by the system. 2077 * @removed 2078 */ getBadgedIconForUser(Drawable icon, UserHandle user)2079 public Drawable getBadgedIconForUser(Drawable icon, UserHandle user) { 2080 return mContext.getPackageManager().getUserBadgedIcon(icon, user); 2081 } 2082 2083 /** 2084 * If the target user is a managed profile of the calling user or the caller 2085 * is itself a managed profile, then this returns a badged copy of the given 2086 * drawable allowing the user to distinguish it from the original drawable. 2087 * The caller can specify the location in the bounds of the drawable to be 2088 * badged where the badge should be applied as well as the density of the 2089 * badge to be used. 2090 * <p> 2091 * If the original drawable is a BitmapDrawable and the backing bitmap is 2092 * mutable as per {@link android.graphics.Bitmap#isMutable()}, the badging 2093 * is performed in place and the original drawable is returned. 2094 * </p> 2095 * 2096 * @param badgedDrawable The drawable to badge. 2097 * @param user The target user. 2098 * @param badgeLocation Where in the bounds of the badged drawable to place 2099 * the badge. If it's {@code null}, the badge is applied on top of the entire 2100 * drawable being badged. 2101 * @param badgeDensity The optional desired density for the badge as per 2102 * {@link android.util.DisplayMetrics#densityDpi}. If it's not positive, 2103 * the density of the display is used. 2104 * @return A drawable that combines the original drawable and a badge as 2105 * determined by the system. 2106 * @removed 2107 */ getBadgedDrawableForUser(Drawable badgedDrawable, UserHandle user, Rect badgeLocation, int badgeDensity)2108 public Drawable getBadgedDrawableForUser(Drawable badgedDrawable, UserHandle user, 2109 Rect badgeLocation, int badgeDensity) { 2110 return mContext.getPackageManager().getUserBadgedDrawableForDensity(badgedDrawable, user, 2111 badgeLocation, badgeDensity); 2112 } 2113 2114 /** 2115 * If the target user is a managed profile of the calling user or the caller 2116 * is itself a managed profile, then this returns a copy of the label with 2117 * badging for accessibility services like talkback. E.g. passing in "Email" 2118 * and it might return "Work Email" for Email in the work profile. 2119 * 2120 * @param label The label to change. 2121 * @param user The target user. 2122 * @return A label that combines the original label and a badge as 2123 * determined by the system. 2124 * @removed 2125 */ getBadgedLabelForUser(CharSequence label, UserHandle user)2126 public CharSequence getBadgedLabelForUser(CharSequence label, UserHandle user) { 2127 return mContext.getPackageManager().getUserBadgedLabel(label, user); 2128 } 2129 2130 /** 2131 * Returns information for all users on this device. Requires 2132 * {@link android.Manifest.permission#MANAGE_USERS} permission. 2133 * 2134 * @param excludeDying specify if the list should exclude users being 2135 * removed. 2136 * @return the list of users that were created. 2137 * @hide 2138 */ getUsers(boolean excludeDying)2139 public @NonNull List<UserInfo> getUsers(boolean excludeDying) { 2140 try { 2141 return mService.getUsers(excludeDying); 2142 } catch (RemoteException re) { 2143 throw re.rethrowFromSystemServer(); 2144 } 2145 } 2146 2147 /** 2148 * Removes a user and all associated data. 2149 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 2150 * @param userHandle the integer handle of the user, where 0 is the primary user. 2151 * @hide 2152 */ removeUser(@serIdInt int userHandle)2153 public boolean removeUser(@UserIdInt int userHandle) { 2154 try { 2155 return mService.removeUser(userHandle); 2156 } catch (RemoteException re) { 2157 throw re.rethrowFromSystemServer(); 2158 } 2159 } 2160 2161 /** 2162 * Similar to {@link #removeUser(int)} except bypassing the checking of 2163 * {@link UserManager#DISALLOW_REMOVE_USER} 2164 * or {@link UserManager#DISALLOW_REMOVE_MANAGED_PROFILE}. 2165 * 2166 * @see {@link #removeUser(int)} 2167 * @hide 2168 */ removeUserEvenWhenDisallowed(@serIdInt int userHandle)2169 public boolean removeUserEvenWhenDisallowed(@UserIdInt int userHandle) { 2170 try { 2171 return mService.removeUserEvenWhenDisallowed(userHandle); 2172 } catch (RemoteException re) { 2173 throw re.rethrowFromSystemServer(); 2174 } 2175 } 2176 2177 /** 2178 * Updates the user's name. 2179 * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. 2180 * 2181 * @param userHandle the user's integer handle 2182 * @param name the new name for the user 2183 * @hide 2184 */ setUserName(@serIdInt int userHandle, String name)2185 public void setUserName(@UserIdInt int userHandle, String name) { 2186 try { 2187 mService.setUserName(userHandle, name); 2188 } catch (RemoteException re) { 2189 throw re.rethrowFromSystemServer(); 2190 } 2191 } 2192 2193 /** 2194 * Sets the user's photo. 2195 * @param userHandle the user for whom to change the photo. 2196 * @param icon the bitmap to set as the photo. 2197 * @hide 2198 */ setUserIcon(@serIdInt int userHandle, Bitmap icon)2199 public void setUserIcon(@UserIdInt int userHandle, Bitmap icon) { 2200 try { 2201 mService.setUserIcon(userHandle, icon); 2202 } catch (RemoteException re) { 2203 throw re.rethrowFromSystemServer(); 2204 } 2205 } 2206 2207 /** 2208 * Returns a file descriptor for the user's photo. PNG data can be read from this file. 2209 * @param userHandle the user whose photo we want to read. 2210 * @return a {@link Bitmap} of the user's photo, or null if there's no photo. 2211 * @see com.android.internal.util.UserIcons#getDefaultUserIcon for a default. 2212 * @hide 2213 */ getUserIcon(@serIdInt int userHandle)2214 public Bitmap getUserIcon(@UserIdInt int userHandle) { 2215 try { 2216 ParcelFileDescriptor fd = mService.getUserIcon(userHandle); 2217 if (fd != null) { 2218 try { 2219 return BitmapFactory.decodeFileDescriptor(fd.getFileDescriptor()); 2220 } finally { 2221 try { 2222 fd.close(); 2223 } catch (IOException e) { 2224 } 2225 } 2226 } 2227 } catch (RemoteException re) { 2228 throw re.rethrowFromSystemServer(); 2229 } 2230 return null; 2231 } 2232 2233 /** 2234 * Returns the maximum number of users that can be created on this device. A return value 2235 * of 1 means that it is a single user device. 2236 * @hide 2237 * @return a value greater than or equal to 1 2238 */ getMaxSupportedUsers()2239 public static int getMaxSupportedUsers() { 2240 // Don't allow multiple users on certain builds 2241 if (android.os.Build.ID.startsWith("JVP")) return 1; 2242 // Svelte devices don't get multi-user. 2243 if (ActivityManager.isLowRamDeviceStatic()) return 1; 2244 return SystemProperties.getInt("fw.max_users", 2245 Resources.getSystem().getInteger(R.integer.config_multiuserMaximumUsers)); 2246 } 2247 2248 /** 2249 * Returns true if the user switcher should be shown, this will be if device supports multi-user 2250 * and there are at least 2 users available that are not managed profiles. 2251 * @hide 2252 * @return true if user switcher should be shown. 2253 */ isUserSwitcherEnabled()2254 public boolean isUserSwitcherEnabled() { 2255 if (!supportsMultipleUsers()) { 2256 return false; 2257 } 2258 // If Demo Mode is on, don't show user switcher 2259 if (isDeviceInDemoMode(mContext)) { 2260 return false; 2261 } 2262 List<UserInfo> users = getUsers(true); 2263 if (users == null) { 2264 return false; 2265 } 2266 int switchableUserCount = 0; 2267 for (UserInfo user : users) { 2268 if (user.supportsSwitchToByUser()) { 2269 ++switchableUserCount; 2270 } 2271 } 2272 final boolean guestEnabled = !mContext.getSystemService(DevicePolicyManager.class) 2273 .getGuestUserDisabled(null); 2274 return switchableUserCount > 1 || guestEnabled; 2275 } 2276 2277 /** 2278 * @hide 2279 */ isDeviceInDemoMode(Context context)2280 public static boolean isDeviceInDemoMode(Context context) { 2281 return Settings.Global.getInt(context.getContentResolver(), 2282 Settings.Global.DEVICE_DEMO_MODE, 0) > 0; 2283 } 2284 2285 /** 2286 * Returns a serial number on this device for a given userHandle. User handles can be recycled 2287 * when deleting and creating users, but serial numbers are not reused until the device is wiped. 2288 * @param userHandle 2289 * @return a serial number associated with that user, or -1 if the userHandle is not valid. 2290 * @hide 2291 */ getUserSerialNumber(@serIdInt int userHandle)2292 public int getUserSerialNumber(@UserIdInt int userHandle) { 2293 try { 2294 return mService.getUserSerialNumber(userHandle); 2295 } catch (RemoteException re) { 2296 throw re.rethrowFromSystemServer(); 2297 } 2298 } 2299 2300 /** 2301 * Returns a userHandle on this device for a given user serial number. User handles can be 2302 * recycled when deleting and creating users, but serial numbers are not reused until the device 2303 * is wiped. 2304 * @param userSerialNumber 2305 * @return the userHandle associated with that user serial number, or -1 if the serial number 2306 * is not valid. 2307 * @hide 2308 */ getUserHandle(int userSerialNumber)2309 public @UserIdInt int getUserHandle(int userSerialNumber) { 2310 try { 2311 return mService.getUserHandle(userSerialNumber); 2312 } catch (RemoteException re) { 2313 throw re.rethrowFromSystemServer(); 2314 } 2315 } 2316 2317 /** 2318 * Returns a {@link Bundle} containing any saved application restrictions for this user, for the 2319 * given package name. Only an application with this package name can call this method. 2320 * 2321 * <p>The returned {@link Bundle} consists of key-value pairs, as defined by the application, 2322 * where the types of values may be: 2323 * <ul> 2324 * <li>{@code boolean} 2325 * <li>{@code int} 2326 * <li>{@code String} or {@code String[]} 2327 * <li>From {@link android.os.Build.VERSION_CODES#M}, {@code Bundle} or {@code Bundle[]} 2328 * </ul> 2329 * 2330 * <p>NOTE: The method performs disk I/O and shouldn't be called on the main thread 2331 * 2332 * @param packageName the package name of the calling application 2333 * @return a {@link Bundle} with the restrictions for that package, or an empty {@link Bundle} 2334 * if there are no saved restrictions. 2335 * 2336 * @see #KEY_RESTRICTIONS_PENDING 2337 */ 2338 @WorkerThread getApplicationRestrictions(String packageName)2339 public Bundle getApplicationRestrictions(String packageName) { 2340 try { 2341 return mService.getApplicationRestrictions(packageName); 2342 } catch (RemoteException re) { 2343 throw re.rethrowFromSystemServer(); 2344 } 2345 } 2346 2347 /** 2348 * @hide 2349 */ 2350 @WorkerThread getApplicationRestrictions(String packageName, UserHandle user)2351 public Bundle getApplicationRestrictions(String packageName, UserHandle user) { 2352 try { 2353 return mService.getApplicationRestrictionsForUser(packageName, user.getIdentifier()); 2354 } catch (RemoteException re) { 2355 throw re.rethrowFromSystemServer(); 2356 } 2357 } 2358 2359 /** 2360 * @hide 2361 */ 2362 @WorkerThread setApplicationRestrictions(String packageName, Bundle restrictions, UserHandle user)2363 public void setApplicationRestrictions(String packageName, Bundle restrictions, 2364 UserHandle user) { 2365 try { 2366 mService.setApplicationRestrictions(packageName, restrictions, user.getIdentifier()); 2367 } catch (RemoteException re) { 2368 throw re.rethrowFromSystemServer(); 2369 } 2370 } 2371 2372 /** 2373 * Sets a new challenge PIN for restrictions. This is only for use by pre-installed 2374 * apps and requires the MANAGE_USERS permission. 2375 * @param newPin the PIN to use for challenge dialogs. 2376 * @return Returns true if the challenge PIN was set successfully. 2377 * @deprecated The restrictions PIN functionality is no longer provided by the system. 2378 * This method is preserved for backwards compatibility reasons and always returns false. 2379 */ 2380 @Deprecated setRestrictionsChallenge(String newPin)2381 public boolean setRestrictionsChallenge(String newPin) { 2382 return false; 2383 } 2384 2385 /** 2386 * @hide 2387 * Set restrictions that should apply to any future guest user that's created. 2388 */ setDefaultGuestRestrictions(Bundle restrictions)2389 public void setDefaultGuestRestrictions(Bundle restrictions) { 2390 try { 2391 mService.setDefaultGuestRestrictions(restrictions); 2392 } catch (RemoteException re) { 2393 throw re.rethrowFromSystemServer(); 2394 } 2395 } 2396 2397 /** 2398 * @hide 2399 * Gets the default guest restrictions. 2400 */ getDefaultGuestRestrictions()2401 public Bundle getDefaultGuestRestrictions() { 2402 try { 2403 return mService.getDefaultGuestRestrictions(); 2404 } catch (RemoteException re) { 2405 throw re.rethrowFromSystemServer(); 2406 } 2407 } 2408 2409 /** 2410 * Returns creation time of the user or of a managed profile associated with the calling user. 2411 * @param userHandle user handle of the user or a managed profile associated with the 2412 * calling user. 2413 * @return creation time in milliseconds since Epoch time. 2414 */ getUserCreationTime(UserHandle userHandle)2415 public long getUserCreationTime(UserHandle userHandle) { 2416 try { 2417 return mService.getUserCreationTime(userHandle.getIdentifier()); 2418 } catch (RemoteException re) { 2419 throw re.rethrowFromSystemServer(); 2420 } 2421 } 2422 2423 /** 2424 * @hide 2425 * Checks if any uninitialized user has the specific seed account name and type. 2426 * 2427 * @param accountName The account name to check for 2428 * @param accountType The account type of the account to check for 2429 * @return whether the seed account was found 2430 */ someUserHasSeedAccount(String accountName, String accountType)2431 public boolean someUserHasSeedAccount(String accountName, String accountType) { 2432 try { 2433 return mService.someUserHasSeedAccount(accountName, accountType); 2434 } catch (RemoteException re) { 2435 throw re.rethrowFromSystemServer(); 2436 } 2437 } 2438 2439 /** 2440 * @hide 2441 * User that enforces a restriction. 2442 * 2443 * @see #getUserRestrictionSources(String, UserHandle) 2444 */ 2445 @SystemApi 2446 public static final class EnforcingUser implements Parcelable { 2447 private final @UserIdInt int userId; 2448 private final @UserRestrictionSource int userRestrictionSource; 2449 2450 /** 2451 * @hide 2452 */ EnforcingUser( @serIdInt int userId, @UserRestrictionSource int userRestrictionSource)2453 public EnforcingUser( 2454 @UserIdInt int userId, @UserRestrictionSource int userRestrictionSource) { 2455 this.userId = userId; 2456 this.userRestrictionSource = userRestrictionSource; 2457 } 2458 EnforcingUser(Parcel in)2459 private EnforcingUser(Parcel in) { 2460 userId = in.readInt(); 2461 userRestrictionSource = in.readInt(); 2462 } 2463 2464 public static final Creator<EnforcingUser> CREATOR = new Creator<EnforcingUser>() { 2465 @Override 2466 public EnforcingUser createFromParcel(Parcel in) { 2467 return new EnforcingUser(in); 2468 } 2469 2470 @Override 2471 public EnforcingUser[] newArray(int size) { 2472 return new EnforcingUser[size]; 2473 } 2474 }; 2475 2476 @Override describeContents()2477 public int describeContents() { 2478 return 0; 2479 } 2480 2481 @Override writeToParcel(Parcel dest, int flags)2482 public void writeToParcel(Parcel dest, int flags) { 2483 dest.writeInt(userId); 2484 dest.writeInt(userRestrictionSource); 2485 } 2486 2487 /** 2488 * Returns an id of the enforcing user. 2489 * 2490 * <p> Will be UserHandle.USER_NULL when restriction is set by the system. 2491 */ getUserHandle()2492 public UserHandle getUserHandle() { 2493 return UserHandle.of(userId); 2494 } 2495 2496 /** 2497 * Returns the status of the enforcing user. 2498 * 2499 * <p> One of {@link #RESTRICTION_SOURCE_SYSTEM}, 2500 * {@link #RESTRICTION_SOURCE_DEVICE_OWNER} and 2501 * {@link #RESTRICTION_SOURCE_PROFILE_OWNER} 2502 */ getUserRestrictionSource()2503 public @UserRestrictionSource int getUserRestrictionSource() { 2504 return userRestrictionSource; 2505 } 2506 } 2507 } 2508