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

Commit c44430a3 authored by Deepanshu Gupta's avatar Deepanshu Gupta Committed by Android (Google) Code Review
Browse files

Merge "Tools attribute improvements for RecyclerView LayoutManager." into lmp-mr1-dev

parents 0146922a 0412b317
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -233,11 +233,13 @@ public final class BridgeInflater extends LayoutInflater {
                String type = attrs.getAttributeValue(BridgeConstants.NS_RESOURCES,
                                BridgeConstants.ATTR_LAYOUT_MANAGER_TYPE);
                if (type != null) {
                    LayoutManagerType layoutManagerType = LayoutManagerType.getByDisplayName(type);
                    LayoutManagerType layoutManagerType = LayoutManagerType.getByLogicalName(type);
                    if (layoutManagerType == null) {
                        Bridge.getLog().warning(LayoutLog.TAG_UNSUPPORTED,
                                "LayoutManager (" + type + ") not found, falling back to " +
                                        "LinearLayoutManager", null);
                        layoutManagerType = LayoutManagerType.getByClassName(type);
                    }
                    if (layoutManagerType == null) {
                        // add the classname itself.
                        bc.addCookie(view, type);
                    } else {
                        bc.addCookie(view, layoutManagerType);
                    }
+1 −1
Original line number Diff line number Diff line
@@ -50,5 +50,5 @@ public class BridgeConstants {
    public final static String WRAP_CONTENT = "wrap_content";

    /** Attribute in the tools namespace used to specify layout manager for RecyclerView. */
    public static final String ATTR_LAYOUT_MANAGER_TYPE = "layoutManagerType";
    public static final String ATTR_LAYOUT_MANAGER_TYPE = "layoutManager";
}
+29 −16
Original line number Diff line number Diff line
@@ -73,8 +73,15 @@ public class RecyclerViewUtil {
    private static void setLayoutManager(@NonNull View recyclerView, @NonNull BridgeContext context,
            @NonNull IProjectCallback callback) throws ReflectionException {
        Object cookie = context.getCookie(recyclerView);
        assert cookie == null || cookie instanceof LayoutManagerType;
        if (cookie == null) {
        assert cookie == null || cookie instanceof LayoutManagerType || cookie instanceof String;
        if (!(cookie instanceof LayoutManagerType)) {
            if (cookie != null) {
                // TODO: When layoutlib API is updated, try to load the class with a null
                // constructor or a constructor taking one argument - the context.
                Bridge.getLog().warning(LayoutLog.TAG_UNSUPPORTED,
                        "LayoutManager (" + cookie + ") not found, falling back to " +
                                "LinearLayoutManager", null);
            }
            cookie = LayoutManagerType.getDefault();
        }
        Object layoutManager = createLayoutManager((LayoutManagerType) cookie, context, callback);
@@ -152,22 +159,13 @@ public class RecyclerViewUtil {
                "android.support.v7.widget.StaggeredGridLayoutManager",
                new Class[]{int.class, int.class}, new Object[]{2, LinearLayout.VERTICAL});

        private String mDisplayName;
        private String mLogicalName;
        private String mClassName;
        private Class[] mSignature;
        private Object[] mArgs;

        private static final HashMap<String, LayoutManagerType> sDisplayNameLookup =
                new HashMap<String, LayoutManagerType>();

        static {
            for (LayoutManagerType type : LayoutManagerType.values()) {
                sDisplayNameLookup.put(type.mDisplayName, type);
            }
        }

        LayoutManagerType(String displayName, String className, Class[] signature, Object[] args) {
            mDisplayName = displayName;
        LayoutManagerType(String logicalName, String className, Class[] signature, Object[] args) {
            mLogicalName = logicalName;
            mClassName = className;
            mSignature = signature;
            mArgs = args;
@@ -199,8 +197,23 @@ public class RecyclerViewUtil {
        }

        @Nullable
        public static LayoutManagerType getByDisplayName(@Nullable String className) {
            return sDisplayNameLookup.get(className);
        public static LayoutManagerType getByLogicalName(@NonNull String logicalName) {
            for (LayoutManagerType type : values()) {
                if (logicalName.equals(type.mLogicalName)) {
                    return type;
                }
            }
            return null;
        }

        @Nullable
        public static LayoutManagerType getByClassName(@NonNull String className) {
            for (LayoutManagerType type : values()) {
                if (className.equals(type.mClassName)) {
                    return type;
                }
            }
            return null;
        }
    }
}