Make shared element visible when exit transition finishes early.

Bug 16124915

Change-Id: I91aa4a4912f3edb298ec75dd4178572a2c941a31
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
index fdfbca3..90f36b8 100644
--- a/core/java/android/app/EnterTransitionCoordinator.java
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -58,6 +58,7 @@
     private Bundle mSharedElementsBundle;
     private boolean mWasOpaque;
     private boolean mAreViewsReady;
+    private boolean mIsViewsTransitionStarted;
 
     public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver,
             ArrayList<String> sharedElementNames, boolean isReturning) {
@@ -219,7 +220,7 @@
     private void cancel() {
         if (!mIsCanceled) {
             mIsCanceled = true;
-            if (getViewsTransition() == null) {
+            if (getViewsTransition() == null || mIsViewsTransitionStarted) {
                 setViewVisibility(mSharedElements, View.VISIBLE);
             } else {
                 mTransitioningViews.addAll(mSharedElements);
@@ -363,6 +364,7 @@
                 stripOffscreenViews();
             }
         }
+        mIsViewsTransitionStarted = mIsViewsTransitionStarted || startEnterTransition;
 
         Transition transition = mergeTransitions(sharedElementTransition, viewsTransition);
         if (startSharedElementTransition) {
diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java
index 51d18f9..0fbd685 100644
--- a/core/java/android/app/ExitTransitionCoordinator.java
+++ b/core/java/android/app/ExitTransitionCoordinator.java
@@ -116,6 +116,7 @@
         setViewVisibility(mTransitioningViews, View.VISIBLE);
         setViewVisibility(mSharedElements, View.VISIBLE);
         mIsHidden = true;
+        clearState();
     }
 
     private void sharedElementExitBack() {
@@ -357,7 +358,6 @@
         }
         if (!mIsReturning && mExitNotified) {
             mActivity = null; // don't need it anymore
-            clearState();
         }
     }