package com.dotcool.reader.task;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.dotcool.R;
import com.dotcool.reader.callback.CallbackEventData;
import com.dotcool.reader.callback.DownloadCallbackEventData;
import com.dotcool.reader.callback.ICallbackEventData;
import com.dotcool.reader.callback.ICallbackNotifier;
import com.dotcool.reader.dao.NovelsDao;
import com.dotcool.reader.helper.AsyncTaskResult;
import com.dotcool.reader.model.ImageModel;
public class LoadImageTask extends AsyncTask<String, ICallbackEventData, AsyncTaskResult<ImageModel>> implements ICallbackNotifier {
private static final String TAG = LoadImageTask.class.toString();
public volatile IAsyncTaskOwner owner;
private String url = "";
private final boolean refresh;
private final String taskId;
public LoadImageTask(boolean refresh, IAsyncTaskOwner owner) {
this.owner = owner;
this.refresh = refresh;
this.taskId = this.toString();
}
public void onCallback(ICallbackEventData message) {
publishProgress(message);
}
@Override
protected void onPreExecute() {
// executed on UI thread.
owner.toggleProgressBar(true);
}
@Override
protected AsyncTaskResult<ImageModel> doInBackground(String... params) {
Context ctx = owner.getContext();
this.url = params[0];
ImageModel image = new ImageModel();
image.setName(url);
try {
if (refresh) {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_refreshing)));
return new AsyncTaskResult<ImageModel>(NovelsDao.getInstance().getImageModelFromInternet(image, this));
}
else {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_loading)));
return new AsyncTaskResult<ImageModel>(NovelsDao.getInstance().getImageModel(image, this));
}
} catch (Exception e) {
Log.e(TAG, "Error when getting image: " + e.getMessage(), e);
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_error, e.getMessage())));
return new AsyncTaskResult<ImageModel>(e);
}
}
@Override
protected void onProgressUpdate(ICallbackEventData... values) {
// executed on UI thread.
owner.setMessageDialog(values[0]);
if (values[0].getClass() == DownloadCallbackEventData.class) {
DownloadCallbackEventData data = (DownloadCallbackEventData) values[0];
owner.updateProgress(this.taskId, data.getPercentage(), 100, data.getMessage());
}
else if (values[0].getClass() == CallbackEventData.class) {
owner.setMessageDialog(values[0]);
}
}
@Override
protected void onPostExecute(AsyncTaskResult<ImageModel> result) {
owner.onGetResult(result, ImageModel.class);
owner.downloadListSetup(this.taskId, null, 2, result.getError() != null ? true : false);
owner.setMessageDialog(new CallbackEventData(owner.getContext().getResources().getString(R.string.load_image_task_complete)));
}
}