diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java index 4f556a8697f95..4f3b02c0a86e5 100644 --- a/core/java/android/app/ActivityTransitionState.java +++ b/core/java/android/app/ActivityTransitionState.java @@ -193,7 +193,8 @@ class ActivityTransitionState { private void startEnter() { if (mEnterActivityOptions.isReturning()) { if (mExitingToView != null) { - mEnterTransitionCoordinator.viewInstancesReady(mExitingFrom, mExitingToView); + mEnterTransitionCoordinator.viewInstancesReady(mExitingFrom, mExitingTo, + mExitingToView); } else { mEnterTransitionCoordinator.namedViewsReady(mExitingFrom, mExitingTo); } @@ -248,8 +249,6 @@ class ActivityTransitionState { mEnterTransitionCoordinator.cancelEnter(); mEnterTransitionCoordinator = null; } - ArrayMap sharedElements = new ArrayMap(); - activity.getWindow().getDecorView().findNamedViews(sharedElements); ExitTransitionCoordinator exitCoordinator = new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true); diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index b5d362d79ac21..3f1eee1c268ce 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -24,6 +24,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.ResultReceiver; +import android.text.TextUtils; import android.transition.Transition; import android.transition.TransitionManager; import android.util.ArrayMap; @@ -82,8 +83,22 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { }); } - public void viewInstancesReady(ArrayList accepted, ArrayList localViews) { - triggerViewsReady(mapSharedElements(accepted, localViews)); + public void viewInstancesReady(ArrayList accepted, ArrayList localNames, + ArrayList localViews) { + boolean remap = false; + for (int i = 0; i < localViews.size(); i++) { + View view = localViews.get(i); + if (!TextUtils.equals(view.getTransitionName(), localNames.get(i)) + || !view.isAttachedToWindow()) { + remap = true; + break; + } + } + if (remap) { + triggerViewsReady(mapNamedElements(accepted, localNames)); + } else { + triggerViewsReady(mapSharedElements(accepted, localViews)); + } } public void namedViewsReady(ArrayList accepted, ArrayList localNames) {