Video Downloader for FB v3.5.1版本的 MD5 值为:1db7d4aa9fc4356831f5521f52585a52
以下内容为反编译后的 j.java 源代码,内容仅作参考
package com.moat.analytics.mobile.vng;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.webkit.ValueCallback;
import android.webkit.WebView;
import com.appodeal.ads.utils.LogConstants;
import com.ironsource.environment.TokenConstants;
import com.moat.analytics.mobile.vng.s;
import com.moat.analytics.mobile.vng.w;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import org.json.JSONObject;
public class j {
private final WeakReference<WebView> h;
private final a n;
private int f2439a = 0;
private boolean b = false;
private boolean c = false;
private final AtomicBoolean d = new AtomicBoolean(false);
private boolean e = false;
private boolean f = false;
private boolean g = false;
private final BroadcastReceiver o = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
j.this.d();
} catch (Exception e) {
n.a(e);
}
if (System.currentTimeMillis() - j.this.k > 30000) {
j.this.i();
}
}
};
private final BroadcastReceiver p = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
j.this.e();
} catch (Exception e) {
n.a(e);
}
}
};
private final LinkedList<String> j = new LinkedList<>();
private final List<String> m = new ArrayList();
private final Map<b, String> i = new WeakHashMap();
private final long k = System.currentTimeMillis();
private final String l = String.format("javascript:(function(d,k){function l(){function d(a,b){var c=ipkn[b]||ipkn[kuea];if(c){var h=function(b){var c=b.b;c.ts=b.i;c.ticks=b.g;c.buffered=!0;a(c)};h(c.first);c.a.forEach(function(a){h(a)})}}function e(a){var b=a.a,c=a.c,h=a.b;a=a.f;var d=[];if(c)b[c]&&d.push(b[c].fn[0]);else for(key in b)if(b[key])for(var g=0,e=b[key].fn.length;g<e;g++)d.push(b[key].fn[g]);g=0;for(e=d.length;g<e;g++){var f=d[g];if('function'===typeof f)try{h?f(h):f()}catch(k){}a&&delete b[c]}}function f(a,b,c){'function'===typeof a&& (b===kuea&&c[b]?c[b].fn.push(a):c[b]={ts:+new Date,fn:[a]},c===yhgt&&d(a,b))}kuea=+new Date;iymv={};briz=!1;ewat=+new Date;bnkr=[];bjmk={};dptk={};uqaj={};ryup={};yhgt={};ipkn={};csif={};this.h=function(a){this.namespace=a.namespace;this.version=a.version;this.appName=a.appName;this.deviceOS=a.deviceOS;this.isNative=a.isNative;this.versionHash=a.versionHash;this.aqzx=a.aqzx;this.appId=a.appId;this.metadata=a};this.nvsj=function(a){briz||(f(a,ewat,iymv),briz=!0)};this.bpsy=function(a,b){var c=b||kuea; c!==kuea&&bjmk[c]||f(a,c,bjmk)};this.qmrv=function(a,b){var c=b||kuea;c!==kuea&&uqaj[c]||f(a,c,uqaj)};this.lgpr=function(a,b){f(a,b||kuea,yhgt)};this.hgen=function(a,b){f(a,b||kuea,csif)};this.xrnk=function(a){delete yhgt[a||kuea]};this.vgft=function(a){return dptk[a||kuea]||!1};this.lkpu=function(a){return ryup[a||kuea]||!1};this.crts=function(a){var b={a:iymv,b:a,c:ewat};briz?e(b):bnkr.push(a)};this.mqjh=function(a){var b=a||kuea;dptk[b]=!0;var c={a:bjmk,f:!0};b!==kuea&&(c.b=a,c.c=a);e(c)};this.egpw= function(a){var b=a||kuea;ryup[b]=!0;var c={a:uqaj,f:!0};b!==kuea&&(c.b=a,c.c=a);e(c)};this.sglu=function(a){var b=a.adKey||kuea,c={a:yhgt,b:a.event||a,g:1,i:+new Date,f:!1};b!==kuea&&(c.c=a.adKey);a=0<Object.keys(yhgt).length;if(!a||!this.isNative)if(ipkn[b]){var d=ipkn[b].a.slice(-1)[0]||ipkn[b].first;JSON.stringify(c.b)==JSON.stringify(d.b)?d.g+=1:(5<=ipkn[b].a.length&&ipkn[b].a.shift(),ipkn[b].a.push(c))}else ipkn[b]={first:c,a:[]};a&&e(c);return a};this.ucbx=function(a){e({c:a.adKey||kuea,a:csif, b:a.event,f:!1})}}'undefined'===typeof d.MoatMAK&&(d.MoatMAK=new l,d.MoatMAK.h(k),d.__zMoatInit__=!0)})(window,%s);", h());
public enum a {
WEBVIEW,
NATIVE_DISPLAY,
NATIVE_VIDEO
}
public j(WebView webView, a aVar) {
this.h = new WeakReference<>(webView);
this.n = aVar;
if (d(LogConstants.EVENT_INITIALIZE)) {
IntentFilter intentFilter = new IntentFilter("UPDATE_METADATA");
IntentFilter intentFilter2 = new IntentFilter("UPDATE_VIEW_INFO");
i.a().a(s.b(), this.o, intentFilter);
i.a().a(s.b(), this.p, intentFilter2);
d();
i.a().a(s.b(), this);
p.a(3, "JavaScriptBridge", this, "bridge initialization succeeded");
}
}
private boolean a(WebView webView) {
return webView.getSettings().getJavaScriptEnabled();
}
static int b(j jVar) {
int i = jVar.f2439a;
jVar.f2439a = i + 1;
return i;
}
private void c() {
Iterator<Map.Entry<b, String>> it = this.i.entrySet().iterator();
while (it.hasNext()) {
b key = it.next().getKey();
if (key.e()) {
g(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.mqjh(\"%s\");}", key.e));
}
}
}
public void d() {
try {
if (w.a().f2457a == w.d.OFF) {
return;
}
if (!this.c) {
p.a(3, "JavaScriptBridge", this, "Attempting to establish communication (setting environment variables).");
this.c = true;
}
g(this.l);
} catch (Exception e) {
p.a("JavaScriptBridge", this, "Attempt failed to establish communication (did not set environment variables).", e);
}
}
private void d(b bVar) {
p.a(3, "JavaScriptBridge", this, "Stopping view update loop");
if (bVar != null) {
i.a().a(bVar);
}
}
private boolean d(String str) {
WebView g = g();
if (g == null) {
p.a(6, "JavaScriptBridge", this, "WebView is null. Can't " + str);
throw new n("WebView is null");
}
if (a(g)) {
return true;
}
p.a(6, "JavaScriptBridge", this, "JavaScript is not enabled in the given WebView. Can't " + str);
throw new n("JavaScript is not enabled in the WebView");
}
public void e() {
try {
if (w.a().f2457a == w.d.OFF) {
return;
}
if (this.g) {
p.a(3, "JavaScriptBridge", this, "Can't send info, already cleaned up");
return;
}
if (f() && (!this.b || g().getUrl() != null)) {
if (g().getUrl() != null) {
this.b = true;
}
Iterator<Map.Entry<b, String>> it = this.i.entrySet().iterator();
while (it.hasNext()) {
b key = it.next().getKey();
if (key == null || key.f() == null) {
p.a(3, "JavaScriptBridge", this, "Tracker has no subject");
if (key != null && key.f) {
}
c(key);
}
if (key.e()) {
if (!this.d.get()) {
g(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.mqjh(\"%s\");}", key.e));
}
String format = String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.sglu(%s);}", key.h());
if (Build.VERSION.SDK_INT >= 19) {
g().evaluateJavascript(format, new ValueCallback<String>() {
@Override
public void onReceiveValue(String str) {
String str2 = "null";
if (str != null && !str.equalsIgnoreCase("null") && !str.equalsIgnoreCase("false")) {
if (str.equalsIgnoreCase("true")) {
if (!j.this.f) {
j.this.f = true;
p.a(3, "JavaScriptBridge", j.this, "Javascript has found ad");
j.this.a();
}
j.this.f2439a = 0;
return;
}
p.a(3, "JavaScriptBridge", j.this, "Received unusual value from Javascript:" + str);
return;
}
j jVar = j.this;
StringBuilder sb = new StringBuilder();
sb.append("Received value is:");
if (str != null) {
str2 = "(String)" + str;
}
sb.append(str2);
p.a(3, "JavaScriptBridge", jVar, sb.toString());
if (j.this.f2439a >= 150) {
p.a(3, "JavaScriptBridge", j.this, "Giving up on finding ad");
j.this.b();
}
j.b(j.this);
if (str == null || !str.equalsIgnoreCase("false") || j.this.e) {
return;
}
j.this.e = true;
p.a(3, "JavaScriptBridge", j.this, "Bridge connection established");
}
});
} else {
g().loadUrl(format);
}
}
}
return;
}
StringBuilder sb = new StringBuilder();
sb.append("WebView became null");
sb.append(g() == null ? "" : "based on null url");
sb.append(", stopping tracking loop");
p.a(3, "JavaScriptBridge", this, sb.toString());
b();
} catch (Exception e) {
n.a(e);
b();
}
}
private void e(String str) {
if (this.m.size() >= 50) {
this.m.subList(0, 25).clear();
}
this.m.add(str);
}
private void f(String str) {
if (this.d.get()) {
g(str);
} else {
e(str);
}
}
private boolean f() {
return g() != null;
}
private WebView g() {
return this.h.get();
}
private void g(String str) {
if (this.g) {
p.a(3, "JavaScriptBridge", this, "Can't send, already cleaned up");
return;
}
if (f()) {
p.b(2, "JavaScriptBridge", this, str);
if (Build.VERSION.SDK_INT >= 19) {
g().evaluateJavascript(str, null);
} else {
g().loadUrl(str);
}
}
}
private String h() {
try {
s.a c = s.c();
s.b d = s.d();
HashMap hashMap = new HashMap();
String a2 = c.a();
String b = c.b();
String c2 = c.c();
String num = Integer.toString(Build.VERSION.SDK_INT);
String a3 = s.a();
String str = this.n == a.WEBVIEW ? "0" : "1";
String str2 = d.e ? "1" : "0";
String str3 = d.d ? "1" : "0";
hashMap.put("versionHash", "fe5b19d82fecca4c1d668e2e40e2636224135a71");
hashMap.put("appName", a2);
hashMap.put("namespace", "VNG");
hashMap.put("version", "2.6.3");
hashMap.put(TokenConstants.DEVICE_OS, num);
hashMap.put("isNative", str);
hashMap.put("appId", b);
hashMap.put("source", c2);
hashMap.put("carrier", d.b);
hashMap.put("sim", d.f2456a);
hashMap.put("phone", String.valueOf(d.c));
hashMap.put("buildFp", Build.FINGERPRINT);
hashMap.put("buildModel", Build.MODEL);
hashMap.put("buildMfg", Build.MANUFACTURER);
hashMap.put("buildBrand", Build.BRAND);
hashMap.put("buildProduct", Build.PRODUCT);
hashMap.put("buildTags", Build.TAGS);
hashMap.put("f1", str3);
hashMap.put("f2", str2);
if (a3 != null) {
hashMap.put("aqzx", a3);
}
return new JSONObject(hashMap).toString();
} catch (Exception unused) {
return "{}";
}
}
public void i() {
p.a(3, "JavaScriptBridge", this, "Stopping metadata reporting loop");
i.a().a(this);
i.a().a(s.b(), this.o);
}
public void a() {
p.a(3, "JavaScriptBridge", this, "webViewReady");
if (this.d.compareAndSet(false, true)) {
p.a(3, "JavaScriptBridge", this, "webViewReady first time");
i();
Iterator<String> it = this.m.iterator();
while (it.hasNext()) {
g(it.next());
}
this.m.clear();
}
c();
}
public void a(b bVar) {
if (bVar != null) {
p.a(3, "JavaScriptBridge", this, "adding tracker" + bVar.e);
this.i.put(bVar, "");
}
}
public void a(String str) {
f(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.crts(%s);}", str));
}
public void a(String str, JSONObject jSONObject) {
if (this.g) {
p.a(3, "JavaScriptBridge", this, "Can't dispatch, already cleaned up");
return;
}
String jSONObject2 = jSONObject.toString();
if (this.d.get() && f()) {
g(String.format("javascript:%s.dispatchEvent(%s);", str, jSONObject2));
} else {
this.j.add(jSONObject2);
}
}
public void b() {
p.a(3, "JavaScriptBridge", this, "Cleaning up");
this.g = true;
i();
Iterator<Map.Entry<b, String>> it = this.i.entrySet().iterator();
while (it.hasNext()) {
d(it.next().getKey());
}
this.i.clear();
i.a().a(s.b(), this.p);
}
public void b(b bVar) {
if (d("startTracking")) {
p.a(3, "JavaScriptBridge", this, "Starting tracking on tracker" + bVar.e);
g(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.mqjh(\"%s\");}", bVar.e));
i.a().a(s.b(), bVar);
}
}
public void b(String str) {
p.a(3, "JavaScriptBridge", this, "markUserInteractionEvent:" + str);
f(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.ucbx(%s);}", str));
}
public void c(b bVar) {
n nVar = null;
if (!this.g) {
try {
if (d("stopTracking")) {
try {
p.a(3, "JavaScriptBridge", this, "Ending tracking on tracker" + bVar.e);
g(String.format("javascript: if(typeof MoatMAK !== 'undefined'){MoatMAK.egpw(\"%s\");}", bVar.e));
} catch (Exception e) {
p.a("JavaScriptBridge", this, "Failed to end impression.", e);
}
}
} catch (n e2) {
nVar = e2;
}
if (this.n == a.NATIVE_DISPLAY) {
d(bVar);
} else {
b();
}
this.i.remove(bVar);
}
if (nVar != null) {
throw nVar;
}
}
public void c(String str) {
p.a(3, "JavaScriptBridge", this, "flushDispatchQueue");
if (this.j.size() >= 200) {
LinkedList linkedList = new LinkedList();
for (int i = 0; i < 10; i++) {
linkedList.addFirst(this.j.removeFirst());
}
int min = Math.min(Math.min(this.j.size() / 200, 10) + 200, this.j.size());
for (int i2 = 0; i2 < min; i2++) {
this.j.removeFirst();
}
Iterator it = linkedList.iterator();
while (it.hasNext()) {
this.j.addFirst((String) it.next());
}
}
if (!this.j.isEmpty()) {
StringBuilder sb = new StringBuilder();
String str2 = "";
int i3 = 1;
while (!this.j.isEmpty() && i3 < 200) {
i3++;
String removeFirst = this.j.removeFirst();
if (sb.length() + removeFirst.length() > 2000) {
break;
}
sb.append(str2);
sb.append(removeFirst);
str2 = ",";
}
g(String.format("javascript:%s.dispatchMany([%s])", str, sb.toString()));
}
this.j.clear();
}
protected void finalize() {
try {
super.finalize();
p.a(3, "JavaScriptBridge", this, "finalize");
b();
} catch (Exception e) {
n.a(e);
}
}
}