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

Commit 15d03bf2 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Fix MarginLayoutParams resolution"

parents 3b2fb7b2 69bd5584
Loading
Loading
Loading
Loading
+44 −6
Original line number Original line Diff line number Diff line
@@ -5507,6 +5507,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         */
         */
        static private final int DEFAULT_RELATIVE = Integer.MIN_VALUE;
        static private final int DEFAULT_RELATIVE = Integer.MIN_VALUE;


        private int initialLeftMargin;
        private int initialRightMargin;

        private int layoutDirection;

        /**
        /**
         * Creates a new set of layout parameters. The values are extracted from
         * Creates a new set of layout parameters. The values are extracted from
         * the supplied attributes set and context.
         * the supplied attributes set and context.
@@ -5545,6 +5550,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                        R.styleable.ViewGroup_MarginLayout_layout_marginEnd, DEFAULT_RELATIVE);
                        R.styleable.ViewGroup_MarginLayout_layout_marginEnd, DEFAULT_RELATIVE);
            }
            }


            initialLeftMargin = leftMargin;
            initialRightMargin = rightMargin;

            // LTR by default
            layoutDirection = View.LAYOUT_DIRECTION_LTR;

            a.recycle();
            a.recycle();
        }
        }


@@ -5570,6 +5581,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
            this.bottomMargin = source.bottomMargin;
            this.bottomMargin = source.bottomMargin;
            this.startMargin = source.startMargin;
            this.startMargin = source.startMargin;
            this.endMargin = source.endMargin;
            this.endMargin = source.endMargin;

            this.initialLeftMargin = source.leftMargin;
            this.initialRightMargin = source.rightMargin;

            this.layoutDirection = source.layoutDirection;
        }
        }


        /**
        /**
@@ -5599,6 +5615,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
            topMargin = top;
            topMargin = top;
            rightMargin = right;
            rightMargin = right;
            bottomMargin = bottom;
            bottomMargin = bottom;
            initialLeftMargin = left;
            initialRightMargin = right;
        }
        }


        /**
        /**
@@ -5624,6 +5642,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
            topMargin = top;
            topMargin = top;
            endMargin = end;
            endMargin = end;
            bottomMargin = bottom;
            bottomMargin = bottom;
            initialLeftMargin = 0;
            initialRightMargin = 0;
        }
        }


        /**
        /**
@@ -5634,7 +5654,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         * @return the start margin in pixels.
         * @return the start margin in pixels.
         */
         */
        public int getMarginStart() {
        public int getMarginStart() {
            return startMargin;
            if (startMargin != DEFAULT_RELATIVE) return startMargin;
            switch(layoutDirection) {
                case View.LAYOUT_DIRECTION_RTL:
                    return rightMargin;
                case View.LAYOUT_DIRECTION_LTR:
                default:
                    return leftMargin;
            }
        }
        }


        /**
        /**
@@ -5645,7 +5672,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         * @return the end margin in pixels.
         * @return the end margin in pixels.
         */
         */
        public int getMarginEnd() {
        public int getMarginEnd() {
            return endMargin;
            if (endMargin != DEFAULT_RELATIVE) return endMargin;
            switch(layoutDirection) {
                case View.LAYOUT_DIRECTION_RTL:
                    return leftMargin;
                case View.LAYOUT_DIRECTION_LTR:
                default:
                    return rightMargin;
            }
        }
        }


        /**
        /**
@@ -5666,15 +5700,19 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         */
         */
        @Override
        @Override
        public void onResolveLayoutDirection(int layoutDirection) {
        public void onResolveLayoutDirection(int layoutDirection) {
            this.layoutDirection = layoutDirection;

            if (!isMarginRelative()) return;

            switch(layoutDirection) {
            switch(layoutDirection) {
                case View.LAYOUT_DIRECTION_RTL:
                case View.LAYOUT_DIRECTION_RTL:
                    leftMargin = (endMargin > DEFAULT_RELATIVE) ? endMargin : leftMargin;
                    leftMargin = (endMargin > DEFAULT_RELATIVE) ? endMargin : initialLeftMargin;
                    rightMargin = (startMargin > DEFAULT_RELATIVE) ? startMargin : rightMargin;
                    rightMargin = (startMargin > DEFAULT_RELATIVE) ? startMargin : initialRightMargin;
                    break;
                    break;
                case View.LAYOUT_DIRECTION_LTR:
                case View.LAYOUT_DIRECTION_LTR:
                default:
                default:
                    leftMargin = (startMargin > DEFAULT_RELATIVE) ? startMargin : leftMargin;
                    leftMargin = (startMargin > DEFAULT_RELATIVE) ? startMargin : initialLeftMargin;
                    rightMargin = (endMargin > DEFAULT_RELATIVE) ? endMargin : rightMargin;
                    rightMargin = (endMargin > DEFAULT_RELATIVE) ? endMargin : initialRightMargin;
                    break;
                    break;
            }
            }
        }
        }