You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ac...@apache.org on 2018/02/07 06:51:50 UTC

incubator-weex git commit: [android][WEEX-187] weex custom font not rendered right when font is first downloaded close #994

Repository: incubator-weex
Updated Branches:
  refs/heads/master 8130b02ed -> fe6b1a603


[android][WEEX-187] weex custom font not rendered right when font is first downloaded
close #994


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

Branch: refs/heads/master
Commit: fe6b1a60335b432bb88e077811e740cbc57a2167
Parents: 8130b02
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Thu Jan 18 14:28:04 2018 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Feb 7 14:51:22 2018 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/dom/WXDomObject.java   |  7 ++
 .../com/taobao/weex/dom/WXTextDomObject.java    | 67 ++++++++++++++++++++
 .../com/taobao/weex/ui/component/WXText.java    | 51 ---------------
 .../com/taobao/weex/utils/TypefaceUtil.java     |  2 +-
 4 files changed, 75 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe6b1a60/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index d062a8a..8235590 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -674,6 +674,13 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
     return dom;
   }
 
+  public boolean isDestroy(){
+    if(sDestroy == null){
+      return  true;
+    }
+    return sDestroy.get();
+  }
+
   public void destroy() {
     sDestroy.set(true);
     if (mStyles != null) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe6b1a60/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index e882968..6bb1feb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -18,12 +18,17 @@
  */
 package com.taobao.weex.dom;
 
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.graphics.Canvas;
 import android.graphics.Typeface;
 import android.os.Build;
 import android.os.Looper;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.v4.content.LocalBroadcastManager;
 import android.text.Editable;
 import android.text.Layout;
 import android.text.Spannable;
@@ -39,6 +44,7 @@ import android.text.style.AlignmentSpan;
 import android.text.style.ForegroundColorSpan;
 
 import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.common.Constants;
 import com.taobao.weex.dom.flex.CSSConstants;
 import com.taobao.weex.dom.flex.CSSNode;
@@ -47,6 +53,7 @@ import com.taobao.weex.dom.flex.MeasureOutput;
 import com.taobao.weex.ui.component.WXText;
 import com.taobao.weex.ui.component.WXTextDecoration;
 import com.taobao.weex.utils.StaticLayoutProxy;
+import com.taobao.weex.utils.TypefaceUtil;
 import com.taobao.weex.utils.WXDomUtils;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXResourceUtils;
@@ -148,6 +155,8 @@ public class WXTextDomObject extends WXDomObject {
   private @Nullable Layout layout;
   private AtomicReference<Layout> atomicReference = new AtomicReference<>();
 
+  private BroadcastReceiver mTypefaceObserver;
+
   /**
    * Create an instance of current class, and set {@link #TEXT_MEASURE_FUNCTION} as the
    * measureFunction
@@ -157,6 +166,7 @@ public class WXTextDomObject extends WXDomObject {
     super();
     mTextPaint.setFlags(TextPaint.ANTI_ALIAS_FLAG);
     setMeasureFunction(TEXT_MEASURE_FUNCTION);
+    registerTypefaceObserverIfNeed(WXStyle.getFontFamily(getStyles()));
   }
 
   public TextPaint getTextPaint() {
@@ -307,6 +317,7 @@ public class WXTextDomObject extends WXDomObject {
       if (lineHeight != UNSET) {
         mLineHeight = lineHeight;
       }
+      registerTypefaceObserverIfNeed(mFontFamily);
     }
   }
 
@@ -544,4 +555,60 @@ public class WXTextDomObject extends WXDomObject {
     }
     return result;
   }
+
+  @Override
+  public void destroy() {
+    if (WXEnvironment.getApplication() != null && mTypefaceObserver != null) {
+      WXLogUtils.d("WXText", "Unregister the typeface observer");
+      LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).unregisterReceiver(mTypefaceObserver);
+      mTypefaceObserver = null;
+    }
+    super.destroy();
+  }
+
+  private void registerTypefaceObserverIfNeed(String desiredFontFamily) {
+    if(TextUtils.isEmpty(desiredFontFamily)){
+      return;
+    }
+    if (WXEnvironment.getApplication() == null) {
+      WXLogUtils.w("WXText", "ApplicationContent is null on register typeface observer");
+      return;
+    }
+    mFontFamily = desiredFontFamily;
+    if (mTypefaceObserver != null) {
+      return;
+    }
+
+    mTypefaceObserver = new BroadcastReceiver() {
+      @Override
+      public void onReceive(Context context, Intent intent) {
+        String fontFamily = intent.getStringExtra("fontFamily");
+        if (!mFontFamily.equals(fontFamily)) {
+          return;
+        }
+        if(isDestroy() || getDomContext() == null){
+          return;
+        }
+
+        DOMActionContext domActionContext = WXSDKManager.getInstance().getWXDomManager().getDomContext(getDomContext().getInstanceId());
+        if(domActionContext == null){
+          return;
+        }
+        WXDomObject domObject = domActionContext.getDomByRef(getRef());
+        if(domObject == null){
+          return;
+        }
+        domObject.markDirty();
+        domActionContext.markDirty();
+        WXSDKManager.getInstance().getWXDomManager().sendEmptyMessageDelayed(WXDomHandler.MsgType.WX_DOM_START_BATCH, 2);
+        if(WXEnvironment.isApkDebugable()) {
+          WXLogUtils.d("WXText", "Font family " + fontFamily + " is available");
+        }
+      }
+    };
+    if(WXEnvironment.isApkDebugable()) {
+         WXLogUtils.d("WXText", "Font family register " + desiredFontFamily + " is available" + getRef());
+    }
+    LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).registerReceiver(mTypefaceObserver, new IntentFilter(TypefaceUtil.ACTION_TYPE_FACE_AVAILABLE));
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe6b1a60/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
index 654681e..6a9a99a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
@@ -55,8 +55,6 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
    * The default text size
    **/
   public static final int sDEFAULT_SIZE = 32;
-  private BroadcastReceiver mTypefaceObserver;
-  private String mFontFamily;
 
   @Override
   public boolean promoteToView(boolean checkAncestor) {
@@ -145,9 +143,6 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
       case Constants.Name.VALUE:
         return true;
       case Constants.Name.FONT_FAMILY:
-        if (param != null) {
-          registerTypefaceObserver(param.toString());
-        }
         return true;
       default:
         return super.setProperty(key, param);
@@ -175,52 +170,6 @@ public class WXText extends WXComponent<WXTextView> implements FlatComponent<Tex
   @Override
   public void destroy() {
     super.destroy();
-    if (WXEnvironment.getApplication() != null && mTypefaceObserver != null) {
-      WXLogUtils.d("WXText", "Unregister the typeface observer");
-      LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).unregisterReceiver(mTypefaceObserver);
-      mTypefaceObserver = null;
-    }
   }
 
-  private void registerTypefaceObserver(String desiredFontFamily) {
-    if (WXEnvironment.getApplication() == null) {
-      WXLogUtils.w("WXText", "ApplicationContent is null on register typeface observer");
-      return;
-    }
-    mFontFamily = desiredFontFamily;
-    if (mTypefaceObserver != null) {
-      return;
-    }
-
-    mTypefaceObserver = new BroadcastReceiver() {
-      @Override
-      public void onReceive(Context context, Intent intent) {
-        String fontFamily = intent.getStringExtra("fontFamily");
-        if (!mFontFamily.equals(fontFamily)) {
-          return;
-        }
-        if(isDestoryed()){
-          return;
-        }
-        DOMActionContext domActionContext = WXSDKManager.getInstance().getWXDomManager().getDomContext(getInstanceId());
-        if(domActionContext == null){
-          return;
-        }
-        WXDomObject domObject = domActionContext.getDomByRef(getRef());
-        if(domObject == null){
-          return;
-        }
-        domObject.markDirty();
-        domActionContext.markDirty();
-        WXSDKManager.getInstance().getWXDomManager().sendEmptyMessageDelayed(WXDomHandler.MsgType.WX_DOM_START_BATCH, 2);
-        if(WXEnvironment.isApkDebugable()) {
-           WXLogUtils.d("WXText", "Font family " + fontFamily + " is available");
-        }
-      }
-    };
-    if(WXEnvironment.isApkDebugable()) {
-      WXLogUtils.d("WXText", "Font family register " + desiredFontFamily + " is available" + getRef());
-    }
-    LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).registerReceiver(mTypefaceObserver, new IntentFilter(TypefaceUtil.ACTION_TYPE_FACE_AVAILABLE));
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe6b1a60/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
index bebefa9..5c12aab 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
@@ -256,7 +256,7 @@ public class TypefaceUtil {
                 intent.putExtra("fontFamily", fontFamily);
                 LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).sendBroadcast(intent);
               }
-            }, 50);
+            }, 100);
           }else{
             Intent intent = new Intent(ACTION_TYPE_FACE_AVAILABLE);
             intent.putExtra("fontFamily", fontFamily);