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

Commit 69bd5584 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Fix MarginLayoutParams resolution

- need to keep initial left/right values for correct resolution

Change-Id: Ia8d0fec7d3c427086b7b5898e544e369b2de4229
parent 3a4832aa
Loading
Loading
Loading
Loading
+44 −6
Original line number Original line Diff line number Diff line
@@ -5569,6 +5569,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.
@@ -5607,6 +5612,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();
        }
        }


@@ -5632,6 +5643,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;
        }
        }


        /**
        /**
@@ -5661,6 +5677,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;
        }
        }


        /**
        /**
@@ -5686,6 +5704,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;
        }
        }


        /**
        /**
@@ -5696,7 +5716,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;
            }
        }
        }


        /**
        /**
@@ -5707,7 +5734,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;
            }
        }
        }


        /**
        /**
@@ -5728,15 +5762,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;
            }
            }
        }
        }