Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[Android] white_screen check ignore unvisible view (alpha unvisible) (#…
Browse files Browse the repository at this point in the history
…2788)

[Android] sort wx state by time
  • Loading branch information
lucky-chen authored and YorkShen committed Aug 7, 2019
1 parent b333c98 commit 5862717
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.taobao.weex.common.WXModule;
import com.taobao.weex.common.WXRequest;
import com.taobao.weex.common.WXResponse;
import com.taobao.weex.performance.WXStateRecord;
import com.taobao.weex.utils.WXLogUtils;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
Expand Down Expand Up @@ -130,7 +131,7 @@ public void fetch(JSONObject optionsObj , final JSCallback callback, JSCallback
fetch(optionsObj, callback, progressCallback, mWXSDKInstance.getInstanceId(), mWXSDKInstance.getBundleUrl());
}

public void fetch(JSONObject optionsObj , final JSCallback callback, JSCallback progressCallback, String instanceId, String bundleURL){
public void fetch(JSONObject optionsObj , final JSCallback callback, JSCallback progressCallback, final String instanceId, String bundleURL){
boolean invaildOption = optionsObj==null || optionsObj.getString("url")==null;
if(invaildOption){
if(callback != null) {
Expand Down Expand Up @@ -202,6 +203,7 @@ public void onResponse(WXResponse response, Map<String, String> headers) {
resp.put(STATUS_TEXT, Status.getStatusText(response.statusCode));
}
resp.put("headers", headers);
WXStateRecord.getInstance().recordAction(instanceId,"stream response code:"+(null!= response?response.statusCode:"null"));
callback.invoke(resp);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,13 @@
package com.taobao.weex.performance;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import android.support.annotation.NonNull;
import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.ui.IFComponentHolder;
import com.taobao.weex.utils.WXUtils;
Expand Down Expand Up @@ -103,13 +107,21 @@ public void onJSCCrash() {

public Map<String, String> getStateInfo() {
Map<String, String> stateInfo = new HashMap<>(5);
stateInfo.put("exceptionHistory", mExceptionHistory.toString());
stateInfo.put("actionHistory", mActionHistory.toString());
stateInfo.put("jsfmInitHistory", mJsfmInitHistory.toString());
stateInfo.put("jscCrashHistory", mJscCrashHistory.toString());
stateInfo.put("jscReloadHistory", mJscReloadHistory.toString());
stateInfo.put("jsThreadWatch", mJsThradWatchHistory.toString());
stateInfo.put("reInitCount", String.valueOf(WXBridgeManager.reInitCount));

int size = mExceptionHistory.size()+mActionHistory.size()+mJsfmInitHistory.size()
+mJscCrashHistory.size()+mJscReloadHistory.size()+mJsThradWatchHistory.size();

List<Info> reportTimeLineInfo = new RecordList<>(size);
reportTimeLineInfo.addAll(mExceptionHistory);
reportTimeLineInfo.addAll(mActionHistory);
reportTimeLineInfo.addAll(mJsfmInitHistory);
reportTimeLineInfo.addAll(mJscCrashHistory);
reportTimeLineInfo.addAll(mJscReloadHistory);
reportTimeLineInfo.addAll(mJsThradWatchHistory);
Collections.sort(reportTimeLineInfo);
stateInfo.put("stateInfoList",reportTimeLineInfo.toString());

return stateInfo;
}

Expand Down Expand Up @@ -140,7 +152,7 @@ public String toString() {
}
}

private static class Info {
private static class Info implements Comparable<Info>{
private long time;
private String instanceId;
private String msg;
Expand All @@ -157,6 +169,14 @@ public String toString() {
.append(instanceId).append(',').append(time).append(',').append(msg)
.toString();
}

@Override
public int compareTo(@NonNull Info next) {
if (this.time == next.time){
return 0;
}
return this.time > next.time? 1:-1;
}
}

public void startJSThreadWatchDog(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.adapter.IWXConfigAdapter;
import com.taobao.weex.ui.IFComponentHolder;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
import com.taobao.weex.utils.WXViewUtils;
import org.json.JSONObject;

/**
Expand Down Expand Up @@ -59,6 +61,10 @@ public static boolean isWhiteScreen(WXSDKInstance instance) {
if (!(v instanceof ViewGroup)) {
return false;
}

if (!WXViewUtils.isViewVisible(v) || !checkParentVisible(v.getParent())){
return false;
}
if (isInWhiteList(instance)){
return false;
}
Expand Down Expand Up @@ -88,6 +94,19 @@ private static boolean isInWhiteList(WXSDKInstance instance){
return false;
}

private static boolean checkParentVisible(ViewParent parent){
//root view getParent is null
if (!(parent instanceof View)){
return true;
}
View vp = (View)parent;
boolean visible = vp.getVisibility() == View.VISIBLE && vp.getAlpha()>0;
if (!visible){
return false;
}
return checkParentVisible(vp.getParent());
}

private static boolean hasLeafViewOrSizeIgnore(View v,int checkDeep) {

if (!(v instanceof ViewGroup)) {
Expand Down
38 changes: 38 additions & 0 deletions android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
Expand Down Expand Up @@ -557,4 +561,38 @@ private static boolean clipCanvasIfBackgroundImageExist(@NonNull Widget widget,
}
return true;
}

public static boolean isViewVisible(View v) {
if (null == v){
return false;
}

boolean isAttachToWindow = Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT
?v.isAttachedToWindow()
:v.getWindowToken() != null;

if (!isAttachToWindow){
return false;
}
if (v.getVisibility() != View.VISIBLE || v.getAlpha()<=0){
return false;
}

Drawable bacDrawable = v.getBackground();
if (null == bacDrawable){
return true;
}
if (Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT){
return bacDrawable.getAlpha()>0;
}
//< 4.4
if (bacDrawable instanceof ColorDrawable){
int alpha = Color.alpha(((ColorDrawable) bacDrawable).getColor());
return alpha >0;
}else if (bacDrawable instanceof BitmapDrawable){
Paint paint = ((BitmapDrawable) bacDrawable).getPaint();
return paint.getAlpha() > 0;
}
return true;
}
}

0 comments on commit 5862717

Please sign in to comment.