From e72f81b64d356149c81104ecbdeca1abea31da85 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Thu, 16 Mar 2017 14:08:19 -0700 Subject: [PATCH] Send broadcast when user restrictions change. - Send UserManager.ACTION_USER_RESTRICTIONS_CHANGED, which is a runtime receiver only broadcast. Bug 36355208 Test: cts-tradefed run cts-dev --skip-device-info --skip-preconditions --skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker -a armeabi-v7a -l INFO -m CtsDevicePolicyManagerTestCases -t 'com.android.cts.devicepolicy.UserRestrictionsTest#testUserRestrictions_deviceOwnerOnly' Test: cts-tradefed run cts-dev --skip-device-info --skip-preconditions --skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker -a armeabi-v7a -l INFO -m CtsDevicePolicyManagerTestCases -t 'com.android.cts.devicepolicy.UserRestrictionsTest#testUserRestrictions_primaryProfileOwnerOnly' Test: cts-tradefed run cts-dev --skip-device-info --skip-preconditions --skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker -a armeabi-v7a -l INFO -m CtsDevicePolicyManagerTestCases -t 'com.android.cts.devicepolicy.UserRestrictionsTest#testUserRestrictions_secondaryProfileOwnerOnly' Change-Id: Ifd82e39ce2c08ed5accdf017f4a1ea3af6face63 --- api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/os/UserManager.java | 11 +++++++++++ .../com/android/server/pm/UserManagerService.java | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index ddfc1ccd8908d..775b80da43bd3 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -34417,6 +34417,7 @@ package android.os { method public deprecated void setUserRestrictions(android.os.Bundle); method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle); method public static boolean supportsMultipleUsers(); + field public static final java.lang.String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED"; field public static final java.lang.String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking"; field public static final java.lang.String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile"; field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user"; diff --git a/api/test-current.txt b/api/test-current.txt index fe67696735411..68b539a34c744 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -31719,6 +31719,7 @@ package android.os { method public deprecated void setUserRestrictions(android.os.Bundle); method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle); method public static boolean supportsMultipleUsers(); + field public static final java.lang.String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED"; field public static final java.lang.String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking"; field public static final java.lang.String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile"; field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user"; diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index a638cd43aba92..f6712f8405856 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -22,6 +22,7 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; @@ -762,6 +763,16 @@ public class UserManager { /** @hide */ public static final int PIN_VERIFICATION_SUCCESS = -1; + /** + * Sent when user restrictions have changed. + * + * @hide + */ + @SystemApi + @TestApi // To allow seeing it from CTS. + public static final String ACTION_USER_RESTRICTIONS_CHANGED = + "android.os.action.USER_RESTRICTIONS_CHANGED"; + /** * Error result indicating that this user is not allowed to add other users on this device. * This is a result code returned from the activity created by the intent diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index b9fcf4e39203d..989304919e1c6 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1493,6 +1493,10 @@ public class UserManagerService extends IUserManager.Stub { listeners[i].onUserRestrictionsChanged(userId, newRestrictionsFinal, prevRestrictionsFinal); } + + final Intent broadcast = new Intent(UserManager.ACTION_USER_RESTRICTIONS_CHANGED) + .setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcastAsUser(broadcast, UserHandle.of(userId)); } }); }