package com.lateensoft.pathfinder.toolkit.views.character;
import android.os.Parcelable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.lateensoft.pathfinder.toolkit.dao.Identifiable;
import com.lateensoft.pathfinder.toolkit.dao.IdentifiableGenericDAO;
import com.lateensoft.pathfinder.toolkit.dao.OwnedGenericDAO;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public abstract class IndexedParcelableListFragment<T extends Parcelable & Identifiable,
DAO extends OwnedGenericDAO<Long,?,T> & IdentifiableGenericDAO<T>>
extends ParcelableListFragment<T, DAO> {
private int parcelableIndexSelectedForEdit;
protected OnClickListener getAddButtonClickListener() {
return addButtonClickListener;
}
private OnClickListener addButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
parcelableIndexSelectedForEdit = -1;
showEditorActivityForNewObject();
}
};
protected OnItemClickListener getListItemClickListener() {
return listItemClickListener;
}
private OnItemClickListener listItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
parcelableIndexSelectedForEdit = position;
showEditorActivity(getModel().get(position));
}
};
protected abstract List<T> getModel();
@Override
protected EditAction getActionForResult(@NotNull T result) {
return parcelableIndexSelectedForEdit < 0 ? EditAction.ADD : EditAction.UPDATE;
}
@Override
protected void updateModel(EditAction action, T updatedParcelable) {
if (action == EditAction.ADD){
getModel().add(updatedParcelable);
} else if (action == EditAction.UPDATE) {
getModel().set(parcelableIndexSelectedForEdit, updatedParcelable);
}
}
@Override
protected T getObjectMarkedForDeletion() {
return parcelableIndexSelectedForEdit >= 0 ? getModel().get(parcelableIndexSelectedForEdit) : null;
}
@Override
protected void removeFromModel(T toRemove) {
getModel().remove(parcelableIndexSelectedForEdit);
}
}