package com.lateensoft.pathfinder.toolkit.views.character;
import com.lateensoft.pathfinder.toolkit.R;
import com.lateensoft.pathfinder.toolkit.adapters.character.InventoryItemListAdapter;
import com.lateensoft.pathfinder.toolkit.dao.DataAccessException;
import com.lateensoft.pathfinder.toolkit.db.dao.table.ItemDAO;
import com.lateensoft.pathfinder.toolkit.model.character.PathfinderCharacter;
import com.lateensoft.pathfinder.toolkit.model.character.items.Item;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.lateensoft.pathfinder.toolkit.views.ParcelableEditorActivity;
import java.util.Collections;
import java.util.List;
public class CharacterInventoryFragment extends IndexedParcelableListFragment<Item, ItemDAO> {
private static final String TAG = CharacterInventoryFragment.class.getSimpleName();
private ListView itemsList;
private Button addButton;
private EditText goldText;
private TextView totalWeightLabel;
private PathfinderCharacter character;
private ItemDAO itemDao;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
itemDao = new ItemDAO(getContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
setRootView(inflater.inflate(R.layout.character_inventory_fragment,
container, false));
addButton = (Button) getRootView().findViewById(R.id.buttonAddItem);
addButton.setOnClickListener(getAddButtonClickListener());
goldText = (EditText) getRootView().findViewById(R.id.editTextGold);
goldText.setOnFocusChangeListener(goldTextFocusChangeListener);
totalWeightLabel = (TextView) getRootView().findViewById(R.id.tvWeightTotal);
itemsList = (ListView) getRootView().findViewById(R.id.listViewInventory);
itemsList.setOnItemClickListener(getListItemClickListener());
return getRootView();
}
private OnFocusChangeListener goldTextFocusChangeListener = new OnFocusChangeListener() {
@Override public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
updateGoldFromInput();
}
}
};
@Override
protected List<Item> getModel() {
return character.getInventory().getItems();
}
@Override
protected Class<? extends ParcelableEditorActivity> getParcelableEditorActivity() {
return InventoryItemEditActivity.class;
}
@Override
protected ItemDAO getDAO() {
return itemDao;
}
private void updateGoldFromInput() {
try {
character.setGold(Double.parseDouble(goldText.getText().toString()));
} catch (NumberFormatException e) {
// Invalid input for gold. Keep old value, to be safe.
goldText.setText(Double.toString(character.getGold()));
}
}
@Override
public void updateFragmentUI() {
goldText.setText(Double.toString(character.getGold()));
updateTotalWeightLabel();
refreshItemsListView();
}
private void updateTotalWeightLabel(){
double totalWeight = character.getInventory().getTotalWeight();
totalWeightLabel.setText(getContext().getString(R.string.inventory_total_weight_header)
+ " " + totalWeight);
}
private void refreshItemsListView(){
List<Item> items = character.getInventory().getItems();
Collections.sort(items);
InventoryItemListAdapter adapter = new InventoryItemListAdapter(getContext(), R.layout.character_inventory_row, items);
itemsList.setAdapter(adapter);
}
@Override
public String getFragmentTitle() {
return getString(R.string.tab_character_inventory);
}
@Override
public void updateDatabase() {
if (character != null) {
updateGoldFromInput();
try {
getCharacterModelDAO().update(character);
} catch (DataAccessException e) {
Log.e(TAG, "Failed to update gold for character " + character.getId(), e);
}
}
}
@Override
public void loadFromDatabase() {
character = getCharacterModelDAO().find(getCurrentCharacterID());
}
}