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

Commit a0fda084 authored by Ember Rose's avatar Ember Rose Committed by Android (Google) Code Review
Browse files

Merge "Custom inspection companion for RelativeLayout"

parents c7f498fe 621c0af4
Loading
Loading
Loading
Loading
+143 −1
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@ import android.view.ViewGroup;
import android.view.ViewHierarchyEncoder;
import android.view.accessibility.AccessibilityEvent;
import android.view.inspector.InspectableProperty;
import android.view.inspector.InspectionCompanion;
import android.view.inspector.PropertyMapper;
import android.view.inspector.PropertyReader;
import android.widget.RemoteViews.RemoteView;

import com.android.internal.R;
@@ -1286,7 +1289,6 @@ public class RelativeLayout extends ViewGroup {
         * the anchor's visibility is GONE.
         */
        @ViewDebug.ExportedProperty(category = "layout")
        @InspectableProperty(name = "layout_alignWithParentIfMissing")
        public boolean alignWithParent;

        public LayoutParams(Context c, AttributeSet attrs) {
@@ -1723,6 +1725,146 @@ public class RelativeLayout extends ViewGroup {
            super.encodeProperties(encoder);
            encoder.addProperty("layout:alignWithParent", alignWithParent);
        }

        /** @hide */
        public static final class InspectionCompanion
                implements android.view.inspector.InspectionCompanion<LayoutParams> {
            private boolean mPropertiesMapped;

            private int mAboveId;
            private int mAlignBaselineId;
            private int mAlignBottomId;
            private int mAlignEndId;
            private int mAlignLeftId;
            private int mAlignParentBottomId;
            private int mAlignParentEndId;
            private int mAlignParentLeftId;
            private int mAlignParentRightId;
            private int mAlignParentStartId;
            private int mAlignParentTopId;
            private int mAlignRightId;
            private int mAlignStartId;
            private int mAlignTopId;
            private int mAlignWithParentIfMissingId;
            private int mBelowId;
            private int mCenterHorizontalId;
            private int mCenterInParentId;
            private int mCenterVerticalId;
            private int mToEndOfId;
            private int mToLeftOfId;
            private int mToRightOfId;
            private int mToStartOfId;

            @Override
            public void mapProperties(@NonNull PropertyMapper propertyMapper) {
                mPropertiesMapped = true;

                mAboveId = propertyMapper.mapResourceId("layout_above", R.attr.layout_above);

                mAlignBaselineId = propertyMapper.mapResourceId(
                        "layout_alignBaseline", R.attr.layout_alignBaseline);

                mAlignBottomId = propertyMapper.mapResourceId(
                        "layout_alignBottom", R.attr.layout_alignBottom);

                mAlignEndId = propertyMapper.mapResourceId(
                        "layout_alignEnd", R.attr.layout_alignEnd);

                mAlignLeftId = propertyMapper.mapResourceId(
                        "layout_alignLeft", R.attr.layout_alignLeft);

                mAlignParentBottomId = propertyMapper.mapBoolean(
                        "layout_alignParentBottom", R.attr.layout_alignParentBottom);

                mAlignParentEndId = propertyMapper.mapBoolean(
                        "layout_alignParentEnd", R.attr.layout_alignParentEnd);

                mAlignParentLeftId = propertyMapper.mapBoolean(
                        "layout_alignParentLeft", R.attr.layout_alignParentLeft);

                mAlignParentRightId = propertyMapper.mapBoolean(
                        "layout_alignParentRight", R.attr.layout_alignParentRight);

                mAlignParentStartId = propertyMapper.mapBoolean(
                        "layout_alignParentStart", R.attr.layout_alignParentStart);

                mAlignParentTopId = propertyMapper.mapBoolean(
                        "layout_alignParentTop", R.attr.layout_alignParentTop);

                mAlignRightId = propertyMapper.mapResourceId(
                        "layout_alignRight", R.attr.layout_alignRight);

                mAlignStartId = propertyMapper.mapResourceId(
                        "layout_alignStart", R.attr.layout_alignStart);

                mAlignTopId = propertyMapper.mapResourceId(
                        "layout_alignTop", R.attr.layout_alignTop);

                mAlignWithParentIfMissingId = propertyMapper.mapBoolean(
                        "layout_alignWithParentIfMissing",
                        R.attr.layout_alignWithParentIfMissing);

                mBelowId = propertyMapper.mapResourceId("layout_below", R.attr.layout_below);

                mCenterHorizontalId = propertyMapper.mapBoolean(
                        "layout_centerHorizontal", R.attr.layout_centerHorizontal);

                mCenterInParentId = propertyMapper.mapBoolean(
                        "layout_centerInParent", R.attr.layout_centerInParent);

                mCenterVerticalId = propertyMapper.mapBoolean(
                        "layout_centerVertical", R.attr.layout_centerVertical);

                mToEndOfId = propertyMapper.mapResourceId(
                        "layout_toEndOf", R.attr.layout_toEndOf);

                mToLeftOfId = propertyMapper.mapResourceId(
                        "layout_toLeftOf", R.attr.layout_toLeftOf);

                mToRightOfId = propertyMapper.mapResourceId(
                        "layout_toRightOf", R.attr.layout_toRightOf);

                mToStartOfId = propertyMapper.mapResourceId(
                        "layout_toStartOf", R.attr.layout_toStartOf);
            }

            @Override
            public void readProperties(
                    @NonNull LayoutParams node,
                    @NonNull PropertyReader propertyReader
            ) {
                if (!mPropertiesMapped) {
                    throw new UninitializedPropertyMapException();
                }

                final int[] rules = node.getRules();

                propertyReader.readResourceId(mAboveId, rules[ABOVE]);
                propertyReader.readResourceId(mAlignBaselineId, rules[ALIGN_BASELINE]);
                propertyReader.readResourceId(mAlignBottomId, rules[ALIGN_BOTTOM]);
                propertyReader.readResourceId(mAlignEndId, rules[ALIGN_END]);
                propertyReader.readResourceId(mAlignLeftId, rules[ALIGN_LEFT]);
                propertyReader.readBoolean(
                        mAlignParentBottomId, rules[ALIGN_PARENT_BOTTOM] == TRUE);
                propertyReader.readBoolean(mAlignParentEndId, rules[ALIGN_PARENT_END] == TRUE);
                propertyReader.readBoolean(mAlignParentLeftId, rules[ALIGN_PARENT_LEFT] == TRUE);
                propertyReader.readBoolean(mAlignParentRightId, rules[ALIGN_PARENT_RIGHT] == TRUE);
                propertyReader.readBoolean(mAlignParentStartId, rules[ALIGN_PARENT_START] == TRUE);
                propertyReader.readBoolean(mAlignParentTopId, rules[ALIGN_PARENT_TOP] == TRUE);
                propertyReader.readResourceId(mAlignRightId, rules[ALIGN_RIGHT]);
                propertyReader.readResourceId(mAlignStartId, rules[ALIGN_START]);
                propertyReader.readResourceId(mAlignTopId, rules[ALIGN_TOP]);
                propertyReader.readBoolean(mAlignWithParentIfMissingId, node.alignWithParent);
                propertyReader.readResourceId(mBelowId, rules[BELOW]);
                propertyReader.readBoolean(mCenterHorizontalId, rules[CENTER_HORIZONTAL] == TRUE);
                propertyReader.readBoolean(mCenterInParentId, rules[CENTER_IN_PARENT] == TRUE);
                propertyReader.readBoolean(mCenterVerticalId, rules[CENTER_VERTICAL] == TRUE);
                propertyReader.readResourceId(mToEndOfId, rules[END_OF]);
                propertyReader.readResourceId(mToLeftOfId, rules[LEFT_OF]);
                propertyReader.readResourceId(mToRightOfId, rules[RIGHT_OF]);
                propertyReader.readResourceId(mToStartOfId, rules[START_OF]);
            }
        }
    }

    private static class DependencyGraph {