Idle Egg Factory v2.1.5版本的 MD5 值为:7d2ba6677008ca521af0101bb927d72a

以下内容为反编译后的 h.java 源代码,内容仅作参考


package com.safedk.android.analytics.brandsafety;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.mbridge.msdk.playercommon.exoplayer2.source.chunk.ChunkedTrackBlacklistUtil;
import com.safedk.android.SafeDK;
import com.safedk.android.analytics.reporters.CrashReporter;
import com.safedk.android.utils.Logger;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Pattern;

public class h implements com.safedk.android.internal.a {

    private static final String f6841a = "ClickUrlsManager";
    private static final int c = 2;
    private static final String d = "original_url";
    private static final String e = "resolved_url";
    private static final String f = "fingerprint";
    private static final String g = "package";
    private static final String h = "https://play.google.com/store/apps/details?id=%s";
    private static h i;
    private static final Pattern b = Pattern.compile("[0-9]{2,3}\\.[0-9]{2,3}\\.[0-9]{2,3}\\.[0-9]{2,3}");
    private static final Object o = new Object();
    private static AtomicBoolean p = new AtomicBoolean();
    private static final ScheduledExecutorService q = Executors.newScheduledThreadPool(0);
    private String j = null;
    private String k = null;
    private AtomicBoolean m = new AtomicBoolean(false);
    private AtomicInteger n = new AtomicInteger(0);
    private Set<String> l = new HashSet();

    private h() {
        com.safedk.android.internal.b.getInstance().registerBackgroundForegroundListener(this);
    }

    public static h a() {
        h hVar;
        synchronized (o) {
            if (i == null) {
                i = new h();
            }
            hVar = i;
        }
        return hVar;
    }

    public static void a(boolean z) {
        synchronized (o) {
            Logger.d(f6841a, "setActiveMode to " + z);
            i = null;
        }
    }

    public synchronized void b(String str, String str2) {
        if (this.j == null && !this.l.contains(str)) {
            Logger.d(f6841a, "logging url: " + str + ", fingerprint: " + str2);
            this.j = str;
            this.k = str2;
            if (TextUtils.isEmpty(this.k)) {
                this.k = str;
            }
        }
    }

    public static String a(String str) {
        return com.safedk.android.utils.j.t(str) ? com.safedk.android.utils.j.v(str) : b(str);
    }

    public static String b(String str) {
        try {
            URI uri = new URI(URLEncoder.encode(str, "UTF-8"));
            String query = uri.getQuery();
            if (!TextUtils.isEmpty(query)) {
                String str2 = "";
                String[] split = query.split("&");
                for (String str3 : split) {
                    if (!b.matcher(str3).find()) {
                        if (str2.length() > 0) {
                            str2 = str2 + "&";
                        }
                        str2 = str2 + str3;
                    }
                }
                return new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), str2, uri.getFragment()).toString();
            }
            return str;
        } catch (Throwable th) {
            Logger.w(f6841a, "Unable to clean url: " + th.getMessage());
            return str;
        }
    }

    public static String c(String str) {
        return String.format(Locale.ENGLISH, h, str);
    }

    public synchronized String b() {
        return this.k;
    }

    @Override
    public synchronized void g() {
        p.set(true);
    }

    @Override
    public synchronized void h() {
        String str;
        String str2;
        Logger.d(f6841a, "onForeground started");
        p.set(false);
        if (this.m.get()) {
            if (this.n.getAndIncrement() <= 2) {
                synchronized (i) {
                    if (this.j != null) {
                        String str3 = this.j;
                        str = this.k;
                        str2 = str3;
                    } else {
                        str = null;
                        str2 = null;
                    }
                }
                d(str2, str);
            } else {
                Logger.d(f6841a, "Exhausted2 attempts to resolve URL. Clearing the slot.");
                d();
            }
        }
    }

    private void d() {
        synchronized (i) {
            if (this.j != null) {
                String str = this.j;
                this.j = null;
                this.k = null;
                this.l.add(str);
                this.m.set(false);
                this.n.set(0);
            }
        }
    }

    private void c(String str, String str2) {
        if (str != null) {
            try {
                com.safedk.android.a.e eVar = new com.safedk.android.a.e(new URL(str).openConnection());
                eVar.c(true);
                eVar.a(SafeDK.getInstance().F());
                eVar.b();
                URL c2 = eVar.c();
                a(str, c2 != null ? c2.toString() : null, str2, false);
            } catch (MalformedURLException e2) {
                Logger.d(f6841a, "Malformed URL", e2);
            } catch (IOException e3) {
                Logger.d(f6841a, "Error opening connection", e3);
            } catch (Throwable th) {
                Logger.d(f6841a, "Throwable Error opening connection", th);
            }
        }
    }

    public void a(String str, final String str2) {
        Logger.d(f6841a, "resolve Url started, url = " + str + ", fingerprint = " + str2);
        final String B = com.safedk.android.utils.j.B(str);
        if (com.safedk.android.utils.j.t(B)) {
            a(B, com.safedk.android.utils.j.u(B), str2, false);
        } else {
            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (h.p.get()) {
                        h.this.b(B, str2);
                        h.this.m.set(true);
                        Logger.d(h.f6841a, "server asked to resolve but currently in background.");
                    } else {
                        Logger.d(h.f6841a, "not currently in background, try to resolve.");
                        h.this.d(B, str2);
                    }
                }
            }, 500L);
        }
    }

    public void d(String str, String str2) {
        Logger.d(f6841a, "resolveUrlInternal starting Url resolution. url = " + str);
        final AtomicBoolean atomicBoolean = new AtomicBoolean(false);
        final WebView webView = new WebView(SafeDK.getInstance().h());
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if (atomicBoolean.get()) {
                    Logger.d(h.f6841a, "Url resolved. no timeout.");
                } else {
                    webView.post(new Runnable() {
                        @Override
                        public void run() {
                            Logger.d(h.f6841a, "Timeout resolving url");
                            webView.stopLoading();
                        }
                    });
                }
            }
        };
        AtomicLong atomicLong = new AtomicLong(0L);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new AnonymousClass3(str, atomicBoolean, str2));
        atomicLong.set(System.currentTimeMillis());
        webView.loadUrl(str);
        Logger.d(f6841a, "Starting resolution, timeout = " + SafeDK.getInstance().F());
        q.schedule(runnable, SafeDK.getInstance().F(), TimeUnit.MILLISECONDS);
    }

    public class AnonymousClass3 extends WebViewClient {

        AtomicInteger f6845a = new AtomicInteger(0);
        final String b;
        final AtomicBoolean c;
        final String d;

        AnonymousClass3(String str, AtomicBoolean atomicBoolean, String str2) {
            this.b = str;
            this.c = atomicBoolean;
            this.d = str2;
        }

        @Override
        public void onPageStarted(WebView view, final String url, Bitmap favicon) {
            final int incrementAndGet = this.f6845a.incrementAndGet();
            Logger.d(h.f6841a, "onPageStarted started. callbackCounter=" + incrementAndGet + ", url= " + url);
            if (!url.equals(this.b)) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (AnonymousClass3.this.f6845a.get() == incrementAndGet) {
                            Logger.d(h.f6841a, "onPageFinished never called, assuming last onPageStarted is the landing page.");
                            Logger.d(h.f6841a, "Landing page detected: " + url);
                            AnonymousClass3.this.c.set(true);
                            h.this.a(AnonymousClass3.this.b, url, AnonymousClass3.this.d, true);
                            return;
                        }
                        Logger.d(h.f6841a, "onPageStarted resolveCounter.get() is not equal to callbackCounter. resolveCounter.get()=" + AnonymousClass3.this.f6845a.get() + ", callbackCounter=" + incrementAndGet);
                    }
                }, ChunkedTrackBlacklistUtil.DEFAULT_TRACK_BLACKLIST_MS);
            }
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, final String url) {
            final int incrementAndGet = this.f6845a.incrementAndGet();
            Logger.d(h.f6841a, "onPageFinished started. callbackCounter=" + incrementAndGet + ", url= " + url);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (AnonymousClass3.this.f6845a.get() == incrementAndGet) {
                        Logger.d(h.f6841a, "Landing page detected: " + url);
                        AnonymousClass3.this.c.set(true);
                        h.this.a(AnonymousClass3.this.b, url, AnonymousClass3.this.d, true);
                        return;
                    }
                    Logger.d(h.f6841a, "onPageFinished resolveCounter.get() is not equal to callbackCounter. resolveCounter.get()=" + AnonymousClass3.this.f6845a.get() + ", callbackCounter=" + incrementAndGet);
                }
            }, 5000L);
            super.onPageFinished(view, url);
        }
    }

    public void a(String str, String str2, String str3, boolean z) {
        try {
            Logger.d(f6841a, "reportResolvedUrlToServer started. originalUrl=" + str + ", resolvedUrl=" + str2 + ", fingerprint=" + str3);
            d();
            if (z && com.safedk.android.utils.j.t(str2)) {
                str2 = com.safedk.android.utils.j.u(a(str2));
            }
            Bundle bundle = new Bundle();
            bundle.putString(d, str);
            bundle.putString(e, str2);
            bundle.putString("fingerprint", str3);
            bundle.putString("package", SafeDK.getInstance().h().getPackageName());
            f.a(bundle);
        } catch (Throwable th) {
            Logger.d(f6841a, "Failed to report url resolve to server");
            new CrashReporter().caughtException(th);
        }
    }
}