package com.mcxiaoke.apptoolkit.task;
import android.content.Context;
import com.mcxiaoke.apptoolkit.model.AppInfo;
import com.mcxiaoke.apptoolkit.util.Utils;
import java.io.File;
import java.util.List;
/**
* 批量备份应用安装包,不需要ROOT
* Project: filemanager
* Package: com.com.mcxiaoke.appmanager.task
* User: com.mcxiaoke
* Date: 13-6-11
* Time: 下午1:24
*/
public class BackupAppsApkTask extends AsyncTaskBase<List<AppInfo>, AppInfo, Integer> {
private Context mContext;
public BackupAppsApkTask(Context context, AsyncTaskCallback<AppInfo, Integer> callback) {
super(callback);
mContext = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(AppInfo... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecuteSuccess(Integer integer) {
super.onPostExecuteSuccess(integer);
}
@Override
protected void onPostExecuteFailure(Throwable exception) {
super.onPostExecuteFailure(exception);
}
@Override
protected Integer onExecute(List<AppInfo>... params) throws Exception {
if (params == null || params.length == 0) {
throw new NullPointerException("params is null");
}
if (!Utils.isSdcardMounted()) {
throw new NullPointerException("sdcard is not mounted");
}
List<AppInfo> apps = params[0];
File backupDir = checkBackupDir();
int backupCount = 0;
for (AppInfo app : apps) {
if (isUserCancelled()) {
break;
}
String fileName = Utils.buildApkName(app);
File src = new File(app.sourceDir);
File dest = new File(backupDir, fileName);
if (src.exists() && src.canRead()) {
if (!dest.exists()) {
boolean success = Utils.copyFile(src, dest);
if (success) {
backupCount++;
}
}
app.apkBackup = true;
}
publishProgress(app);
}
return backupCount;
}
private File checkBackupDir() {
return Utils.getBackupAppsDir();
}
}