* [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;