package com.mcxiaoke.apptoolkit.task; import android.content.Context; import com.mcxiaoke.apptoolkit.AppContext; import com.mcxiaoke.apptoolkit.db.Database; import com.mcxiaoke.apptoolkit.exception.NoPermissionException; import com.mcxiaoke.apptoolkit.model.AppInfo; import com.mcxiaoke.apptoolkit.util.Utils; import com.mcxiaoke.shell.Shell; import java.io.File; import java.util.ArrayList; 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 BackupAppsDataTask extends AsyncTaskBase<List<AppInfo>, AppInfo, Integer> { private Context mContext; public BackupAppsDataTask(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 (!Shell.isRootAccessAvailable()) { throw new NoPermissionException(); } List<AppInfo> apps = params[0]; List<String> backupPackages = new ArrayList<String>(); File backupDir = Utils.getBackupDataDir(); int backupCount = 0; for (AppInfo app : apps) { if (isUserCancelled()) { break; } AppContext.v("BackupAppsDataTask processing name=" + app.appName); File src = new File(app.dataDir); File dest = new File(backupDir, app.packageName); boolean success = Shell.backupAppData(src.getPath(), dest.getPath(), false, true); if (success) { app.dataBackup=true; backupPackages.add(app.packageName); backupCount++; } else { AppContext.e("BackupAppsDataTask processing backup failed app: name=" + app.appName + " src=" + src); // break; } publishProgress(app); } Database db = AppContext.getApp().getDB(); db.addBackups(backupPackages); return backupCount; } private String buildProgressText(AppInfo app) { return new StringBuilder().append(app.appName).append(" v").append(app.versionName).append("\n").append(app.sourceDir).toString(); } }