am e03ed510: am 4e5b67e6: Queue startActivity params if not yet ready.

* commit 'e03ed51068bcb4253e2fd2a4a3f39a7e580a721a':
  Queue startActivity params if not yet ready.
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 @@
 
 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 @@
     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 @@
             } 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 @@
             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() {