From ebeea2dce902a9f05dbdc2b9b8775d71b2dde6ea Mon Sep 17 00:00:00 2001 From: MikeAfc Date: Wed, 31 Jul 2019 15:55:00 +0800 Subject: [PATCH] Add interface for render service to supple component info. --- .../tangram/example/DemoListActivity.java | 8 ++++---- gradle.properties | 2 +- .../tangram3/ComponentRenderManager.java | 16 +++++++++++++++- .../core/protocol/ElementRenderService.java | 12 +++++++++++- .../dataparser/concrete/PojoDataParser.java | 13 +++++++------ 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/examples/src/main/java/com/tmall/wireless/tangram/example/DemoListActivity.java b/examples/src/main/java/com/tmall/wireless/tangram/example/DemoListActivity.java index 2610996..5ac09ee 100755 --- a/examples/src/main/java/com/tmall/wireless/tangram/example/DemoListActivity.java +++ b/examples/src/main/java/com/tmall/wireless/tangram/example/DemoListActivity.java @@ -67,10 +67,10 @@ public class DemoListActivity extends ListActivity { bizItems.put("name", "自定义数据解析"); bizItems.put("class", TangramDataParserActivity.class.getName()); list.add(bizItems); -// HashMap tangram3Items = new HashMap(); -// tangram3Items.put("name", "Tangram 3.0 (beta)"); -// tangram3Items.put("class", Tangram3Activity.class.getName()); -// list.add(tangram3Items); + HashMap tangram3Items = new HashMap(); + tangram3Items.put("name", "Tangram 3.0 (beta)"); + tangram3Items.put("class", Tangram3Activity.class.getName()); + list.add(tangram3Items); ListAdapter listAdapter = new SimpleAdapter(this, list, android.R.layout.simple_list_item_1, new String[]{"name"}, new int[]{android.R.id.text1}); setListAdapter(listAdapter); } diff --git a/gradle.properties b/gradle.properties index 1d810f0..c858928 100644 --- a/gradle.properties +++ b/gradle.properties @@ -46,7 +46,7 @@ org.gradle.jvmargs=-Xmx1536M GROUP=com.alibaba.android ARTIFACT=tangram VERSION=1 -VERSION_NAME=3.5.0 +VERSION_NAME=3.5.1 PACKAGING_TYPE=aar systemProp.compileSdkVersion=26 systemProp.targetSdkVersion=26 diff --git a/tangram/src/main/java/com/tmall/wireless/tangram3/ComponentRenderManager.java b/tangram/src/main/java/com/tmall/wireless/tangram3/ComponentRenderManager.java index 9ae7d4c..1d36371 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram3/ComponentRenderManager.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram3/ComponentRenderManager.java @@ -1,7 +1,6 @@ package com.tmall.wireless.tangram3; import android.content.Context; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; import android.util.Log; import android.view.View; @@ -144,4 +143,19 @@ public class ComponentRenderManager { public Map getComponentInfoMap() { return componentInfoMap; } + + public ComponentInfo supplementComponentInfo(String cellType) { + ComponentInfo componentInfo = null; + if (componentInfoMap.containsKey(cellType)) { + componentInfo = componentInfoMap.get(cellType); + } else { + for (ElementRenderService renderService : renderServiceMap.values()) { + componentInfo = renderService.supplementComponentInfo(cellType); + if (componentInfo != null) { + break; + } + } + } + return componentInfo; + } } diff --git a/tangram/src/main/java/com/tmall/wireless/tangram3/core/protocol/ElementRenderService.java b/tangram/src/main/java/com/tmall/wireless/tangram3/core/protocol/ElementRenderService.java index 1135236..54744a0 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram3/core/protocol/ElementRenderService.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram3/core/protocol/ElementRenderService.java @@ -8,7 +8,6 @@ import com.alibaba.fastjson.JSONObject; import com.tmall.wireless.tangram3.TangramEngine; import com.tmall.wireless.tangram3.dataparser.concrete.ComponentInfo; - import java.util.List; public abstract class ElementRenderService { @@ -21,6 +20,17 @@ public abstract class ElementRenderService { abstract public void unmountView(JSONObject json, View view); + /** + * Tangram would call this method to ask renderService supple component info + * when the data json does not have a component info. + * + * @param cellType + * @return + */ + public ComponentInfo supplementComponentInfo(String cellType) { + return null; + } + abstract public void destroy(); abstract public String getSDKBizName(); diff --git a/tangram/src/main/java/com/tmall/wireless/tangram3/dataparser/concrete/PojoDataParser.java b/tangram/src/main/java/com/tmall/wireless/tangram3/dataparser/concrete/PojoDataParser.java index 67e8146..32a2bd7 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram3/dataparser/concrete/PojoDataParser.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram3/dataparser/concrete/PojoDataParser.java @@ -683,11 +683,12 @@ public class PojoDataParser extends DataParser { checkCardResolverAndMVHelper(serviceManager); String cellType = parseCellType(data); - if (mvHelper.renderManager().getComponentInfoMap().containsKey(cellType)) { - if (componentInfoMap == null) { - componentInfoMap = new HashMap<>(); - } - componentInfoMap.put(cellType, mvHelper.renderManager().getComponentInfoMap().get(cellType)); + 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); @@ -797,7 +798,7 @@ public class PojoDataParser extends DataParser { } protected BaseCell createCell(@Nullable Card parent, @NonNull MVHelper resolver, @NonNull JSONObject cellData, - @NonNull ServiceManager serviceManager, Map componentInfoMap) { + @NonNull ServiceManager serviceManager, Map componentInfoMap) { BaseCell cell = null; String cellType = parseCellType(cellData);