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:59 UTC
[31/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/action/ActionAddRule.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionAddRule.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionAddRule.java
new file mode 100644
index 0000000..0f74e2b
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionAddRule.java
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.text.TextUtils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.utils.FontDO;
+import com.taobao.weex.utils.TypefaceUtil;
+
+/**
+ * Created by listen on 18/01/10.
+ */
+public class ActionAddRule implements IExecutable {
+
+ private final String mPageId;
+ private final String mType;
+ private final JSONObject mData;
+
+ public ActionAddRule(String pageId, String type, JSONObject data) {
+ this.mPageId = pageId;
+ this.mType = type;
+ this.mData = data;
+ }
+
+ @Override
+ public void executeAction() {
+ WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(mPageId);
+ if (instance == null || instance.isDestroy()) {
+ return;
+ }
+
+ if (!Constants.Name.FONT_FACE.equals(mType)) {
+ return;
+ }
+
+ FontDO fontDO = parseFontDO(mData, instance);
+ if (fontDO != null && !TextUtils.isEmpty(fontDO.getFontFamilyName())) {
+ FontDO cacheFontDO = TypefaceUtil.getFontDO(fontDO.getFontFamilyName());
+ if (cacheFontDO == null || !TextUtils.equals(cacheFontDO.getUrl(), fontDO.getUrl())) {
+ TypefaceUtil.putFontDO(fontDO);
+ TypefaceUtil.loadTypeface(fontDO);
+ } else {
+ TypefaceUtil.loadTypeface(cacheFontDO);
+ }
+ }
+
+ }
+
+ private FontDO parseFontDO(JSONObject jsonObject,WXSDKInstance instance) {
+ if(jsonObject == null) {
+ return null;
+ }
+ String src = jsonObject.getString(Constants.Name.SRC);
+ String name = jsonObject.getString(Constants.Name.FONT_FAMILY);
+
+ return new FontDO(name, src,instance);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionGetComponentRect.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionGetComponentRect.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionGetComponentRect.java
new file mode 100644
index 0000000..75b543f
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionGetComponentRect.java
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.graphics.Rect;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.bridge.JSCallback;
+import com.taobao.weex.bridge.SimpleJSCallback;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by listen on 18/01/10.
+ */
+public class ActionGetComponentRect extends BasicGraphicAction {
+
+ private final String mCallback;
+
+ public ActionGetComponentRect(String pageId, String ref, String callback) {
+ super(pageId, ref);
+ this.mCallback = callback;
+ }
+
+ @Override
+ public void executeAction() {
+ WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null || instance.isDestroy()) {
+ return;
+ }
+
+ JSCallback jsCallback = new SimpleJSCallback(instance.getInstanceId(), mCallback);
+
+ if (TextUtils.isEmpty(getRef())) {
+ Map<String, Object> options = new HashMap<>();
+ options.put("result", false);
+ options.put("errMsg", "Illegal parameter");
+ jsCallback.invoke(options);
+ } else if ("viewport".equalsIgnoreCase(getRef())) {
+ callbackViewport(instance, jsCallback);
+ } else {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ Map<String, Object> options = new HashMap<>();
+ if (component != null) {
+ int viewPort = instance.getInstanceViewPortWidth();
+ Map<String, Float> size = new HashMap<>();
+ Rect sizes = component.getComponentSize();
+ size.put("width", getWebPxValue(sizes.width(),viewPort));
+ size.put("height", getWebPxValue(sizes.height(),viewPort));
+ size.put("bottom", getWebPxValue(sizes.bottom,viewPort));
+ size.put("left", getWebPxValue(sizes.left,viewPort));
+ size.put("right", getWebPxValue(sizes.right,viewPort));
+ size.put("top", getWebPxValue(sizes.top,viewPort));
+ options.put("size", size);
+ options.put("result", true);
+ } else {
+ options.put("errMsg", "Component does not exist");
+ }
+ jsCallback.invoke(options);
+ }
+ }
+
+ private void callbackViewport(WXSDKInstance instance, JSCallback jsCallback) {
+ View container;
+ if ((container = instance.getContainerView()) != null) {
+ Map<String, Object> options = new HashMap<>();
+ Map<String, Float> sizes = new HashMap<>();
+ int[] location = new int[2];
+ instance.getContainerView().getLocationOnScreen(location);
+ int viewport = instance.getInstanceViewPortWidth();
+ sizes.put("left", 0f);
+ sizes.put("top", 0f);
+ sizes.put("right", getWebPxValue(container.getWidth(),viewport));
+ sizes.put("bottom", getWebPxValue(container.getHeight(),viewport));
+ sizes.put("width", getWebPxValue(container.getWidth(),viewport));
+ sizes.put("height", getWebPxValue(container.getHeight(),viewport));
+ options.put("size", sizes);
+ options.put("result", true);
+ jsCallback.invoke(options);
+ } else {
+ Map<String, Object> options = new HashMap<>();
+ options.put("result", false);
+ options.put("errMsg", "Component does not exist");
+ jsCallback.invoke(options);
+ }
+ }
+
+ @NonNull
+ private float getWebPxValue(int value,int viewport) {
+ return WXViewUtils.getWebPxByWidth(value, viewport);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionInvokeMethod.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionInvokeMethod.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionInvokeMethod.java
new file mode 100644
index 0000000..f078d1b
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionInvokeMethod.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.alibaba.fastjson.JSONArray;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.WXLogUtils;
+
+/**
+ * Created by listen on 18/01/10.
+ */
+public class ActionInvokeMethod implements IExecutable {
+
+ private static final String TAG = "ActionInvokeMethod";
+
+ private final String mMethod;
+ private final JSONArray mArgs;
+ private String mPageId;
+ private String mRef;
+
+ public ActionInvokeMethod(String pageId, String ref, String method, JSONArray args) {
+ this.mPageId = pageId;
+ this.mRef = ref;
+ this.mMethod = method;
+ this.mArgs = args;
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(mPageId, mRef);
+ if(component == null){
+ WXLogUtils.e(TAG,"target component not found.");
+ return;
+ }
+ component.invoke(mMethod,mArgs);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionReloadPage.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionReloadPage.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionReloadPage.java
new file mode 100644
index 0000000..42705f6
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/ActionReloadPage.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.util.Log;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+
+/**
+ * Created by listen on 18/01/09.
+ */
+public class ActionReloadPage implements IExecutable {
+
+ private final String TAG = "ReloadPageAction";
+ private boolean mReloadThis;
+ private String mPageId;
+
+ public ActionReloadPage(String pageId, boolean reloadThis) {
+ this.mPageId = pageId;
+ this.mReloadThis = reloadThis;
+ }
+
+ @Override
+ public void executeAction() {
+ final WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(mPageId);
+ if (instance != null) {
+ instance.reloadPage(mReloadThis);
+ } else {
+ Log.e(TAG, "ReloadPageAction executeDom reloadPage instance is null");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicComponentData.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicComponentData.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicComponentData.java
new file mode 100644
index 0000000..b544cb9
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicComponentData.java
@@ -0,0 +1,265 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.support.annotation.NonNull;
+import android.view.View;
+
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.CSSShorthand;
+import com.taobao.weex.dom.WXAttr;
+import com.taobao.weex.dom.WXEvent;
+import com.taobao.weex.dom.WXStyle;
+import com.taobao.weex.utils.WXUtils;
+
+import java.util.Map;
+import java.util.Set;
+
+public class BasicComponentData<T extends View> {
+
+ public String mRef;
+ public String mComponentType;
+ public String mParentRef;
+ private WXStyle mStyles;
+ private WXAttr mAttributes;
+ private WXEvent mEvents;
+ private CSSShorthand mMargins;
+ private CSSShorthand mPaddings;
+ private CSSShorthand mBorders;
+
+ public BasicComponentData(String ref, String componentType, String parentRef) {
+ this.mRef = ref;
+ this.mComponentType = componentType;
+ this.mParentRef = parentRef;
+ }
+
+ public void addStyle(Map<String, Object> styles) {
+ addStyle(styles, false);
+ }
+
+ public final void addStyle(Map<String, Object> styles, boolean byPesudo) {
+ if (styles == null || styles.isEmpty()) {
+ return;
+ }
+ if (mStyles == null) {
+ mStyles = new WXStyle(styles);
+ }
+ else {
+ mStyles.putAll(styles, byPesudo);
+ }
+ }
+
+ public final void addAttr(Map<String, Object> attrs) {
+ if (attrs == null || attrs.isEmpty()) {
+ return;
+ }
+ if (mAttributes == null) {
+ mAttributes = new WXAttr(attrs, 0);
+ }
+ else {
+ mAttributes.putAll(attrs);
+ }
+ }
+
+ public final void addEvent(Set<String> events) {
+ if (events == null || events.isEmpty()) {
+ return;
+ }
+ if (mEvents == null) {
+ mEvents = new WXEvent();
+ }
+ mEvents.addAll(events);
+ }
+
+ public final void addShorthand(float[] shorthand, CSSShorthand.TYPE type) {
+ if (shorthand.length == 4) {
+ switch (type) {
+ case MARGIN:
+ if(mMargins == null){
+ mMargins = new CSSShorthand(shorthand);
+ }
+ else{
+ mMargins.replace(shorthand);
+ }
+ break;
+ case PADDING:
+ if(mPaddings == null){
+ mPaddings = new CSSShorthand(shorthand);
+ }
+ else{
+ mPaddings.replace(shorthand);
+ }
+ break;
+ case BORDER:
+ if(mBorders == null){
+ mBorders = new CSSShorthand(shorthand);
+ }
+ else{
+ mBorders.replace(shorthand);
+ }
+ break;
+ }
+ }
+ }
+
+ public final void addShorthand(Map<String, String> shorthand) {
+ if (shorthand != null && !shorthand.isEmpty()) {
+ for (Map.Entry<String, String> item : shorthand.entrySet()) {
+ String key = item.getKey();
+ switch (key) {
+ case Constants.Name.MARGIN:
+ addMargin(CSSShorthand.EDGE.ALL, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.MARGIN_LEFT:
+ addMargin(CSSShorthand.EDGE.LEFT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.MARGIN_TOP:
+ addMargin(CSSShorthand.EDGE.TOP, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.MARGIN_RIGHT:
+ addMargin(CSSShorthand.EDGE.RIGHT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.MARGIN_BOTTOM:
+ addMargin(CSSShorthand.EDGE.BOTTOM,WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.BORDER_WIDTH:
+ addBorder(CSSShorthand.EDGE.ALL, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.BORDER_TOP_WIDTH:
+ addBorder(CSSShorthand.EDGE.TOP, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.BORDER_RIGHT_WIDTH:
+ addBorder(CSSShorthand.EDGE.RIGHT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.BORDER_BOTTOM_WIDTH:
+ addBorder(CSSShorthand.EDGE.BOTTOM, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.BORDER_LEFT_WIDTH:
+ addBorder(CSSShorthand.EDGE.LEFT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.PADDING:
+ addPadding(CSSShorthand.EDGE.ALL, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.PADDING_LEFT:
+ addPadding(CSSShorthand.EDGE.LEFT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.PADDING_TOP:
+ addPadding(CSSShorthand.EDGE.TOP, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.PADDING_RIGHT:
+ addPadding(CSSShorthand.EDGE.RIGHT, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ case Constants.Name.PADDING_BOTTOM:
+ addPadding(CSSShorthand.EDGE.BOTTOM, WXUtils.fastGetFloat(shorthand.get(key)));
+ break;
+ }
+ }
+ }
+ }
+
+ private void addMargin(CSSShorthand.EDGE spacingType, float margin) {
+ if (mMargins == null) {
+ mMargins = new CSSShorthand();
+ }
+ mMargins.set(spacingType, margin);
+ }
+
+ private void addPadding(CSSShorthand.EDGE spacingType, float padding) {
+ if (mPaddings == null) {
+ mPaddings = new CSSShorthand();
+ }
+ mPaddings.set(spacingType, padding);
+ }
+
+ private void addBorder(CSSShorthand.EDGE spacingType, float border) {
+ if (mBorders == null) {
+ mBorders = new CSSShorthand();
+ }
+ mBorders.set(spacingType, border);
+ }
+
+ public final @NonNull
+ WXStyle getStyles() {
+ if (mStyles == null) {
+ mStyles = new WXStyle();
+ }
+ return mStyles;
+ }
+
+ public final @NonNull
+ WXAttr getAttrs() {
+ if (mAttributes == null) {
+ mAttributes = new WXAttr();
+ }
+ return mAttributes;
+ }
+
+ public final @NonNull
+ WXEvent getEvents() {
+ if (mEvents == null) {
+ mEvents = new WXEvent();
+ }
+ return mEvents;
+ }
+
+ /**
+ * Get this node's margin, as defined by cssstyle + default margin.
+ */
+ public final @NonNull
+ CSSShorthand getMargin() {
+ if (mMargins == null) {
+ mMargins = new CSSShorthand();
+ }
+ return mMargins;
+ }
+
+ /**
+ * Get this node's padding, as defined by cssstyle + default padding.
+ */
+ public final @NonNull
+ CSSShorthand getPadding() {
+ if (mPaddings == null) {
+ mPaddings = new CSSShorthand();
+ }
+ return mPaddings;
+ }
+
+ /**
+ * Get this node's border, as defined by cssstyle.
+ */
+ public @NonNull
+ CSSShorthand getBorder() {
+ if (mBorders == null) {
+ mBorders = new CSSShorthand();
+ }
+ return mBorders;
+ }
+
+ public final void setMargins(@NonNull CSSShorthand mMargins) {
+ this.mMargins = mMargins;
+ }
+
+ public final void setPaddings(@NonNull CSSShorthand mPaddings) {
+ this.mPaddings = mPaddings;
+ }
+
+ public final void setBorders(@NonNull CSSShorthand mBorders) {
+ this.mBorders = mBorders;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicGraphicAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicGraphicAction.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicGraphicAction.java
new file mode 100644
index 0000000..2a37aa3
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/BasicGraphicAction.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.text.TextUtils;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.utils.WXLogUtils;
+
+public abstract class BasicGraphicAction implements IExecutable, Runnable {
+
+ private final String mPageId;
+ private final String mRef;
+
+ public BasicGraphicAction(String pageId, String ref) {
+ this.mPageId = pageId;
+ this.mRef = ref;
+ }
+
+ public final String getPageId() {
+ return mPageId;
+ }
+
+ public final String getRef() {
+ return mRef;
+ }
+
+ public void executeActionOnRender() {
+ if (TextUtils.isEmpty(mPageId)) {
+ WXLogUtils.e("[BasicGraphicAction] pageId can not be null");
+ if (WXEnvironment.isApkDebugable()) {
+ throw new RuntimeException("["+getClass().getName()+"] pageId can not be null");
+ }
+ return;
+ }
+ WXSDKManager.getInstance().getWXRenderManager().postGraphicAction(mPageId, this);
+ }
+
+ @Override
+ public void run() {
+ try {
+ executeAction();
+ } catch (Throwable e) {
+ //catch everything may throw from exection.
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.e("BasicGraphicAction",
+ "SafeRunnable run throw expection:" + e.getMessage());
+ throw e;
+ }
+ WXLogUtils.w("BasicGraphicAction", e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAbstractAddElement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAbstractAddElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAbstractAddElement.java
new file mode 100644
index 0000000..a26c39e
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAbstractAddElement.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.support.v4.util.ArrayMap;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.CSSShorthand;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentFactory;
+import com.taobao.weex.ui.component.WXVContainer;
+import java.util.Map;
+import java.util.Set;
+
+public abstract class GraphicActionAbstractAddElement extends BasicGraphicAction {
+
+ protected String mComponentType;
+ protected String mParentRef;
+ protected int mIndex = -1;
+ protected Map<String, String> mStyle;
+ protected Map<String, String> mAttributes;
+ protected Set<String> mEvents;
+ protected float[] mMargins;
+ protected float[] mPaddings;
+ protected float[] mBorders;
+
+ public GraphicActionAbstractAddElement(String pageId, String ref) {
+ super(pageId, ref);
+ }
+
+ protected WXComponent createComponent(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
+ if (basicComponentData != null) {
+ basicComponentData.addStyle(mStyle);
+ basicComponentData.addAttr(mAttributes);
+ basicComponentData.addEvent(mEvents);
+ basicComponentData.addShorthand(mMargins, CSSShorthand.TYPE.MARGIN);
+ basicComponentData.addShorthand(mPaddings, CSSShorthand.TYPE.PADDING);
+ basicComponentData.addShorthand(mBorders, CSSShorthand.TYPE.BORDER);
+ }
+
+ WXComponent component = WXComponentFactory.newInstance(instance, parent, basicComponentData);
+ WXSDKManager.getInstance().getWXRenderManager().registerComponent(getPageId(), getRef(), component);
+ if(mStyle.containsKey(Constants.Name.TRANSFORM)) {
+ Map<String, Object> animationMap = new ArrayMap<>(2);
+ animationMap.put(Constants.Name.TRANSFORM, mStyle.get(Constants.Name.TRANSFORM));
+ animationMap
+ .put(Constants.Name.TRANSFORM_ORIGIN, mStyle.get(Constants.Name.TRANSFORM_ORIGIN));
+ component.addAnimationForElement(animationMap);
+ }
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callActionAddElementCount();
+ return component;
+ }
+
+ public String getComponentType() {
+ return mComponentType;
+ }
+
+ public String getParentRef() {
+ return mParentRef;
+ }
+
+ public int getIndex() {
+ return mIndex;
+ }
+
+ public Map<String, String> getStyle() {
+ return mStyle;
+ }
+
+ public Map<String, String> getAttributes() {
+ return mAttributes;
+ }
+
+ public Set<String> getEvents() {
+ return mEvents;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
new file mode 100644
index 0000000..aa60a73
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddElement.java
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+import android.support.annotation.WorkerThread;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.transition.WXTransition;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.Map;
+import java.util.Set;
+
+public class GraphicActionAddElement extends GraphicActionAbstractAddElement {
+
+ private WXVContainer parent;
+ private WXComponent child;
+ private GraphicPosition layoutPosition;
+ private GraphicSize layoutSize;
+
+ public GraphicActionAddElement(String pageId, String ref,
+ String componentType, String parentRef,
+ int index,
+ Map<String, String> style,
+ Map<String, String> attributes,
+ Set<String> events,
+ float[] margins,
+ float[] paddings,
+ float[] borders) {
+ super(pageId, ref);
+ this.mComponentType = componentType;
+ this.mParentRef = parentRef;
+ this.mIndex = index;
+ this.mStyle = style;
+ this.mAttributes = attributes;
+ this.mEvents = events;
+ this.mPaddings = paddings;
+ this.mMargins = margins;
+ this.mBorders = borders;
+
+ WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null || instance.getContext() == null) {
+ return;
+ }
+
+ parent = (WXVContainer) WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), mParentRef);
+ BasicComponentData basicComponentData = new BasicComponentData(ref, mComponentType, mParentRef);
+ child = createComponent(instance, parent, basicComponentData);
+ child.setTransition(WXTransition.fromMap(child.getStyles(), child));
+
+ if (child == null || parent == null) {
+ return;
+ }
+
+ }
+
+ @RestrictTo(Scope.LIBRARY)
+ @WorkerThread
+ public void setSize(GraphicSize graphicSize){
+ this.layoutSize = graphicSize;
+ }
+
+ @RestrictTo(Scope.LIBRARY)
+ @WorkerThread
+ public void setPosition(GraphicPosition position){
+ this.layoutPosition = position;
+ }
+
+ @RestrictTo(Scope.LIBRARY)
+ @WorkerThread
+ public void setIndex(int index){
+ mIndex = index;
+ }
+
+ @Override
+ public void executeAction() {
+ try {
+ parent.addChild(child, mIndex);
+ parent.createChildViewAt(mIndex);
+
+ long start = System.currentTimeMillis();
+ if(layoutPosition !=null && layoutSize != null) {
+ child.updateDemission(layoutSize, layoutPosition);
+ }
+ child.applyLayoutAndEvent(child);
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callLayoutaAplyLayoutAndEventTime(System.currentTimeMillis() - start);
+
+ start = System.currentTimeMillis();
+ child.bindData(child);
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callLayoutBindDataCoreTime(System.currentTimeMillis() - start);
+ } catch (Exception e) {
+ WXLogUtils.e("add component failed.", e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddEvent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddEvent.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddEvent.java
new file mode 100644
index 0000000..824b347
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAddEvent.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.WXEvent;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by listen on 18/01/11.
+ */
+public class GraphicActionAddEvent extends BasicGraphicAction {
+
+ private final String mEvent;
+
+ public GraphicActionAddEvent(String pageId, String ref, Object event) {
+ super(pageId, ref);
+ this.mEvent = WXEvent.getEventName(event);
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ Stopwatch.tick();
+ if (!component.getEvents().contains(mEvent)) {
+ component.getEvents().addEvent(mEvent);
+ }
+ component.addEvent(mEvent);
+ Stopwatch.split("addEventToComponent");
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAnimation.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAnimation.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAnimation.java
new file mode 100644
index 0000000..c8b0a04
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionAnimation.java
@@ -0,0 +1,266 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.view.animation.PathInterpolatorCompat;
+import android.text.TextUtils;
+import android.util.Pair;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.animation.BackgroundColorProperty;
+import com.taobao.weex.ui.animation.HeightProperty;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+import com.taobao.weex.ui.animation.WXAnimationModule;
+import com.taobao.weex.ui.animation.WidthProperty;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.view.border.BorderDrawable;
+import com.taobao.weex.utils.SingleFunctionParser;
+import com.taobao.weex.utils.WXLogUtils;
+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.List;
+
+public class GraphicActionAnimation extends BasicGraphicAction {
+
+ private final static String TAG = "GraphicActionAnimation";
+
+ @Nullable
+ private
+ final String callback;
+
+ @Nullable
+ private
+ WXAnimationBean mAnimationBean;
+
+ public GraphicActionAnimation(@NonNull String pageId, @NonNull String ref, @NonNull WXAnimationBean animationBean) {
+ super(pageId, ref);
+ this.callback = null;
+ this.mAnimationBean = animationBean;
+ }
+
+ public GraphicActionAnimation(@NonNull String pageId, @NonNull String ref, @Nullable String animation,
+ @Nullable final String callBack) {
+ super(pageId, ref);
+ this.callback = callBack;
+ if (!TextUtils.isEmpty(animation)) {
+ this.mAnimationBean = JSONObject.parseObject(animation, WXAnimationBean.class);
+ }
+ }
+ public GraphicActionAnimation(@NonNull String pageId, @NonNull String ref, @NonNull WXAnimationBean animationBean,
+ @Nullable final String callBack) {
+ super(pageId, ref);
+ this.mAnimationBean = animationBean;
+ this.callback = callBack;
+ }
+
+ @Override
+ public void executeAction() {
+ if (null == mAnimationBean) {
+ return;
+ }
+
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null) {
+ return;
+ }
+
+ if (null != mAnimationBean.styles) {
+ mAnimationBean.styles.init(mAnimationBean.styles.transformOrigin,
+ mAnimationBean.styles.transform, (int) component.getLayoutWidth(), (int) component.getLayoutHeight(),
+ instance.getInstanceViewPortWidth());
+ startAnimation(instance, component);
+ }
+ }
+
+ private void startAnimation(@NonNull WXSDKInstance instance, @Nullable WXComponent component) {
+ if (component != null) {
+ if (mAnimationBean != null) {
+ component.setNeedLayoutOnAnimation(mAnimationBean.needLayout);
+ }
+ if (component.getHostView() == null) {
+ WXAnimationModule.AnimationHolder holder = new WXAnimationModule.AnimationHolder(mAnimationBean, callback);
+ component.postAnimation(holder);
+ } else {
+ try {
+ Animator animator = createAnimator(component.getHostView(), instance
+ .getInstanceViewPortWidth());
+ if (animator != null) {
+ Animator.AnimatorListener animatorCallback = createAnimatorListener(instance, callback);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 && component
+ .isLayerTypeEnabled() ) {
+ component.getHostView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ }
+ Interpolator interpolator = createTimeInterpolator();
+ if (animatorCallback != null) {
+ animator.addListener(animatorCallback);
+ }
+ if (interpolator != null) {
+ animator.setInterpolator(interpolator);
+ }
+ component.getHostView().setCameraDistance(mAnimationBean.styles.getCameraDistance());
+ animator.setDuration(mAnimationBean.duration);
+ animator.start();
+ }
+ } catch (RuntimeException e) {
+ WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
+ }
+ }
+ }
+ }
+
+ private
+ @Nullable
+ ObjectAnimator createAnimator(final View target, final int viewPortWidth) {
+ if (target == null) {
+ return null;
+ }
+ WXAnimationBean.Style style = mAnimationBean.styles;
+ if (style != null) {
+ ObjectAnimator animator;
+ List<PropertyValuesHolder> holders = style.getHolders();
+ if (!TextUtils.isEmpty(style.backgroundColor)) {
+ BorderDrawable borderDrawable;
+ if ((borderDrawable = WXViewUtils.getBorderDrawable(target)) != null) {
+ holders.add(PropertyValuesHolder.ofObject(
+ new BackgroundColorProperty(), new ArgbEvaluator(),
+ borderDrawable.getColor(),
+ WXResourceUtils.getColor(style.backgroundColor)));
+ } else if (target.getBackground() instanceof ColorDrawable) {
+ holders.add(PropertyValuesHolder.ofObject(
+ new BackgroundColorProperty(), new ArgbEvaluator(),
+ ((ColorDrawable) target.getBackground()).getColor(),
+ WXResourceUtils.getColor(style.backgroundColor)));
+ }
+ }
+
+ if (target.getLayoutParams() != null &&
+ (!TextUtils.isEmpty(style.width) || !TextUtils.isEmpty(style.height))) {
+ ViewGroup.LayoutParams layoutParams = target.getLayoutParams();
+ if (!TextUtils.isEmpty(style.width)) {
+ holders.add(PropertyValuesHolder.ofInt(new WidthProperty(), layoutParams.width,
+ (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.width), viewPortWidth)));
+ }
+ if (!TextUtils.isEmpty(style.height)) {
+ holders.add(PropertyValuesHolder.ofInt(new HeightProperty(), layoutParams.height,
+ (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.height), viewPortWidth)));
+ }
+ }
+
+ if (style.getPivot() != null) {
+ Pair<Float, Float> pair = style.getPivot();
+ target.setPivotX(pair.first);
+ target.setPivotY(pair.second);
+ }
+ animator = ObjectAnimator.ofPropertyValuesHolder(
+ target, holders.toArray(new PropertyValuesHolder[holders.size()]));
+ animator.setStartDelay(mAnimationBean.delay);
+ return animator;
+ } else {
+ return null;
+ }
+ }
+
+ private
+ @Nullable
+ Animator.AnimatorListener createAnimatorListener(final WXSDKInstance instance, @Nullable final String callBack) {
+ if (!TextUtils.isEmpty(callBack)) {
+ return new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (instance == null || instance.isDestroy()) {
+ WXLogUtils.e("RenderContextImpl-onAnimationEnd WXSDKInstance == null NPE or instance is destroyed");
+ } else {
+ WXSDKManager.getInstance().callback(instance.getInstanceId(),
+ callBack,
+ new HashMap<String, Object>());
+ }
+ }
+ };
+ } else {
+ return null;
+ }
+ }
+
+ private
+ @Nullable
+ Interpolator createTimeInterpolator() {
+ String interpolator = mAnimationBean.timingFunction;
+ if (!TextUtils.isEmpty(interpolator)) {
+ switch (interpolator) {
+ case WXAnimationBean.EASE_IN:
+ return new AccelerateInterpolator();
+ case WXAnimationBean.EASE_OUT:
+ return new DecelerateInterpolator();
+ case WXAnimationBean.EASE_IN_OUT:
+ return new AccelerateDecelerateInterpolator();
+ case WXAnimationBean.LINEAR:
+ return new LinearInterpolator();
+ default:
+ //Parse cubic-bezier
+ try {
+ SingleFunctionParser<Float> parser = new SingleFunctionParser<>(
+ mAnimationBean.timingFunction,
+ new SingleFunctionParser.FlatMapper<Float>() {
+ @Override
+ public Float map(String raw) {
+ return Float.parseFloat(raw);
+ }
+ });
+ List<Float> params = parser.parse(WXAnimationBean.CUBIC_BEZIER);
+ if (params != null && params.size() == WXAnimationBean.NUM_CUBIC_PARAM) {
+ return PathInterpolatorCompat.create(
+ params.get(0), params.get(1), params.get(2), params.get(3));
+ } else {
+ return null;
+ }
+ } catch (RuntimeException e) {
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
new file mode 100644
index 0000000..f59b0e1
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.widget.ScrollView;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.transition.WXTransition;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXScroller;
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.Map;
+import java.util.Set;
+
+public class GraphicActionCreateBody extends GraphicActionAbstractAddElement {
+
+ private WXSDKInstance instance;
+ private WXComponent component;
+
+ public GraphicActionCreateBody(String pageId, String ref,
+ String componentType,
+ Map<String, String> style,
+ Map<String, String> attributes,
+ Set<String> events,
+ float[] margins,
+ float[] paddings,
+ float[] borders) {
+ super(pageId, ref);
+ this.mComponentType = componentType;
+ this.mStyle = style;
+ this.mAttributes = attributes;
+ this.mEvents = events;
+ this.mMargins = margins;
+ this.mPaddings = paddings;
+ this.mBorders = borders;
+
+ instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null || instance.getContext() == null) {
+ return;
+ }
+
+ BasicComponentData basicComponentData = new BasicComponentData(getRef(), mComponentType, null);
+ component = createComponent(instance, null, basicComponentData);
+ if (component == null) {
+ return;
+ }
+ component.setTransition(WXTransition.fromMap(component.getStyles(), component));
+
+ }
+
+ @Override
+ public void executeAction() {
+ try {
+ component.createView();
+
+ long start = System.currentTimeMillis();
+ component.applyLayoutAndEvent(component);
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callLayoutaAplyLayoutAndEventTime(System.currentTimeMillis() - start);
+
+ start = System.currentTimeMillis();
+ component.bindData(component);
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callLayoutBindDataCoreTime(System.currentTimeMillis() - start);
+
+ if (component instanceof WXScroller) {
+ WXScroller scroller = (WXScroller) component;
+ if (scroller.getInnerView() instanceof ScrollView) {
+ instance.setRootScrollView((ScrollView) scroller.getInnerView());
+ }
+ }
+
+ instance.onRootCreated(component);
+
+ if (instance.getRenderStrategy() != WXRenderStrategy.APPEND_ONCE) {
+ instance.onCreateFinish();
+ }
+ } catch (Exception e) {
+ WXLogUtils.e("create body failed.", e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java
new file mode 100644
index 0000000..2b43eb1
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by listen on 18/01/09.
+ */
+public class GraphicActionCreateFinish extends BasicGraphicAction {
+
+ private int mLayoutWidth;
+ private int mLayoutHeight;
+
+ public GraphicActionCreateFinish(String pageId) {
+ super(pageId, "");
+ final WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(pageId);
+ if (instance == null) {
+ return;
+ }
+ WXComponent component = instance.getRootComponent();
+ if (null != component) {
+ this.mLayoutWidth = (int) component.getLayoutWidth();
+ this.mLayoutHeight = (int) component.getLayoutHeight();
+ }
+
+ // todo add LayoutFinishListener
+// final LayoutFinishListener listener;
+// if(instance != null && (listener = instance.getLayoutFinishListener()) != null) {
+// WXSDKManager.getInstance().getWXRenderManager().postOnUiThread(WXThread.secure(new Runnable() {
+// @Override
+// public void run() {
+// listener.onLayoutFinish(instance);
+// }
+// }),0);
+// }
+ }
+
+ @Override
+ public void executeAction() {
+ final WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null || instance.getContext() == null) {
+ return;
+ }
+
+ if (instance.getRenderStrategy() == WXRenderStrategy.APPEND_ONCE) {
+ instance.onCreateFinish();
+ }
+ instance.onRenderSuccess(mLayoutWidth, mLayoutHeight);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionLayout.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionLayout.java
new file mode 100644
index 0000000..777df14
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionLayout.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+
+public class GraphicActionLayout extends BasicGraphicAction {
+
+ private final GraphicPosition mLayoutPosition;
+ private final GraphicSize mLayoutSize;
+
+ public GraphicActionLayout(String pageId, String ref, GraphicPosition layoutPosition, GraphicSize layoutSize) {
+ super(pageId, ref);
+ this.mLayoutPosition = layoutPosition;
+ this.mLayoutSize = layoutSize;
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ long start = System.currentTimeMillis();
+ component.updateDemission(mLayoutSize, mLayoutPosition);
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callLayoutUpdateDemissionTime(System.currentTimeMillis() - start);
+
+ component.setLayout(component);
+ component.setPadding(component.getPadding(), component.getBorder());
+
+ WXSDKManager.getInstance().getSDKInstance(getPageId()).callActionLayoutCount();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionMoveElement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionMoveElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionMoveElement.java
new file mode 100644
index 0000000..ac6474b
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionMoveElement.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+
+public class GraphicActionMoveElement extends BasicGraphicAction {
+
+ private String mParentref;
+ private int mIndex;
+
+ public GraphicActionMoveElement(String pageId, String ref, String parentRef, int index) {
+ super(pageId, ref);
+ this.mParentref = parentRef;
+ this.mIndex = index;
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ WXVContainer oldParent = component.getParent();
+ WXComponent newParent = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), mParentref);
+ if (component == null || oldParent == null
+ || newParent == null || !(newParent instanceof WXVContainer)) {
+ return;
+ }
+
+ oldParent.remove(component, false);
+ ((WXVContainer) newParent).addChild(component, mIndex);
+ if (!component.isVirtualComponent()) {
+ ((WXVContainer) newParent).addSubView(component.getHostView(), mIndex);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRefreshFinish.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRefreshFinish.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRefreshFinish.java
new file mode 100644
index 0000000..efdb309
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRefreshFinish.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by listen on 18/01/09.
+ */
+public class GraphicActionRefreshFinish extends BasicGraphicAction {
+
+ private int mLayoutWidth;
+ private int mLayoutHeight;
+
+ public GraphicActionRefreshFinish(String pageId) {
+ super(pageId, "");
+ final WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(pageId);
+ if (instance == null) {
+ return;
+ }
+ WXComponent component = instance.getRootComponent();
+ if (null != component) {
+ this.mLayoutWidth = (int) component.getLayoutWidth();
+ this.mLayoutHeight = (int) component.getLayoutHeight();
+ }
+ }
+
+ @Override
+ public void executeAction() {
+ final WXSDKInstance instance = WXSDKManager.getInstance().getWXRenderManager().getWXSDKInstance(getPageId());
+ if (instance == null || instance.getContext() == null) {
+ return;
+ }
+
+ instance.onRefreshSuccess(mLayoutWidth, mLayoutHeight);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveElement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveElement.java
new file mode 100644
index 0000000..36d31dd
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveElement.java
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+
+public class GraphicActionRemoveElement extends BasicGraphicAction {
+
+ public GraphicActionRemoveElement(String pageId, String ref) {
+ super(pageId, ref);
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null || component.getParent() == null) {
+ return;
+ }
+ clearRegistryForComponent(component);
+ WXVContainer parent = component.getParent();
+ parent.remove(component, true);
+ }
+
+ private void clearRegistryForComponent(WXComponent component) {
+ WXComponent removedComponent = WXSDKManager.getInstance().getWXRenderManager().unregisterComponent(getPageId(), getRef());
+ if (removedComponent != null) {
+ removedComponent.removeAllEvent();
+ removedComponent.removeStickyStyle();
+ }
+ if (component instanceof WXVContainer) {
+ WXVContainer container = (WXVContainer) component;
+ int count = container.childCount();
+ for (int i = count - 1; i >= 0; --i) {
+ clearRegistryForComponent(container.getChild(i));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveEvent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveEvent.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveEvent.java
new file mode 100644
index 0000000..36fd284
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionRemoveEvent.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.WXEvent;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by listen on 18/01/11.
+ */
+public class GraphicActionRemoveEvent extends BasicGraphicAction {
+
+ private final String mEvent;
+
+ public GraphicActionRemoveEvent(String pageId, String ref, Object event) {
+ super(pageId, ref);
+ this.mEvent = WXEvent.getEventName(event);
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ Stopwatch.tick();
+ component.removeEvent(mEvent);
+ Stopwatch.split("removeEventFromComponent");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionScrollToElement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionScrollToElement.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionScrollToElement.java
new file mode 100644
index 0000000..144c61e
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionScrollToElement.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.Scrollable;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by listen on 18/01/09.
+ */
+public class GraphicActionScrollToElement extends BasicGraphicAction {
+
+ private final JSONObject mOptions;
+
+ public GraphicActionScrollToElement(String pageId, String ref, JSONObject options) {
+ super(pageId, ref);
+ this.mOptions = options;
+ }
+
+ @Override
+ public void executeAction() {
+ WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+
+ Scrollable scroller = component.getParentScroller();
+ if (scroller == null) {
+ return;
+ }
+ scroller.scrollTo(component, mOptions);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateAttr.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateAttr.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateAttr.java
new file mode 100644
index 0000000..64f3fdd
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateAttr.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.ui.component.WXComponent;
+
+import java.util.Map;
+
+public class GraphicActionUpdateAttr extends BasicGraphicAction {
+
+ private Map<String, String> mAttrs;
+ private WXComponent component;
+
+ public GraphicActionUpdateAttr(String pageId, String ref,
+ Map<String, String> attrs) {
+ super(pageId, ref);
+ this.mAttrs = attrs;
+
+ component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+ if (mAttrs != null) {
+ component.addAttr(mAttrs);
+ }
+ }
+
+ @Override
+ public void executeAction() {
+ if (component == null) {
+ return;
+ }
+ component.updateAttrs(mAttrs);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateStyle.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateStyle.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateStyle.java
new file mode 100644
index 0000000..90525e7
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionUpdateStyle.java
@@ -0,0 +1,134 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+import android.support.v4.util.ArrayMap;
+
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.bridge.WXBridgeManager;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.CSSShorthand;
+import com.taobao.weex.dom.transition.WXTransition;
+import com.taobao.weex.ui.component.WXComponent;
+
+import java.util.Map;
+
+public class GraphicActionUpdateStyle extends BasicGraphicAction {
+
+ private Map<String, Object> mStyle;
+ private WXComponent component;
+ private boolean mIsCausedByPesudo;
+
+ public GraphicActionUpdateStyle(String pageId, String ref,
+ Map<String, Object> style,
+ Map<String, String> paddings,
+ Map<String, String> margins,
+ Map<String, String> borders) {
+ this(pageId, ref, style, paddings, margins, borders, false);
+ }
+
+ public GraphicActionUpdateStyle(String pageId, String ref,
+ Map<String, Object> style,
+ CSSShorthand paddings,
+ CSSShorthand margins,
+ CSSShorthand borders, boolean byPesudo) {
+ super(pageId, ref);
+ this.mStyle = style;
+ this.mIsCausedByPesudo = byPesudo;
+
+ component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+ if (null != mStyle) {
+ component.addStyle(mStyle, mIsCausedByPesudo);
+ if(style.containsKey(Constants.Name.TRANSFORM)) {
+ Map<String, Object> animationMap = new ArrayMap<>(2);
+ animationMap.put(Constants.Name.TRANSFORM, style.get(Constants.Name.TRANSFORM));
+ animationMap
+ .put(Constants.Name.TRANSFORM_ORIGIN, style.get(Constants.Name.TRANSFORM_ORIGIN));
+ component.addAnimationForElement(animationMap);
+ }
+ }
+
+ if (null != paddings) {
+ component.setPaddings(paddings);
+ }
+
+ if (null != margins) {
+ component.setMargins(margins);
+ }
+
+ if (null != borders) {
+ component.setBorders(borders);
+ }
+ }
+
+ public GraphicActionUpdateStyle(String pageId, String ref,
+ Map<String, Object> style,
+ Map<String, String> paddings,
+ Map<String, String> margins,
+ Map<String, String> borders, boolean byPesudo) {
+ super(pageId, ref);
+ this.mStyle = style;
+ this.mIsCausedByPesudo = byPesudo;
+
+ component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(getPageId(), getRef());
+ if (component == null) {
+ return;
+ }
+ if (null != mStyle) {
+ component.addStyle(mStyle, mIsCausedByPesudo);
+ Map<String, Object> animationMap = new ArrayMap<>(2);
+ animationMap.put(Constants.Name.TRANSFORM, style.get(Constants.Name.TRANSFORM));
+ animationMap.put(Constants.Name.TRANSFORM_ORIGIN, style.get(Constants.Name.TRANSFORM_ORIGIN));
+ component.addAnimationForElement(animationMap);
+ WXBridgeManager.getInstance().markDirty(component.getInstanceId(), component.getRef(), true);
+ }
+
+ if (null != paddings) {
+ component.addShorthand(paddings);
+ }
+
+ if (null != margins) {
+ component.addShorthand(margins);
+ }
+
+ if (null != borders) {
+ component.addShorthand(borders);
+ }
+ }
+
+ @Override
+ public void executeAction() {
+ if (component == null) {
+ return;
+ }
+ if(component.getTransition() != null){
+ component.getTransition().updateTranstionParams(mStyle);
+ if(component.getTransition().hasTransitionProperty(mStyle)){
+ component.getTransition().startTransition(mStyle);
+ }
+ } else {
+ component.setTransition(WXTransition.fromMap(mStyle, component));
+ component.updateStyles(mStyle);
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicPosition.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicPosition.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicPosition.java
new file mode 100644
index 0000000..9cb0e2d
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicPosition.java
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+public class GraphicPosition {
+
+ private float mLeft;
+ private float mTop;
+ private float mRight;
+ private float mBottom;
+
+ public GraphicPosition(float left, float top, float right, float bottom) {
+ this.mLeft = left;
+ this.mTop = top;
+ this.mRight = right;
+ this.mBottom = bottom;
+ }
+
+ public float getLeft() {
+ return mLeft;
+ }
+
+ public void setLeft(float left) {
+ this.mLeft = left;
+ }
+
+ public float getTop() {
+ return mTop;
+ }
+
+ public void setTop(float top) {
+ this.mTop = top;
+ }
+
+ public float getRight() {
+ return mRight;
+ }
+
+ public void setRight(float right) {
+ this.mRight = right;
+ }
+
+ public float getBottom() {
+ return mBottom;
+ }
+
+ public void setBottom(float bottom) {
+ this.mBottom = bottom;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicSize.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicSize.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicSize.java
new file mode 100644
index 0000000..371b196
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicSize.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+public class GraphicSize {
+
+ private float mWidth;
+ private float mHeight;
+
+ public GraphicSize(float width, float height) {
+ this.mWidth = width;
+ this.mHeight = height;
+ }
+
+ public float getWidth() {
+ return mWidth;
+ }
+
+ public void setWidth(float width) {
+ this.mWidth = width;
+ }
+
+ public float getHeight() {
+ return mHeight;
+ }
+
+ public void setHeight(float height) {
+ this.mHeight = height;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/action/IExecutable.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/IExecutable.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/IExecutable.java
new file mode 100644
index 0000000..399d249
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/IExecutable.java
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.action;
+
+public interface IExecutable {
+
+ void executeAction();
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/android/sdk/src/main/java/com/taobao/weex/ui/animation/TransformParser.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/TransformParser.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/TransformParser.java
index decc78e..34e4ee4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/TransformParser.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/TransformParser.java
@@ -29,8 +29,6 @@ import android.view.View;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.common.Constants;
-import com.taobao.weex.ui.animation.CameraDistanceProperty;
-import com.taobao.weex.ui.animation.WXAnimationBean;
import com.taobao.weex.utils.FunctionParser;
import com.taobao.weex.utils.WXDataStructureUtil;
import com.taobao.weex.utils.WXUtils;
@@ -102,7 +100,7 @@ public class TransformParser {
}
public static Map<Property<View,Float>, Float> parseTransForm(@Nullable String rawTransform, final int width,
- final int height, final int viewportW) {
+ final int height, final int viewportW) {
if (!TextUtils.isEmpty(rawTransform)) {
FunctionParser<Property<View,Float>, Float> parser = new FunctionParser<>
(rawTransform, new FunctionParser.Mapper<Property<View,Float>, Float>() {
@@ -116,7 +114,7 @@ public class TransformParser {
return new HashMap<>();
}
- private Map<Property<View,Float>, Float> convertParam(int width, int height,int viewportW,
+ private Map<Property<View,Float>, Float> convertParam(int width, int height, int viewportW,
@NonNull List<Property<View,Float>> propertyList,
@NonNull List<String> rawValue) {
@@ -157,7 +155,8 @@ public class TransformParser {
return convertedList;
}
- private @NonNull List<Float> parseRotationZ(@NonNull List<String> rawValue) {
+ private @NonNull
+ List<Float> parseRotationZ(@NonNull List<String> rawValue) {
List<Float> convertedList = new ArrayList<>(1);
int suffix;
for (String raw : rawValue) {
@@ -178,7 +177,7 @@ public class TransformParser {
*/
private List<Float> parseTranslation(List<Property<View,Float>> propertyList,
int width, int height,
- @NonNull List<String> rawValue,int viewportW) {
+ @NonNull List<String> rawValue, int viewportW) {
List<Float> convertedList = new ArrayList<>(2);
String first = rawValue.get(0);
if (propertyList.size() == 1) {
@@ -190,7 +189,7 @@ public class TransformParser {
}
private void parseSingleTranslation(List<Property<View,Float>> propertyList, int width, int height,
- List<Float> convertedList, String first,int viewportW) {
+ List<Float> convertedList, String first, int viewportW) {
if (propertyList.contains(View.TRANSLATION_X)) {
convertedList.add(parsePercentOrPx(first, width,viewportW));
} else if (propertyList.contains(View.TRANSLATION_Y)) {
@@ -200,7 +199,7 @@ public class TransformParser {
private void parseDoubleTranslation(int width, int height,
@NonNull List<String> rawValue,
- List<Float> convertedList, String first,int viewportW) {
+ List<Float> convertedList, String first, int viewportW) {
String second;
if (rawValue.size() == 1) {
second = first;
@@ -212,7 +211,7 @@ public class TransformParser {
}
private Float parseCameraDistance(List<String> rawValue){
- float ret=Float.MAX_VALUE;
+ float ret= Float.MAX_VALUE;
if(rawValue.size() == 1){
float value = WXViewUtils.getRealPxByWidth(WXUtils.getFloat(rawValue.get(0)), viewportW);
float scale = WXEnvironment.getApplication().getResources().getDisplayMetrics().density;
@@ -250,12 +249,12 @@ public class TransformParser {
return null;
}
- private static Pair<Float, Float> parsePivot(@NonNull List<String> list, int width, int height,int viewportW) {
+ private static Pair<Float, Float> parsePivot(@NonNull List<String> list, int width, int height, int viewportW) {
return new Pair<>(
parsePivotX(list.get(0), width,viewportW), parsePivotY(list.get(1), height,viewportW));
}
- private static float parsePivotX(String x, int width,int viewportW) {
+ private static float parsePivotX(String x, int width, int viewportW) {
String value = x;
if (WXAnimationBean.Style.LEFT.equals(x)) {
value = ZERO;
@@ -267,7 +266,7 @@ public class TransformParser {
return parsePercentOrPx(value, width,viewportW);
}
- private static float parsePivotY(String y, int height,int viewportW) {
+ private static float parsePivotY(String y, int height, int viewportW) {
String value = y;
if (WXAnimationBean.Style.TOP.equals(y)) {
value = ZERO;
@@ -279,7 +278,7 @@ public class TransformParser {
return parsePercentOrPx(value, height,viewportW);
}
- private static float parsePercentOrPx(String raw, int unit,int viewportW) {
+ private static float parsePercentOrPx(String raw, int unit, int viewportW) {
final int precision = 1;
int suffix;
if ((suffix = raw.lastIndexOf(WXUtils.PERCENT)) != -1) {