QQ浏览器 v12.2.3.7053版本的 MD5 值为:8285ab3059e5c8b521a264dfbc5c3685
以下内容为反编译后的 QuickAppUtil.java 源代码,内容仅作参考
package com.tencent.mtt.businesscenter.page;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.webkit.WebResourceResponse;
import android.widget.LinearLayout;
import com.huawei.hms.opendevice.i;
import com.huawei.hms.support.hianalytics.HiAnalyticsConstant;
import com.tencent.common.http.MttRequestBase;
import com.tencent.common.manifest.annotation.CreateMethod;
import com.tencent.common.manifest.annotation.ServiceImpl;
import com.tencent.common.task.QBTask;
import com.tencent.common.utils.UrlUtils;
import com.tencent.luggage.wxa.lk.g;
import com.tencent.mtt.ContextHolder;
import com.tencent.mtt.R;
import com.tencent.mtt.base.functionwindow.ActivityHandler;
import com.tencent.mtt.base.skin.MttResources;
import com.tencent.mtt.base.stat.StatManager;
import com.tencent.mtt.base.utils.DeviceUtils;
import com.tencent.mtt.base.webview.QBWebView;
import com.tencent.mtt.base.wup.DomainListDataManager;
import com.tencent.mtt.base.wup.PreferenceData;
import com.tencent.mtt.browser.WebEngine;
import com.tencent.mtt.browser.business.IQuickAppService;
import com.tencent.mtt.businesscenter.stat.WebPageStatHelper;
import com.tencent.mtt.operation.event.EventLog;
import com.tencent.mtt.setting.PublicSettingManager;
import com.tencent.mtt.view.common.QBImageView;
import com.tencent.mtt.view.common.QBTextView;
import com.tencent.mtt.view.dialog.alert.QBAlertDialog;
import com.tencent.mtt.view.dialog.alert.QBAlertDialogBase;
import com.tencent.mtt.view.layout.QBLinearLayout;
import com.tencent.mtt.view.toast.MttToaster;
import com.tencent.qqlive.module.videoreport.collect.EventCollector;
import com.tencent.smtt.export.external.MiscMethodNames;
import com.tencent.smtt.sdk.QbSdk;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.locks.LockSupport;
import org.json.JSONArray;
import org.json.JSONObject;
import qb.a.e;
import qb.a.f;
@ServiceImpl(createMethod = CreateMethod.GET, service = IQuickAppService.class)
public class QuickAppUtil implements IQuickAppService {
private static List<String> f47183a;
private static QBAlertDialog f47184b;
private static long f47185c;
private static boolean f47186d;
private static List<QuickAppBlackBean> e;
private static List<String> f;
public static class QuickAppBlackBean {
private String f47206a;
private List<String> f47207b;
private List<String> f47208c;
QuickAppBlackBean() {
}
public List<String> a() {
return this.f47207b;
}
public void a(String str) {
this.f47206a = str;
}
public List<String> b() {
return this.f47208c;
}
public void b(String str) {
if (this.f47207b == null) {
this.f47207b = new ArrayList();
}
this.f47207b.add(str);
}
public void c(String str) {
if (this.f47208c == null) {
this.f47208c = new ArrayList();
}
this.f47208c.add(str);
}
}
private static class SingletonInstance {
private static final QuickAppUtil f47209a = new QuickAppUtil();
private SingletonInstance() {
}
}
static {
String al = DeviceUtils.al();
String am = DeviceUtils.am();
if (al.toLowerCase().contains("ns") || al.contains("oneplus") || am.contains("oneplus")) {
f47186d = true;
}
}
private QuickAppUtil() {
}
static WebResourceResponse a(QBWebView qBWebView, String str) {
StringBuilder sb;
String str2;
String sb2;
if (TextUtils.equals(PublicSettingManager.a().getString("ANDROID_PUBLIC_PREFS_QUICK_APP_INTERCEPT_DISABLE", ""), "1")) {
sb2 = "云控关闭了此功能!";
} else {
if (QBBussinessProxy.h) {
EventLog.a("快应用", "当前是功能窗口在前台,不接受快应用调起!");
return new WebResourceResponse("text/css", "UTF-8", null);
}
HashMap<String, String> urlParam = UrlUtils.getUrlParam(str);
if (urlParam == null || urlParam.size() <= 0) {
return null;
}
final String str3 = urlParam.get(i.TAG);
final String host = UrlUtils.getHost(qBWebView.getUrl());
if (TextUtils.isEmpty(str3)) {
sb = new StringBuilder();
str2 = "没有取到包名,快应用 web:";
} else {
if (System.currentTimeMillis() - f47185c < 1000) {
EventLog.a("快应用", "1秒内频繁调用,直接拒绝,快应用 web:" + host + " ,包名:" + str3);
return new WebResourceResponse("text/css", "UTF-8", null);
}
f47185c = System.currentTimeMillis();
String str4 = Build.BRAND;
if (DeviceUtils.f33280b) {
str4 = "huawei";
} else if (DeviceUtils.i()) {
str4 = "xiaomi";
} else if (DeviceUtils.t) {
str4 = "vivo";
} else if (DeviceUtils.aC) {
str4 = "oppo";
} else if (DeviceUtils.n()) {
str4 = "meizu";
}
final String str5 = str4;
try {
Intent parseUri = Intent.parseUri("hap://app/" + str3, 1);
boolean z = (parseUri == null || ContextHolder.getAppContext().getPackageManager().resolveActivity(parseUri, 0) == null) ? false : true;
EventLog.a("快应用", "is installed : " + z);
if (!z) {
StatManager.b().c("EDQA001_7");
EventLog.a("快应用", "不支持的手机,快应用 web:" + host + " ,包名:" + str3);
return null;
}
} catch (Exception unused) {
}
if (TextUtils.equals(PreferenceData.a("QUICK_APP_BLOCK_BY_CLOUD_KEY"), "2")) {
EventLog.a("快应用", "云控禁止访问,快应用 web:" + host + " ,包名:" + str3 + " ,brand:" + str5);
WebPageStatHelper.getInstance().stat("web_0123");
return new WebResourceResponse("text/css", "UTF-8", null);
}
f();
if (!f47183a.contains(str3)) {
String string = PublicSettingManager.a().getString("key_quick_app_user_block_list", "");
if (!TextUtils.isEmpty(string) && string.contains(host)) {
StatManager.b().c("EDQA001_2");
MttToaster.show(R.string.b38, 0);
EventLog.a("快应用", "始终拦截,快应用 web:" + host + " ,包名:" + str3);
return new WebResourceResponse("text/css", "UTF-8", null);
}
g();
for (QuickAppBlackBean quickAppBlackBean : e) {
if (TextUtils.equals(quickAppBlackBean.f47206a, host) && a(quickAppBlackBean, qBWebView.getUrl())) {
return new WebResourceResponse("text/css", "UTF-8", null);
}
}
StatManager.b().c("EDQA001_1");
EventLog.a("快应用", "快应用 web:" + host + " ,包名:" + str3 + " ,brand:" + str5);
final int[] iArr = {0};
final Thread currentThread = Thread.currentThread();
QBTask.b((Callable) new Callable<Object>() {
@Override
public Object call() throws Exception {
QuickAppUtil.b(currentThread, host, str3, str5, iArr);
return null;
}
});
LockSupport.park(currentThread);
if (iArr[0] == 1) {
EventLog.a("快应用", "继续访问,快应用 web:" + host + " ,包名:" + str3 + " ,brand:" + str5);
return null;
}
EventLog.a("快应用", "禁止访问,快应用 web:" + host + " ,包名:" + str3 + " ,brand:" + str5);
return new WebResourceResponse("text/css", "UTF-8", null);
}
StatManager.b().c("EDQA001_6");
sb = new StringBuilder();
str2 = "白名单放行,快应用 web:";
}
sb.append(str2);
sb.append(host);
sb.append(" ,包名:");
sb.append(str3);
sb2 = sb.toString();
}
EventLog.a("快应用", sb2);
return null;
}
public static void a() {
PublicSettingManager.a().setString("key_quick_app_user_block_list", "");
}
private static boolean a(QuickAppBlackBean quickAppBlackBean, String str) {
String str2;
HashMap<String, String> urlParam = UrlUtils.getUrlParam(str);
if (urlParam == null || urlParam.size() == 0) {
return false;
}
List<String> a2 = quickAppBlackBean.a();
List<String> b2 = quickAppBlackBean.b();
Iterator<String> it = urlParam.keySet().iterator();
int i = 0;
while (true) {
if (it.hasNext()) {
String next = it.next();
if (a2.contains(next)) {
i++;
if (!TextUtils.equals(b2.get(a2.indexOf(next)), urlParam.get(next))) {
str2 = "黑名单键值对不匹配";
break;
}
}
} else {
if (i == a2.size()) {
EventLog.a("快应用", "在云控黑名单,直接拦截,不展示弹窗");
return true;
}
str2 = "没有匹配上足够的key";
}
}
EventLog.a("快应用", str2);
return false;
}
static ArrayList<String> b() {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("122.11.38.205/fastapprouter");
arrayList.add("thefatherofsalmon.com");
arrayList.add("fastappjump-drcn.hispace.hicloud.com/fastapprouter");
ArrayList<String> a2 = DomainListDataManager.a().a(g.CTRL_INDEX);
if (a2 != null) {
arrayList.addAll(a2);
}
return arrayList;
}
public static void b(String str, String str2, String str3) {
StatManager.b().c("EDQA001_5");
}
public static void b(final String str, String str2, String str3, final View.OnClickListener onClickListener) {
Activity a2 = ActivityHandler.b().a();
if (a2 == null || a2.isFinishing()) {
return;
}
final QBAlertDialog qBAlertDialog = new QBAlertDialog(a2, "始终拦截该网站打开快应用?", MttResources.l(R.string.nm), 2, MttResources.l(R.string.nl), 3, "", 0, QBAlertDialogBase.BackGroundStyle.WHITE_WITHOUT_HEADER, true, MttRequestBase.REQUEST_NORMAL, -1, null, false);
qBAlertDialog.a(MttResources.l(R.string.nn), false);
qBAlertDialog.a(new View.OnClickListener() {
@Override
public void onClick(View view) {
String str4;
String str5;
View.OnClickListener onClickListener2;
EventCollector.getInstance().onViewClickedBefore(view);
int id = view.getId();
if (id != 100) {
if (id == 101) {
str5 = "用户取消了始终拦截,domain:" + str;
}
onClickListener2 = onClickListener;
if (onClickListener2 != null) {
onClickListener2.onClick(view);
}
qBAlertDialog.dismiss();
EventCollector.getInstance().onViewClicked(view);
}
String string = PublicSettingManager.a().getString("key_quick_app_user_block_list", "");
if (TextUtils.isEmpty(string)) {
str4 = str;
} else {
str4 = string + HiAnalyticsConstant.REPORT_VAL_SEPARATOR + str;
}
PublicSettingManager.a().setString("key_quick_app_user_block_list", str4);
StatManager.b().c("EDQA001_3");
str5 = "用户选择了始终拦截,blockList:" + str4;
EventLog.a("快应用", str5);
onClickListener2 = onClickListener;
if (onClickListener2 != null) {
}
qBAlertDialog.dismiss();
EventCollector.getInstance().onViewClicked(view);
}
});
qBAlertDialog.show();
}
public static void b(final Thread thread, final String str, final String str2, final String str3, final int[] iArr) {
Activity a2 = ActivityHandler.b().a();
if (a2 == null || a2.isFinishing()) {
return;
}
QBAlertDialog qBAlertDialog = f47184b;
if (qBAlertDialog != null || (qBAlertDialog != null && qBAlertDialog.isShowing())) {
EventLog.a("快应用", "已经有弹窗出现,不再重复弹窗!");
return;
}
f47184b = new QBAlertDialog(a2, "允许网页打开快应用?", "取消", 1, "允许打开", 3, "", 0, QBAlertDialogBase.BackGroundStyle.WHITE_WITHOUT_HEADER, true, MttRequestBase.REQUEST_NORMAL, -1, null, false);
Context appContext = ContextHolder.getAppContext();
QBImageView qBImageView = new QBImageView(appContext);
qBImageView.setImageNormalIds(R.drawable.bai);
qBImageView.setUseMaskForNightMode(true);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(MttResources.s(20), MttResources.s(20));
layoutParams.gravity = 16;
qBImageView.setLayoutParams(layoutParams);
QBTextView qBTextView = new QBTextView(appContext);
qBTextView.setText(MttResources.l(R.string.nm));
qBTextView.setTextSize(MttResources.h(f.cQ));
qBTextView.setTextColor(MttResources.d(e.f85873b));
qBTextView.setIncludeFontPadding(false);
qBTextView.setGravity(17);
LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(-2, MttResources.s(30));
layoutParams2.gravity = 16;
qBTextView.setLayoutParams(layoutParams2);
QBLinearLayout qBLinearLayout = new QBLinearLayout(appContext);
qBLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(-1, MttResources.s(30)));
qBLinearLayout.setOrientation(0);
qBLinearLayout.setGravity(17);
qBLinearLayout.addView(qBTextView);
qBLinearLayout.addView(qBImageView);
qBLinearLayout.setId(R.id.quick_app_block_all_time);
qBLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventCollector.getInstance().onViewClickedBefore(view);
QuickAppUtil.b(str, str2, str3, new View.OnClickListener() {
@Override
public void onClick(View view2) {
EventCollector.getInstance().onViewClickedBefore(view2);
if (view2.getId() == 100) {
QuickAppUtil.f47184b.dismiss();
}
EventCollector.getInstance().onViewClicked(view2);
}
});
EventCollector.getInstance().onViewClicked(view);
}
});
f47184b.h(true);
f47184b.b(qBLinearLayout);
f47184b.a(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventCollector.getInstance().onViewClickedBefore(view);
int id = view.getId();
if (id == 100) {
QuickAppUtil.b(str2, str, str3);
iArr[0] = 2;
} else if (id == 101) {
StatManager.b().c("EDQA001_4");
iArr[0] = 1;
}
EventCollector.getInstance().onViewClicked(view);
}
});
f47184b.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
LockSupport.unpark(thread);
if (iArr[0] == 0) {
QuickAppUtil.b(str2, str, str3);
}
long unused = QuickAppUtil.f47185c = System.currentTimeMillis();
QBAlertDialog unused2 = QuickAppUtil.f47184b = null;
}
});
f47184b.show();
}
public static void c() {
if (WebEngine.e().g()) {
d();
} else {
WebEngine.e().a(new WebEngine.WebCoreStateObserver() {
@Override
public void onWebCorePrepared() {
QuickAppUtil.d();
WebEngine.e().b(this);
}
});
}
}
static void d() {
Bundle bundle = new Bundle();
bundle.putStringArrayList("rules", b());
EventLog.a("快应用", "setX5CoreQuickRule result:" + QbSdk.invokeX5CoreStaticMiscMethod(MiscMethodNames.MISC_METHOD_SET_REDIRECT_REQUIRES_LOADER_RESTART_RULES, bundle));
}
private static void f() {
if (f47183a == null) {
f47183a = DomainListDataManager.a().a(413);
if (f47183a == null) {
f47183a = new ArrayList();
}
}
}
private static void g() {
QuickAppBlackBean quickAppBlackBean;
JSONArray jSONArray;
JSONArray jSONArray2;
ArrayList<String> a2 = DomainListDataManager.a().a(420);
if (e == null) {
e = new ArrayList();
for (String str : a2) {
try {
quickAppBlackBean = new QuickAppBlackBean();
JSONObject jSONObject = new JSONObject(str);
quickAppBlackBean.a(jSONObject.getString("site"));
jSONArray = jSONObject.getJSONArray("keyList");
jSONArray2 = jSONObject.getJSONArray("valueList");
} catch (Exception unused) {
}
if (jSONArray.length() != jSONArray2.length()) {
return;
}
for (int i = 0; i < jSONArray.length(); i++) {
quickAppBlackBean.b(jSONArray.getString(i));
quickAppBlackBean.c(jSONArray2.getString(i));
}
e.add(quickAppBlackBean);
}
}
}
public static QuickAppUtil getInstance() {
return SingletonInstance.f47209a;
}
@Override
public WebResourceResponse isInterceptQuickAoo(QBWebView qBWebView, String str) {
if (qBWebView == null || TextUtils.isEmpty(str) || f47186d) {
return null;
}
if (DeviceUtils.n() && Build.VERSION.SDK_INT < 26) {
return null;
}
if (f == null) {
f = b();
}
Iterator<String> it = f.iterator();
while (it.hasNext()) {
if (str.contains(it.next())) {
return a(qBWebView, str);
}
}
return null;
}
}