package com.erakk.lnreader.task; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.erakk.lnreader.LNReaderApplication; import com.erakk.lnreader.R; import com.erakk.lnreader.callback.CallbackEventData; import com.erakk.lnreader.callback.ICallbackEventData; import com.erakk.lnreader.callback.ICallbackNotifier; import com.erakk.lnreader.callback.IExtendedCallbackNotifier; import com.erakk.lnreader.dao.NovelsDao; import com.erakk.lnreader.model.ImageModel; public class LoadImageTask extends AsyncTask<Void, ICallbackEventData, AsyncTaskResult<ImageModel>> implements ICallbackNotifier { private static final String TAG = LoadImageTask.class.toString(); public volatile IExtendedCallbackNotifier<AsyncTaskResult<ImageModel>> callback; private String url = ""; private final boolean refresh; private final String taskId; private final String parent; public LoadImageTask(String url, String parent, boolean refresh, IExtendedCallbackNotifier<AsyncTaskResult<ImageModel>> callback) { this.callback = callback; this.refresh = refresh; this.taskId = this.toString(); this.url = url; this.parent = parent; } @Override public void onProgressCallback(ICallbackEventData message) { publishProgress(message); } @Override protected void onPreExecute() { // executed on UI thread. callback.onProgressCallback(new CallbackEventData("Starting Download Image", this.taskId)); } @Override protected AsyncTaskResult<ImageModel> doInBackground(Void... params) { Context ctx = LNReaderApplication.getInstance().getApplicationContext(); ImageModel image = new ImageModel(); image.setName(url); try { if (refresh) { publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_refreshing), this.taskId)); return new AsyncTaskResult<ImageModel>(NovelsDao.getInstance().getImageModelFromInternet(image, this.parent, this), ImageModel.class); } else { publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_loading), this.taskId)); return new AsyncTaskResult<ImageModel>(NovelsDao.getInstance().getImageModel(image, this.parent, this), ImageModel.class); } } 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()), this.taskId)); return new AsyncTaskResult<ImageModel>(null, ImageModel.class, e); } } @Override protected void onProgressUpdate(ICallbackEventData... values) { // executed on UI thread. callback.onProgressCallback(values[0]); } @Override protected void onPostExecute(AsyncTaskResult<ImageModel> result) { Context ctx = LNReaderApplication.getInstance().getApplicationContext(); CallbackEventData message = new CallbackEventData(ctx.getResources().getString(R.string.load_image_task_complete), this.taskId); callback.onCompleteCallback(message, result); callback.downloadListSetup(this.taskId, null, 2, result.getError() != null ? true : false); } }