summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/app/UnlaunchableAppActivity.java17
-rw-r--r--services/core/java/com/android/server/am/ActivityStartInterceptor.java8
2 files changed, 24 insertions, 1 deletions
diff --git a/core/java/com/android/internal/app/UnlaunchableAppActivity.java b/core/java/com/android/internal/app/UnlaunchableAppActivity.java
index f6fbaab8f8f3..27588e98dcaf 100644
--- a/core/java/com/android/internal/app/UnlaunchableAppActivity.java
+++ b/core/java/com/android/internal/app/UnlaunchableAppActivity.java
@@ -26,6 +26,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentSender;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -53,6 +54,7 @@ public class UnlaunchableAppActivity extends Activity
private int mUserId;
private int mReason;
+ private IntentSender mTarget;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -60,6 +62,7 @@ public class UnlaunchableAppActivity extends Activity
Intent intent = getIntent();
mReason = intent.getIntExtra(EXTRA_UNLAUNCHABLE_REASON, -1);
mUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+ mTarget = intent.getParcelableExtra(Intent.EXTRA_INTENT);
if (mUserId == UserHandle.USER_NULL) {
Log.wtf(TAG, "Invalid user id: " + mUserId + ". Stopping.");
@@ -105,6 +108,14 @@ public class UnlaunchableAppActivity extends Activity
public void onClick(DialogInterface dialog, int which) {
if (mReason == UNLAUNCHABLE_REASON_QUIET_MODE && which == DialogInterface.BUTTON_POSITIVE) {
UserManager.get(this).setQuietModeEnabled(mUserId, false);
+
+ if (mTarget != null) {
+ try {
+ startIntentSenderForResult(mTarget, -1, null, 0, 0, 0);
+ } catch (IntentSender.SendIntentException e) {
+ /* ignore */
+ }
+ }
}
}
@@ -121,4 +132,10 @@ public class UnlaunchableAppActivity extends Activity
intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
return intent;
}
+
+ public static Intent createInQuietModeDialogIntent(int userId, IntentSender target) {
+ Intent intent = createInQuietModeDialogIntent(userId);
+ intent.putExtra(Intent.EXTRA_INTENT, target);
+ return intent;
+ }
}
diff --git a/services/core/java/com/android/server/am/ActivityStartInterceptor.java b/services/core/java/com/android/server/am/ActivityStartInterceptor.java
index 76dfd015ee0b..785dd471c0cd 100644
--- a/services/core/java/com/android/server/am/ActivityStartInterceptor.java
+++ b/services/core/java/com/android/server/am/ActivityStartInterceptor.java
@@ -119,7 +119,13 @@ class ActivityStartInterceptor {
if (!mUserManager.isQuietModeEnabled(UserHandle.of(mUserId))) {
return false;
}
- mIntent = UnlaunchableAppActivity.createInQuietModeDialogIntent(mUserId);
+ IIntentSender target = mService.getIntentSenderLocked(
+ INTENT_SENDER_ACTIVITY, mCallingPackage, mCallingUid, mUserId, null, null, 0,
+ new Intent[] {mIntent}, new String[] {mResolvedType},
+ FLAG_CANCEL_CURRENT | FLAG_ONE_SHOT, null);
+
+ mIntent = UnlaunchableAppActivity.createInQuietModeDialogIntent(mUserId,
+ new IntentSender(target));
mCallingPid = mRealCallingPid;
mCallingUid = mRealCallingUid;
mResolvedType = null;