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

Commit b694e080 authored by George Mount's avatar George Mount
Browse files

Fix exit transitions hiding views permanently.

Bug 17480692

When a view was hidden prior to the transition completion,
the hidden views were being removed from the list and thus
weren't being reset to visible properly.

Change-Id: If778540156432eb19039fcec18d023d06e9c1b2a
parent e0947064
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
    final protected ArrayList<String> mAllSharedElementNames;
    final protected ArrayList<View> mSharedElements = new ArrayList<View>();
    final protected ArrayList<String> mSharedElementNames = new ArrayList<String>();
    final protected ArrayList<View> mTransitioningViews = new ArrayList<View>();
    protected ArrayList<View> mTransitioningViews = new ArrayList<View>();
    protected SharedElementCallback mListener;
    protected ResultReceiver mResultReceiver;
    final private FixedEpicenterCallback mEpicenterCallback = new FixedEpicenterCallback();
@@ -222,7 +222,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        mListener.onMapSharedElements(mAllSharedElementNames, sharedElements);
        mSharedElementNames.addAll(sharedElements.keySet());
        mSharedElements.addAll(sharedElements.values());
        if (getViewsTransition() != null) {
        if (getViewsTransition() != null && mTransitioningViews != null) {
            ViewGroup decorView = getDecor();
            if (decorView != null) {
                decorView.captureTransitioningViews(mTransitioningViews);
@@ -233,6 +233,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
    }

    protected void stripOffscreenViews() {
        if (mTransitioningViews == null) {
            return;
        }
        Rect r = new Rect();
        for (int i = mTransitioningViews.size() - 1; i >= 0; i--) {
            View view = mTransitioningViews.get(i);
@@ -592,7 +595,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        // Clear the state so that we can't hold any references accidentally and leak memory.
        mWindow = null;
        mSharedElements.clear();
        mTransitioningViews.clear();
        mTransitioningViews = null;
        mOriginalAlphas.clear();
        mResultReceiver = null;
        mPendingTransition = null;
+9 −5
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        super.viewsReady(sharedElements);
        mIsReadyForTransition = true;
        hideViews(mSharedElements);
        if (getViewsTransition() != null) {
        if (getViewsTransition() != null && mTransitioningViews != null) {
            hideViews(mTransitioningViews);
        }
        if (mIsReturning) {
@@ -249,7 +249,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
            mIsCanceled = true;
            if (getViewsTransition() == null || mIsViewsTransitionStarted) {
                showViews(mSharedElements, true);
            } else {
            } else if (mTransitioningViews != null) {
                mTransitioningViews.addAll(mSharedElements);
            }
            mSharedElementNames.clear();
@@ -416,7 +416,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        Transition viewsTransition = null;
        if (startEnterTransition) {
            mIsViewsTransitionStarted = true;
            if (!mTransitioningViews.isEmpty()) {
            if (mTransitioningViews != null && !mTransitioningViews.isEmpty()) {
                viewsTransition = configureTransition(getViewsTransition(), true);
                if (viewsTransition != null && !mIsReturning) {
                    stripOffscreenViews();
@@ -426,11 +426,14 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
                viewTransitionComplete();
            } else {
                viewsTransition.forceVisibility(View.INVISIBLE, true);
                final ArrayList<View> transitioningViews = mTransitioningViews;
                viewsTransition.addListener(new ContinueTransitionListener() {
                    @Override
                    public void onTransitionStart(Transition transition) {
                        mEnterViewsTransition = transition;
                        showViews(mTransitioningViews, false);
                        if (transitioningViews != null) {
                            showViews(transitioningViews, false);
                        }
                        super.onTransitionStart(transition);
                    }

@@ -451,7 +454,8 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
            TransitionManager.beginDelayedTransition(decorView, transition);
            if (startSharedElementTransition && !mSharedElementNames.isEmpty()) {
                mSharedElements.get(0).invalidate();
            } else if (startEnterTransition && !mTransitioningViews.isEmpty()) {
            } else if (startEnterTransition && mTransitioningViews != null &&
                    !mTransitioningViews.isEmpty()) {
                mTransitioningViews.get(0).invalidate();
            }
        } else {
+8 −5
Original line number Diff line number Diff line
@@ -126,7 +126,9 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    }

    public void resetViews() {
        if (mTransitioningViews != null) {
            showViews(mTransitioningViews, true);
        }
        showViews(mSharedElements, true);
        mIsHidden = true;
        ViewGroup decorView = getDecor();
@@ -253,7 +255,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    private void startExitTransition() {
        Transition transition = getExitTransition();
        ViewGroup decorView = getDecor();
        if (transition != null && decorView != null) {
        if (transition != null && decorView != null && mTransitioningViews != null) {
            TransitionManager.beginDelayedTransition(decorView, transition);
            mTransitioningViews.get(0).invalidate();
        } else {
@@ -289,19 +291,20 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {

    private Transition getExitTransition() {
        Transition viewsTransition = null;
        if (!mTransitioningViews.isEmpty()) {
        if (mTransitioningViews != null && !mTransitioningViews.isEmpty()) {
            viewsTransition = configureTransition(getViewsTransition(), true);
        }
        if (viewsTransition == null) {
            exitTransitionComplete();
        } else {
            final ArrayList<View> transitioningViews = mTransitioningViews;
            viewsTransition.addListener(new ContinueTransitionListener() {
                @Override
                public void onTransitionEnd(Transition transition) {
                    transition.removeListener(this);
                    exitTransitionComplete();
                    if (mIsHidden) {
                        showViews(mTransitioningViews, true);
                    if (mIsHidden && transitioningViews != null) {
                        showViews(transitioningViews, true);
                    }
                    if (mSharedElementBundle != null) {
                        delayCancel();