diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index f7c0d23f94943..7d2f677dbcc82 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -239,7 +239,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { return mWindow; } - protected ViewGroup getDecor() { + public ViewGroup getDecor() { return (mWindow == null) ? null : (ViewGroup) mWindow.getDecorView(); } diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java index 4f3b02c0a86e5..613e24854dbd3 100644 --- a/core/java/android/app/ActivityTransitionState.java +++ b/core/java/android/app/ActivityTransitionState.java @@ -17,9 +17,11 @@ package android.app; import android.os.Bundle; import android.os.ResultReceiver; +import android.transition.Transition; import android.util.ArrayMap; import android.util.SparseArray; import android.view.View; +import android.view.ViewGroup; import android.view.Window; import java.lang.ref.WeakReference; @@ -245,13 +247,23 @@ class ActivityTransitionState { } else { if (!mHasExited) { mHasExited = true; + Transition enterViewsTransition = null; + ViewGroup decor = null; if (mEnterTransitionCoordinator != null) { + enterViewsTransition = mEnterTransitionCoordinator.getEnterViewsTransition(); + decor = mEnterTransitionCoordinator.getDecor(); mEnterTransitionCoordinator.cancelEnter(); mEnterTransitionCoordinator = null; + if (enterViewsTransition != null && decor != null) { + enterViewsTransition.pause(decor); + } } ExitTransitionCoordinator exitCoordinator = new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true); + if (enterViewsTransition != null && decor != null) { + enterViewsTransition.resume(decor); + } exitCoordinator.startExit(activity.mResultCode, activity.mResultData); } return true; diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index 54c5bc441ef54..75ecbd931b5d1 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -59,6 +59,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mIsViewsTransitionComplete; private boolean mIsSharedElementTransitionComplete; private ArrayList mSharedElementParentMatrices; + private Transition mEnterViewsTransition; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, ArrayList sharedElementNames, boolean isReturning) { @@ -104,6 +105,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { triggerViewsReady(mapNamedElements(accepted, localNames)); } + public Transition getEnterViewsTransition() { + return mEnterViewsTransition; + } + @Override protected void viewsReady(ArrayMap sharedElements) { super.viewsReady(sharedElements); @@ -399,10 +404,17 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { viewTransitionComplete(); } else { viewsTransition.forceVisibility(View.INVISIBLE, true); - setTransitionAlpha(mTransitioningViews, 1); viewsTransition.addListener(new ContinueTransitionListener() { + @Override + public void onTransitionStart(Transition transition) { + mEnterViewsTransition = transition; + setTransitionAlpha(mTransitioningViews, 1); + super.onTransitionStart(transition); + } + @Override public void onTransitionEnd(Transition transition) { + mEnterViewsTransition = null; transition.removeListener(this); viewTransitionComplete(); super.onTransitionEnd(transition);