summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ricky Wai <rickywai@google.com> 2016-06-13 15:36:45 +0100
committer Ricky Wai <rickywai@google.com> 2016-06-13 15:36:45 +0100
commit84d2c0de2ec7ccc9fbbcf8e3357b0ac1eb5f9f56 (patch)
tree73ec5fd503d96514461b9c7cdc2ca14bc98adf69
parent047773fe9f6fa0a1c7bd98d44f6f703bae3840b9 (diff)
parent6f1ed200b3aa01af88eb309a55a428ceac56a9a2 (diff)
resolve merge conflicts of 6f1ed20 to nyc-mr1-dev
Change-Id: I9fe1e50f99382cbd8cd90f77ef99d081b472bb81
-rw-r--r--core/res/AndroidManifest.xml1
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java47
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 {