Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa6945ac authored by George Mount's avatar George Mount Committed by Android (Google) Code Review
Browse files

Merge "Activity Transition: fix quick back after enter." into lmp-mr1-dev

parents 525588c5 fbd45964
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -799,6 +799,15 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        mIsStartingTransition = false;
    }

    /**
     * Cancels any pending transitions and returns true if there is a transition is in
     * the middle of starting.
     */
    protected boolean cancelPendingTransitions() {
        mPendingTransition = null;
        return mIsStartingTransition;
    }

    protected void moveSharedElementsToOverlay() {
        if (mWindow == null || !mWindow.getSharedElementsUseOverlay()) {
            return;
+21 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.util.ArrayMap;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;

import java.lang.ref.WeakReference;
@@ -252,7 +253,7 @@ class ActivityTransitionState {
        }
    }

    public boolean startExitBackTransition(Activity activity) {
    public boolean startExitBackTransition(final Activity activity) {
        if (mEnteringNames == null) {
            return false;
        } else {
@@ -260,10 +261,11 @@ class ActivityTransitionState {
                mHasExited = true;
                Transition enterViewsTransition = null;
                ViewGroup decor = null;
                boolean delayExitBack = false;
                if (mEnterTransitionCoordinator != null) {
                    enterViewsTransition = mEnterTransitionCoordinator.getEnterViewsTransition();
                    decor = mEnterTransitionCoordinator.getDecor();
                    mEnterTransitionCoordinator.cancelEnter();
                    delayExitBack = mEnterTransitionCoordinator.cancelEnter();
                    mEnterTransitionCoordinator = null;
                    if (enterViewsTransition != null && decor != null) {
                        enterViewsTransition.pause(decor);
@@ -275,8 +277,24 @@ class ActivityTransitionState {
                if (enterViewsTransition != null && decor != null) {
                    enterViewsTransition.resume(decor);
                }
                if (delayExitBack && decor != null) {
                    final ViewGroup finalDecor = decor;
                    decor.getViewTreeObserver().addOnPreDrawListener(
                            new ViewTreeObserver.OnPreDrawListener() {
                                @Override
                                public boolean onPreDraw() {
                                    finalDecor.getViewTreeObserver().removeOnPreDrawListener(this);
                                    if (mReturnExitCoordinator != null) {
                                        mReturnExitCoordinator.startExit(activity.mResultCode,
                                                activity.mResultData);
                                    }
                                    return true;
                                }
                            });
                } else {
                    mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData);
                }
            }
            return true;
        }
    }
+7 −2
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package android.app;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.ResultReceiver;
@@ -565,7 +564,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        clearState();
    }

    public void cancelEnter() {
    /**
     * Cancels the enter transition.
     * @return True if the enter transition is still pending capturing the target state. If so,
     * any transition started on the decor will do nothing.
     */
    public boolean cancelEnter() {
        setGhostVisibility(View.INVISIBLE);
        mHasStopped = true;
        mIsCanceled = true;
@@ -576,6 +580,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        }
        mActivity = null;
        clearState();
        return super.cancelPendingTransitions();
    }

    private void makeOpaque() {