package net.osmand.plus;
import android.os.AsyncTask;
public class OsmAndTaskManager {
private OsmandApplication app;
public OsmAndTaskManager(OsmandApplication app) {
this.app = app;
}
public <Params, Progress, Result> OsmAndTask<Params, Progress, Result> runInBackground(
OsmAndTaskRunnable<Params, Progress, Result> r, Params... params) {
InternalTaskExecutor<Params, Progress, Result> exec = new InternalTaskExecutor<Params, Progress, Result>(r);
r.exec = exec;
exec.execute(params);
return exec;
}
private class InternalTaskExecutor<Params, Progress, Result>
extends AsyncTask<Params, Progress, Result>
implements OsmAndTask<Params, Progress, Result> {
private final OsmAndTaskRunnable<Params, Progress, Result> run;
private InternalTaskExecutor(OsmAndTaskRunnable<Params, Progress, Result> r){
this.run = r;
}
@Override
protected Result doInBackground(Params... params) {
return run.doInBackground(params);
}
@Override
protected void onPreExecute() {
run.onPreExecute();
}
@Override
protected void onPostExecute(Result result) {
run.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Progress... values) {
run.onProgressUpdate(values);
}
@Override
public void executeWithParams(Params... params) {
execute(params);
}
}
public interface OsmAndTask<Params, Progress, Result> {
public boolean isCancelled();
public boolean cancel(boolean mayInterruptDuringRun);
public void executeWithParams(Params... params);
}
public static abstract class OsmAndTaskRunnable<Params, Progress, Result> {
public OsmAndTask<Params, Progress, Result> exec;
protected void onPreExecute() {}
protected String getName() { return "Runnable";}
protected abstract Result doInBackground(Params... params);
protected void onPostExecute(Result result) {}
protected void onProgressUpdate(Progress... values) {}
}
}