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

Commit 004b7a3f authored by George Mount's avatar George Mount Committed by Android Git Automerger
Browse files

am cced7645: Merge "Force transitioning views to be visible when transition...

am cced7645: Merge "Force transitioning views to be visible when transition interrupted." into lmp-dev

* commit 'cced7645aae3e2fd65297ac75cecfde31dc1c636':
  Force transitioning views to be visible when transition interrupted.
parents 3caab56c cbd333b2
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -66,6 +66,12 @@ class ActivityTransitionState {
     */
     */
    private ExitTransitionCoordinator mCalledExitCoordinator;
    private ExitTransitionCoordinator mCalledExitCoordinator;


    /**
     * The ExitTransitionCoordinator used to return to a previous Activity when called with
     * {@link android.app.Activity#finishAfterTransition()}.
     */
    private ExitTransitionCoordinator mReturnExitCoordinator;

    /**
    /**
     * We must be able to cancel entering transitions to stop changing the Window to
     * We must be able to cancel entering transitions to stop changing the Window to
     * opaque when we exit before making the Window opaque.
     * opaque when we exit before making the Window opaque.
@@ -218,6 +224,10 @@ class ActivityTransitionState {
            mEnterTransitionCoordinator.stop();
            mEnterTransitionCoordinator.stop();
            mEnterTransitionCoordinator = null;
            mEnterTransitionCoordinator = null;
        }
        }
        if (mReturnExitCoordinator != null) {
            mReturnExitCoordinator.stop();
            mReturnExitCoordinator = null;
        }
    }
    }


    public void onResume() {
    public void onResume() {
@@ -260,12 +270,12 @@ class ActivityTransitionState {
                    }
                    }
                }
                }


                ExitTransitionCoordinator exitCoordinator =
                mReturnExitCoordinator =
                        new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true);
                        new ExitTransitionCoordinator(activity, mEnteringNames, null, null, true);
                if (enterViewsTransition != null && decor != null) {
                if (enterViewsTransition != null && decor != null) {
                    enterViewsTransition.resume(decor);
                    enterViewsTransition.resume(decor);
                }
                }
                exitCoordinator.startExit(activity.mResultCode, activity.mResultData);
                mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData);
            }
            }
            return true;
            return true;
        }
        }
+35 −8
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.ViewGroupOverlay;
import android.view.ViewGroupOverlay;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver;
import android.view.Window;


import java.util.ArrayList;
import java.util.ArrayList;


@@ -265,10 +266,14 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
    }
    }


    protected void prepareEnter() {
    protected void prepareEnter() {
        ViewGroup decorView = getDecor();
        if (mActivity == null || decorView == null) {
            return;
        }
        mActivity.overridePendingTransition(0, 0);
        mActivity.overridePendingTransition(0, 0);
        if (!mIsReturning) {
        if (!mIsReturning) {
            mWasOpaque = mActivity.convertToTranslucent(null, null);
            mWasOpaque = mActivity.convertToTranslucent(null, null);
            Drawable background = getDecor().getBackground();
            Drawable background = decorView.getBackground();
            if (background != null) {
            if (background != null) {
                getWindow().setBackgroundDrawable(null);
                getWindow().setBackgroundDrawable(null);
                background = background.mutate();
                background = background.mutate();
@@ -282,18 +287,26 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {


    @Override
    @Override
    protected Transition getViewsTransition() {
    protected Transition getViewsTransition() {
        Window window = getWindow();
        if (window == null) {
            return null;
        }
        if (mIsReturning) {
        if (mIsReturning) {
            return getWindow().getReenterTransition();
            return window.getReenterTransition();
        } else {
        } else {
            return getWindow().getEnterTransition();
            return window.getEnterTransition();
        }
        }
    }
    }


    protected Transition getSharedElementTransition() {
    protected Transition getSharedElementTransition() {
        Window window = getWindow();
        if (window == null) {
            return null;
        }
        if (mIsReturning) {
        if (mIsReturning) {
            return getWindow().getSharedElementReenterTransition();
            return window.getSharedElementReenterTransition();
        } else {
        } else {
            return getWindow().getSharedElementEnterTransition();
            return window.getSharedElementEnterTransition();
        }
        }
    }
    }


@@ -518,15 +531,29 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
    }
    }


    public void stop() {
    public void stop() {
        makeOpaque();
        // Restore the background to its previous state since the
        mIsCanceled = true;
        // Activity is stopping.
        mResultReceiver = null;
        if (mBackgroundAnimator != null) {
        if (mBackgroundAnimator != null) {
            mBackgroundAnimator.end();
            mBackgroundAnimator.end();
            mBackgroundAnimator = null;
            mBackgroundAnimator = null;
        } else if (mWasOpaque) {
            ViewGroup decorView = getDecor();
            if (decorView != null) {
                Drawable drawable = decorView.getBackground();
                if (drawable != null) {
                    drawable.setAlpha(1);
                }
            }
            }
        }
        makeOpaque();
        mIsCanceled = true;
        mResultReceiver = null;
        mActivity = null;
        mActivity = null;
        moveSharedElementsFromOverlay();
        moveSharedElementsFromOverlay();
        if (mTransitioningViews != null) {
            showViews(mTransitioningViews, true);
        }
        showViews(mSharedElements, true);
        clearState();
        clearState();
    }
    }


+16 −5
Original line number Original line Diff line number Diff line
@@ -255,6 +255,16 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
        }
        }
    }
    }


    public void stop() {
        if (mIsReturning && mActivity != null) {
            // Override the previous ActivityOptions. We don't want the
            // activity to have options since we're essentially canceling the
            // transition and finishing right now.
            mActivity.convertToTranslucent(null, null);
            finish();
        }
    }

    private void startExitTransition() {
    private void startExitTransition() {
        Transition transition = getExitTransition();
        Transition transition = getExitTransition();
        ViewGroup decorView = getDecor();
        ViewGroup decorView = getDecor();
@@ -425,13 +435,14 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {


    private void finish() {
    private void finish() {
        stopCancel();
        stopCancel();
        if (mActivity != null) {
            mActivity.mActivityTransitionState.clear();
            mActivity.mActivityTransitionState.clear();
        // Clear the state so that we can't hold any references accidentally and leak memory.
        mHandler.removeMessages(MSG_CANCEL);
        mHandler = null;
            mActivity.finish();
            mActivity.finish();
            mActivity.overridePendingTransition(0, 0);
            mActivity.overridePendingTransition(0, 0);
            mActivity = null;
            mActivity = null;
        }
        // Clear the state so that we can't hold any references accidentally and leak memory.
        mHandler = null;
        mSharedElementBundle = null;
        mSharedElementBundle = null;
        if (mBackgroundAnimator != null) {
        if (mBackgroundAnimator != null) {
            mBackgroundAnimator.cancel();
            mBackgroundAnimator.cancel();