diff options
| -rw-r--r-- | core/java/com/android/internal/app/UnlaunchableAppActivity.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStartInterceptor.java | 8 | 
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;  |