diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/ActivityView.java | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index df4ec78..ad38489 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -18,6 +18,7 @@ package android.app; import android.content.Context; import android.content.ContextWrapper; +import android.content.IIntentSender; import android.content.Intent; import android.content.IntentSender; import android.graphics.SurfaceTexture; @@ -43,6 +44,10 @@ public class ActivityView extends ViewGroup { private int mHeight; private Surface mSurface; + // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. + IIntentSender mQueuedPendingIntent; + Intent mQueuedIntent; + public ActivityView(Context context) { this(context, null); } @@ -118,28 +123,38 @@ public class ActivityView extends ViewGroup { } catch (RemoteException e) { throw new IllegalStateException("ActivityView: Unable to startActivity. " + e); } + } else { + mQueuedIntent = intent; + mQueuedPendingIntent = null; + } + } + + private void startActivityIntentSender(IIntentSender iIntentSender) { + try { + mActivityContainer.startActivityIntentSender(iIntentSender); + } catch (RemoteException e) { + throw new IllegalStateException( + "ActivityView: Unable to startActivity from IntentSender. " + e); } } public void startActivity(IntentSender intentSender) { + final IIntentSender iIntentSender = intentSender.getTarget(); if (mSurface != null) { - try { - mActivityContainer.startActivityIntentSender(intentSender.getTarget()); - } catch (RemoteException e) { - throw new IllegalStateException( - "ActivityView: Unable to startActivity from IntentSender. " + e); - } + startActivityIntentSender(iIntentSender); + } else { + mQueuedPendingIntent = iIntentSender; + mQueuedIntent = null; } } public void startActivity(PendingIntent pendingIntent) { + final IIntentSender iIntentSender = pendingIntent.getTarget(); if (mSurface != null) { - try { - mActivityContainer.startActivityIntentSender(pendingIntent.getTarget()); - } catch (RemoteException e) { - throw new IllegalStateException( - "ActivityView: Unable to startActivity from PendingIntent. " + e); - } + startActivityIntentSender(iIntentSender); + } else { + mQueuedPendingIntent = iIntentSender; + mQueuedIntent = null; } } @@ -163,6 +178,14 @@ public class ActivityView extends ViewGroup { throw new IllegalStateException( "ActivityView: Unable to create ActivityContainer. " + e); } + + if (mQueuedIntent != null) { + startActivity(mQueuedIntent); + mQueuedIntent = null; + } else if (mQueuedPendingIntent != null) { + startActivityIntentSender(mQueuedPendingIntent); + mQueuedPendingIntent = null; + } } private void detach() { |