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);