package com.lateensoft.pathfinder.toolkit.views.character;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.google.common.collect.Lists;
import com.lateensoft.pathfinder.toolkit.R;
import com.lateensoft.pathfinder.toolkit.adapters.character.FluffListAdapter;
import com.lateensoft.pathfinder.toolkit.dao.DataAccessException;
import com.lateensoft.pathfinder.toolkit.db.dao.table.CharacterNameDAO;
import com.lateensoft.pathfinder.toolkit.db.dao.table.FluffDAO;
import com.lateensoft.pathfinder.toolkit.model.IdNamePair;
import com.lateensoft.pathfinder.toolkit.model.character.FluffInfo;
import com.lateensoft.pathfinder.toolkit.views.SimpleValueEditorDialog;
import java.util.List;
public class CharacterFluffFragment extends AbstractCharacterSheetFragment {
@SuppressWarnings("unused")
private static final String TAG = CharacterFluffFragment.class.getSimpleName();
private ListView fluffList;
private int fluffIndexSelectedForEdit;
private CharacterNameDAO characterNameDao;
private FluffDAO fluffDao;
private String[] fluffNames;
private List<String> fluffValues;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
characterNameDao = new CharacterNameDAO(getContext());
fluffDao = new FluffDAO(getContext());
fluffNames = getResources().getStringArray(R.array.fluff_fields);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
setRootView(inflater.inflate(R.layout.character_fluff_fragment,
container, false));
fluffList = (ListView) getRootView().findViewById(R.id.fluff_list);
fluffList.setOnItemClickListener(listItemClickListener);
return getRootView();
}
private OnItemClickListener listItemClickListener = new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
fluffIndexSelectedForEdit = position;
showItemDialog(position);
}
};
private void showItemDialog(int fluffIndex) {
SimpleValueEditorDialog.builder(getContext())
.forType(SimpleValueEditorDialog.ValueType.TEXT_MULTILINE)
.withHint(R.string.fluff_hint)
.withTitle(fluffNames[fluffIndex])
.withInitialValue(fluffValues.get(fluffIndex))
.withOnFinishedListener(new EditDialogListener())
.build()
.show();
}
private class EditDialogListener implements SimpleValueEditorDialog.OnEditingFinishedListener {
@Override public void onEditingFinished(boolean okWasPressed, Editable editable) {
if (okWasPressed) {
fluffValues.set(fluffIndexSelectedForEdit, editable.toString());
updateDatabase();
refreshFluffListView();
}
hideKeyboardDelayed(0);
}
}
private void refreshFluffListView() {
if (fluffValues != null) {
FluffListAdapter adapter = new FluffListAdapter(getContext(),
R.layout.character_fluff_row, fluffNames,
fluffValues);
fluffList.setAdapter(adapter);
setTitle(getCharacterName());
}
}
private String getCharacterName() {
return fluffValues.get(0);
}
@Override
public void updateFragmentUI() {
refreshFluffListView();
}
@Override
public String getFragmentTitle() {
return getString(R.string.tab_character_fluff);
}
@Override
public void updateDatabase() {
if (fluffValues != null) {
long currentCharacterId = getCurrentCharacterID();
try {
characterNameDao.update(new IdNamePair(currentCharacterId, getCharacterName()));
FluffInfo fluff = buildModelFromFluffValues();
fluffDao.update(currentCharacterId, fluff);
} catch (DataAccessException e) {
Log.e(TAG, "Failed to update character " + currentCharacterId);
}
}
}
private FluffInfo buildModelFromFluffValues() {
FluffInfo fluff = new FluffInfo();
fluff.setAlignment(fluffValues.get(1));
fluff.setXP(fluffValues.get(2));
fluff.setNextLevelXP(fluffValues.get(3));
fluff.setPlayerClass(fluffValues.get(4));
fluff.setRace(fluffValues.get(5));
fluff.setDeity(fluffValues.get(6));
fluff.setLevel(fluffValues.get(7));
fluff.setSize(fluffValues.get(8));
fluff.setGender(fluffValues.get(9));
fluff.setHeight(fluffValues.get(10));
fluff.setWeight(fluffValues.get(11));
fluff.setEyes(fluffValues.get(12));
fluff.setHair(fluffValues.get(13));
fluff.setLanguages(fluffValues.get(14));
fluff.setDescription(fluffValues.get(15));
return fluff;
}
@Override
public void loadFromDatabase() {
FluffInfo fluff = fluffDao.find(getCurrentCharacterID());
String name = characterNameDao.find(getCurrentCharacterID()).getName();
setFluffFields(name, fluff);
}
private void setFluffFields(String name, FluffInfo fluff) {
if (fluffValues == null) {
fluffValues = Lists.newArrayListWithCapacity(fluffNames.length);
for (String fluffName : fluffNames) {
fluffValues.add(null);
}
}
fluffValues.set(0, name);
fluffValues.set(1, fluff.getAlignment());
fluffValues.set(2, fluff.getXP());
fluffValues.set(3, fluff.getNextLevelXP());
fluffValues.set(4, fluff.getPlayerClass());
fluffValues.set(5, fluff.getRace());
fluffValues.set(6, fluff.getDeity());
fluffValues.set(7, fluff.getLevel());
fluffValues.set(8, fluff.getSize());
fluffValues.set(9, fluff.getGender());
fluffValues.set(10, fluff.getHeight());
fluffValues.set(11, fluff.getWeight());
fluffValues.set(12, fluff.getEyes());
fluffValues.set(13, fluff.getHair());
fluffValues.set(14, fluff.getLanguages());
fluffValues.set(15, fluff.getDescription());
}
}