package com.dotcool.reader.task; import java.io.IOException; 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; public class CopyDBTask extends AsyncTask<Void, ICallbackEventData, Void> implements ICallbackNotifier { private static final String TAG = CopyDBTask.class.toString(); private final ICallbackNotifier callback; private final String source; private final boolean makeBackup; public CopyDBTask(boolean makeBackup, ICallbackNotifier callback, String source) { this.makeBackup = makeBackup; this.source = source; this.callback = callback; } public void onCallback(ICallbackEventData message) { publishProgress(message); } @Override protected Void doInBackground(Void... params) { Context ctx = LNReaderApplication.getInstance().getApplicationContext(); try { copyDB(makeBackup); } catch (IOException e) { String message; if (makeBackup) { message = ctx.getResources().getString(R.string.copy_db_task_backup_error); } else { message = ctx.getResources().getString(R.string.copy_db_task_restore_error); } publishProgress(new CallbackEventData(message)); Log.e(TAG, message, e); } return null; } @Override protected void onProgressUpdate(ICallbackEventData... values) { Log.d(TAG, values[0].getMessage()); if (callback != null) callback.onCallback(new CallbackEventData(values[0].getMessage(), source)); } private void copyDB(boolean makeBackup) throws IOException { Context ctx = LNReaderApplication.getInstance().getApplicationContext(); if (makeBackup) publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.copy_db_task_backup_start))); else publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.copy_db_task_restore_start))); String filePath = NovelsDao.getInstance().copyDB(makeBackup); if (filePath == "null") { publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.database_not_found), source)); } else { if (makeBackup) publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.copy_db_task_backup_complete, filePath))); else publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.copy_db_task_restore_complete))); } } }