/*
* Copyright (c) 2014. The Trustees of Indiana University.
*
* This version of the code is licensed under the MPL 2.0 Open Source license with additional
* healthcare disclaimer. If the user is an entity intending to commercialize any application
* that uses this code in a for-profit venture, please contact the copyright holder.
*/
package com.muzima.tasks;
import android.os.AsyncTask;
import android.widget.Toast;
import com.muzima.R;
import com.muzima.adapters.forms.FormsAdapter;
import com.muzima.model.BaseForm;
import java.lang.ref.WeakReference;
import java.util.List;
import static com.muzima.adapters.ListAdapter.BackgroundListQueryTaskListener;
public abstract class FormsAdapterBackgroundQueryTask<T extends BaseForm> extends AsyncTask<Void, Void, List<T>> {
protected WeakReference<FormsAdapter> adapterWeakReference;
public FormsAdapterBackgroundQueryTask(FormsAdapter adapter) {
adapterWeakReference = new WeakReference<FormsAdapter>(adapter);
}
@Override
protected void onPreExecute() {
if (adapterWeakReference.get() != null) {
FormsAdapter formsAdapter = adapterWeakReference.get();
BackgroundListQueryTaskListener backgroundListQueryTaskListener = formsAdapter.getBackgroundListQueryTaskListener();
if (backgroundListQueryTaskListener != null) {
backgroundListQueryTaskListener.onQueryTaskStarted();
}
}
}
@Override
protected void onPostExecute(List<T> forms) {
if (forms==null) {
Toast.makeText(adapterWeakReference.get().getContext(), adapterWeakReference.get().getContext().getString(R.string.error_form_load), Toast.LENGTH_SHORT).show();
}
changeDataSet(forms);
notifyListener();
}
protected void notifyListener() {
if (adapterWeakReference.get() != null) {
FormsAdapter formsAdapter = adapterWeakReference.get();
BackgroundListQueryTaskListener backgroundListQueryTaskListener = formsAdapter.getBackgroundListQueryTaskListener();
if (backgroundListQueryTaskListener != null) {
backgroundListQueryTaskListener.onQueryTaskFinish();
}
}
}
protected void changeDataSet(List<T> forms) {
if (adapterWeakReference.get() != null) {
FormsAdapter formsAdapter = adapterWeakReference.get();
if (forms == null) {
Toast.makeText(formsAdapter.getContext(), formsAdapter.getContext().getString(R.string.error_form_fetch), Toast.LENGTH_SHORT).show();
return;
}
formsAdapter.clear();
formsAdapter.addAll(forms);
formsAdapter.notifyDataSetChanged();
}
}
}