my follower v1.0版本的 MD5 值为:a6c33a154f0b0a15fabfd7267ad5288a

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


package com.startapp.networkTest.startapp;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Looper;
import com.startapp.common.b.b;
import com.startapp.common.jobrunner.RunnerRequest;
import com.startapp.common.jobrunner.interfaces.RunnerJob;
import com.startapp.networkTest.c;
import com.startapp.networkTest.d.a.e;
import com.startapp.networkTest.results.ConnectivityTestResult;
import com.startapp.networkTest.results.LatencyResult;
import com.startapp.networkTest.startapp.CoverageMapperManager;

public final class NetworkTester {
    private static final String CTLT_CHECK_INTERVAL_KEY = "StartappCtLtCheckIntervalKey";
    private static final String CTLT_GUARD_DIFF_KEY = "StartappGuardDiffKey";
    private static final int CTLT_JOB_ID = 1156916329;
    private static final String CTLT_PREV_TIME_CHECK_KEY = "StartappCtLtPrevTimeCheckKey";
    private static final String P3WRAPPER_PREFS = "StartappP3WrapperPrefs";
    static final String TAG = b.a((Class<?>) NetworkTester.class);
    static NetworkTester sInstance;
    Thread mActiveThread;
    ConnectivityTestListener mConnectivityTestListener;
    private Context mContext;
    CoverageMapperManager mCoverageMapper;

    public static final class Config {
        public String PROJECT_ID = "20050";
        public String CONNECTIVITY_TEST_HOSTNAME = "d2to8y50b3n6dq.cloudfront.net";
        public String CONNECTIVITY_TEST_FILENAME = "/favicon.ico";
        public boolean CONNECTIVITY_TEST_ENABLED = true;
        public boolean NIR_COLLECT_CELLINFO = true;
        public boolean CT_COLLECT_CELLINFO = true;
        public int NIR_COLLECT_CELLINFO_THRESHOLD = 2;
        public String CONNECTIVITY_TEST_CDNCONFIG_URL = "https://d2to8y50b3n6dq.cloudfront.net/truststores/[PROJECTID]/cdnconfig.zip";
        public String GEOIP_URL = "https://geoip.api.c0nnectthed0ts.com/geoip/";
    }

    private NetworkTester() {
    }

    public static void init(Context context, Config config) {
        if (context == null) {
            throw new IllegalArgumentException("context is null");
        }
        if (config == null) {
            throw new IllegalArgumentException("config is null");
        }
        String b = com.iab.omid.library.startapp.b.b(config);
        if (b == null) {
            throw new IllegalArgumentException("Wrong format of config");
        }
        if (sInstance == null) {
            com.startapp.common.jobrunner.a.a(context).a();
            com.startapp.common.jobrunner.a.a(new a((byte) 0));
            NetworkTester networkTester = new NetworkTester();
            sInstance = networkTester;
            networkTester.mContext = context;
            c.a(context, b.getBytes());
            sInstance.mCoverageMapper = new CoverageMapperManager(context);
        }
    }

    public static void setOnConnectivityLatencyListener(ConnectivityTestListener connectivityTestListener) {
        sInstance.mConnectivityTestListener = connectivityTestListener;
    }

    public static void setOnNetworkInfoListener(CoverageMapperManager.OnNetworkInfoResultListener onNetworkInfoResultListener) {
        sInstance.mCoverageMapper.a(onNetworkInfoResultListener);
    }

    public static void startListening(long j, long j2) {
        SharedPreferences sharedPreferences = sInstance.mContext.getSharedPreferences(P3WRAPPER_PREFS, 0);
        sharedPreferences.edit().putLong(CTLT_CHECK_INTERVAL_KEY, j).commit();
        sharedPreferences.edit().putLong(CTLT_GUARD_DIFF_KEY, j2).commit();
        com.startapp.common.jobrunner.a.a(new RunnerRequest.a(CTLT_JOB_ID).a(j).a().a(true).b());
        sInstance.mCoverageMapper.a();
    }

    public static void stopListening() {
        com.startapp.common.jobrunner.a.a(CTLT_JOB_ID, true);
        if (sInstance != null && sInstance.mCoverageMapper != null) {
            sInstance.mCoverageMapper.b();
        }
    }

    static final class a implements com.startapp.common.jobrunner.interfaces.a {
        private a() {
        }

        a(byte b) {
            this();
        }

        @Override
        public final RunnerJob a(int i) {
            if (i == NetworkTester.CTLT_JOB_ID) {
                return new RunnerJob() {
                    @Override
                    public final void a(Context context, RunnerJob.a aVar) {
                        if (NetworkTester.sInstance == null) {
                            aVar.a(RunnerJob.Result.SUCCESS);
                            return;
                        }
                        if (!b.a(context, "android.permission.ACCESS_FINE_LOCATION") && !b.a(context, "android.permission.ACCESS_COARSE_LOCATION")) {
                            NetworkTester.sInstance.mCoverageMapper.b();
                            aVar.a(RunnerJob.Result.SUCCESS);
                            return;
                        }
                        SharedPreferences sharedPreferences = context.getSharedPreferences(NetworkTester.P3WRAPPER_PREFS, 0);
                        long j = sharedPreferences.getLong(NetworkTester.CTLT_GUARD_DIFF_KEY, 120000L);
                        if (System.currentTimeMillis() - sharedPreferences.getLong(NetworkTester.CTLT_PREV_TIME_CHECK_KEY, 0L) < sharedPreferences.getLong(NetworkTester.CTLT_CHECK_INTERVAL_KEY, j) - j) {
                            aVar.a(RunnerJob.Result.SUCCESS);
                            return;
                        }
                        if (!c.a()) {
                            aVar.a(RunnerJob.Result.FAILED);
                            return;
                        }
                        if (NetworkTester.sInstance.mActiveThread != null) {
                            aVar.a(RunnerJob.Result.FAILED);
                            return;
                        }
                        sharedPreferences.edit().putLong(NetworkTester.CTLT_PREV_TIME_CHECK_KEY, System.currentTimeMillis()).commit();
                        NetworkTester.sInstance.mCoverageMapper.a();
                        NetworkTester.sInstance.mActiveThread = new Thread(new RunnableC00401(context, aVar));
                        NetworkTester.sInstance.mActiveThread.start();
                    }

                    final class RunnableC00401 implements Runnable {
                        final RunnerJob.a a;
                        private Context b;

                        RunnableC00401(Context context, RunnerJob.a aVar) {
                            this.b = context;
                            this.a = aVar;
                        }

                        @Override
                        public final void run() {
                            final boolean[] zArr = new boolean[2];
                            Looper.prepare();
                            final Looper myLooper = Looper.myLooper();
                            final com.startapp.networkTest.d.a.b bVar = new com.startapp.networkTest.d.a.b(this.b.getApplicationContext());
                            bVar.a();
                            bVar.a(new e() {
                                @Override
                                public final void a(ConnectivityTestResult connectivityTestResult) {
                                    if (zArr[0]) {
                                        if (myLooper != null) {
                                            NetworkTester.sInstance.mActiveThread = null;
                                            myLooper.quit();
                                            RunnableC00401.this.a.a(RunnerJob.Result.SUCCESS);
                                            return;
                                        }
                                        return;
                                    }
                                    zArr[0] = true;
                                    if (NetworkTester.sInstance.mConnectivityTestListener != null) {
                                        NetworkTester.sInstance.mConnectivityTestListener.onConnectivityTestResult(connectivityTestResult);
                                    }
                                }

                                @Override
                                public final void a(LatencyResult latencyResult) {
                                    if (zArr[1]) {
                                        if (myLooper != null) {
                                            NetworkTester.sInstance.mActiveThread = null;
                                            myLooper.quit();
                                            RunnableC00401.this.a.a(RunnerJob.Result.SUCCESS);
                                            return;
                                        }
                                        return;
                                    }
                                    zArr[1] = true;
                                    if (NetworkTester.sInstance.mConnectivityTestListener != null) {
                                        NetworkTester.sInstance.mConnectivityTestListener.onLatencyTestResult(latencyResult);
                                    }
                                }

                                @Override
                                public final void a() {
                                    bVar.b();
                                    if (myLooper != null) {
                                        NetworkTester.sInstance.mActiveThread = null;
                                        myLooper.quit();
                                    }
                                    if (NetworkTester.sInstance.mConnectivityTestListener != null) {
                                        NetworkTester.sInstance.mConnectivityTestListener.onConnectivityTestFinished(new Runnable() {
                                            @Override
                                            public final void run() {
                                                RunnableC00401.this.a.a(RunnerJob.Result.SUCCESS);
                                            }
                                        });
                                    } else {
                                        RunnableC00401.this.a.a(RunnerJob.Result.SUCCESS);
                                    }
                                }
                            });
                            Looper.loop();
                        }
                    }
                };
            }
            return null;
        }
    }
}