Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -36228,6 +36228,7 @@ package android.os { method public boolean isUserUnlocked(); method public boolean isUserUnlocked(android.os.UserHandle); method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle); method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle, int); method @Deprecated public boolean setRestrictionsChallenge(String); method @Deprecated public void setUserRestriction(String, boolean); method @Deprecated public void setUserRestrictions(android.os.Bundle); Loading Loading @@ -36289,6 +36290,7 @@ package android.os { field public static final String DISALLOW_USER_SWITCH = "no_user_switch"; field public static final String ENSURE_VERIFY_APPS = "ensure_verify_apps"; field public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; field public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 1; // 0x1 field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1 field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2 field public static final int USER_OPERATION_ERROR_CURRENT_USER = 4; // 0x4 core/java/android/os/IUserManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ interface IUserManager { boolean isUserRunning(int userId); boolean isUserNameSet(int userId); boolean hasRestrictedProfiles(); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags); String getUserName(); long getUserStartRealtime(); long getUserUnlockRealtime(); Loading core/java/android/os/UserManager.java +50 −1 Original line number Diff line number Diff line Loading @@ -132,6 +132,22 @@ public class UserManager { */ public static final String USER_TYPE_SYSTEM_HEADLESS = "android.os.usertype.system.HEADLESS"; /** * Flag passed to {@link #requestQuietModeEnabled} to request disabling quiet mode only if * there is no need to confirm the user credentials. If credentials are required to disable * quiet mode, {@link #requestQuietModeEnabled} will do nothing and return {@code false}. */ public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 0x1; /** * List of flags available for the {@link #requestQuietModeEnabled} method. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "QUIET_MODE_" }, value = { QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED }) public @interface QuietModeFlag {} /** * @hide * No user restriction. Loading Loading @@ -3215,6 +3231,25 @@ public class UserManager { return requestQuietModeEnabled(enableQuietMode, userHandle, null); } /** * Perform the same operation as {@link #requestQuietModeEnabled(boolean, UserHandle)}, but * with a flag to tweak the behavior of the request. * * @param enableQuietMode whether quiet mode should be enabled or disabled * @param userHandle user handle of the profile * @param flags Can be 0 or {@link #QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED}. * @return {@code false} if user's credential is needed in order to turn off quiet mode, * {@code true} otherwise * @throws SecurityException if the caller is invalid * @throws IllegalArgumentException if {@code userHandle} is not a managed profile * * @see #isQuietModeEnabled(UserHandle) */ public boolean requestQuietModeEnabled(boolean enableQuietMode, @NonNull UserHandle userHandle, @QuietModeFlag int flags) { return requestQuietModeEnabled(enableQuietMode, userHandle, null, flags); } /** * Similar to {@link #requestQuietModeEnabled(boolean, UserHandle)}, except you can specify * a target to start when user is unlocked. If {@code target} is specified, caller must have Loading @@ -3225,9 +3260,23 @@ public class UserManager { */ public boolean requestQuietModeEnabled( boolean enableQuietMode, @NonNull UserHandle userHandle, IntentSender target) { return requestQuietModeEnabled(enableQuietMode, userHandle, target, 0); } /** * Similar to {@link #requestQuietModeEnabled(boolean, UserHandle)}, except you can specify * a target to start when user is unlocked. If {@code target} is specified, caller must have * the {@link android.Manifest.permission#MANAGE_USERS} permission. * * @see {@link #requestQuietModeEnabled(boolean, UserHandle)} * @hide */ public boolean requestQuietModeEnabled( boolean enableQuietMode, @NonNull UserHandle userHandle, IntentSender target, int flags) { try { return mService.requestQuietModeEnabled( mContext.getPackageName(), enableQuietMode, userHandle.getIdentifier(), target); mContext.getPackageName(), enableQuietMode, userHandle.getIdentifier(), target, flags); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading services/core/java/com/android/server/pm/UserManagerService.java +15 −14 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager.EnforcingUser; import android.os.UserManager.QuietModeFlag; import android.os.UserManagerInternal; import android.os.UserManagerInternal.UserRestrictionsListener; import android.os.storage.StorageManager; Loading Loading @@ -914,7 +915,7 @@ public class UserManagerService extends IUserManager.Stub { @Override public boolean requestQuietModeEnabled(@NonNull String callingPackage, boolean enableQuietMode, @UserIdInt int userId, @Nullable IntentSender target) { @UserIdInt int userId, @Nullable IntentSender target, @QuietModeFlag int flags) { Objects.requireNonNull(callingPackage); if (enableQuietMode && target != null) { Loading @@ -925,24 +926,24 @@ public class UserManagerService extends IUserManager.Stub { ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), userId, target != null); final long identity = Binder.clearCallingIdentity(); try { boolean result = false; if (enableQuietMode) { setQuietModeEnabled( userId, true /* enableQuietMode */, target, callingPackage); result = true; } else { return true; } boolean needToShowConfirmCredential = mLockPatternUtils.isSecure(userId) && !StorageManager.isUserKeyUnlocked(userId); if (needToShowConfirmCredential) { if ((flags & UserManager.QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED) != 0) { return false; } showConfirmCredentialToDisableQuietMode(userId, target); } else { return false; } setQuietModeEnabled( userId, false /* enableQuietMode */, target, callingPackage); result = true; } } return result; return true; } finally { Binder.restoreCallingIdentity(identity); } Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -36228,6 +36228,7 @@ package android.os { method public boolean isUserUnlocked(); method public boolean isUserUnlocked(android.os.UserHandle); method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle); method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle, int); method @Deprecated public boolean setRestrictionsChallenge(String); method @Deprecated public void setUserRestriction(String, boolean); method @Deprecated public void setUserRestrictions(android.os.Bundle); Loading Loading @@ -36289,6 +36290,7 @@ package android.os { field public static final String DISALLOW_USER_SWITCH = "no_user_switch"; field public static final String ENSURE_VERIFY_APPS = "ensure_verify_apps"; field public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; field public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 1; // 0x1 field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1 field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2 field public static final int USER_OPERATION_ERROR_CURRENT_USER = 4; // 0x4
core/java/android/os/IUserManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ interface IUserManager { boolean isUserRunning(int userId); boolean isUserNameSet(int userId); boolean hasRestrictedProfiles(); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target); boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, in IntentSender target, int flags); String getUserName(); long getUserStartRealtime(); long getUserUnlockRealtime(); Loading
core/java/android/os/UserManager.java +50 −1 Original line number Diff line number Diff line Loading @@ -132,6 +132,22 @@ public class UserManager { */ public static final String USER_TYPE_SYSTEM_HEADLESS = "android.os.usertype.system.HEADLESS"; /** * Flag passed to {@link #requestQuietModeEnabled} to request disabling quiet mode only if * there is no need to confirm the user credentials. If credentials are required to disable * quiet mode, {@link #requestQuietModeEnabled} will do nothing and return {@code false}. */ public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 0x1; /** * List of flags available for the {@link #requestQuietModeEnabled} method. * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "QUIET_MODE_" }, value = { QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED }) public @interface QuietModeFlag {} /** * @hide * No user restriction. Loading Loading @@ -3215,6 +3231,25 @@ public class UserManager { return requestQuietModeEnabled(enableQuietMode, userHandle, null); } /** * Perform the same operation as {@link #requestQuietModeEnabled(boolean, UserHandle)}, but * with a flag to tweak the behavior of the request. * * @param enableQuietMode whether quiet mode should be enabled or disabled * @param userHandle user handle of the profile * @param flags Can be 0 or {@link #QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED}. * @return {@code false} if user's credential is needed in order to turn off quiet mode, * {@code true} otherwise * @throws SecurityException if the caller is invalid * @throws IllegalArgumentException if {@code userHandle} is not a managed profile * * @see #isQuietModeEnabled(UserHandle) */ public boolean requestQuietModeEnabled(boolean enableQuietMode, @NonNull UserHandle userHandle, @QuietModeFlag int flags) { return requestQuietModeEnabled(enableQuietMode, userHandle, null, flags); } /** * Similar to {@link #requestQuietModeEnabled(boolean, UserHandle)}, except you can specify * a target to start when user is unlocked. If {@code target} is specified, caller must have Loading @@ -3225,9 +3260,23 @@ public class UserManager { */ public boolean requestQuietModeEnabled( boolean enableQuietMode, @NonNull UserHandle userHandle, IntentSender target) { return requestQuietModeEnabled(enableQuietMode, userHandle, target, 0); } /** * Similar to {@link #requestQuietModeEnabled(boolean, UserHandle)}, except you can specify * a target to start when user is unlocked. If {@code target} is specified, caller must have * the {@link android.Manifest.permission#MANAGE_USERS} permission. * * @see {@link #requestQuietModeEnabled(boolean, UserHandle)} * @hide */ public boolean requestQuietModeEnabled( boolean enableQuietMode, @NonNull UserHandle userHandle, IntentSender target, int flags) { try { return mService.requestQuietModeEnabled( mContext.getPackageName(), enableQuietMode, userHandle.getIdentifier(), target); mContext.getPackageName(), enableQuietMode, userHandle.getIdentifier(), target, flags); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading
services/core/java/com/android/server/pm/UserManagerService.java +15 −14 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager.EnforcingUser; import android.os.UserManager.QuietModeFlag; import android.os.UserManagerInternal; import android.os.UserManagerInternal.UserRestrictionsListener; import android.os.storage.StorageManager; Loading Loading @@ -914,7 +915,7 @@ public class UserManagerService extends IUserManager.Stub { @Override public boolean requestQuietModeEnabled(@NonNull String callingPackage, boolean enableQuietMode, @UserIdInt int userId, @Nullable IntentSender target) { @UserIdInt int userId, @Nullable IntentSender target, @QuietModeFlag int flags) { Objects.requireNonNull(callingPackage); if (enableQuietMode && target != null) { Loading @@ -925,24 +926,24 @@ public class UserManagerService extends IUserManager.Stub { ensureCanModifyQuietMode(callingPackage, Binder.getCallingUid(), userId, target != null); final long identity = Binder.clearCallingIdentity(); try { boolean result = false; if (enableQuietMode) { setQuietModeEnabled( userId, true /* enableQuietMode */, target, callingPackage); result = true; } else { return true; } boolean needToShowConfirmCredential = mLockPatternUtils.isSecure(userId) && !StorageManager.isUserKeyUnlocked(userId); if (needToShowConfirmCredential) { if ((flags & UserManager.QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED) != 0) { return false; } showConfirmCredentialToDisableQuietMode(userId, target); } else { return false; } setQuietModeEnabled( userId, false /* enableQuietMode */, target, callingPackage); result = true; } } return result; return true; } finally { Binder.restoreCallingIdentity(identity); } Loading