Search in sources :

Example 1 with Card

use of com.tmall.wireless.tangram3.dataparser.concrete.Card in project Tangram-Android by alibaba.

the class PojoDataParser method createCell.

protected BaseCell createCell(@Nullable Card parent, @NonNull MVHelper resolver, @NonNull JSONObject cellData, @NonNull ServiceManager serviceManager, Map<String, ComponentInfo> componentInfoMap) {
    BaseCell cell = null;
    String cellType = parseCellType(cellData);
    // cellType is null, maybe is card
    if (TextUtils.isEmpty(cellType)) {
        cellType = parseCardType(cellData);
    }
    if (TextUtils.isEmpty(cellType)) {
        return BaseCell.NaN;
    }
    if (Utils.isCard(cellType)) {
        switch(cellType) {
            case TangramBuilder.TYPE_CONTAINER_FLOW:
            case TangramBuilder.TYPE_CONTAINER_1C_FLOW:
            case TangramBuilder.TYPE_CONTAINER_2C_FLOW:
            case TangramBuilder.TYPE_CONTAINER_3C_FLOW:
            case TangramBuilder.TYPE_CONTAINER_4C_FLOW:
            case TangramBuilder.TYPE_CONTAINER_5C_FLOW:
                {
                    Card card = parseSingleGroup(cellData, serviceManager);
                    parent.addChildCard(card);
                    break;
                }
            case TangramBuilder.TYPE_CONTAINER_BANNER:
            case TangramBuilder.TYPE_CONTAINER_SCROLL:
                {
                    Card card = parseSingleGroup(cellData, serviceManager);
                    List<BaseCell> children = card.getCells();
                    if (children.size() > 0) {
                        cell = card.getCells().get(0);
                    }
                    break;
                }
        }
        if (cell != null) {
            cell.serviceManager = serviceManager;
            if (parent != null) {
                cell.parent = parent;
                cell.parentId = parent.id;
            }
        } else {
            return BaseCell.NaN;
        }
        parseCell(cell, cellData);
        if (parent != null) {
            boolean ret = parent.addCellInternal(cell, false);
            if (!ret && TangramBuilder.isPrintLog()) {
                LogUtils.w(TAG, "Parse invalid cell with data: " + cellData.toString());
            }
        }
        return cell;
    } else if (resolver.resolver().getViewClass(cellType) != null) {
        cell = new BaseCell(cellType);
        cell.serviceManager = serviceManager;
        if (parent != null) {
            cell.parent = parent;
            cell.parentId = parent.id;
        }
        parseCell(cell, cellData);
        if (parent != null) {
            boolean ret = parent.addCellInternal(cell, false);
            if (!ret && TangramBuilder.isPrintLog()) {
                LogUtils.w(TAG, "Parse invalid cell with data: " + cellData.toString());
            }
        }
        return cell;
    } else {
        BaseCellBinderResolver componentBinderResolver = serviceManager.getService(BaseCellBinderResolver.class);
        // if cell type not register and has component info, register it!
        if (TangramBuilder.isPrintLog()) {
            LogUtils.e("PojoDataParser", "createCell status: cellType=" + cellType + ", componentInfoMap=" + (componentInfoMap == null ? "null" : componentInfoMap.toString()));
        }
        if (!componentBinderResolver.has(cellType) && componentInfoMap != null && componentInfoMap.containsKey(cellType)) {
            componentBinderResolver.register(cellType, new BaseCellBinder<>(cellType, resolver));
        }
        if (componentBinderResolver.has(cellType)) {
            cell = new BaseCell(cellType);
            if (componentInfoMap != null) {
                cell.componentInfo = componentInfoMap.get(cellType);
            }
            cell.serviceManager = serviceManager;
            if (parent != null) {
                cell.parent = parent;
                cell.parentId = parent.id;
                parseCell(cell, cellData);
                boolean ret = parent.addCellInternal(cell, false);
                if (!ret && TangramBuilder.isPrintLog()) {
                    LogUtils.w(TAG, "Parse invalid cell with data: " + cellData.toString());
                }
            } else {
                parseCell(cell, cellData);
            }
            cell.setStringType(cellType);
            return cell;
        } else {
            return BaseCell.NaN;
        }
    }
}
Also used : BaseCell(com.tmall.wireless.tangram3.structure.BaseCell) ArrayList(java.util.ArrayList) List(java.util.List) StickyCard(com.tmall.wireless.tangram3.structure.card.StickyCard) LinearScrollCard(com.tmall.wireless.tangram3.structure.card.LinearScrollCard) SlideCard(com.tmall.wireless.tangram3.structure.card.SlideCard) StickyEndCard(com.tmall.wireless.tangram3.structure.card.StickyEndCard) WrapCellCard(com.tmall.wireless.tangram3.structure.card.WrapCellCard) GridCard(com.tmall.wireless.tangram3.structure.card.GridCard) FixLinearScrollCard(com.tmall.wireless.tangram3.structure.card.FixLinearScrollCard) BannerCard(com.tmall.wireless.tangram3.structure.card.BannerCard) FixCard(com.tmall.wireless.tangram3.structure.card.FixCard) StaggeredCard(com.tmall.wireless.tangram3.structure.card.StaggeredCard) OnePlusNCard(com.tmall.wireless.tangram3.structure.card.OnePlusNCard)

Example 2 with Card

use of com.tmall.wireless.tangram3.dataparser.concrete.Card in project Tangram-Android by alibaba.

the class PojoDataParser method parseSingleComponent.

@NonNull
@Override
public BaseCell parseSingleComponent(@Nullable JSONObject data, Card parent, ServiceManager serviceManager, Map<String, ComponentInfo> componentInfoMap) {
    if (data == null) {
        return BaseCell.NaN;
    }
    checkCardResolverAndMVHelper(serviceManager);
    String cellType = parseCellType(data);
    if (componentInfoMap == null) {
        componentInfoMap = new HashMap<>();
    }
    ComponentInfo componentInfo = mvHelper.renderManager().supplementComponentInfo(cellType);
    if (componentInfo != null) {
        componentInfoMap.put(cellType, componentInfo);
    }
    BaseCell cell = createCell(parent, mvHelper, data, serviceManager, componentInfoMap);
    if (mvHelper.isValid(cell, serviceManager)) {
        return cell;
    } else {
        return BaseCell.NaN;
    }
}
Also used : BaseCell(com.tmall.wireless.tangram3.structure.BaseCell) NonNull(android.support.annotation.NonNull)

Example 3 with Card

use of com.tmall.wireless.tangram3.dataparser.concrete.Card in project Tangram-Android by alibaba.

the class PojoDataParser method parseSingleGroup.

@NonNull
@Override
public Card parseSingleGroup(@Nullable JSONObject data, @NonNull final ServiceManager serviceManager) {
    if (TangramBuilder.isPrintLog() && serviceManager == null) {
        throw new RuntimeException("serviceManager is null when parsing card!");
    }
    if (data == null) {
        return Card.NaN;
    }
    checkCardResolverAndMVHelper(serviceManager);
    String cardType = parseCardType(data);
    if (!TextUtils.isEmpty(cardType)) {
        Card card = cardResolver.create(cardType);
        if (card == null) {
            card = new WrapCellCard();
            cardType = TangramBuilder.TYPE_CONTAINER_1C_FLOW;
            JSONObject wrapCardJson = new JSONObject();
            wrapCardJson.put("type", TangramBuilder.TYPE_CONTAINER_1C_FLOW);
            JSONArray itemArray = new JSONArray();
            itemArray.add(data);
            wrapCardJson.put("items", itemArray);
            data = wrapCardJson;
        }
        card.dataParser = this;
        card.serviceManager = serviceManager;
        card.extras = data;
        card.stringType = cardType;
        card.loadParams = data.getJSONObject(KEY_API_LOAD_PARAMS);
        Map<String, ComponentInfo> infoMap = parseComponentInfo(data);
        parseCard(card, data, serviceManager, infoMap);
        JSONObject styleJson = data.getJSONObject(KEY_STYLE);
        // parse specific style
        if (card instanceof GridCard) {
            GridCard gridCard = (GridCard) card;
            GridCard.GridStyle style = new GridCard.GridStyle();
            if (styleJson != null) {
                parseStyle(style, styleJson);
                style.column = styleJson.getIntValue(KEY_COLUMN);
                style.autoExpand = styleJson.getBooleanValue(KEY_AUTO_EXPAND);
                JSONArray jsonCols = styleJson.getJSONArray(KEY_COLS);
                if (jsonCols != null) {
                    style.cols = new float[jsonCols.size()];
                    for (int i = 0; i < style.cols.length; i++) {
                        style.cols[i] = (float) jsonCols.getDoubleValue(i);
                    }
                } else {
                    style.cols = new float[0];
                }
                style.hGap = Style.parseSize(styleJson.getString(KEY_H_GAP), 0);
                style.vGap = Style.parseSize(styleJson.getString(KEY_V_GAP), 0);
                if (style.column > 0) {
                    gridCard.mColumn = style.column;
                }
                for (BaseCell cell : card.mCells) {
                    if (cell.style.extras != null) {
                        int colSpan = cell.style.extras.getIntValue("colspan");
                        if (colSpan == 0) {
                            colSpan = 1;
                        }
                        cell.colSpan = colSpan;
                    }
                }
            }
            card = gridCard;
            card.style = style;
        } else if (card instanceof BannerCard) {
            BannerCard bannerCard = (BannerCard) card;
            if (bannerCard.cell == null) {
                bannerCard.cell = new BannerCell();
                bannerCard.cell.serviceManager = serviceManager;
            }
            try {
                bannerCard.cell.stringType = TYPE_CAROUSEL_CELL_COMPACT;
                if (!bannerCard.getCells().isEmpty()) {
                    bannerCard.cell.mCells.addAll(bannerCard.getCells());
                    bannerCard.setCells(bannerCard.getCells());
                }
            } catch (Exception e) {
                if (errorSupport == null) {
                    errorSupport = serviceManager.getService(InternalErrorSupport.class);
                }
                HashMap<String, Object> params = new HashMap<>();
                params.put("exception", Log.getStackTraceString(e));
                errorSupport.onError(InternalErrorSupport.ERROR_PARSE_CARDS_ERROR, "Parse banner card error.", params);
                e.printStackTrace();
                bannerCard.setCells(null);
            }
            Style style = new Style();
            if (styleJson != null) {
                bannerCard.cell.setIndicatorRadius(Style.parseSize(styleJson.getString(ATTR_INDICATOR_RADIUS), 0));
                bannerCard.cell.setIndicatorColor(Style.parseColor(styleJson.getString(ATTR_INDICATOR_COLOR), Color.TRANSPARENT));
                bannerCard.cell.setIndicatorDefaultColor(Style.parseColor(styleJson.getString(ATTR_INDICATOR_DEFAULT_INDICATOR_COLOR), Color.TRANSPARENT));
                bannerCard.cell.setAutoScrollInternal(styleJson.getIntValue(ATTR_AUTOSCROLL));
                bannerCard.cell.setSpecialInterval(styleJson.getJSONObject(ATTR_SPECIAL_INTERVAL));
                bannerCard.cell.setInfinite(styleJson.getBooleanValue(ATTR_INFINITE));
                bannerCard.cell.setInfiniteMinCount(styleJson.getIntValue(ATTR_INFINITE_MIN_COUNT));
                bannerCard.cell.setIndicatorFocus(styleJson.getString(ATTR_INDICATOR_FOCUS));
                bannerCard.cell.setIndicatorNor(styleJson.getString(ATTR_INDICATOR_NORMAL));
                bannerCard.cell.setIndicatorGravity(styleJson.getString(ATTR_INDICATOR_GRA));
                bannerCard.cell.setIndicatorPos(styleJson.getString(ATTR_INDICATOR_POS));
                bannerCard.cell.setIndicatorGap(Style.parseSize(styleJson.getString(ATTR_INDICATOR_GAP), Style.dp2px(6)));
                bannerCard.cell.setIndicatorMargin(Style.parseSize(styleJson.getString(ATTR_INDICATOR_MARGIN), 0));
                bannerCard.cell.setIndicatorHeight(Style.parseSize(styleJson.getString(ATTR_INDICATOR_HEIGHT), 0));
                bannerCard.cell.setPageWidth(Utils.getJsonFloatValue(styleJson, ATTR_PAGE_WIDTH));
                bannerCard.cell.sethGap(Style.parseSize(styleJson.getString(ATTR_HGAP), 0));
                bannerCard.cell.itemRatio = Utils.getJsonDoubleValue(styleJson, ATTR_ITEM_RATIO);
                bannerCard.cell.itemMargin[0] = Style.parseSize(styleJson.getString(ATTR_ITEM_MARGIN_LEFT), 0);
                bannerCard.cell.itemMargin[1] = Style.parseSize(styleJson.getString(ATTR_ITEM_MARGIN_RIGHT), 0);
                parseStyle(style, styleJson);
            }
            card.style = style;
            bannerCard.cell.setRatio(style.aspectRatio);
            bannerCard.cell.margin = style.margin;
            bannerCard.cell.height = style.height;
        } else if (card instanceof OnePlusNCard) {
            ColumnStyle style = new ColumnStyle();
            if (styleJson != null) {
                parseStyle(style, styleJson);
                JSONArray jsonCols = styleJson.getJSONArray(KEY_COLS);
                if (jsonCols != null) {
                    style.cols = new float[jsonCols.size()];
                    for (int i = 0; i < style.cols.length; i++) {
                        style.cols[i] = (float) jsonCols.getDoubleValue(i);
                    }
                } else {
                    style.cols = new float[0];
                }
                JSONArray jsonRows = styleJson.getJSONArray(KEY_ROWS);
                if (jsonRows != null) {
                    style.rows = new float[jsonRows.size()];
                    for (int i = 0; i < style.rows.length; i++) {
                        style.rows[i] = (float) jsonRows.getDoubleValue(i);
                    }
                } else {
                    style.rows = new float[0];
                }
            }
            card.style = style;
        } else if (card instanceof FixLinearScrollCard) {
            FixLinearScrollCard fixLinearScrollCard = (FixLinearScrollCard) card;
            FixCard.FixStyle fixStyle = new FixCard.FixStyle();
            if (styleJson != null) {
                parseStyle(fixStyle, styleJson);
                String showTypeStr = styleJson.getString(KEY_SHOW_TYPE);
                if (TextUtils.isEmpty(showTypeStr)) {
                    showTypeStr = "top_left";
                } else {
                    showTypeStr = showTypeStr.toLowerCase();
                }
                String align = styleJson.getString(KEY_ALIGN);
                if (TextUtils.isEmpty(align)) {
                    align = "always";
                } else {
                    align = align.toLowerCase();
                }
                Boolean sketchMeasure = styleJson.getBoolean(KEY_SKETCH_MEASURE);
                if (sketchMeasure == null) {
                    fixStyle.sketchMeasure = true;
                } else {
                    fixStyle.sketchMeasure = sketchMeasure;
                }
                if ("showonenter".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ON_ENTER;
                } else if ("showonleave".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ON_LEAVE;
                } else if ("always".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ALWAYS;
                }
                if ("top_left".equals(align)) {
                    fixStyle.alignType = TOP_LEFT;
                } else if ("top_right".equals(align)) {
                    fixStyle.alignType = TOP_RIGHT;
                } else if ("bottom_left".equals(align)) {
                    fixStyle.alignType = BOTTOM_LEFT;
                } else if ("bottom_right".equals(align)) {
                    fixStyle.alignType = BOTTOM_RIGHT;
                }
                fixStyle.x = Style.parseSize(styleJson.getString(KEY_X), 0);
                fixStyle.y = Style.parseSize(styleJson.getString(KEY_Y), 0);
            }
            fixLinearScrollCard.mFixStyle = fixStyle;
        } else if (card instanceof StickyEndCard) {
            StickyCard.StickyStyle stickyStyle = new StickyCard.StickyStyle(false);
            if (styleJson != null) {
                stickyStyle.offset = Style.parseSize(styleJson.getString("offset"), 0);
            }
            card.style = stickyStyle;
        } else if (card instanceof StickyCard) {
            StickyCard.StickyStyle stickyStyle = new StickyCard.StickyStyle(true);
            if (styleJson != null) {
                String sticky = styleJson.getString(KEY_STICKY);
                if (TextUtils.isEmpty(sticky)) {
                    sticky = stickyStyle.stickyStart ? STICKY_START : STICKY_END;
                }
                stickyStyle.stickyStart = STICKY_START.equalsIgnoreCase(sticky);
                stickyStyle.offset = Style.parseSize(styleJson.getString("offset"), 0);
            }
            card.style = stickyStyle;
        } else if (card instanceof FixCard) {
            FixCard.FixStyle fixStyle = new FixCard.FixStyle();
            if (styleJson != null) {
                parseStyle(fixStyle, styleJson);
                String showTypeStr = styleJson.getString(KEY_SHOW_TYPE);
                if (TextUtils.isEmpty(showTypeStr)) {
                    showTypeStr = "top_left";
                } else {
                    showTypeStr = showTypeStr.toLowerCase();
                }
                String align = styleJson.getString(KEY_ALIGN);
                if (TextUtils.isEmpty(align)) {
                    align = "always";
                } else {
                    align = align.toLowerCase();
                }
                Boolean sketchMeasure = styleJson.getBoolean(KEY_SKETCH_MEASURE);
                if (sketchMeasure == null) {
                    fixStyle.sketchMeasure = true;
                } else {
                    fixStyle.sketchMeasure = sketchMeasure;
                }
                if ("showonenter".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ON_ENTER;
                } else if ("showonleave".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ON_LEAVE;
                } else if ("always".equals(showTypeStr)) {
                    fixStyle.showType = SHOW_ALWAYS;
                }
                if ("top_left".equals(align)) {
                    fixStyle.alignType = TOP_LEFT;
                } else if ("top_right".equals(align)) {
                    fixStyle.alignType = TOP_RIGHT;
                } else if ("bottom_left".equals(align)) {
                    fixStyle.alignType = BOTTOM_LEFT;
                } else if ("bottom_right".equals(align)) {
                    fixStyle.alignType = BOTTOM_RIGHT;
                }
                fixStyle.x = Style.parseSize(styleJson.getString(KEY_X), 0);
                fixStyle.y = Style.parseSize(styleJson.getString(KEY_Y), 0);
            }
            card.style = fixStyle;
        } else if (card instanceof LinearScrollCard) {
            LinearScrollCard linearScrollCard = (LinearScrollCard) card;
            try {
                linearScrollCard.cell.stringType = TangramBuilder.TYPE_LINEAR_SCROLL_CELL_COMPACT;
                linearScrollCard.cell.serviceManager = serviceManager;
                if (!linearScrollCard.getCells().isEmpty()) {
                    linearScrollCard.cell.cells.addAll(linearScrollCard.getCells());
                    linearScrollCard.setCells(linearScrollCard.getCells());
                }
            } catch (Exception e) {
                if (errorSupport == null) {
                    errorSupport = serviceManager.getService(InternalErrorSupport.class);
                }
                HashMap<String, Object> params = new HashMap<>();
                params.put("exception", Log.getStackTraceString(e));
                errorSupport.onError(InternalErrorSupport.ERROR_PARSE_CARDS_ERROR, "Parse linear scroll card error.", params);
                e.printStackTrace();
                linearScrollCard.setCells(null);
            }
            Style style = new Style();
            if (styleJson != null) {
                linearScrollCard.cell.pageWidth = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_PAGE_WIDTH), 0);
                linearScrollCard.cell.pageHeight = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_PAGE_HEIGHT), 0);
                linearScrollCard.cell.defaultIndicatorColor = Style.parseColor(styleJson.getString(LinearScrollCell.KEY_DEFAULT_INDICATOR_COLOR), LinearScrollCell.DEFAULT_DEFAULT_INDICATOR_COLOR);
                linearScrollCard.cell.indicatorColor = Style.parseColor(styleJson.getString(LinearScrollCell.KEY_INDICATOR_COLOR), LinearScrollCell.DEFAULT_INDICATOR_COLOR);
                if (styleJson.containsKey(LinearScrollCell.KEY_HAS_INDICATOR)) {
                    linearScrollCard.cell.hasIndicator = styleJson.getBooleanValue(LinearScrollCell.KEY_HAS_INDICATOR);
                }
                linearScrollCard.cell.indicatorHeight = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_INDICATOR_HEIGHT), LinearScrollCell.DEFAULT_INDICATOR_HEIGHT);
                linearScrollCard.cell.indicatorWidth = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_INDICATOR_WIDTH), LinearScrollCell.DEFAULT_INDICATOR_WIDTH);
                linearScrollCard.cell.defaultIndicatorWidth = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_DEFAULT_INDICATOR_WIDTH), LinearScrollCell.DEFAULT_DEFAULT_INDICATOR_WIDTH);
                linearScrollCard.cell.indicatorMargin = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_INDICATOR_MARGIN), LinearScrollCell.DEFAULT_INDICATOR_MARGIN);
                linearScrollCard.cell.indicatorRadius = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_INDICATOR_RADIUS), LinearScrollCell.DEFAULT_INDICATOR_RADIUS);
                if (styleJson.containsKey(LinearScrollCell.KEY_FOOTER_TYPE)) {
                    linearScrollCard.cell.footerType = styleJson.getString(LinearScrollCell.KEY_FOOTER_TYPE);
                }
                linearScrollCard.cell.bgColor = Style.parseColor(styleJson.getString(KEY_BG_COLOR), Color.TRANSPARENT);
                Boolean retainScrollState = styleJson.getBoolean(LinearScrollCell.KEY_RETAIN_SCROLL_STATE);
                if (retainScrollState == null) {
                    linearScrollCard.cell.retainScrollState = true;
                } else {
                    linearScrollCard.cell.retainScrollState = retainScrollState;
                }
                linearScrollCard.cell.scrollMarginLeft = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_SCROLL_MARGIN_LEFT), 0);
                linearScrollCard.cell.scrollMarginRight = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_SCROLL_MARGIN_RIGHT), 0);
                linearScrollCard.cell.hGap = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_HGAP), 0);
                linearScrollCard.cell.vGap = Style.parseSize(styleJson.getString(LinearScrollCell.KEY_VGAP), 0);
                linearScrollCard.cell.nativeBackgroundImage = styleJson.getString(LinearScrollCell.KEY_NATIVE_BG_IMAGE);
                Integer maxRows = styleJson.getInteger(LinearScrollCell.KEY_MAX_ROWS);
                if (maxRows == null) {
                    maxRows = LinearScrollCell.DEFAULT_MAX_ROWS;
                }
                linearScrollCard.cell.maxRows = maxRows;
                try {
                    linearScrollCard.cell.maxCols = (int) styleJson.getDoubleValue(LinearScrollCell.KEY_MAX_COLS);
                } catch (Exception e) {
                    if (errorSupport == null) {
                        errorSupport = serviceManager.getService(InternalErrorSupport.class);
                    }
                    HashMap<String, Object> params = new HashMap<>();
                    params.put("exception", Log.getStackTraceString(e));
                    errorSupport.onError(InternalErrorSupport.ERROR_PARSE_CARDS_ERROR, "Parse linear scroll card max cols error.", params);
                    e.printStackTrace();
                }
                parseStyle(style, styleJson);
            }
            linearScrollCard.style = style;
            card = linearScrollCard;
        } else if (card instanceof StaggeredCard) {
            StaggeredCard staggeredCard = (StaggeredCard) card;
            StaggeredCard.StaggeredStyle style = new StaggeredCard.StaggeredStyle();
            if (styleJson != null) {
                parseStyle(style, styleJson);
                Integer column = styleJson.getInteger(KEY_COLUMN);
                if (column == null) {
                    column = 2;
                }
                style.column = column;
                style.hGap = Style.parseSize(styleJson.getString(KEY_H_GAP), 0);
                style.vGap = Style.parseSize(styleJson.getString(KEY_V_GAP), 0);
            }
            staggeredCard.style = style;
        } else if (isCustomCard(card.stringType)) {
            parseCustomCard(card, data, serviceManager, infoMap);
        } else {
            Style style = new Style();
            parseStyle(style, styleJson);
            card.style = style;
        }
        if (card.isValid()) {
            if (card.style != null && card.style.slidable) {
                return new SlideCard(card);
            } else {
                return card;
            }
        }
    } else {
        LogUtils.w(TAG, "Invalid card type when parse JSON data");
    }
    return Card.NaN;
}
Also used : WrapCellCard(com.tmall.wireless.tangram3.structure.card.WrapCellCard) BaseCell(com.tmall.wireless.tangram3.structure.BaseCell) BannerCell(com.tmall.wireless.tangram3.structure.cell.BannerCell) HashMap(java.util.HashMap) LinearScrollCard(com.tmall.wireless.tangram3.structure.card.LinearScrollCard) FixLinearScrollCard(com.tmall.wireless.tangram3.structure.card.FixLinearScrollCard) GridCard(com.tmall.wireless.tangram3.structure.card.GridCard) StaggeredCard(com.tmall.wireless.tangram3.structure.card.StaggeredCard) StickyEndCard(com.tmall.wireless.tangram3.structure.card.StickyEndCard) ColumnStyle(com.tmall.wireless.tangram3.structure.style.ColumnStyle) ColumnStyle(com.tmall.wireless.tangram3.structure.style.ColumnStyle) JSONArray(com.alibaba.fastjson.JSONArray) FixLinearScrollCard(com.tmall.wireless.tangram3.structure.card.FixLinearScrollCard) StickyCard(com.tmall.wireless.tangram3.structure.card.StickyCard) OnePlusNCard(com.tmall.wireless.tangram3.structure.card.OnePlusNCard) StickyCard(com.tmall.wireless.tangram3.structure.card.StickyCard) LinearScrollCard(com.tmall.wireless.tangram3.structure.card.LinearScrollCard) SlideCard(com.tmall.wireless.tangram3.structure.card.SlideCard) StickyEndCard(com.tmall.wireless.tangram3.structure.card.StickyEndCard) WrapCellCard(com.tmall.wireless.tangram3.structure.card.WrapCellCard) GridCard(com.tmall.wireless.tangram3.structure.card.GridCard) FixLinearScrollCard(com.tmall.wireless.tangram3.structure.card.FixLinearScrollCard) BannerCard(com.tmall.wireless.tangram3.structure.card.BannerCard) FixCard(com.tmall.wireless.tangram3.structure.card.FixCard) StaggeredCard(com.tmall.wireless.tangram3.structure.card.StaggeredCard) OnePlusNCard(com.tmall.wireless.tangram3.structure.card.OnePlusNCard) SlideCard(com.tmall.wireless.tangram3.structure.card.SlideCard) JSONObject(com.alibaba.fastjson.JSONObject) InternalErrorSupport(com.tmall.wireless.tangram3.support.InternalErrorSupport) BannerCard(com.tmall.wireless.tangram3.structure.card.BannerCard) FixCard(com.tmall.wireless.tangram3.structure.card.FixCard) JSONObject(com.alibaba.fastjson.JSONObject) NonNull(android.support.annotation.NonNull)

Example 4 with Card

use of com.tmall.wireless.tangram3.dataparser.concrete.Card in project Tangram-Android by alibaba.

the class PojoDataParser method parseComponent.

@NonNull
@Override
public List<BaseCell> parseComponent(@Nullable JSONArray data, Card parent, ServiceManager serviceManager, Map<String, ComponentInfo> componentInfoMap) {
    if (data == null) {
        return new ArrayList<>();
    }
    final int size = data.size();
    final List<BaseCell> result = new ArrayList<>(size);
    // parse body
    final int cellLength = data.size();
    for (int i = 0; i < cellLength; i++) {
        final JSONObject cellData = data.getJSONObject(i);
        BaseCell cell = parseSingleComponent(cellData, parent, serviceManager, componentInfoMap);
        if (cell != null) {
            result.add(cell);
        }
    }
    return result;
}
Also used : JSONObject(com.alibaba.fastjson.JSONObject) BaseCell(com.tmall.wireless.tangram3.structure.BaseCell) ArrayList(java.util.ArrayList) NonNull(android.support.annotation.NonNull)

Example 5 with Card

use of com.tmall.wireless.tangram3.dataparser.concrete.Card in project Tangram-Android by alibaba.

the class TangramEngine method loadFirstPageCard.

/**
 * Loading data for card whose's position in within 0 to {{@link #mPreLoadNumber}}.
 */
public void loadFirstPageCard() {
    if (!mEnableLoadFirstPageCard) {
        return;
    }
    final CardLoadSupport loadSupport = getService(CardLoadSupport.class);
    if (loadSupport == null) {
        return;
    }
    boolean loadedMore = false;
    List<Card> cards = mGroupBasicAdapter.getGroups();
    for (int i = 0; i < Math.min(mPreLoadNumber, cards.size()); i++) {
        Card card = cards.get(i);
        if (!TextUtils.isEmpty(card.load) && !card.loaded) {
            // page load
            if (card.loadMore && !loadedMore) {
                // only load one load more card
                loadSupport.loadMore(card);
                loadSupport.reactiveDoLoadMore(card);
                loadedMore = true;
            } else {
                loadSupport.doLoad(card);
                loadSupport.reactiveDoLoad(card);
            }
            card.loaded = true;
        }
    }
}
Also used : CardLoadSupport(com.tmall.wireless.tangram3.support.async.CardLoadSupport) Card(com.tmall.wireless.tangram3.dataparser.concrete.Card)

Aggregations

BaseCell (com.tmall.wireless.tangram3.structure.BaseCell)15 Card (com.tmall.wireless.tangram3.dataparser.concrete.Card)11 Range (com.alibaba.android.vlayout.Range)6 ArrayList (java.util.ArrayList)6 NonNull (android.support.annotation.NonNull)5 GridCard (com.tmall.wireless.tangram3.structure.card.GridCard)5 OnePlusNCard (com.tmall.wireless.tangram3.structure.card.OnePlusNCard)5 RecyclerView (android.support.v7.widget.RecyclerView)4 VirtualLayoutManager (com.alibaba.android.vlayout.VirtualLayoutManager)4 JSONObject (com.alibaba.fastjson.JSONObject)4 View (android.view.View)3 LayoutHelper (com.alibaba.android.vlayout.LayoutHelper)3 JSONArray (com.alibaba.fastjson.JSONArray)3 BannerCard (com.tmall.wireless.tangram3.structure.card.BannerCard)3 FixCard (com.tmall.wireless.tangram3.structure.card.FixCard)3 FixLinearScrollCard (com.tmall.wireless.tangram3.structure.card.FixLinearScrollCard)3 LinearScrollCard (com.tmall.wireless.tangram3.structure.card.LinearScrollCard)3 SlideCard (com.tmall.wireless.tangram3.structure.card.SlideCard)3 StaggeredCard (com.tmall.wireless.tangram3.structure.card.StaggeredCard)3 StickyCard (com.tmall.wireless.tangram3.structure.card.StickyCard)3