package com.dotcool.reader.task;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import android.os.AsyncTask;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.dotcool.reader.callback.CallbackEventData;
import com.dotcool.reader.callback.ICallbackEventData;
import com.dotcool.reader.callback.ICallbackNotifier;
import com.dotcool.reader.helper.AsyncTaskResult;
import com.dotcool.reader.helper.WebArchiveReader;
public class LoadWacTask extends AsyncTask<Void, ICallbackEventData, AsyncTaskResult<Boolean>> implements ICallbackNotifier {
private static final String TAG = LoadWacTask.class.toString();
private final WebView wv;
private final String wacName;
private final IAsyncTaskOwner owner;
private final WebArchiveReader wr;
public LoadWacTask(IAsyncTaskOwner owner, WebView wv, String wacName, final WebViewClient client) {
this.wv = wv;
this.wacName = wacName;
this.owner = owner;
wr = new WebArchiveReader() {
@Override
protected void onFinished(WebView webView) {
webView.setWebViewClient(client);
Log.d(TAG, "WAC loaded");
}
};
}
@Override
protected AsyncTaskResult<Boolean> doInBackground(Void... arg0) {
return new AsyncTaskResult<Boolean>(loadFromWac(this.wacName));
}
@Override
protected void onProgressUpdate(ICallbackEventData... values) {
owner.setMessageDialog(values[0]);
}
private boolean loadFromWac(String wacName) {
Log.d(TAG, "Loading from WAC: " + wacName);
publishProgress(new CallbackEventData("Loading from WAC: " + wacName));
try {
FileInputStream is;
is = new FileInputStream(wacName);
return wr.readWebArchive(is);
} catch (FileNotFoundException e) {
Log.e(TAG, "Failed to load saved web archive: " + wacName, e);
}
return false;
}
@Override
protected void onPostExecute(AsyncTaskResult<Boolean> result) {
String message = null;
if (result.getResult()) {
wr.loadToWebView(wv);
message = "Load from: " + wacName;
}
else {
message = "Failed";
}
owner.setMessageDialog(new CallbackEventData(message));
Toast.makeText(owner.getContext(), message, Toast.LENGTH_SHORT).show();
}
public void onCallback(ICallbackEventData message) {
publishProgress(message);
}
}