package com.mcxiaoke.apptoolkit.task;
import android.content.Context;
import com.mcxiaoke.apptoolkit.AppConfig;
import com.mcxiaoke.apptoolkit.AppContext;
import com.mcxiaoke.apptoolkit.R;
import com.mcxiaoke.apptoolkit.exception.NoPermissionException;
import com.mcxiaoke.apptoolkit.model.AppInfo;
import com.mcxiaoke.apptoolkit.util.AppUtils;
import com.mcxiaoke.apptoolkit.util.Utils;
/**
* Project: apptoolkit
* Package: com.mcxiaoke.apptoolkit.task
* User: mcxiaoke
* Date: 13-6-16
* Time: 下午8:29
*/
public class SimpleCommandTask extends SimpleAsyncTask {
private Context mContext;
public SimpleCommandTask(Context context) {
super();
mContext = context;
}
@Override
protected Boolean onExecute(TaskMessage... params) throws Exception {
TaskMessage tm = params[0];
int cmd = tm.type;
AppInfo app = (AppInfo) tm.object;
if (app == null) {
throw new NullPointerException("app cannot be null.");
}
boolean result = true;
switch (cmd) {
case AppConfig.CMD_BACKUP_APP_ONE:
result = doBackupAppApk(app);
break;
case AppConfig.CMD_RESTORE_APP_ONE:
break;
case AppConfig.CMD_BACKUP_DATA_ONE:
result = doBackupAppData(app);
break;
case AppConfig.CMD_RESTORE_DATA_ONE:
result = doRestoreAppData(app);
break;
case AppConfig.CMD_SILENT_INSTAlL_ONE:
break;
case AppConfig.CMD_SILENT_UNINSTALL_ONE:
break;
case AppConfig.CMD_CLEAR_CACHE_ONE:
break;
case AppConfig.CMD_CLEAR_DATA_ONE:
break;
case AppConfig.CMD_INSTALL_SYSTEM_APP_ONE:
break;
case AppConfig.CMD_UNINSTALL_SYSTEM_APP_ONE:
break;
}
return result;
}
private boolean doBackupAppApk(AppInfo app) throws Exception {
AppContext.v("doBackupAppApk name=" + app.appName);
boolean result = AppUtils.backupAppApk(app);
app.apkBackup = true;
String text = String.format(mContext.getString(R.string.msg_backup_app_success), app.appName, Utils.getBackupAppsDir());
AppContext.postShowToast(text);
return result;
}
private boolean doBackupAppData(AppInfo app) throws Exception {
AppContext.v("doBackupAppData name=" + app.appName);
boolean result = AppUtils.backupAppData(app);
if (result) {
AppContext.getApp().getDB().addBackup(app.packageName);
app.dataBackup = true;
String text = String.format(mContext.getString(R.string.msg_backup_data_success), app.appName, Utils.getBackupDataDir());
AppContext.postShowToast(text);
} else {
throw new NoPermissionException();
}
return result;
}
private boolean doRestoreAppData(AppInfo app) throws Exception {
AppContext.v("doRestoreAppData name=" + app.appName);
boolean result = AppUtils.restoreAppData(app);
if (result) {
String text = String.format(mContext.getString(R.string.msg_restore_data_success), app.appName);
AppContext.postShowToast(text);
} else {
throw new NoPermissionException();
}
return result;
}
@Override
protected void onPostExecuteSuccess(Boolean aBoolean) {
super.onPostExecuteSuccess(aBoolean);
AppContext.v("onPostExecuteSuccess result=" + aBoolean);
}
@Override
protected void onPostExecuteFailure(Throwable exception) {
super.onPostExecuteFailure(exception);
AppContext.v("onPostExecuteFailure exception=" + exception.toString());
exception.printStackTrace();
if (exception instanceof NoPermissionException) {
AppContext.showToast(mContext, R.string.msg_backup_failed_no_permission);
}
}
}