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

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

Merge "Suppress Layout during Visibility transitions" into mnc-dev

parents 1384d1d9 21290a62
Loading
Loading
Loading
Loading
+38 −5
Original line number Original line Diff line number Diff line
@@ -504,13 +504,20 @@ public abstract class Visibility extends Transition {
        private final boolean mIsForcedVisibility;
        private final boolean mIsForcedVisibility;
        private final View mView;
        private final View mView;
        private final int mFinalVisibility;
        private final int mFinalVisibility;
        private final ViewGroup mParent;


        private boolean mEnded;
        boolean mCanceled = false;
        boolean mCanceled = false;


        public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) {
        public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) {
            this.mView = view;
            this.mView = view;
            this.mIsForcedVisibility = isForcedVisibility;
            this.mIsForcedVisibility = isForcedVisibility;
            this.mFinalVisibility = finalVisibility;
            this.mFinalVisibility = finalVisibility;
            this.mParent = (ViewGroup) view.getParent();
            if (!isForcedVisibility && mParent != null) {
                // Prevent a layout from including mView in its calculation.
                mParent.suppressLayout(true);
            }
        }
        }


        @Override
        @Override
@@ -552,13 +559,39 @@ public abstract class Visibility extends Transition {
            hideViewWhenNotCanceled();
            hideViewWhenNotCanceled();
        }
        }


        @Override
        public void onTransitionPause(Transition transition) {
            if (mParent != null && !mIsForcedVisibility) {
                mParent.suppressLayout(false);
            }
        }

        @Override
        public void onTransitionResume(Transition transition) {
            if (mParent != null && !mIsForcedVisibility) {
                mParent.suppressLayout(true);
            }
        }

        private void hideViewWhenNotCanceled() {
        private void hideViewWhenNotCanceled() {
            if (!mEnded) {
                if (!mCanceled) {
                if (!mCanceled) {
                    if (mIsForcedVisibility) {
                    if (mIsForcedVisibility) {
                        mView.setTransitionAlpha(0);
                        mView.setTransitionAlpha(0);
                    } else {
                    } else {
                    mView.setVisibility(mFinalVisibility);
                        // Recreate the parent's display list in case it includes mView.
                        mView.setTransitionVisibility(mFinalVisibility);
                        if (mParent != null) {
                            mParent.invalidate();
                        }
                    }
                }
                if (!mIsForcedVisibility && mParent != null) {
                    // Layout is allowed now that the View is in its final state
                    mParent.suppressLayout(false);
                }
                }
                // Do this only once
                mEnded = true;
            }
            }
        }
        }
    }
    }