package hk.reality.stock.service.fetcher;
import hk.reality.stock.IndexActivity;
import hk.reality.stock.model.Index;
import hk.reality.stock.view.IndexAdapter;
import hk.reality.utils.NetworkDetector;
import java.util.List;
import android.os.AsyncTask;
import android.util.Log;
public class IndexesUpdateTask extends AsyncTask<Void, Integer, Boolean> {
public static final String TAG = "IndexesUpdateTask";
private IndexActivity activity;
private List<Index> results;
private Error error;
enum Error {
ERROR_NO_NET, ERROR_DOWNLOAD, ERROR_PARSE, ERROR_UNKNOWN
}
public IndexesUpdateTask(IndexActivity activity) {
this.activity = activity;
}
@Override
protected Boolean doInBackground(Void ... ignored) {
Log.i(TAG, "running indexes update in background");
if (!NetworkDetector.hasValidNetwork(activity)) {
error = Error.ERROR_NO_NET;
return Boolean.FALSE;
}
Log.i(TAG, "start fetcher");
IndexesFetcher fetcher = IndexesFetcherFactory.getIndexesFetcher(activity);
results = fetcher.fetch();
return Boolean.TRUE;
}
private void updateIndexes(List<Index> indexes) {
IndexAdapter adapter = activity.getIndexAdapter();
adapter.clear();
for(Index i : indexes) {
adapter.add(i);
}
adapter.notifyDataSetChanged();
}
@Override
protected void onPreExecute() {
activity.getParent().setProgressBarVisibility(true);
activity.getParent().setProgressBarIndeterminateVisibility(true);
}
@Override
protected void onCancelled() {
activity.getParent().setProgressBarVisibility(false);
activity.getParent().setProgressBarIndeterminateVisibility(false);
}
@Override
protected void onPostExecute(Boolean result) {
activity.getParent().setProgressBarVisibility(false);
activity.getParent().setProgressBarIndeterminateVisibility(false);
if (result) {
Log.i(TAG, "update success, number of results ..." + results.size());
updateIndexes(results);
} else {
Log.i(TAG, "update failure");
}
}
}