package com.dotcool.reader.task; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.dotcool.reader.LNReaderApplication; import com.dotcool.R; import com.dotcool.reader.callback.CallbackEventData; 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.NovelCollectionModel; import com.dotcool.reader.model.PageModel; public class LoadNovelDetailsTask extends AsyncTask<PageModel, ICallbackEventData, AsyncTaskResult<NovelCollectionModel>> implements ICallbackNotifier { private static final String TAG = LoadNovelDetailsTask.class.toString(); private boolean refresh = false; public volatile IAsyncTaskOwner owner; public LoadNovelDetailsTask(boolean refresh, IAsyncTaskOwner owner) { super(); this.owner = owner; this.refresh = refresh; } public void onCallback(ICallbackEventData message) { publishProgress(message); } @Override protected void onPreExecute() { // executed on UI thread. owner.toggleProgressBar(true); } @Override protected AsyncTaskResult<NovelCollectionModel> doInBackground(PageModel... arg0) { Context ctx = LNReaderApplication.getInstance().getApplicationContext(); PageModel page = arg0[0]; try { if (refresh) { publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_detail_task_refreshing))); NovelCollectionModel novelCol = NovelsDao.getInstance().getNovelDetailsFromInternet(page, this); return new AsyncTaskResult<NovelCollectionModel>(novelCol); } else { publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_detail_task_loading))); NovelCollectionModel novelCol = NovelsDao.getInstance().getNovelDetails(page, this); return new AsyncTaskResult<NovelCollectionModel>(novelCol); } } catch (Exception e) { Log.e(TAG, e.getClass().toString() + ": " + e.getMessage(), e); publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_detail_task_error, e.getMessage()))); return new AsyncTaskResult<NovelCollectionModel>(e); } } @Override protected void onProgressUpdate(ICallbackEventData... values) { owner.setMessageDialog(values[0]); } @Override protected void onPostExecute(AsyncTaskResult<NovelCollectionModel> result) { owner.setMessageDialog(new CallbackEventData(owner.getContext().getResources().getString(R.string.load_novel_detail_task_complete))); owner.onGetResult(result, NovelCollectionModel.class); } }