package com.jacky.compatible.launcher.features.garbageclear;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.jacky.launcher.R;
import com.jacky.compatible.launcher.utils.ClearUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@SuppressLint("InflateParams")
public class GarbageClear extends Activity {
protected static final int FOUND_FINISH = 0;
protected static final int CLEAR_FINISH = 1;
private Button startFound, startClear;
private List<File> list;
private ProgressBar progressDisplay;
private static final String[] CLEAR_TYPE = {".apk", ".log"};
private boolean isInstall;
private RelativeLayout foundLayout;
private FrameLayout clearLayout;
private ImageView roundImg;
private Animation animation;
private TextView filePath;
private ImageView dialogImg;
private long fileGrbagesize;
private TextView grbageSize;
private boolean found;// 如果为false则未完成扫描
private int taskNum;
private int progressbarNum;
private List<FoundTask> tasklist;
@SuppressLint("HandlerLeak")
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case FOUND_FINISH:
//查找完毕
found = true;
startFound.setText("开始清理");
filePath.setText("查找完毕");
startFound.setClickable(true);
progressDisplay.setProgress(100);
progressbarNum = 0;
dialogImg.setImageResource(R.drawable.dialog_center_img);
break;
case CLEAR_FINISH:
//清理完毕
found = false;
startClear.setClickable(true);
startFound.setText("开始扫描");
startClear.setText("清理完毕");
grbageSize.setText("0");
startFound.setClickable(true);
animation = null;
fileGrbagesize = 0;
progressDisplay.setProgress(progressbarNum);
roundImg.setAnimation(animation);
roundImg.setVisibility(View.GONE);
dialogImg.setImageResource(R.drawable.finish_clear);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.garbage_activity_main);
Init();
Linstener();
}
public void Init() {
list = new ArrayList<>();
tasklist = new ArrayList<>();
animation = AnimationUtils.loadAnimation(GarbageClear.this, R.anim.dialog_anmiation);
progressDisplay = (ProgressBar) findViewById(R.id.progressBar1);
startFound = (Button) findViewById(R.id.start_found);
filePath = (TextView) findViewById(R.id.file_path);
startClear = (Button) findViewById(R.id.start_clear);
roundImg = (ImageView) findViewById(R.id.round_img);
grbageSize = (TextView) findViewById(R.id.garbage_size);
dialogImg = (ImageView) findViewById(R.id.dialog_img);
foundLayout = (RelativeLayout) findViewById(R.id.found_layout);
clearLayout = (FrameLayout) findViewById(R.id.clear_layout);
}
@SuppressLint("SdCardPath")
public void Linstener() {
startClear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
clearLayout.setVisibility(View.GONE);
foundLayout.setVisibility(View.VISIBLE);
}
});
startFound.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startFound.setClickable(false);
if (!found) {
startFound.setText("扫描中");
startClear.setClickable(false);
new FoundTask(Environment.getExternalStorageDirectory()
+ "/", CLEAR_TYPE).execute();
} else {
if (fileGrbagesize != 0) {
startClear.setClickable(false);
clearLayout.setVisibility(View.VISIBLE);
foundLayout.setVisibility(View.GONE);
roundImg.setAnimation(animation);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
DeleteFile();
Message message = new Message();
message.what = CLEAR_FINISH;
handler.sendMessage(message);
}
}).start();
} else {
startFound.setClickable(true);
Toast.makeText(GarbageClear.this, "当前不需要清理", Toast.LENGTH_SHORT)
.show();
}
}
}
});
}
public void DeleteFile() {
for (File file : list) {
file.delete();
}
list.clear();
}
/*
*扫描文件异步任务
*/
class FoundTask extends AsyncTask<Void, String, List<FoundTask>> {
private final String path;
private final String[] extension;
public FoundTask(String path, String[] extension) {
this.path = path;
this.extension = extension;
}
@Override
protected List<FoundTask> doInBackground(Void... arg0) {
final File[] files = new File(path).listFiles();
String filePath = null;
for (File file : files) {
if (file.isFile()) {
publishProgress(file.getPath());
for (int i = 0; i < CLEAR_TYPE.length; i++) {
if (file.getPath()
.substring(
file.getPath().length()
- extension[i].length())
.equals(extension[i])) {
filePath = file.getAbsolutePath();
isInstall = ClearUtil.TakeIsInstallApk(filePath,
GarbageClear.this);
//判断是否已安装װ
if (!isInstall) {
long size = ClearUtil.getFileSize(file);
fileGrbagesize = fileGrbagesize + size;
list.add(file);
}
}
}
} else if (file.isDirectory() && file.getPath().indexOf("/.") == -1) {
tasklist.add(new FoundTask(file.getPath(), extension));
taskNum++;
}
}
return tasklist;
}
@Override
protected void onProgressUpdate(String... values) {
//更改显示的文件路径
String value = values[0];
filePath.setText(value);
}
@Override
protected void onPostExecute(List<FoundTask> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//执行完毕 开始执行下一个任务
if (result != null && taskNum != 0) {
tasklist.get(0).execute();
grbageSize.setText(String.valueOf((int) ((float) fileGrbagesize / 1024 / 1024 / 2)));
taskNum--;
tasklist.remove(0);
if (progressbarNum < 100) {
progressbarNum++;
progressDisplay.setProgress(progressbarNum);
} else if (progressbarNum == 100) {
progressbarNum = 0;
}
}
//任务执行完成
else if (taskNum == 0) {
Message message = new Message();
message.what = FOUND_FINISH;
handler.sendMessage(message);
}
}
}
}