* [android] Make flat flag like lazy flag and enable it only if it's Android 
4.4 or below.
* [android] Fix LayoutParams in Nested Widget/Views.


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

Branch: refs/heads/0.16-dev
Commit: 58546e6d66dac82f5f8d7c3aefcaca5a682d7701
Parents: e225aaa
Author: YorkShen <shenyua...@gmail.com>
Authored: Mon Sep 4 14:47:50 2017 +0800
Committer: YorkShen <shenyua...@gmail.com>
Committed: Wed Sep 13 16:54:08 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/ui/component/WXComponent.java   | 13 +++++-
 .../com/taobao/weex/ui/component/WXDiv.java     |  2 +-
 .../taobao/weex/ui/component/list/WXCell.java   | 47 +++++++++++++-------
 .../taobao/weex/ui/flat/FlatGUIIContext.java    | 17 +++----
 4 files changed, 50 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/58546e6d/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 6f20d1d..c2313b2 100644
--- 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
@@ -35,6 +35,8 @@ import android.support.annotation.CheckResult;
 import android.support.annotation.IntDef;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
 import android.support.v4.view.ViewCompat;
 import android.text.TextUtils;
 import android.view.Menu;
@@ -68,8 +70,8 @@ import 
com.taobao.weex.ui.component.pesudo.OnActivePseudoListner;
 import com.taobao.weex.ui.component.pesudo.PesudoStatus;
 import com.taobao.weex.ui.component.pesudo.TouchActivePseudoListener;
 import com.taobao.weex.ui.flat.FlatComponent;
-import com.taobao.weex.ui.flat.WidgetContainer;
 import com.taobao.weex.ui.flat.FlatGUIIContext;
+import com.taobao.weex.ui.flat.WidgetContainer;
 import com.taobao.weex.ui.flat.widget.AndroidViewWidget;
 import com.taobao.weex.ui.flat.widget.Widget;
 import com.taobao.weex.ui.view.border.BorderDrawable;
@@ -147,6 +149,12 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
     this.mAnimationHolder = holder;
   }
 
+  //This method will be removed once flatGUI is completed.
+  @RestrictTo(Scope.LIBRARY)
+  public boolean isFlatUIEnabled(){
+    return mParent != null && mParent.isFlatUIEnabled();
+  }
+
   private OnClickListener mClickEventListener = new OnClickListener() {
     @Override
     public void onHostViewClick() {
@@ -500,7 +508,8 @@ public abstract class  WXComponent<T extends View> 
implements IWXObject, IWXActi
           UIImp.getFlatComponentAncestor(mParent) != null &&
           UIImp.getAndroidViewWidget(mParent) == null) {
         childOffset.set(rawoffset.x, rawoffset.y);
-      } else {
+      }
+      else{
         childOffset.set(left, top);
       }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/58546e6d/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 3080bbc..bdc9891 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
@@ -105,7 +105,7 @@ public class WXDiv extends WidgetContainer<WXFrameLayout> 
implements FlatCompone
 
   @Override
   public boolean intendToBeFlatContainer() {
-    return getInstance().getFlatUIContext().isFlatUIEnabled() && 
WXDiv.class.equals(getClass());
+    return getInstance().getFlatUIContext().isFlatUIEnabled(this) && 
WXDiv.class.equals(getClass());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/58546e6d/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java 
b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index 7981701..bf575b5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -19,18 +19,23 @@
 package com.taobao.weex.ui.component.list;
 
 import android.content.Context;
+import android.os.Build;
+import android.os.Build.VERSION_CODES;
 import android.support.annotation.NonNull;
-import android.text.TextUtils;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
 import com.taobao.weex.common.Constants.Name;
+import com.taobao.weex.dom.WXAttr;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.ui.component.WXVContainer;
 import com.taobao.weex.ui.flat.WidgetContainer;
 import com.taobao.weex.ui.view.WXFrameLayout;
+import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 
 /**
@@ -48,7 +53,7 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
 
     /** used in list sticky detect **/
     private int mScrollPositon = -1;
-
+    private boolean mFlatUIEnabled = false;
 
     @Deprecated
     public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer 
parent, String instanceId, boolean isLazy) {
@@ -57,6 +62,17 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
 
     public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer 
parent, boolean isLazy) {
         super(instance, dom, parent);
+        if(Build.VERSION.SDK_INT< VERSION_CODES.LOLLIPOP) {
+            try {
+                //TODO a WTF is necessary if anyone try to change the flat 
flag during update attrs.
+                WXAttr attr = getDomObject().getAttrs();
+                if (attr.containsKey(Name.FLAT)) {
+                    mFlatUIEnabled = WXUtils.getBoolean(attr.get(Name.FLAT), 
false);
+                }
+            } catch (NullPointerException e) {
+                WXLogUtils.e("Cell", WXLogUtils.getStackTrace(e));
+            }
+        }
     }
 
     @Override
@@ -68,6 +84,12 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
         mLazy = lazy;
     }
 
+    @Override
+    @RestrictTo(Scope.LIBRARY)
+    public boolean isFlatUIEnabled() {
+        return mFlatUIEnabled;
+    }
+
     /**
      * If Cell is Sticky, need wraped FrameLayout
      */
@@ -77,25 +99,21 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
             WXFrameLayout view = new WXFrameLayout(context);
             mRealView = new WXFrameLayout(context);
             view.addView(mRealView);
+            //TODO Maybe there is a better solution for hardware-acceleration 
view's display list.
+            if (isFlatUIEnabled()) {
+                view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            }
             return view;
         } else {
             WXFrameLayout view = new WXFrameLayout(context);
             mRealView = view;
+            if (isFlatUIEnabled()) {
+                view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            }
             return view;
         }
     }
 
-    @Override
-    protected boolean setProperty(String key, Object param) {
-        if(TextUtils.equals(Name.FLAT, key)){
-            
getInstance().getFlatUIContext().setFlatUIEnabled(WXUtils.getBoolean(param, 
false));
-            return true;
-        }
-        else {
-            return super.setProperty(key, param);
-        }
-    }
-
     public int getLocationFromStart(){
         return mLastLocationY;
     }
@@ -156,7 +174,6 @@ public class WXCell extends WidgetContainer<WXFrameLayout> {
 
     @Override
     public boolean intendToBeFlatContainer() {
-        //TODO Is it possible to remove the cell class judge
-        return getInstance().getFlatUIContext().isFlatUIEnabled() && 
WXCell.class.equals(getClass()) && !isSticky();
+        return getInstance().getFlatUIContext().isFlatUIEnabled(this) && 
WXCell.class.equals(getClass()) && !isSticky();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/58546e6d/android/sdk/src/main/java/com/taobao/weex/ui/flat/FlatGUIIContext.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/ui/flat/FlatGUIIContext.java 
b/android/sdk/src/main/java/com/taobao/weex/ui/flat/FlatGUIIContext.java
index a5677b1..dde4118 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/flat/FlatGUIIContext.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/flat/FlatGUIIContext.java
@@ -43,18 +43,13 @@ import java.util.Map;
 @RestrictTo(Scope.LIBRARY)
 public class FlatGUIIContext {
 
-  private boolean mFlatUIEnabled;
+  private boolean mFlatUIEnabled = true;
   private Map<WXComponent, WidgetContainer> mWidgetRegistry = new ArrayMap<>();
   private Map<WXComponent, AndroidViewWidget> mViewWidgetRegistry = new 
ArrayMap<>();
   private Map<Widget, WXComponent> widgetToComponent = new ArrayMap<>();
 
-  @RestrictTo(Scope.LIBRARY)
-  public void setFlatUIEnabled(boolean flag){
-    mFlatUIEnabled = flag;
-  }
-
-  public boolean isFlatUIEnabled() {
-    return mFlatUIEnabled;
+  public boolean isFlatUIEnabled(WXComponent component) {
+    return mFlatUIEnabled && component.isFlatUIEnabled();
   }
 
   public void register(@NonNull WXComponent descendant, @NonNull 
WidgetContainer ancestor) {
@@ -86,7 +81,7 @@ public class FlatGUIIContext {
 
   public boolean promoteToView(@NonNull WXComponent component, boolean 
checkAncestor,
       @NonNull Class<? extends WXComponent<?>> expectedClass) {
-    return !isFlatUIEnabled() ||
+    return !isFlatUIEnabled(component) ||
         !expectedClass.equals(component.getClass()) ||
         TextUtils.equals(component.getRef(), WXDomObject.ROOT) ||
         (checkAncestor && getFlatComponentAncestor(component) == null) ||
@@ -124,9 +119,9 @@ public class FlatGUIIContext {
           attr.containsKey(Name.ARIA_LABEL) ||
           attr.containsKey(WXComponent.PROP_FIXED_SIZE) ||
           style.containsKey(Name.VISIBILITY) ||
-          style.containsKey(Name.POSITION) ||
           attr.containsKey(Name.DISABLED) ||
-          attr.containsKey(Name.PREVENT_MOVE_EVENT) ||
+          style.isFixed() ||
+          style.isSticky() ||
           !style.getPesudoStyles().isEmpty() ||
           domObject.getEvents().size() > 0) {
         ret = true;

Reply via email to