package eu.ttbox.androgister.ui.core.crud;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.Toast;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.query.LazyList;
import de.greenrobot.dao.query.QueryBuilder;
import eu.ttbox.androgister.AndroGisterApplication;
import eu.ttbox.androgister.domain.DaoSession;
import eu.ttbox.androgister.domain.DomainModel;
import eu.ttbox.androgister.domain.core.LazyListAdapter;
public abstract class EntityLazyListFragment<T extends DomainModel, DAO extends AbstractDao<T, Long>> extends Fragment {
private static final String TAG = "EntityLazyListFragment";
public static final int ENTITY_EDIT_REQUEST_CODE = 192;
// Service
public DAO entityDao;
// Binding
public AdapterView<ListAdapter> entitiesList;
public LazyListAdapter<T, ? extends Object> listAdapter;
// ===========================================================
// Constructors
// ===========================================================
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Service
entityDao = getEntityDao();
entitiesList = getAdapterContainer();
listAdapter = createListAdapter(null);
entitiesList.setAdapter(listAdapter);
// List
loadData(null);
// Listener
entitiesList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
T item = (T) parent.getItemAtPosition(position);
if (item != null) {
Long entityId = item != null ? item.getId() : null;
onEntityClick(entityId);
}
}
});
}
@Override
public void onDestroyView() {
if (listAdapter != null) {
// Close LazyListAdpater for closing LazyList
listAdapter.close();
listAdapter = null;
}
super.onDestroyView();
}
// ===========================================================
// Event
// ===========================================================
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.w(TAG, "onActivityResult : requestCode = " + requestCode + " ==> resultCode = " + resultCode);
if (requestCode == ENTITY_EDIT_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Toast.makeText(getActivity(), "Success Edit", Toast.LENGTH_LONG).show();
reloadData();
}
super.onActivityResult(requestCode, resultCode, data);
}
// ===========================================================
// Load Data
// ===========================================================
public void reloadData() {
Log.d(TAG, "Begin reloadData");
QueryBuilder<T> query = createSearchQuery(entityDao);
listAdapter.changeCursor(query.listLazy());
}
public void loadData(Bundle bundle) {
// entityDao.queryBuilder()
QueryBuilder<T> query = createSearchQuery(entityDao);
LazyList<T> entities = query.listLazy();
listAdapter.changeCursor(entities);
}
public abstract QueryBuilder<T> createSearchQuery(DAO entityDao);
public abstract LazyListAdapter<T, ? extends Object> createListAdapter(LazyList<T> lazyList);
public abstract AdapterView<ListAdapter> getAdapterContainer();
// ===========================================================
// Services
// ===========================================================
public DaoSession getDaoSession() {
AndroGisterApplication app = (AndroGisterApplication) getActivity().getApplication();
return app.getDaoSession();
}
public abstract DAO getEntityDao();
public abstract void onEntityClick(Long id);
}