package net.miz_hi.smileessence.task;
import net.miz_hi.smileessence.core.MyExecutor;
import net.miz_hi.smileessence.util.UiHandler;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public abstract class Task<T> implements Callable<T>
{
protected Runnable callback;
public Task<T> setCallBack(Runnable callback)
{
this.callback = callback;
return this;
}
public Future<T> callAsync()
{
onPreExecute();
final Future<T> future = MyExecutor.submit(this);
MyExecutor.execute(new Runnable()
{
@Override
public void run()
{
try
{
final T result = future.get();
new UiHandler()
{
@Override
public void run()
{
onPostExecute(result);
if (callback != null)
{
callback.run();
}
}
}.post();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
}
});
return future;
}
public abstract void onPreExecute();
/**
* this is called on Ui Thread
*
* @param result: result of task
*/
public abstract void onPostExecute(T result);
}