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

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

Merge "Don't cause requestLayout when transition changes Visibility." into mnc-dev

parents 101ba78a e5a93aa8
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -445,7 +445,7 @@ public abstract class Visibility extends Transition {
                    mForcedEndVisibility != -1;
            if (!isForcedVisibility) {
                originalVisibility = viewToKeep.getVisibility();
                viewToKeep.setVisibility(View.VISIBLE);
                viewToKeep.setTransitionVisibility(View.VISIBLE);
            }
            Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues);
            if (animator != null) {
@@ -454,7 +454,7 @@ public abstract class Visibility extends Transition {
                animator.addListener(disappearListener);
                addListener(disappearListener);
            } else if (!isForcedVisibility) {
                viewToKeep.setVisibility(originalVisibility);
                viewToKeep.setTransitionVisibility(originalVisibility);
            }
            return animator;
        }
@@ -516,14 +516,14 @@ public abstract class Visibility extends Transition {
        @Override
        public void onAnimationPause(Animator animation) {
            if (!mCanceled && !mIsForcedVisibility) {
                mView.setVisibility(mFinalVisibility);
                mView.setTransitionVisibility(mFinalVisibility);
            }
        }

        @Override
        public void onAnimationResume(Animator animation) {
            if (!mCanceled && !mIsForcedVisibility) {
                mView.setVisibility(View.VISIBLE);
                mView.setTransitionVisibility(View.VISIBLE);
            }
        }

@@ -557,7 +557,7 @@ public abstract class Visibility extends Transition {
                if (mIsForcedVisibility) {
                    mView.setTransitionAlpha(0);
                } else {
                    mView.setVisibility(mFinalVisibility);
                    mView.setTransitionVisibility(mFinalVisibility);
                }
            }
        }
+3 −7
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public class GhostView extends View {
        mView = view;
        mView.mGhostView = this;
        final ViewGroup parent = (ViewGroup) mView.getParent();
        setGhostedVisibility(View.INVISIBLE);
        mView.setTransitionVisibility(View.INVISIBLE);
        parent.invalidate();
    }

@@ -66,19 +66,15 @@ public class GhostView extends View {
        super.setVisibility(visibility);
        if (mView.mGhostView == this) {
            int inverseVisibility = (visibility == View.VISIBLE) ? View.INVISIBLE : View.VISIBLE;
            setGhostedVisibility(inverseVisibility);
            mView.setTransitionVisibility(inverseVisibility);
        }
    }

    private void setGhostedVisibility(int visibility) {
        mView.mViewFlags = (mView.mViewFlags & ~View.VISIBILITY_MASK) | visibility;
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (!mBeingMoved) {
            setGhostedVisibility(View.VISIBLE);
            mView.setTransitionVisibility(View.VISIBLE);
            mView.mGhostView = null;
            final ViewGroup parent = (ViewGroup) mView.getParent();
            if (parent != null) {
+14 −0
Original line number Diff line number Diff line
@@ -8785,6 +8785,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        }
    }
    /**
     * Change the visibility of the View without triggering any other changes. This is
     * important for transitions, where visibility changes should not adjust focus or
     * trigger a new layout. This is only used when the visibility has already been changed
     * and we need a transient value during an animation. When the animation completes,
     * the original visibility value is always restored.
     *
     * @param visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}.
     * @hide
     */
    public void setTransitionVisibility(@Visibility int visibility) {
        mViewFlags = (mViewFlags & ~View.VISIBILITY_MASK) | visibility;
    }
    /**
     * Reset the flag indicating the accessibility state of the subtree rooted
     * at this view changed.