Repository: incubator-weex
Updated Branches:
  refs/heads/0.12-dev 02487c9c8 -> 476e58c9a


* [Android] Add the ability of disable changing layerType

For certain custom weex instance, one can disable the ability of changing 
layerType by call WXSDKInstance.enableLayerType(boolean). The default value for 
this flag is true and setting this to false will have performance punishment


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/8e51cef1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8e51cef1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8e51cef1

Branch: refs/heads/0.12-dev
Commit: 8e51cef1b0e4de454c7920632e0d64b60e8fa6d4
Parents: a6207a6
Author: YorkShen <shenyua...@gmail.com>
Authored: Wed Mar 22 11:45:55 2017 +0800
Committer: YorkShen <shenyua...@gmail.com>
Committed: Wed Mar 22 11:45:55 2017 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/WXSDKInstance.java     | 25 ++++++++++++++++++++
 .../taobao/weex/dom/action/AnimationAction.java |  3 ++-
 .../taobao/weex/ui/component/WXComponent.java   | 15 ++++++++----
 3 files changed, 38 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java 
b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index eb0653f..51903ea 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -208,6 +208,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.graphics.Color;
+import android.graphics.Paint;
 import android.net.Uri;
 import android.os.Message;
 import android.support.annotation.Nullable;
@@ -293,6 +294,7 @@ public class WXSDKInstance implements 
IWXActivityStateListener,DomContext, View.
   private boolean isCommit=false;
   private WXGlobalEventReceiver mGlobalEventReceiver=null;
   private boolean trackComponent;
+  private boolean enableLayerType = true;
   private boolean mNeedValidate = false;
   private static volatile int mViewPortWidth = 750;
   private int mInstanceViewPortWidth = 750;
@@ -340,6 +342,29 @@ public class WXSDKInstance implements 
IWXActivityStateListener,DomContext, View.
     this.trackComponent = trackComponent;
   }
 
+  /**
+   * Tell whether it is enabled to change the layerType
+   * {@link android.view.View#setLayerType(int, Paint)}
+   * @return True for enable to change the layerType of component, false 
otherwise. The default
+   * is True
+   */
+  public boolean isLayerTypeEnabled() {
+    return enableLayerType;
+  }
+
+  /**
+   * Enable the ability of changing layerType. e.g. {@link 
android.view.View#setLayerType(int, Paint)}
+   * Disable the ability of changing layerType will have tremendous 
<strong>performance
+   * punishment</strong>.
+   *
+   * <strong>Do not</strong> set this to false unless you know exactly what 
you are doing.
+   * @param enable True for enable to change the layerType of component, false 
otherwise. The default
+   * is True
+   */
+  public void enableLayerType(boolean enable) {
+    enableLayerType = enable;
+  }
+
   public boolean isNeedValidate() {
     return mNeedValidate;
   }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java 
b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
index 9768016..d85d997 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
@@ -328,7 +328,8 @@ class AnimationAction implements DOMAction, RenderAction {
               .getInstanceViewPortWidth());
           if (animator != null) {
             Animator.AnimatorListener animatorCallback = 
createAnimatorListener(instance, callback);
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
+            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 && 
component
+                .enableLayerType() ) {
               component.getHostView().setLayerType(View.LAYER_TYPE_HARDWARE, 
null);
             }
             Interpolator interpolator = createTimeInterpolator();

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8e51cef1/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java 
b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
index fcf7aa4..c1c99bc 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -159,7 +159,6 @@ import com.taobao.weex.common.IWXObject;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomHandler;
-import com.taobao.weex.dom.WXDomManager;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.dom.WXDomTask;
 import com.taobao.weex.dom.WXStyle;
@@ -1132,7 +1131,7 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
   }
 
   public void setOpacity(float opacity) {
-    if (opacity >= 0 && opacity <= 1 && mHost.getAlpha() != opacity) {
+    if (opacity >= 0 && opacity <= 1 && mHost.getAlpha() != opacity && 
enableLayerType()) {
       mHost.setLayerType(View.LAYER_TYPE_HARDWARE, null);
       mHost.setAlpha(opacity);
     }
@@ -1320,7 +1319,7 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
     if (WXEnvironment.isApkDebugable() && !WXUtils.isUiThread()) {
       throw new WXRuntimeException("[WXComponent] destroy can only be called 
in main thread");
     }
-    if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE) {
+    if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE && 
enableLayerType()) {
       mHost.setLayerType(View.LAYER_TYPE_NONE, null);
     }
     removeAllEvent();
@@ -1506,4 +1505,12 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
   public void setStickyOffset(int stickyOffset) {
     mStickyOffset = stickyOffset;
   }
-}
+
+  /**
+   * For now, this method respect the result of {@link 
WXSDKInstance#isLayerTypeEnabled()}
+   * @return Refer {@link WXSDKInstance#isLayerTypeEnabled()}
+   */
+  public boolean enableLayerType() {
+    return getInstance().isLayerTypeEnabled();
+  }
+}
\ No newline at end of file

Reply via email to