diff options
| author | 2016-06-13 15:36:45 +0100 | |
|---|---|---|
| committer | 2016-06-13 15:36:45 +0100 | |
| commit | 84d2c0de2ec7ccc9fbbcf8e3357b0ac1eb5f9f56 (patch) | |
| tree | 73ec5fd503d96514461b9c7cdc2ca14bc98adf69 | |
| parent | 047773fe9f6fa0a1c7bd98d44f6f703bae3840b9 (diff) | |
| parent | 6f1ed200b3aa01af88eb309a55a428ceac56a9a2 (diff) | |
resolve merge conflicts of 6f1ed20 to nyc-mr1-dev
Change-Id: I9fe1e50f99382cbd8cd90f77ef99d081b472bb81
| -rw-r--r-- | core/res/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 47 |
2 files changed, 45 insertions, 3 deletions
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index b78fdcadab04..89036dd82e3b 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -482,6 +482,7 @@ <protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_AVAILABLE" /> <protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_UNAVAILABLE" /> + <protected-broadcast android:name="com.android.server.pm.DISABLE_QUIET_MODE_AFTER_UNLOCK" /> <protected-broadcast android:name="com.android.server.am.ACTION_RESET_DEMO" /> diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index b765350ad64a..2f4464042f8c 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -31,6 +31,7 @@ import android.app.AppGlobals; import android.app.IActivityManager; import android.app.IStopUserCallback; import android.app.KeyguardManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -331,6 +332,27 @@ public class UserManagerService extends IUserManager.Stub { private final LockPatternUtils mLockPatternUtils; + private final String ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK = + "com.android.server.pm.DISABLE_QUIET_MODE_AFTER_UNLOCK"; + + private final BroadcastReceiver mDisableQuietModeCallback = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK.equals(intent.getAction())) { + final IntentSender target = intent.getParcelableExtra(Intent.EXTRA_INTENT); + final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_ID, 0); + setQuietModeEnabled(userHandle, false); + if (target != null) { + try { + mContext.startIntentSender(target, null, 0, 0, 0); + } catch (IntentSender.SendIntentException e) { + /* ignore */ + } + } + } + } + }; + /** * Whether all users should be created ephemeral. */ @@ -425,7 +447,10 @@ public class UserManagerService extends IUserManager.Stub { } maybeInitializeDemoMode(UserHandle.USER_SYSTEM); -} + mContext.registerReceiver(mDisableQuietModeCallback, + new IntentFilter(ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK), + null, mHandler); + } @Override public String getUserAccount(int userId) { @@ -714,6 +739,7 @@ public class UserManagerService extends IUserManager.Stub { @Override public boolean trySetQuietModeDisabled(int userHandle, IntentSender target) { + checkManageUsersPermission("silence profile"); if (StorageManager.isUserKeyUnlocked(userHandle) || !mLockPatternUtils.isSecure(userHandle)) { // if the user is already unlocked, no need to show a profile challenge @@ -734,9 +760,24 @@ public class UserManagerService extends IUserManager.Stub { if (unlockIntent == null) { return false; } + final Intent callBackIntent = new Intent( + ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK); if (target != null) { - unlockIntent.putExtra(Intent.EXTRA_INTENT, target); - } + callBackIntent.putExtra(Intent.EXTRA_INTENT, target); + } + callBackIntent.putExtra(Intent.EXTRA_USER_ID, userHandle); + callBackIntent.setPackage(mContext.getPackageName()); + callBackIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + final PendingIntent pendingIntent = PendingIntent.getBroadcast( + mContext, + 0, + callBackIntent, + PendingIntent.FLAG_CANCEL_CURRENT | + PendingIntent.FLAG_ONE_SHOT | + PendingIntent.FLAG_IMMUTABLE); + // After unlocking the challenge, it will disable quiet mode and run the original + // intentSender + unlockIntent.putExtra(Intent.EXTRA_INTENT, pendingIntent.getIntentSender()); unlockIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); mContext.startActivity(unlockIntent); } finally { |