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();
}
}