360手机助手 v3.3.0版本的 MD5 值为:127c345ad16bbebee6e347381328afd0

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


package com.qihoo.speedometer;

import android.content.Intent;
import android.os.Bundle;
import android.os.FileUtils;
import android.os.Handler;
import android.os.Message;
import android.util.Pair;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.qihoo.appstore.AppStoreApplication;
import com.qihoo.appstore.activities.MainActivity;
import com.qihoo.appstore.activities.ReportNetworkDetectActivity;
import com.qihoo.appstore.activities.StatFragmentActivity;
import com.qihoo.appstore.newdlfragment.TxtReader;
import com.qihoo.appstore.ui.SimpleProgressBar;
import com.qihoo.appstore.utils.bk;
import com.qihoo.appstore.utils.dc;
import com.qihoo.freewifi.push.R;
import com.qihoo.speedometer.measurements.DnsLookupTask;
import com.qihoo.speedometer.measurements.HttpTask;
import com.qihoo.speedometer.measurements.PingTask;
import com.qihoo.speedometer.util.PhoneUtils;
import com.qihoo360.mobilesafe.a.a;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.zip.GZIPInputStream;
import org.json.JSONArray;
import org.json.JSONObject;

public class NetworkDetectActivity extends StatFragmentActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
    public static final int REQUEST_CODE = 12345;
    private static final String TAG = "NetworkDetectActivity";
    public String currentPath;
    private boolean isWapNetwork;
    private DetectListAdapter mAdapter;
    private TextView mBigTitle;
    TextView mDetails;
    private ListView mDetectStepListView;
    private TextView mFeedbackId;
    private ImageView mLogoImageView;
    private ProgressBar mPbDetecting;
    private SimpleProgressBar mProgressBar;
    private Button mSendFeedbackBtn;
    private String mUploadRes;
    private TextView mViewDetail;
    private ExecutorService measurementExecutor;
    private final ArrayList mDetectSteps = new ArrayList();
    private boolean mAgreeSendFeedback = true;
    private boolean mHaveSendFeedbackLog = false;
    private boolean mStopDetect = false;
    private boolean isCheckComplete = false;
    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message message) {
            NetworkDetectActivity.this.mProgressBar.setVisibility(4);
            NetworkDetectActivity.this.mPbDetecting.setVisibility(8);
            NetworkDetectActivity.this.mLogoImageView.setVisibility(0);
            NetworkDetectActivity.this.isCheckComplete = true;
            Toast.makeText(NetworkDetectActivity.this, R.string.test_done, 1).show();
        }
    };

    public class BackgroundMessureTask implements Runnable {
        private BackgroundMessureTask() {
        }

        @Override
        public void run() {
            int i;
            Exception exc;
            PhoneUtils.c().h();
            NetworkDetectActivity.this.b("========= history log info  =========");
            Iterator it = NetworkMonitor.b().c().iterator();
            while (it.hasNext()) {
                NetworkDetectActivity.this.b((String) it.next());
            }
            NetworkMonitor.b().d();
            NetworkDetectActivity.this.b("========= start test =========");
            try {
                try {
                    NetworkDetectActivity.this.b(PhoneUtils.c().p().toString());
                    NetworkDetectActivity.this.b("outway_ip: " + NetworkDetectHelper.b());
                } catch (Exception e) {
                    NetworkDetectActivity.this.b("getPhoneInfo failed: " + e.toString());
                }
                List<MeasurementTask> b2 = NetworkDetectActivity.this.b();
                int size = b2.size();
                try {
                    NetworkDetectActivity.this.mProgressBar.setMax(size * 100);
                    int i2 = 0;
                    for (MeasurementTask measurementTask : b2) {
                        try {
                            NetworkDetectActivity.this.b("connection: " + PhoneUtils.c().e());
                            NetworkDetectActivity.this.b("network type:" + PhoneUtils.c().g());
                            DetectPoint detectPoint = (DetectPoint) NetworkDetectActivity.this.mDetectSteps.get(i2);
                            detectPoint.mStatus = "诊断中...";
                            NetworkDetectActivity.this.a(NetworkDetectActivity.this.measurementExecutor.submit(measurementTask), measurementTask, i2 * 100, detectPoint);
                            i2++;
                            NetworkDetectActivity.this.a(i2 * 100, true);
                        } catch (Exception e2) {
                            NetworkDetectActivity.this.b(measurementTask.a() + " exception: " + e2.toString());
                        }
                        if (NetworkDetectActivity.this.mStopDetect) {
                            return;
                        }
                    }
                    i = size;
                } catch (Exception e3) {
                    exc = e3;
                    i = size;
                    NetworkDetectActivity.this.b("test failed " + exc.toString());
                    if (NetworkDetectActivity.this.mStopDetect) {
                    }
                }
            } catch (Exception e4) {
                i = 0;
                exc = e4;
                NetworkDetectActivity.this.b("test failed " + exc.toString());
                if (NetworkDetectActivity.this.mStopDetect) {
                }
            }
            if (NetworkDetectActivity.this.mStopDetect) {
                return;
            }
            try {
                File file = new File(FileLogger.d());
                NetworkDetectActivity.this.currentPath = file.getParent() + "/../LastNetworkDetectLog.txt";
                File file2 = new File(NetworkDetectActivity.this.currentPath);
                if (file2.exists()) {
                    file2.delete();
                }
                FileUtils.copyFile(file, file2);
                if (NetworkDetectActivity.this.mAgreeSendFeedback) {
                    FileLogger.c();
                    if (NetworkDetectActivity.this.d()) {
                        NetworkDetectActivity.this.mHaveSendFeedbackLog = true;
                        NetworkDetectActivity.this.i();
                    } else {
                        NetworkDetectActivity.this.k();
                    }
                } else {
                    NetworkDetectActivity.this.h();
                }
                if (a.f5313a) {
                    bk.b(NetworkDetectActivity.TAG, "========= test finished =========");
                }
                NetworkDetectActivity.this.a(i * 100, true);
                PhoneUtils.c().i();
                if (NetworkDetectActivity.this.mStopDetect) {
                    return;
                }
                NetworkDetectActivity.this.handler.sendEmptyMessage(0);
            } catch (Exception e5) {
            }
        }
    }

    public final class DetectPoint {
        public String mDes1;
        public String mDes2;
        public Speed mSpeed;
        public String mStatus;
    }

    public enum Speed {
        Hight1,
        Hight2,
        Normal,
        Slow
    }

    public void a(final int i, final boolean z) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (NetworkDetectActivity.this.mProgressBar.getProgress() < i) {
                    NetworkDetectActivity.this.mProgressBar.setProgress(i);
                }
                if (z) {
                    NetworkDetectActivity.this.mAdapter.a(NetworkDetectActivity.this.mDetectSteps, true);
                }
            }
        });
    }

    private void a(boolean z) {
        if (!this.mHaveSendFeedbackLog) {
            FileLogger.c();
        }
        Intent intent = new Intent(this, (Class<?>) ReportNetworkDetectActivity.class);
        intent.putExtra("need_send_log_file", !this.mHaveSendFeedbackLog);
        intent.putExtra("upload_log_res", this.mUploadRes);
        intent.putExtra("isContactUs", z);
        startActivityForResult(intent, REQUEST_CODE);
    }

    public boolean a(Future future, MeasurementTask measurementTask, int i, DetectPoint detectPoint) {
        while (!future.isDone()) {
            try {
                Thread.sleep(500L);
            } catch (Exception e) {
            }
            a(measurementTask.d() + i, true);
        }
        try {
            MeasurementResult measurementResult = (MeasurementResult) future.get();
            if (a.f5313a && a.f5313a) {
                bk.b(TAG, measurementResult.toString());
            }
            detectPoint.mStatus = measurementResult.a(detectPoint);
            detectPoint.mDes2 = measurementResult.a(detectPoint, detectPoint.mDes2);
            return true;
        } catch (Exception e2) {
            StringWriter stringWriter = new StringWriter();
            e2.printStackTrace(new PrintWriter(stringWriter));
            FileLogger.a(TAG, measurementTask.b() + " 任务失败 : " + stringWriter.toString(), new Object[0]);
            detectPoint.mStatus = getString(R.string.excetion);
            return false;
        }
    }

    public static byte[] a(InputStream inputStream) {
        byte[] bArr = new byte[1024];
        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            while (true) {
                int read = inputStream.read(bArr);
                if (read == -1) {
                    byteArrayOutputStream.close();
                    inputStream.close();
                    return byteArrayOutputStream.toByteArray();
                }
                byteArrayOutputStream.write(bArr, 0, read);
            }
        } catch (OutOfMemoryError e) {
            System.gc();
            e.printStackTrace();
            return null;
        }
    }

    private String b(InputStream inputStream) {
        String str = new String(a(inputStream));
        StringBuffer stringBuffer = new StringBuffer();
        if (str.startsWith("<!--")) {
            stringBuffer.append(str.substring(str.indexOf("{") + 1));
        } else {
            stringBuffer.append(str);
        }
        return stringBuffer.toString();
    }

    public List b() {
        ArrayList arrayList = new ArrayList();
        arrayList.add(DnsLookupTask.a("openbox.mobilem.360.cn", getApplicationContext()));
        arrayList.add(DnsLookupTask.a("openboxcdn.mobilem.360.cn", getApplicationContext()));
        arrayList.add(PingTask.a("openbox.mobilem.360.cn", getApplicationContext()));
        arrayList.add(PingTask.a("openboxcdn.mobilem.360.cn", getApplicationContext()));
        arrayList.add(HttpTask.a(a(), getApplicationContext()));
        String f = NetworkMonitor.b().f();
        if (f == null) {
            f = "http://openbox.mobilem.360.cn/html/life/index2.html";
        }
        arrayList.add(HttpTask.a(f, getApplicationContext()));
        if (!this.isWapNetwork) {
            String e = NetworkMonitor.b().e();
            if (e == null) {
                e = c();
            }
            arrayList.add(HttpTask.a(e, getApplicationContext()));
        }
        return arrayList;
    }

    public void b(String str) {
        FileLogger.a(TAG, str, new Object[0]);
    }

    private String c() {
        try {
            HttpURLConnection a2 = a(a());
            String headerField = a2.getHeaderField("content-encoding");
            a2.getResponseCode();
            JSONArray jSONArray = new JSONObject(b("gzip".equals(headerField) ? new GZIPInputStream(a2.getInputStream()) : a2.getInputStream())).getJSONObject("data").getJSONArray("soft");
            for (int i = 0; i < jSONArray.length(); i++) {
                JSONObject jSONObject = jSONArray.getJSONObject(i);
                if (Long.parseLong(jSONObject.getString("size")) <= 10000000) {
                    return jSONObject.getString("down_url");
                }
            }
        } catch (Exception e) {
        }
        return "http://m.shouji.360tpcdn.com/360sj/adm/apk/20130626/com.qihoo.appstore_199601_193104.apk";
    }

    private void c(final String str) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (NetworkDetectActivity.this.mFeedbackId.getVisibility() == 0) {
                    return;
                }
                NetworkDetectActivity.this.mFeedbackId.setText(str);
                NetworkDetectActivity.this.mFeedbackId.setVisibility(0);
            }
        });
    }

    public boolean d() {
        boolean z = false;
        try {
            Pair b2 = NetworkDetectHelper.b(this);
            z = ((Boolean) b2.first).booleanValue();
            this.mUploadRes = (String) b2.second;
            if (z) {
                c(this.mUploadRes);
            }
        } catch (Exception e) {
            b("upload log failed: " + e.toString());
        }
        if (!z) {
            b("upload log failed");
        } else if (a.f5313a) {
            bk.b(TAG, "上传日志成功");
        }
        return z;
    }

    private void e() {
        try {
            this.isWapNetwork = new com.qihoo.appstore.http.a(AppStoreApplication.d()).b();
        } catch (Throwable th) {
        }
        g();
        f();
        this.mAdapter.a(this.mDetectSteps, true);
        this.isCheckComplete = false;
        new Thread(new BackgroundMessureTask()).start();
    }

    private void f() {
        DetectPoint detectPoint = new DetectPoint();
        detectPoint.mDes1 = getString(R.string.main_server_conect_setting);
        detectPoint.mDes2 = getString(R.string.check_main_server_if_normal);
        detectPoint.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint);
        DetectPoint detectPoint2 = new DetectPoint();
        detectPoint2.mDes1 = getString(R.string.cdn_server_connect_setting);
        detectPoint2.mDes2 = getString(R.string.check_cdn_server_if_correct);
        detectPoint2.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint2);
        DetectPoint detectPoint3 = new DetectPoint();
        detectPoint3.mDes1 = getString(R.string.main_server_connect);
        detectPoint3.mDes2 = getString(R.string.inspect_main_server_connectivity);
        detectPoint3.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint3);
        DetectPoint detectPoint4 = new DetectPoint();
        detectPoint4.mDes1 = getString(R.string.cdn_server_connect);
        detectPoint4.mDes2 = getString(R.string.check_cdn_server_done);
        detectPoint4.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint4);
        DetectPoint detectPoint5 = new DetectPoint();
        detectPoint5.mDes1 = getString(R.string.main_server_access_speed);
        detectPoint5.mDes2 = getString(R.string.check_main_server_access_speed);
        detectPoint5.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint5);
        DetectPoint detectPoint6 = new DetectPoint();
        detectPoint6.mDes1 = getString(R.string.web_page_access_speed);
        detectPoint6.mDes2 = getString(R.string.check_webpage_server_access_speed);
        detectPoint6.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint6);
        if (this.isWapNetwork) {
            return;
        }
        DetectPoint detectPoint7 = new DetectPoint();
        detectPoint7.mDes1 = getString(R.string.resources_down_speed);
        detectPoint7.mDes2 = getString(R.string.check_down_server_access_speed);
        detectPoint7.mStatus = getString(R.string.has_no_diagnosed);
        this.mDetectSteps.add(detectPoint7);
    }

    private void g() {
        findViewById(R.id.top_section).setBackgroundResource(R.color.detect_green_bg);
        findViewById(R.id.title_layout).setBackgroundResource(R.drawable.detect_green_bg);
        this.mBigTitle.setText(R.string.network_diagnosising);
        this.mLogoImageView.setVisibility(8);
        this.mViewDetail.setVisibility(8);
        this.mPbDetecting.setVisibility(0);
        this.mProgressBar.setVisibility(0);
        final View findViewById = findViewById(R.id.step1_bottom);
        findViewById.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                findViewById.getViewTreeObserver().removeOnPreDrawListener(this);
                NetworkDetectActivity.this.mDetectStepListView.getLayoutParams().height = NetworkDetectActivity.this.findViewById(R.id.step1_bottom).getHeight() + ((int) NetworkDetectActivity.this.getResources().getDimension(R.dimen.network_detect_over_height));
                NetworkDetectActivity.this.mDetectStepListView.setVisibility(0);
                NetworkDetectActivity.this.findViewById(R.id.list_shadow).setVisibility(0);
                return true;
            }
        });
        this.mDetails.setVisibility(4);
    }

    public void h() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                NetworkDetectActivity.this.findViewById(R.id.top_section).setBackgroundResource(R.color.detect_green_bg);
                NetworkDetectActivity.this.findViewById(R.id.title_layout).setBackgroundResource(R.drawable.detect_green_bg);
                NetworkDetectActivity.this.mBigTitle.setText(R.string.diagnosis_done);
                NetworkDetectActivity.this.mLogoImageView.setImageResource(R.drawable.detect_result);
                NetworkDetectActivity.this.mSendFeedbackBtn.setVisibility(0);
                NetworkDetectActivity.this.mDetails.setVisibility(0);
                NetworkDetectActivity.this.mDetails.setText(R.string.thank_for_diagnosis);
                NetworkDetectActivity.this.mViewDetail.setVisibility(0);
            }
        });
    }

    public void i() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                NetworkDetectActivity.this.findViewById(R.id.top_section).setBackgroundResource(R.color.detect_green_bg);
                NetworkDetectActivity.this.findViewById(R.id.title_layout).setBackgroundResource(R.drawable.detect_green_bg);
                NetworkDetectActivity.this.mBigTitle.setText(R.string.diagnosis_done);
                NetworkDetectActivity.this.mDetails.setVisibility(0);
                NetworkDetectActivity.this.mDetails.setText(R.string.thank_for_diagnosis);
                NetworkDetectActivity.this.mLogoImageView.setImageResource(R.drawable.received_log);
                NetworkDetectActivity.this.mSendFeedbackBtn.setVisibility(0);
                NetworkDetectActivity.this.mViewDetail.setVisibility(0);
            }
        });
    }

    private void j() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                NetworkDetectActivity.this.findViewById(R.id.top_section).setBackgroundResource(R.color.detect_green_bg);
                NetworkDetectActivity.this.findViewById(R.id.title_layout).setBackgroundResource(R.drawable.detect_green_bg);
                NetworkDetectActivity.this.mDetails.setVisibility(0);
                NetworkDetectActivity.this.mBigTitle.setText(R.string.diagnosis_done);
                NetworkDetectActivity.this.mDetails.setText(R.string.thank_for_diagnosis);
                NetworkDetectActivity.this.mLogoImageView.setImageResource(R.drawable.received_log);
                NetworkDetectActivity.this.mSendFeedbackBtn.setVisibility(4);
                NetworkDetectActivity.this.mViewDetail.setVisibility(0);
            }
        });
    }

    public void k() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                NetworkDetectActivity.this.findViewById(R.id.top_section).setBackgroundResource(R.color.detect_orange_bg);
                NetworkDetectActivity.this.findViewById(R.id.title_layout).setBackgroundResource(R.drawable.detect_orange_bg);
                NetworkDetectActivity.this.mBigTitle.setText(R.string.cannt_send_diagnosis_report);
                NetworkDetectActivity.this.mDetails.setVisibility(0);
                NetworkDetectActivity.this.mLogoImageView.setImageResource(R.drawable.log_send_failed);
                NetworkDetectActivity.this.mDetails.setText(R.string.will_send_diagnosis_result_next_chance);
                NetworkDetectActivity.this.mSendFeedbackBtn.setVisibility(4);
                NetworkDetectActivity.this.mViewDetail.setVisibility(0);
            }
        });
    }

    public String a() {
        return dc.g(getBaseContext());
    }

    public HttpURLConnection a(String str) {
        try {
            HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(str).openConnection();
            httpURLConnection.setDoInput(true);
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setRequestProperty("Connection", "close");
            httpURLConnection.setRequestProperty("Charset", "UTF-8");
            httpURLConnection.setRequestProperty("accept", "*/*");
            httpURLConnection.addRequestProperty("Accept-Encoding", "gzip,deflate");
            httpURLConnection.setConnectTimeout(15000);
            httpURLConnection.setReadTimeout(15000);
            httpURLConnection.setRequestProperty("http.useragent", HttpConst.HTTP_CONTENT_USER_AGENT);
            httpURLConnection.connect();
            return httpURLConnection;
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public void onActivityResult(int i, int i2, Intent intent) {
        String stringExtra;
        super.onActivityResult(i, i2, intent);
        if (i2 != -1) {
            if (i2 == 2) {
                k();
            }
        } else {
            if (intent != null && (stringExtra = intent.getStringExtra("feedbackid")) != null) {
                c(stringExtra);
            }
            j();
        }
    }

    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean z) {
        this.mAgreeSendFeedback = z;
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.send_feedback) {
            a(this.mAgreeSendFeedback);
            com.qihoo.appstore.r.a.a(this.mAgreeSendFeedback ? "dgj" : "dgh", 1);
            return;
        }
        if (view.getId() == R.id.back_btn) {
            MainActivity.e().i();
            return;
        }
        if (view.getId() == R.id.click_view_detail) {
            Intent intent = new Intent(MainActivity.e(), (Class<?>) TxtReader.class);
            intent.putExtra("filepath", this.currentPath);
            intent.putExtra("disableDel", true);
            intent.putExtra("disableShare", true);
            intent.putExtra("key_is_from_netdetect", true);
            MainActivity.e().b(intent);
        }
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.network_detect_activity);
        this.mStatTag = TAG;
        FileLogger.b();
        this.mAgreeSendFeedback = getIntent().getBooleanExtra(NetWorkDetectGuidActivity.AGREE_FEED_BACK, true);
        boolean booleanExtra = getIntent().getBooleanExtra(NetWorkDetectGuidActivity.SHOW_ERROR_MODEL, false);
        MainActivity.e().v = booleanExtra ? false : true;
        this.mProgressBar = (SimpleProgressBar) findViewById(R.id.progressBar1);
        this.mProgressBar.setVisibility(4);
        this.mDetectStepListView = (ListView) findViewById(R.id.detect_step_list);
        this.mDetectStepListView.setVisibility(8);
        this.mAdapter = new DetectListAdapter(this);
        this.mDetectStepListView.setAdapter((ListAdapter) this.mAdapter);
        this.mSendFeedbackBtn = (Button) findViewById(R.id.send_feedback);
        this.mSendFeedbackBtn.setOnClickListener(this);
        findViewById(R.id.back_btn).setOnClickListener(this);
        this.measurementExecutor = Executors.newSingleThreadExecutor();
        PhoneUtils.a(AppStoreApplication.d());
        this.mDetails = (TextView) findViewById(R.id.send_failed_detail);
        this.mLogoImageView = (ImageView) findViewById(R.id.title_logo);
        this.mPbDetecting = (ProgressBar) findViewById(R.id.pb_detecting);
        this.mBigTitle = (TextView) findViewById(R.id.big_title);
        this.mFeedbackId = (TextView) findViewById(R.id.feedback_id);
        this.mViewDetail = (TextView) findViewById(R.id.click_view_detail);
        this.mViewDetail.setOnClickListener(this);
        e();
    }

    @Override
    public void onDestroy() {
        this.mStopDetect = true;
        if (PhoneUtils.b() != null) {
            PhoneUtils.c().j();
        }
        super.onDestroy();
    }

    @Override
    public boolean onKeyDown(int i, KeyEvent keyEvent) {
        if (i == 4 && !this.isCheckComplete) {
            com.qihoo.appstore.r.a.a("dgk", 1);
        }
        return super.onKeyDown(i, keyEvent);
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}