From 17eaf740d1a3a25325a6e1d449422b1bef47b207 Mon Sep 17 00:00:00 2001 From: Pierre Barbier de Reuille Date: Fri, 10 Jan 2020 17:49:45 +0000 Subject: New UserManager API to request quiet mode. Adding new API to request the end of quiet mode without asking the user for their credentials. Bug: 145732320 Change-Id: I80f313d269d46400fdb21ef9265fa7c0c3b5c7d0 Test: atest 'com.android.cts.devicepolicy.QuietModeHostsideTest#testQuietMode_noCredentialRequest' --- core/java/android/os/IUserManager.aidl | 2 +- core/java/android/os/UserManager.java | 51 +++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) (limited to 'core/java/android') diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index edaaf81cd906..33d613152bc1 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -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(); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 2eaefca0efa3..12e843c87481 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -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. @@ -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 @@ -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(); } -- cgit v1.2.3