package org.emdev.ui.tasks; import android.content.Context; import android.support.v7.app.AlertDialog; import android.widget.Toast; import java.io.File; import org.emdev.ui.progress.IProgressIndicator; import org.emdev.ui.tasks.BaseFileAsyncTask.FileTaskResult; public abstract class BaseFileAsyncTask<Params, Result extends FileTaskResult> extends BaseAsyncTask<Params, Result> implements IProgressIndicator { protected final int resultStringId; protected final int errorStringId; public BaseFileAsyncTask(final Context context, final int startProgressStringId, final int resultStringId, final int errorStringId, final boolean cancellable) { super(context, startProgressStringId, cancellable); this.resultStringId = resultStringId; this.errorStringId = errorStringId; } @Override public void setProgressDialogMessage(final int resourceID, final Object... args) { publishProgress(context.getResources().getString(resourceID, args)); } @Override protected void onPostExecute(final Result result) { super.onPostExecute(result); if (result == null) { processNoResult(); return; } if (result.target != null) { processTargetFile(result.target); return; } if (result.error != null) { processError(result.error); } } protected void processNoResult() { } protected void processTargetFile(final File target) { final String msg = context.getResources().getString(resultStringId, target.getAbsolutePath()); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } protected void processError(final Throwable error) { final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Error"); builder.setMessage(context.getResources().getString(errorStringId, error.getLocalizedMessage())); builder.setPositiveButton(android.R.string.ok, null); builder.show(); } public static class FileTaskResult { public File target; public Throwable error; public FileTaskResult(final File target) { super(); this.target = target; } public FileTaskResult(final Throwable error) { super(); this.error = error; } } }