You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/04/28 06:53:56 UTC
[28/48] incubator-weex git commit: * [android] Merge WeexCore-master
to master.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
index 4f9712f..5434bc0 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
@@ -23,9 +23,9 @@ import android.text.TextUtils;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.common.WXRuntimeException;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.IFComponentHolder;
import com.taobao.weex.ui.WXComponentRegistry;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.utils.WXLogUtils;
import java.util.HashMap;
@@ -37,42 +37,45 @@ import java.util.Set;
* Component factory
*/
public class WXComponentFactory {
- private static Map<String,Set<String>> sComponentTypes=new HashMap<>();
- public static Set<String> getComponentTypesByInstanceId(String instanceId){
+ private static Map<String, Set<String>> sComponentTypes = new HashMap<>();
+
+ public static Set<String> getComponentTypesByInstanceId(String instanceId) {
return sComponentTypes.get(instanceId);
}
- public static void removeComponentTypesByInstanceId(String instanceId){
+
+ public static void removeComponentTypesByInstanceId(String instanceId) {
sComponentTypes.remove(instanceId);
}
- public static WXComponent newInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
- if (instance == null || node == null || TextUtils.isEmpty(node.getType()) ) {
+ public static WXComponent newInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ if (instance == null || TextUtils.isEmpty(basicComponentData.mComponentType)) {
return null;
}
-
- if(sComponentTypes.get(instance.getInstanceId())==null){
- Set<String> types=new HashSet<>();
- sComponentTypes.put(instance.getInstanceId(),types);
+ if (sComponentTypes.get(instance.getInstanceId()) == null) {
+ Set<String> types = new HashSet<>();
+ sComponentTypes.put(instance.getInstanceId(), types);
}
- sComponentTypes.get(instance.getInstanceId()).add(node.getType());
+ sComponentTypes.get(instance.getInstanceId()).add(basicComponentData.mComponentType);
- IFComponentHolder holder = WXComponentRegistry.getComponent(node.getType());
+ IFComponentHolder holder = WXComponentRegistry.getComponent(basicComponentData.mComponentType);
if (holder == null) {
+ if (WXEnvironment.isApkDebugable()) {
String tag = "WXComponentFactory error type:[" +
- node.getType() + "]" + " class not found";
+ basicComponentData.mComponentType + "]" + " class not found";
WXLogUtils.e(tag);
+ }
//For compatible reason of JS framework, unregistered type will be treated as container.
holder = WXComponentRegistry.getComponent(WXBasicComponentType.CONTAINER);
- if(holder == null){
+ if (holder == null) {
throw new WXRuntimeException("Container component not found.");
}
}
try {
- return holder.createInstance(instance, node, parent);
- } catch (Exception e) {
- WXLogUtils.e("WXComponentFactory Exception type:[" + node.getType() + "] ", e);
+ return holder.createInstance(instance, parent, basicComponentData);
+ } catch (Throwable e) {
+ WXLogUtils.e("WXComponentFactory Exception type:[" + basicComponentData.mComponentType + "] ", e);
}
return null;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
index 31364f0..65b9b51 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
@@ -20,11 +20,10 @@ package com.taobao.weex.ui.component;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-@Retention(RUNTIME)
+@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface WXComponentProp {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
index b9b97e1..b9f5ada 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
@@ -22,13 +22,14 @@ import android.content.Context;
import android.support.annotation.NonNull;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.flat.FlatComponent;
import com.taobao.weex.ui.flat.WidgetContainer;
import com.taobao.weex.ui.flat.widget.WidgetGroup;
import com.taobao.weex.ui.view.WXFrameLayout;
import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
/**
* div component
@@ -39,24 +40,20 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> implements FlatCompone
private WidgetGroup mWidgetGroup;
public static class Ceator implements ComponentCreator {
-
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent)
- throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXDiv(instance, node, parent);
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXDiv(instance, parent, basicComponentData);
}
}
@Deprecated
- public WXDiv(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId,
- boolean isLazy) {
- this(instance, dom, parent);
+ public WXDiv(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXDiv(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
- super(instance, node, parent);
+ public WXDiv(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
}
-
@Override
protected WXFrameLayout initComponentHostView(@NonNull Context context) {
WXFrameLayout frameLayout = new WXFrameLayout(context);
@@ -67,7 +64,7 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> implements FlatCompone
@Override
public boolean promoteToView(boolean checkAncestor) {
return !intendToBeFlatContainer() ||
- getInstance().getFlatUIContext().promoteToView(this, checkAncestor, WXDiv.class);
+ getInstance().getFlatUIContext().promoteToView(this, checkAncestor, WXDiv.class);
}
/**
@@ -89,6 +86,9 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> implements FlatCompone
@Override
protected void mountFlatGUI() {
+ if(widgets == null){
+ widgets = new LinkedList<>();
+ }
if (promoteToView(true)) {
if(getHostView()!=null) {
getHostView().mountFlatGUI(widgets);
@@ -114,5 +114,4 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> implements FlatCompone
public boolean isVirtualComponent() {
return !promoteToView(true);
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
index 87f5859..018612b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
@@ -27,7 +27,7 @@ import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.ImageView;
-import com.taobao.weappplus_sdk.R;
+import com.taobao.weex.R;
import com.taobao.weex.IWXRenderListener;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
@@ -36,7 +36,7 @@ import com.taobao.weex.common.Constants;
import com.taobao.weex.common.WXErrorCode;
import com.taobao.weex.common.WXPerformance;
import com.taobao.weex.common.WXRenderStrategy;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
@@ -45,8 +45,7 @@ import java.util.Comparator;
import java.util.PriorityQueue;
@Component(lazyload = false)
-public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleListener,NestedContainer{
-
+public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleListener,NestedContainer {
public static final String STRATEGY_NONE = "none";
public static final String STRATEGY_NORMAL = "normal";
@@ -113,7 +112,7 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
@Override
public void onException(NestedContainer container, String errCode, String msg) {
if (TextUtils.equals(errCode, WXErrorCode.
- WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode()) && container instanceof WXEmbed) {
+ WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode()) && container instanceof WXEmbed) {
final WXEmbed comp = ((WXEmbed)container);
final ImageView imageView = new ImageView(comp.getContext());
imageView.setImageResource(R.drawable.error);
@@ -188,24 +187,24 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
}
@Deprecated
- public WXEmbed(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent);
+ public WXEmbed(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXEmbed(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
- super(instance, node, parent);
+ public WXEmbed(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
mListener = new EmbedRenderListener(this);
- ERROR_IMG_WIDTH = (int) WXViewUtils.getRealPxByWidth(270,instance.getInstanceViewPortWidth());
- ERROR_IMG_HEIGHT = (int) WXViewUtils.getRealPxByWidth(260,instance.getInstanceViewPortWidth());
- if(instance instanceof EmbedManager) {
- Object itemId = node.getAttrs().get(ITEM_ID);
+ ERROR_IMG_WIDTH = (int) WXViewUtils.getRealPxByWidth(270, instance.getInstanceViewPortWidth());
+ ERROR_IMG_HEIGHT = (int) WXViewUtils.getRealPxByWidth(260, instance.getInstanceViewPortWidth());
+ if (instance instanceof EmbedManager) {
+ Object itemId = getAttrs().get(ITEM_ID);
if (itemId != null) {
((EmbedManager) instance).putEmbed(itemId.toString(), this);
}
}
- this.priority = WXUtils.getString(node.getAttrs().get(Constants.Name.PRIORITY), PRIORITY_NORMAL);
- this.strategy = WXUtils.getString(node.getAttrs().get(Constants.Name.STRATEGY), STRATEGY_NONE);
+ this.priority = WXUtils.getString(getAttrs().get(Constants.Name.PRIORITY), PRIORITY_NORMAL);
+ this.strategy = WXUtils.getString(getAttrs().get(Constants.Name.STRATEGY), STRATEGY_NONE);
}
@Override
@@ -229,7 +228,7 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
case Constants.Name.PRIORITY:
String priority = WXUtils.getString(param,null);
if (priority != null){
- setPriority(priority);
+ setPriority(priority);
}
return true;
}
@@ -278,10 +277,10 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
@WXComponentProp(name = Constants.Name.PRIORITY)
public void setPriority(String priority) {
- if(TextUtils.isEmpty(priority)){
- return;
- }
- this.priority = priority;
+ if(TextUtils.isEmpty(priority)){
+ return;
+ }
+ this.priority = priority;
}
/**
@@ -327,18 +326,16 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
if(TextUtils.isEmpty(url)){
mListener.mEventListener.onException(this,
- WXErrorCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getErrorCode(),
+ WXErrorCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getErrorCode(),
WXErrorCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getErrorMsg() + "!!wx embed src url is null"
- );
+ );
return sdkInstance;
}
- ViewGroup.LayoutParams layoutParams = getHostView().getLayoutParams();
sdkInstance.renderByUrl(WXPerformance.DEFAULT,
- url,
- null, null, layoutParams.width,
- layoutParams.height,
- WXRenderStrategy.APPEND_ASYNC);
+ url,
+ null, null,
+ WXRenderStrategy.APPEND_ASYNC);
return sdkInstance;
}
@@ -376,7 +373,6 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
}
}
-
private void doAutoEmbedMemoryStrategy(){
/**
* auto manage embed amount in current instance, save memory
@@ -491,16 +487,16 @@ public class WXEmbed extends WXDiv implements WXSDKInstance.OnInstanceVisibleLis
private void destoryNestInstance(){
if(getInstance().hiddenEmbeds != null && getInstance().hiddenEmbeds.contains(this)){
- getInstance().hiddenEmbeds.remove(this);
+ getInstance().hiddenEmbeds.remove(this);
}
if (mNestedInstance != null) {
- mNestedInstance.destroy();
- mNestedInstance = null;
+ mNestedInstance.destroy();
+ mNestedInstance = null;
}
if(WXEnvironment.isApkDebugable()){
- WXLogUtils.w("WXEmbed destoryNestInstance priority " + priority + " index " + getDomObject().getAttrs().get("index")
- + " " + hiddenTime + " embeds size " + (getInstance().hiddenEmbeds == null ? 0 : getInstance().hiddenEmbeds.size())
- + " strategy " + this.strategy);
+ WXLogUtils.w("WXEmbed destoryNestInstance priority " + priority + " index " + getAttrs().get("index")
+ + " " + hiddenTime + " embeds size " + (getInstance().hiddenEmbeds == null ? 0 : getInstance().hiddenEmbeds.size())
+ + " strategy " + this.strategy);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
index 82744c2..d55106e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
@@ -21,7 +21,7 @@ package com.taobao.weex.ui.component;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.component.list.WXCell;
/**
@@ -31,13 +31,13 @@ import com.taobao.weex.ui.component.list.WXCell;
public class WXHeader extends WXCell {
@Deprecated
- public WXHeader(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent,isLazy);
+ public WXHeader(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, isLazy, basicComponentData);
}
- public WXHeader(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
- super(instance, node, parent, lazy);
- String parantType = parent.getDomObject().getType();
+ public WXHeader(WXSDKInstance instance, WXVContainer parent, boolean lazy, BasicComponentData basicComponentData) {
+ super(instance, parent, lazy, basicComponentData);
+ String parantType = parent.getComponentType();
if(WXBasicComponentType.LIST.equals(parantType)
|| WXBasicComponentType.RECYCLE_LIST.equals(parantType)){
setSticky(Constants.Value.STICKY);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
index ff32c0f..6d37506 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
@@ -18,11 +18,16 @@
*/
package com.taobao.weex.ui.component;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -32,11 +37,9 @@ import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
-import android.util.Log;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
-
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
@@ -48,26 +51,19 @@ import com.taobao.weex.common.Constants;
import com.taobao.weex.common.WXImageSharpen;
import com.taobao.weex.common.WXImageStrategy;
import com.taobao.weex.common.WXRuntimeException;
-import com.taobao.weex.dom.ImmutableDomObject;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXImageView;
import com.taobao.weex.ui.view.border.BorderDrawable;
import com.taobao.weex.utils.ImageDrawable;
import com.taobao.weex.utils.ImgURIUtil;
import com.taobao.weex.utils.SingleFunctionParser;
-import com.taobao.weex.utils.WXViewToImageUtil;
import com.taobao.weex.utils.WXDomUtils;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
+import com.taobao.weex.utils.WXViewToImageUtil;
import com.taobao.weex.utils.WXViewUtils;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* Image component
*/
@@ -89,21 +85,20 @@ public class WXImage extends WXComponent<ImageView> {
}
};
- public static class Ceator implements ComponentCreator {
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXImage(instance,node,parent);
+ public static class Creator implements ComponentCreator {
+ @Override
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXImage(instance, parent, basicComponentData);
}
}
-
@Deprecated
- public WXImage(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent);
+ public WXImage(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXImage(WXSDKInstance instance, WXDomObject node,
- WXVContainer parent) {
- super(instance, node, parent);
+ public WXImage(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
}
@Override
@@ -117,47 +112,45 @@ public class WXImage extends WXComponent<ImageView> {
return view;
}
- @Override
- protected boolean setProperty(String key, Object param) {
- switch (key) {
- case Constants.Name.RESIZE_MODE:
- String resize_mode = WXUtils.getString(param, null);
- if (resize_mode != null)
- setResizeMode(resize_mode);
- return true;
- case Constants.Name.RESIZE:
- String resize = WXUtils.getString(param, null);
- if (resize != null)
- setResize(resize);
- return true;
- case Constants.Name.SRC:
- String src = WXUtils.getString(param, null);
- if (src != null)
- setSrc(src);
- return true;
- case Constants.Name.IMAGE_QUALITY:
- return true;
- case Constants.Name.AUTO_RECYCLE:
- mAutoRecycle = WXUtils.getBoolean(param, mAutoRecycle);
- return true;
- case Constants.Name.FILTER:
- int blurRadius = 0;
- if(param != null && param instanceof String) {
- blurRadius = parseBlurRadius((String)param);
- }
- if(!TextUtils.isEmpty(this.mSrc)) {
- setBlurRadius(this.mSrc,blurRadius);
- }
- return true;
- }
- return super.setProperty(key, param);
+ @Override
+ protected boolean setProperty(String key, Object param) {
+ switch (key) {
+ case Constants.Name.RESIZE_MODE:
+ String resizeMode = WXUtils.getString(param, null);
+ if (resizeMode != null) { setResizeMode(resizeMode); }
+ return true;
+ case Constants.Name.RESIZE:
+ String resize = WXUtils.getString(param, null);
+ if (resize != null) { setResize(resize); }
+ return true;
+ case Constants.Name.SRC:
+ String src = WXUtils.getString(param, null);
+ if (src != null) { setSrc(src); }
+ return true;
+ case Constants.Name.IMAGE_QUALITY:
+ return true;
+ case Constants.Name.AUTO_RECYCLE:
+ mAutoRecycle = WXUtils.getBoolean(param, mAutoRecycle);
+ return true;
+ case Constants.Name.FILTER:
+ int blurRadius = 0;
+ if (param != null && param instanceof String) {
+ blurRadius = parseBlurRadius((String)param);
+ }
+ if (!TextUtils.isEmpty(this.mSrc)) {
+ setBlurRadius(this.mSrc, blurRadius);
+ }
+ return true;
+ default:
+ return super.setProperty(key, param);
+ }
}
@Override
public void refreshData(WXComponent component) {
super.refreshData(component);
if (component instanceof WXImage) {
- setSrc(component.getDomObject().getAttrs().getImageSrc());
+ setSrc(component.getAttrs().getImageSrc());
}
}
@@ -182,6 +175,8 @@ public class WXImage extends WXComponent<ImageView> {
case "stretch":
scaleType = ScaleType.FIT_XY;
break;
+ default:
+ break;
}
return scaleType;
}
@@ -217,7 +212,7 @@ public class WXImage extends WXComponent<ImageView> {
if(image != null){
if(image.getDrawable() != null){
- image.setImageDrawable(null);
+ image.setImageDrawable(null);
}
}
@@ -230,10 +225,8 @@ public class WXImage extends WXComponent<ImageView> {
setLocalSrc(rewrited);
} else {
int blur = 0;
- if(getDomObject() != null) {
- String blurStr = getDomObject().getStyles().getBlur();
- blur = parseBlurRadius(blurStr);
- }
+ String blurStr = getStyles().getBlur();
+ blur = parseBlurRadius(blurStr);
setRemoteSrc(rewrited, blur);
}
}
@@ -254,7 +247,7 @@ public class WXImage extends WXComponent<ImageView> {
SingleFunctionParser<Integer> parser = new SingleFunctionParser<Integer>(rawRadius,BLUR_RADIUS_MAPPER);
List<Integer> list = null;
try {
- list = parser.parse("blur");
+ list = parser.parse("blur");
}catch (Exception e) {
return 0;
}
@@ -297,83 +290,89 @@ public class WXImage extends WXComponent<ImageView> {
private void setRemoteSrc(Uri rewrited,int blurRadius) {
- WXImageStrategy imageStrategy = new WXImageStrategy();
- imageStrategy.isClipping = true;
-
- WXImageSharpen imageSharpen = getDomObject().getAttrs().getImageSharpen();
- imageStrategy.isSharpen = imageSharpen == WXImageSharpen.SHARPEN;
-
- imageStrategy.blurRadius = Math.max(0, blurRadius);
- this.mBlurRadius = blurRadius;
-
- imageStrategy.setImageListener(new WXImageStrategy.ImageListener() {
- @Override
- public void onImageFinish(String url, ImageView imageView, boolean result, Map extra) {
- if (getDomObject() != null && getDomObject().getEvents().contains(Constants.Event.ONLOAD)) {
- Map<String, Object> params = new HashMap<String, Object>();
- Map<String, Object> size = new HashMap<>(2);
- if (imageView != null && imageView instanceof Measurable) {
- size.put("naturalWidth", ((Measurable) imageView).getNaturalWidth());
- size.put("naturalHeight", ((Measurable) imageView).getNaturalHeight());
- } else {
- size.put("naturalWidth", 0);
- size.put("naturalHeight", 0);
- }
-
- if (getDomObject() != null && containsEvent(Constants.Event.ONLOAD)) {
- params.put("success", result);
- params.put("size", size);
- fireEvent(Constants.Event.ONLOAD, params);
- }
+ WXImageStrategy imageStrategy = new WXImageStrategy();
+ imageStrategy.isClipping = true;
+
+ WXImageSharpen imageSharpen = getAttrs().getImageSharpen();
+ imageStrategy.isSharpen = imageSharpen == WXImageSharpen.SHARPEN;
+
+ imageStrategy.blurRadius = Math.max(0, blurRadius);
+ this.mBlurRadius = blurRadius;
+
+ imageStrategy.setImageListener(new WXImageStrategy.ImageListener() {
+ @Override
+ public void onImageFinish(String url, ImageView imageView, boolean result, Map extra) {
+ if (getEvents().contains(Constants.Event.ONLOAD)) {
+ Map<String, Object> params = new HashMap<String, Object>();
+ Map<String, Object> size = new HashMap<>(2);
+ if (imageView != null && imageView instanceof Measurable) {
+ size.put("naturalWidth", ((Measurable) imageView).getNaturalWidth());
+ size.put("naturalHeight", ((Measurable) imageView).getNaturalHeight());
+ } else {
+ size.put("naturalWidth", 0);
+ size.put("naturalHeight", 0);
}
- monitorImgSize(imageView);
- }
- });
- String placeholder=null;
- if(getDomObject().getAttrs().containsKey(Constants.Name.PLACEHOLDER)){
- placeholder= (String) getDomObject().getAttrs().get(Constants.Name.PLACEHOLDER);
- }else if(getDomObject().getAttrs().containsKey(Constants.Name.PLACE_HOLDER)){
- placeholder=(String)getDomObject().getAttrs().get(Constants.Name.PLACE_HOLDER);
- }
- if(!TextUtils.isEmpty(placeholder)){
- imageStrategy.placeHolder = getInstance().rewriteUri(Uri.parse(placeholder),URIAdapter.IMAGE).toString();
+ if (containsEvent(Constants.Event.ONLOAD)) {
+ params.put("success", result);
+ params.put("size", size);
+ fireEvent(Constants.Event.ONLOAD, params);
+ }
}
-
- imageStrategy.instanceId = getInstanceId();
- IWXImgLoaderAdapter imgLoaderAdapter = getInstance().getImgLoaderAdapter();
- if (imgLoaderAdapter != null) {
- imgLoaderAdapter.setImage(rewrited.toString(), getHostView(),
- getDomObject().getAttrs().getImageQuality(), imageStrategy);
+ monitorImgSize(imageView);
}
+ });
+
+ String placeholder=null;
+ if(getAttrs().containsKey(Constants.Name.PLACEHOLDER)){
+ placeholder= (String) getAttrs().get(Constants.Name.PLACEHOLDER);
+ }else if(getAttrs().containsKey(Constants.Name.PLACE_HOLDER)){
+ placeholder=(String)getAttrs().get(Constants.Name.PLACE_HOLDER);
+ }
+ if(placeholder!=null){
+ imageStrategy.placeHolder = getInstance().rewriteUri(Uri.parse(placeholder),URIAdapter.IMAGE).toString();
+ }
+
+ imageStrategy.instanceId = getInstanceId();
+ IWXImgLoaderAdapter imgLoaderAdapter = getInstance().getImgLoaderAdapter();
+ if (imgLoaderAdapter != null) {
+ imgLoaderAdapter.setImage(rewrited.toString(), getHostView(),
+ getDomObject().getAttrs().getImageQuality(), imageStrategy);
+ }
+ }
+
+ @Override
+ protected void onFinishLayout() {
+ super.onFinishLayout();
+ updateBorderRadius();
}
@Override
public void updateProperties(Map<String, Object> props) {
super.updateProperties(props);
- WXImageView imageView;
- ImmutableDomObject imageDom;
- if ((imageDom = getDomObject()) != null &&
- getHostView() instanceof WXImageView) {
- imageView = (WXImageView) getHostView();
+ updateBorderRadius();
+ }
+
+ private void updateBorderRadius() {
+ if (getHostView() instanceof WXImageView) {
+ final WXImageView imageView = (WXImageView)getHostView();
BorderDrawable borderDrawable = WXViewUtils.getBorderDrawable(getHostView());
float[] borderRadius;
if (borderDrawable != null) {
- RectF borderBox = new RectF(0, 0, WXDomUtils.getContentWidth(imageDom), WXDomUtils.getContentHeight(imageDom));
- borderRadius = borderDrawable.getBorderRadius(borderBox);
+ RectF borderBox = new RectF(0, 0, WXDomUtils.getContentWidth(this), WXDomUtils.getContentHeight(this));
+ borderRadius = borderDrawable.getBorderInnerRadius(borderBox);
} else {
- borderRadius = new float[]{0, 0, 0, 0, 0, 0, 0, 0};
+ borderRadius = new float[] {0, 0, 0, 0, 0, 0, 0, 0};
}
imageView.setBorderRadius(borderRadius);
if (imageView.getDrawable() instanceof ImageDrawable) {
- ImageDrawable imageDrawable = (ImageDrawable) imageView.getDrawable();
+ ImageDrawable imageDrawable = (ImageDrawable)imageView.getDrawable();
float[] previousRadius = imageDrawable.getCornerRadii();
if (!Arrays.equals(previousRadius, borderRadius)) {
imageDrawable.setCornerRadii(borderRadius);
}
}
- readyToRender();
}
}
@@ -457,15 +456,16 @@ public class WXImage extends WXComponent<ImageView> {
}
if (img.getIntrinsicHeight() * img.getIntrinsicWidth() > imageView.getMeasuredHeight() *
- imageView.getMeasuredWidth()){
+ imageView.getMeasuredWidth()){
instance.getWXPerformance().wrongImgSizeCount++;
}
}
+ @Override
public void destroy() {
if(getHostView() instanceof WXImageView){
if (getInstance().getImgLoaderAdapter() != null) {
- getInstance().getImgLoaderAdapter().setImage(null, mHost, null, null);
+ getInstance().getImgLoaderAdapter().setImage(null, mHost, null, null);
}
}
super.destroy();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
index 02f8a21..e8422ca 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
@@ -29,16 +29,12 @@ import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
import com.taobao.weex.common.WXRuntimeException;
-import com.taobao.weex.dom.WXDomObject;
-import com.taobao.weex.dom.WXStyle;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXCircleIndicator;
import com.taobao.weex.utils.WXResourceUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
-import java.util.HashMap;
-import java.util.Map;
-
/**
*
* Slider indicator
@@ -47,12 +43,12 @@ import java.util.Map;
public class WXIndicator extends WXComponent<WXCircleIndicator> {
@Deprecated
- public WXIndicator(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent,isLazy);
+ public WXIndicator(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, isLazy, basicComponentData);
}
- public WXIndicator(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
- super(instance, dom, parent, isLazy);
+ public WXIndicator(WXSDKInstance instance, WXVContainer parent, boolean isLazy, BasicComponentData basicComponentData) {
+ super(instance, parent, isLazy, basicComponentData);
}
@Override
@@ -151,20 +147,21 @@ public class WXIndicator extends WXComponent<WXCircleIndicator> {
}
}
- public static class IndicatorDomNode extends WXDomObject{
- public IndicatorDomNode(){
- super();
- }
-
- @Override
- protected Map<String, String> getDefaultStyle() {
- WXStyle pendingStyles = getStyles();
- Map<String,String> map = new HashMap<>();
- if(!pendingStyles.containsKey(Constants.Name.RIGHT))
- map.put(Constants.Name.LEFT,"0");
- if(!pendingStyles.containsKey(Constants.Name.BOTTOM))
- map.put(Constants.Name.TOP,"0");
- return map;
- }
- }
+ // TODO
+// public static class IndicatorDomNode extends WXDomObject{
+// public IndicatorDomNode(){
+// super();
+// }
+//
+// @Override
+// protected Map<String, String> getDefaultStyle() {
+// WXStyle pendingStyles = getStyles();
+// Map<String,String> map = new HashMap<>();
+// if(!pendingStyles.containsKey(Constants.Name.RIGHT))
+// map.put(Constants.Name.LEFT,"0");
+// if(!pendingStyles.containsKey(Constants.Name.BOTTOM))
+// map.put(Constants.Name.TOP,"0");
+// return map;
+// }
+// }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
index 339165a..d1a272d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
@@ -20,7 +20,7 @@ package com.taobao.weex.ui.component;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXEditText;
/**
@@ -31,12 +31,12 @@ import com.taobao.weex.ui.view.WXEditText;
public class WXInput extends AbstractEditComponent{
@Deprecated
- public WXInput(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent,isLazy);
+ public WXInput(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, isLazy, basicComponentData);
}
- public WXInput(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
- super(instance, dom, parent, isLazy);
+ public WXInput(WXSDKInstance instance, WXVContainer parent, boolean isLazy, BasicComponentData basicComponentData) {
+ super(instance, parent, isLazy, basicComponentData);
}
@Override
@@ -44,9 +44,4 @@ public class WXInput extends AbstractEditComponent{
super.appleStyleAfterCreated(editText);
editText.setSingleLine();//default use single line , same to ios
}
-
- @Override
- protected MeasureOutput measure(int width, int height) {
- return super.measure(width, height);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
index 7ab9b03..8130ace 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
@@ -25,10 +25,8 @@ import android.text.TextUtils;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.ImmutableDomObject;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.component.list.WXListComponent;
-import com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList;
import com.taobao.weex.ui.view.WXFrameLayout;
import com.taobao.weex.ui.view.WXLoadingLayout;
import com.taobao.weex.ui.view.refresh.core.WXSwipeLayout;
@@ -46,8 +44,8 @@ public class WXLoading extends WXBaseRefresh implements WXSwipeLayout.WXOnLoadin
public static final String HIDE = "hide";
- public WXLoading(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
- super(instance, node, parent, lazy);
+ public WXLoading(WXSDKInstance instance, WXVContainer parent, boolean lazy, BasicComponentData basicComponentData) {
+ super(instance, parent, lazy, basicComponentData);
}
@Override
@@ -57,16 +55,14 @@ public class WXLoading extends WXBaseRefresh implements WXSwipeLayout.WXOnLoadin
@Override
public void onLoading() {
- ImmutableDomObject domObject = getDomObject();
- if (domObject != null && domObject.getEvents().contains(Constants.Event.ONLOADING)) {
+ if (getEvents().contains(Constants.Event.ONLOADING)) {
fireEvent(Constants.Event.ONLOADING);
}
}
@Override
public void onPullingUp(float dy, int pullOutDistance, float viewHeight) {
- ImmutableDomObject domObject = getDomObject();
- if (domObject != null && domObject.getEvents().contains(Constants.Event.ONPULLING_UP)) {
+ if (getEvents().contains(Constants.Event.ONPULLING_UP)) {
Map<String, Object> data = new HashMap<>();
data.put(Constants.Name.DISTANCE_Y, dy);
data.put(Constants.Name.PULLING_DISTANCE, pullOutDistance);
@@ -96,9 +92,7 @@ public class WXLoading extends WXBaseRefresh implements WXSwipeLayout.WXOnLoadin
public void setDisplay(String display) {
if (!TextUtils.isEmpty(display)) {
if (display.equals(HIDE)) {
- if (getParent() instanceof WXRecyclerTemplateList
- || getParent() instanceof WXListComponent
- || getParent() instanceof WXScroller) {
+ if (getParent() instanceof WXListComponent || getParent() instanceof WXScroller) {
if (((BaseBounceView)getParent().getHostView()).getSwipeLayout().isRefreshing()) {
((BaseBounceView) getParent().getHostView()).finishPullLoad();
((BaseBounceView) getParent().getHostView()).onLoadmoreComplete();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
index 5c0a886..68b7403 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
@@ -25,7 +25,7 @@ import android.support.annotation.NonNull;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.refresh.circlebar.CircleProgressBar;
import com.taobao.weex.utils.WXResourceUtils;
import com.taobao.weex.utils.WXUtils;
@@ -35,11 +35,10 @@ import com.taobao.weex.utils.WXUtils;
public class WXLoadingIndicator extends WXComponent<CircleProgressBar> {
- public WXLoadingIndicator(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
- super(instance, dom, parent, isLazy);
+ public WXLoadingIndicator(WXSDKInstance instance, WXVContainer parent, boolean isLazy, BasicComponentData basicComponentData) {
+ super(instance, parent, isLazy, basicComponentData);
}
-
@Override
protected CircleProgressBar initComponentHostView(@NonNull Context context) {
return new CircleProgressBar(context);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
index 555d895..bf8c99c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
@@ -25,10 +25,8 @@ import android.text.TextUtils;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.ImmutableDomObject;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.component.list.WXListComponent;
-import com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList;
import com.taobao.weex.ui.view.WXFrameLayout;
import com.taobao.weex.ui.view.WXRefreshLayout;
import com.taobao.weex.ui.view.refresh.core.WXSwipeLayout;
@@ -47,12 +45,12 @@ public class WXRefresh extends WXBaseRefresh implements WXSwipeLayout.WXOnRefres
public static final String HIDE = "hide";
@Deprecated
- public WXRefresh(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent,isLazy);
+ public WXRefresh(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, isLazy, basicComponentData);
}
- public WXRefresh(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
- super(instance, node, parent, lazy);
+ public WXRefresh(WXSDKInstance instance, WXVContainer parent, boolean lazy, BasicComponentData basicComponentData) {
+ super(instance, parent, lazy, basicComponentData);
}
@Override
@@ -71,8 +69,7 @@ public class WXRefresh extends WXBaseRefresh implements WXSwipeLayout.WXOnRefres
return;
}
- ImmutableDomObject dom;
- if ((dom = getDomObject())!= null && dom.getEvents().contains(Constants.Event.ONREFRESH)) {
+ if (getEvents().contains(Constants.Event.ONREFRESH)) {
fireEvent(Constants.Event.ONREFRESH);
}
}
@@ -80,12 +77,12 @@ public class WXRefresh extends WXBaseRefresh implements WXSwipeLayout.WXOnRefres
@Override
public int getLayoutTopOffsetForSibling() {
//offset siblings
- return getParent() instanceof Scrollable ? -Math.round(getDomObject().getLayoutHeight()) : 0;
+ return getParent() instanceof Scrollable ? -Math.round(getLayoutHeight()) : 0;
}
@Override
public void onPullingDown(float dy, int pullOutDistance, float viewHeight) {
- if (getDomObject().getEvents() != null && getDomObject().getEvents().contains(Constants.Event.ONPULLING_DOWN)) {
+ if (getEvents() != null && getEvents().contains(Constants.Event.ONPULLING_DOWN)) {
Map<String, Object> data = new HashMap<>();
data.put(Constants.Name.DISTANCE_Y, dy);
data.put(Constants.Name.PULLING_DISTANCE, pullOutDistance);
@@ -110,9 +107,7 @@ public class WXRefresh extends WXBaseRefresh implements WXSwipeLayout.WXOnRefres
public void setDisplay(String display) {
if (!TextUtils.isEmpty(display)) {
if (display.equals(HIDE)) {
- if (getParent() instanceof WXRecyclerTemplateList
- || getParent() instanceof WXListComponent
- || getParent() instanceof WXScroller) {
+ if (getParent() instanceof WXListComponent || getParent() instanceof WXScroller) {
if (((BaseBounceView)getParent().getHostView()).getSwipeLayout().isRefreshing()) {
((BaseBounceView) getParent().getHostView()).finishPullRefresh();
((BaseBounceView) getParent().getHostView()).onRefreshingComplete();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
index f21d33b..94845ea 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@ -18,6 +18,13 @@
*/
package com.taobao.weex.ui.component;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Point;
@@ -32,7 +39,6 @@ import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
-
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
@@ -41,8 +47,8 @@ import com.taobao.weex.common.Constants;
import com.taobao.weex.common.ICheckBindingScroller;
import com.taobao.weex.common.OnWXScrollListener;
import com.taobao.weex.common.WXThread;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.component.helper.ScrollStartEndHelper;
import com.taobao.weex.ui.component.helper.WXStickyHelper;
import com.taobao.weex.ui.view.IWXScroller;
@@ -56,15 +62,6 @@ import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-//import com.taobao.weex.ui.WXRecycleImageManager;
-
/**
* Component for scroller. It also support features like
* "appear", "disappear" and "sticky"
@@ -76,7 +73,8 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
public static final String DIRECTION = "direction";
protected int mOrientation = Constants.Orientation.VERTICAL;
private List<WXComponent> mRefreshs=new ArrayList<>();
- private int mChildrenLayoutOffset = 0;//Use for offset children layout
+ /** Use for offset children layout */
+ private int mChildrenLayoutOffset = 0;
private boolean mForceLoadmoreNextTime = false;
private int mOffsetAccuracy = 10;
private Point mLastReport = new Point(-1, -1);
@@ -87,11 +85,10 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
* */
private ScrollStartEndHelper mScrollStartEndHelper;
-
-
public static class Creator implements ComponentCreator {
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXScroller(instance,node,parent);
+ @Override
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXScroller(instance, parent, basicComponentData);
}
}
/**
@@ -112,15 +109,13 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
private boolean isScrollable = true;
-
@Deprecated
- public WXScroller(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent);
+ public WXScroller(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXScroller(WXSDKInstance instance, WXDomObject node,
- WXVContainer parent) {
- super(instance, node, parent);
+ public WXScroller(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
stickyHelper = new WXStickyHelper(this);
}
@@ -147,8 +142,9 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
* @return ScrollView
*/
public ViewGroup getInnerView() {
- if(getHostView() == null)
+ if(getHostView() == null) {
return null;
+ }
if (getHostView() instanceof BounceScrollerView) {
return ((BounceScrollerView) getHostView()).getInnerView();
} else {
@@ -167,7 +163,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
@Override
public void onScrollChanged(WXScrollView scrollView, int x, int y, int oldx, int oldy) {
getScrollStartEndHelper().onScrolled(x, y);
- if(!getDomObject().getEvents().contains(Constants.Event.SCROLL)){
+ if(!getEvents().contains(Constants.Event.SCROLL)){
return;
}
if (shouldReport(x, y)) {
@@ -195,7 +191,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
@Override
public void onScrollChanged(WXHorizontalScrollView scrollView, int x, int y, int oldx, int oldy) {
getScrollStartEndHelper().onScrolled(x, y);
- if(!getDomObject().getEvents().contains(Constants.Event.SCROLL)){
+ if(!getEvents().contains(Constants.Event.SCROLL)){
return;
}
if (shouldReport(x, y)) {
@@ -214,7 +210,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
public Map<String, Object> getScrollEvent(int x, int y){
Rect contentFrame = new Rect();
if (getInnerView() instanceof WXScrollView) {
- contentFrame = ((WXScrollView) getInnerView()).getContentFrame();
+ contentFrame = ((WXScrollView) getInnerView()).getContentFrame();
}else if (getInnerView() instanceof WXHorizontalScrollView) {
contentFrame = ((WXHorizontalScrollView) getInnerView()).getContentFrame();
}
@@ -283,6 +279,16 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
@Override
protected int getChildrenLayoutTopOffset() {
+ if (mChildrenLayoutOffset == 0) {
+ // Child LayoutSize data set after call Layout. So init mChildrenLayoutOffset here
+ final int listSize = mRefreshs.size();
+ if (listSize > 0) {
+ for (int i = 0; i < listSize; i++) {
+ WXComponent child = mRefreshs.get(i);
+ mChildrenLayoutOffset += child.getLayoutTopOffsetForSibling();
+ }
+ }
+ }
return mChildrenLayoutOffset;
}
@@ -291,14 +297,12 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
*/
@Override
public void addChild(WXComponent child, int index) {
- mChildrenLayoutOffset += child.getLayoutTopOffsetForSibling();
if (child instanceof WXBaseRefresh) {
- if (!checkRefreshOrLoading(child)) {
+ if (checkRefreshOrLoading(child)) {
mRefreshs.add(child);
}
}
-
- super.addChild(child,index);
+ super.addChild(child, index);
}
/**
@@ -317,6 +321,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
}
});
handler.postDelayed(runnable,100);
+ result = true;
}
if (child instanceof WXLoading && getHostView() !=null) {
@@ -364,13 +369,13 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
int screenW = WXViewUtils.getScreenWidth(WXEnvironment.sApplication);
int weexW = WXViewUtils.getWeexWidth(getInstanceId());
measureOutput.width = width > (weexW >= screenW ? screenW : weexW) ? FrameLayout.LayoutParams.MATCH_PARENT
- : width;
+ : width;
measureOutput.height = height;
} else {
int screenH = WXViewUtils.getScreenHeight(WXEnvironment.sApplication);
int weexH = WXViewUtils.getWeexHeight(getInstanceId());
measureOutput.height = height > (weexH >= screenH ? screenH : weexH) ? FrameLayout.LayoutParams.MATCH_PARENT
- : height;
+ : height;
measureOutput.width = width;
}
return measureOutput;
@@ -379,10 +384,10 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
@Override
protected ViewGroup initComponentHostView(@NonNull Context context) {
String scroll;
- if (getDomObject() == null || getDomObject().getAttrs().isEmpty()) {
+ if (getAttrs().isEmpty()) {
scroll = "vertical";
} else {
- scroll = getDomObject().getAttrs().getScrollDirection();
+ scroll = getAttrs().getScrollDirection();
}
ViewGroup host;
@@ -397,7 +402,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
}
});
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
- LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+ LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
scrollView.addView(mRealView, layoutParams);
scrollView.setHorizontalScrollBarEnabled(false);
@@ -409,10 +414,10 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
WXScrollView innerView = scrollerView.getInnerView();
innerView.addScrollViewListener(this);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
- LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+ LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
innerView.addView(mRealView, layoutParams);
innerView.setVerticalScrollBarEnabled(true);
- innerView.setNestedScrollingEnabled(WXUtils.getBoolean(getDomObject().getAttrs().get(Constants.Name.NEST_SCROLLING_ENABLED), true));
+ innerView.setNestedScrollingEnabled(WXUtils.getBoolean(getAttrs().get(Constants.Name.NEST_SCROLLING_ENABLED), true));
innerView.addScrollViewListener(new WXScrollViewListener() {
@Override
public void onScrollChanged(WXScrollView scrollView, int x, int y, int oldx, int oldy) {
@@ -500,8 +505,9 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
switch (key) {
case Constants.Name.SHOW_SCROLLBAR:
Boolean result = WXUtils.getBoolean(param,null);
- if (result != null)
+ if (result != null) {
setShowScrollbar(result);
+ }
return true;
case Constants.Name.SCROLLABLE:
boolean scrollable = WXUtils.getBoolean(param, true);
@@ -511,6 +517,8 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
int accuracy = WXUtils.getInteger(param, 10);
setOffsetAccuracy(accuracy);
return true;
+ default:
+ break;
}
return super.setProperty(key, param);
}
@@ -550,7 +558,6 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
}
- // TODO Need constrain, each container can only have one sticky child
@Override
public void bindStickStyle(WXComponent component) {
stickyHelper.bindStickStyle(component,mStickyMap);
@@ -578,7 +585,8 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
item.setWatchEvent(event,isWatch);
- procAppear(0,0,0,0);//check current components appearance status.
+ //check current components appearance status.
+ procAppear(0,0,0,0);
}
/**
@@ -642,7 +650,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
return;
}
- getInnerView().postDelayed(WXThread.secure(new Runnable() {
+ getInnerView().postDelayed(new Runnable() {
@Override
public void run() {
if (mOrientation == Constants.Orientation.VERTICAL) {
@@ -660,7 +668,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
}
getInnerView().invalidate();
}
- }), 16);
+ }, 16);
}
@Override
@@ -721,7 +729,7 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
*/
protected void onLoadMore(WXScrollView scrollView, int x, int y) {
try {
- String offset = getDomObject().getAttrs().getLoadMoreOffset();
+ String offset = getAttrs().getLoadMoreOffset();
if (TextUtils.isEmpty(offset)) {
return;
}
@@ -751,7 +759,6 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
mForceLoadmoreNextTime = true;
}
-
public ScrollStartEndHelper getScrollStartEndHelper() {
if(mScrollStartEndHelper == null){
mScrollStartEndHelper = new ScrollStartEndHelper(this);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
index fb1f487..cee6520 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
@@ -29,14 +29,15 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
+
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXCircleIndicator;
import com.taobao.weex.ui.view.WXCirclePageAdapter;
import com.taobao.weex.ui.view.WXCircleViewPager;
@@ -44,6 +45,7 @@ import com.taobao.weex.ui.view.gesture.WXGestureType;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
+
import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
@@ -64,8 +66,8 @@ public class WXSlider extends WXVContainer<FrameLayout> {
private boolean keepIndex = false;
public static class Creator implements ComponentCreator {
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXSlider(instance, node, parent);
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXSlider(instance, parent, basicComponentData);
}
}
@@ -91,20 +93,20 @@ public class WXSlider extends WXVContainer<FrameLayout> {
protected OnPageChangeListener mPageChangeListener = new SliderPageChangeListener();
@Deprecated
- public WXSlider(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance, dom, parent);
+ public WXSlider(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXSlider(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
- super(instance, node, parent);
+ public WXSlider(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
}
@Override
protected FrameLayout initComponentHostView(@NonNull Context context) {
FrameLayout view = new FrameLayout(context);
// init view pager
- if (getDomObject() != null && getDomObject().getAttrs() != null) {
- Object obj = getDomObject().getAttrs().get(INFINITE);
+ if (getAttrs() != null) {
+ Object obj = getAttrs().get(INFINITE);
isInfinite = WXUtils.getBoolean(obj, true);
}
FrameLayout.LayoutParams pagerParams = new FrameLayout.LayoutParams(
@@ -130,7 +132,7 @@ public class WXSlider extends WXVContainer<FrameLayout> {
*/
@Override
public LayoutParams getChildLayoutParams(WXComponent child,View childView, int width, int height, int left, int right, int top, int bottom) {
- ViewGroup.LayoutParams lp = childView == null ? null : childView.getLayoutParams();
+ ViewGroup.LayoutParams lp = childView.getLayoutParams();
if (lp == null) {
lp = new FrameLayout.LayoutParams(width, height);
} else {
@@ -408,11 +410,11 @@ public class WXSlider extends WXVContainer<FrameLayout> {
return;
}
- if (getDomObject().getEvents().size() == 0) {
+ if (getEvents().size() == 0) {
return;
}
- WXEvent event = getDomObject().getEvents();
- String ref = getDomObject().getRef();
+ WXEvent event = getEvents();
+ String ref = getRef();
if (event.contains(Constants.Event.CHANGE) && WXViewUtils.onScreenArea(getHostView())) {
params.put(INDEX, realPosition);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
index 0899c8d..a7e95d0 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
@@ -29,8 +29,8 @@ import android.widget.FrameLayout;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.common.WXThread;
-import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXCircleIndicator;
import com.taobao.weex.ui.view.WXCirclePageAdapter;
import com.taobao.weex.ui.view.WXCircleViewPager;
@@ -63,13 +63,13 @@ public class WXSliderNeighbor extends WXSlider {
private ZoomTransformer mCachedTransformer;
- public WXSliderNeighbor(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
- super(instance, node, parent);
+ public WXSliderNeighbor(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
}
public static class Creator implements ComponentCreator {
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXSliderNeighbor(instance, node, parent);
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXSliderNeighbor(instance, parent, basicComponentData);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
index 27e4c95..a617507 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
@@ -20,13 +20,17 @@ package com.taobao.weex.ui.component;
import android.content.Context;
import android.support.annotation.NonNull;
+import android.view.View;
import android.widget.CompoundButton;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.layout.ContentBoxMeasurement;
+import com.taobao.weex.layout.MeasureSize;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.view.WXSwitchView;
+import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import java.util.HashMap;
@@ -37,18 +41,48 @@ import java.util.Map;
public class WXSwitch extends WXComponent<WXSwitchView> {
private CompoundButton.OnCheckedChangeListener mListener;
- private String mTrackTintColorNormal;
- private String mTrackTintColorActivated;
- private String mThumbTintColorNormal;
- private String mThumbTintColorActivated;
@Deprecated
- public WXSwitch(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance, dom, parent, isLazy);
+ public WXSwitch(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, isLazy, basicComponentData);
}
- public WXSwitch(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
- super(instance, dom, parent, isLazy);
+ public WXSwitch(final WXSDKInstance instance, WXVContainer parent, boolean isLazy, BasicComponentData basicComponentData) {
+ super(instance, parent, isLazy, basicComponentData);
+ setContentBoxMeasurement(new ContentBoxMeasurement() {
+ /** uiThread = false **/
+ @Override
+ public void measureInternal(float width, float height, int widthMeasureMode, int heightMeasureMode) {
+ try {
+ WXSwitchView wxSwitchView = new WXSwitchView(instance.getContext());
+ int widthSpec, heightSpec;
+ heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+ if (Float.isNaN(width)) {
+ widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+ } else {
+ widthSpec = View.MeasureSpec.makeMeasureSpec((int) width, View.MeasureSpec.AT_MOST);
+ }
+
+ wxSwitchView.measure(widthSpec, heightSpec);
+ mMeasureWidth = wxSwitchView.getMeasuredWidth();
+ mMeasureHeight = wxSwitchView.getMeasuredHeight();
+ } catch (RuntimeException e) {
+ WXLogUtils.e(WXLogUtils.getStackTrace(e));
+ }
+ mMeasureWidth = 0;
+ mMeasureHeight = 0;
+ }
+
+ /** uiThread = false **/
+ @Override
+ public void layoutBefore() {
+ }
+
+ /** uiThread = false **/
+ @Override
+ public void layoutAfter(float computedWidth, float computedHeight) {
+ }
+ });
}
@Override
@@ -97,22 +131,6 @@ public class WXSwitch extends WXComponent<WXSwitchView> {
setChecked(result);
}
return true;
- case Constants.Name.THUMB_TINT_COLOR:
- mThumbTintColorNormal = WXUtils.getString(param, null);
- setThumbColor();
- return true;
- case Constants.Name.ON_THUMB_TINT_COLOR:
- mThumbTintColorActivated = WXUtils.getString(param, null);
- setThumbColor();
- return true;
- case Constants.Name.TINT_COLOR:
- mTrackTintColorNormal = WXUtils.getString(param, null);
- setTrackColor();
- return true;
- case Constants.Name.ON_TINT_COLOR:
- mTrackTintColorActivated = WXUtils.getString(param, null);
- setTrackColor();
- return true;
}
return super.setProperty(key, param);
}
@@ -123,12 +141,4 @@ public class WXSwitch extends WXComponent<WXSwitchView> {
getHostView().setChecked(checked);
getHostView().setOnCheckedChangeListener(mListener);
}
-
- private void setThumbColor() {
- getHostView().setThumbColor(mThumbTintColorNormal, mThumbTintColorActivated);
- }
-
- private void setTrackColor() {
- getHostView().setTrackColor(mTrackTintColorNormal, mTrackTintColorActivated);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
index bb1bd4b..5376d12 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
@@ -18,21 +18,62 @@
*/
package com.taobao.weex.ui.component;
+import static com.taobao.weex.dom.WXStyle.UNSET;
+import static com.taobao.weex.utils.WXUtils.isUndefined;
+
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Build;
+import android.os.Looper;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.content.LocalBroadcastManager;
+import android.text.Editable;
import android.text.Layout;
-
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.SpannedString;
+import android.text.StaticLayout;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.AlignmentSpan;
+import android.text.style.ForegroundColorSpan;
+import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.Component;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.dom.TextDecorationSpan;
+import com.taobao.weex.dom.WXAttr;
+import com.taobao.weex.dom.WXCustomStyleSpan;
+import com.taobao.weex.dom.WXLineHeightSpan;
+import com.taobao.weex.dom.WXStyle;
+import com.taobao.weex.layout.ContentBoxMeasurement;
+import com.taobao.weex.layout.MeasureMode;
+import com.taobao.weex.layout.MeasureSize;
+import com.taobao.weex.layout.measurefunc.TextContentBoxMeasurement;
import com.taobao.weex.ui.ComponentCreator;
+import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.flat.FlatComponent;
import com.taobao.weex.ui.flat.widget.TextWidget;
import com.taobao.weex.ui.view.WXTextView;
-import com.taobao.weex.utils.WXUtils;
-
+import com.taobao.weex.utils.FontDO;
+import com.taobao.weex.utils.TypefaceUtil;
+import com.taobao.weex.utils.WXDomUtils;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXResourceUtils;
import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
/**
* Text component
@@ -46,10 +87,15 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
* The default text size
**/
public static final int sDEFAULT_SIZE = 32;
+ private BroadcastReceiver mTypefaceObserver;
+ private String mFontFamily;
@Override
public boolean promoteToView(boolean checkAncestor) {
- return getInstance().getFlatUIContext().promoteToView(this, checkAncestor, WXText.class);
+ if (null != getInstance().getFlatUIContext()) {
+ return getInstance().getFlatUIContext().promoteToView(this, checkAncestor, WXText.class);
+ }
+ return false;
}
@Override
@@ -67,31 +113,32 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
}
public static class Creator implements ComponentCreator {
-
- public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
- return new WXText(instance, node, parent);
+ public WXComponent createInstance(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ return new WXText(instance, parent, basicComponentData);
}
}
@Deprecated
- public WXText(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance, dom, parent);
+ public WXText(WXSDKInstance instance, WXVContainer parent, String instanceId, boolean isLazy, BasicComponentData basicComponentData) {
+ this(instance, parent, basicComponentData);
}
- public WXText(WXSDKInstance instance, WXDomObject node,
- WXVContainer parent) {
- super(instance, node, parent);
+ public WXText(WXSDKInstance instance,
+ WXVContainer parent, BasicComponentData basicComponentData) {
+ super(instance, parent, basicComponentData);
+ setContentBoxMeasurement(new TextContentBoxMeasurement(this));
}
@Override
protected WXTextView initComponentHostView(@NonNull Context context) {
- WXTextView textView =new WXTextView(context);
+ WXTextView textView = new WXTextView(context);
textView.holdComponent(this);
return textView;
}
@Override
public void updateExtra(Object extra) {
+ super.updateExtra(extra);
if(extra instanceof Layout) {
final Layout layout = (Layout) extra;
if (!promoteToView(true)) {
@@ -106,7 +153,7 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
@Override
protected void setAriaLabel(String label) {
WXTextView text = getHostView();
- if(text != null){
+ if (text != null) {
text.setAriaLabel(label);
}
}
@@ -115,7 +162,7 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
public void refreshData(WXComponent component) {
super.refreshData(component);
if (component instanceof WXText) {
- updateExtra(component.getDomObject().getExtra());
+ updateExtra(component.getExtra());
}
}
@@ -134,11 +181,8 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
case Constants.Name.VALUE:
return true;
case Constants.Name.FONT_FAMILY:
- return true;
- case Constants.Name.ENABLE_COPY:
- boolean enabled = WXUtils.getBoolean(param, false);
- if (getHostView() != null) {
- getHostView().enableCopy(enabled);
+ if (param != null) {
+ registerTypefaceObserver(param.toString());
}
return true;
default:
@@ -167,6 +211,47 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
@Override
public void destroy() {
super.destroy();
+ if (WXEnvironment.getApplication() != null && mTypefaceObserver != null) {
+ WXLogUtils.d("WXText", "Unregister the typeface observer");
+ LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).unregisterReceiver(mTypefaceObserver);
+ mTypefaceObserver = null;
+ }
}
+ private void registerTypefaceObserver(String desiredFontFamily) {
+ if (WXEnvironment.getApplication() == null) {
+ WXLogUtils.w("WXText", "ApplicationContent is null on register typeface observer");
+ return;
+ }
+ mFontFamily = desiredFontFamily;
+ if (mTypefaceObserver != null) {
+ return;
+ }
+
+ mTypefaceObserver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String fontFamily = intent.getStringExtra("fontFamily");
+ if (!mFontFamily.equals(fontFamily)) {
+ return;
+ }
+
+ FontDO fontDO = TypefaceUtil.getFontDO(fontFamily);
+ if (fontDO != null && fontDO.getTypeface() != null && getHostView() != null) {
+ WXTextView hostView = getHostView();
+ Layout layout = hostView.getTextLayout();
+ if (layout != null) {
+ layout.getPaint().setTypeface(fontDO.getTypeface());
+ WXLogUtils.d("WXText", "Apply font family " + fontFamily + " to paint");
+ } else {
+ WXLogUtils.w("WXText", "Layout not created");
+ }
+ hostView.invalidate();
+ }
+ WXLogUtils.d("WXText", "Font family " + fontFamily + " is available");
+ }
+ };
+
+ LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).registerReceiver(mTypefaceObserver, new IntentFilter(TypefaceUtil.ACTION_TYPE_FACE_AVAILABLE));
+ }
}