package com.jacky.compatible.launcher.features.speedtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.jacky.launcher.R;
import com.jacky.compatible.launcher.model.NetworkSpeedInfo;
import com.jacky.compatible.launcher.utils.ReadFileUtil;
import java.util.ArrayList;
import java.util.List;
public class SpeedTestActivity extends Activity implements OnClickListener {
private static final String URL = "http://gdown.baidu.com/data/wisegame/6546ec811c58770b/labixiaoxindamaoxian_8.apk";
private static final int PROGRESSCHANGE = 0;
private static final int SPEEDUPDATE = 1;
private static final int SPEED_FINISH = 2;
private Button didNotStart;//未开始
private Button inStart;//已开始
private Button startAgain;//再次开始
private LinearLayout didNotStartLayout;
private LinearLayout inStartLayout;
private LinearLayout startAgainLayout;
private long currenSpeed;//当前速度
private long averageSpeed;//平均速度
private long speedTaital;
private byte[] fileData;
private NetworkSpeedInfo networkSpeedInfo;
private final List<Long> list = new ArrayList<>();
private ProgressBar speedProgressBar;
private TextView speed;
private TextView percent;
private TextView movieType;
private int progress;
private Thread thread;
private Boolean threadCanRun = true;
private Boolean progressThreadCanRun = true;
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case PROGRESSCHANGE:
progress = NetworkSpeedInfo.progress;
percent.setText(progress + "%");
if (progress < 100) {
speedProgressBar.setProgress(progress);
} else {
inStart.performClick();
progressThreadCanRun = false;
progress = 0;
speedProgressBar.setProgress(progress);
}
break;
case SPEEDUPDATE:
currenSpeed = NetworkSpeedInfo.Speed;
list.add(currenSpeed);
for (long speed : list) {
speedTaital += speed;
}
averageSpeed = speedTaital / list.size();
speed.setText(averageSpeed + "kb/s");
if (averageSpeed <= 200) {
movieType.setText("普清电影");
} else if (averageSpeed <= 400) {
movieType.setText("高清电影");
} else if (averageSpeed > 400) {
movieType.setText("超清电影");
}
speedTaital = 0;
break;
case SPEED_FINISH:
speed.setText(averageSpeed + "kb/s");
if (averageSpeed <= 200) {
movieType.setText("普清电影");
} else if (averageSpeed <= 400) {
movieType.setText("高清电影");
} else if (averageSpeed > 400) {
movieType.setText("超清电影");
}
progressThreadCanRun = false;
threadCanRun = false;
NetworkSpeedInfo.FILECANREAD = false;
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_speed_main);
Init();
}
public void Init() {
networkSpeedInfo = new NetworkSpeedInfo();
didNotStart = (Button) findViewById(R.id.speedtest_btn_start);
inStart = (Button) findViewById(R.id.speedtset_btn_stoptest);
startAgain = (Button) findViewById(R.id.speedtest_btn_startagain);
didNotStart.setOnClickListener(this);
inStart.setOnClickListener(this);
startAgain.setOnClickListener(this);
didNotStartLayout = (LinearLayout) findViewById(R.id.speedtset_didinotlayout);
inStartLayout = (LinearLayout) findViewById(R.id.speedtest_instartlayout);
startAgainLayout = (LinearLayout) findViewById(R.id.speedtest_startagainlayout);
speedProgressBar = (ProgressBar) findViewById(R.id.speedtest_progressBar);
speed = (TextView) findViewById(R.id.speedtest_speed);
movieType = (TextView) findViewById(R.id.speed_movietype);
percent = (TextView) findViewById(R.id.speed_test_percent);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.speedtest_btn_start:
didNotStartLayout.setVisibility(View.GONE);
inStartLayout.setVisibility(View.VISIBLE);
startAgainLayout.setVisibility(View.GONE);
inStart.requestFocus();
inStart.requestFocusFromTouch();
progressThreadCanRun = true;
threadCanRun = true;
NetworkSpeedInfo.FILECANREAD = true;
new Thread() {
@Override
public void run() {
fileData = ReadFileUtil.ReadFileFromURL(URL,
networkSpeedInfo);
}
}.start();
thread = new Thread() {
@Override
public void run() {
while (threadCanRun) {
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(SPEEDUPDATE);
if (NetworkSpeedInfo.FinishBytes >= NetworkSpeedInfo.totalBytes) {
handler.sendEmptyMessage(SPEED_FINISH);
NetworkSpeedInfo.FinishBytes = 0;
}
}
}
};
thread.start();
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
while (progressThreadCanRun) {
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(PROGRESSCHANGE);
}
}
}.start();
break;
case R.id.speedtset_btn_stoptest:
startAgainLayout.setVisibility(View.VISIBLE);
inStartLayout.setVisibility(View.GONE);
didNotStartLayout.setVisibility(View.GONE);
startAgain.requestFocus();
startAgain.requestFocusFromTouch();
NetworkSpeedInfo.progress = 0;
NetworkSpeedInfo.FinishBytes = 0;
handler.sendEmptyMessage(SPEED_FINISH);
break;
case R.id.speedtest_btn_startagain:
didNotStartLayout.setVisibility(View.VISIBLE);
startAgainLayout.setVisibility(View.GONE);
inStartLayout.setVisibility(View.GONE);
break;
default:
break;
}
}
}