package com.brew.brewshop.widgets;
import android.content.Context;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import com.brew.brewshop.settings.Settings;
import com.brew.brewshop.storage.Nameable;
import com.brew.brewshop.storage.NameableAdapter;
import com.brew.brewshop.storage.inventory.InventoryItem;
import com.brew.brewshop.storage.inventory.InventoryList;
import java.util.List;
public class IngredientSpinner<T> implements AdapterView.OnItemSelectedListener {
private TextView mInventoryLabel;
private Spinner mSpinner;
private Context mContext;
private Settings mSettings;
private IngredientSelectionHandler mHandler;
public IngredientSpinner(Context context, Spinner spinner, TextView label, IngredientSelectionHandler handler) {
mContext = context;
mSpinner = spinner;
mInventoryLabel = label;
mSpinner.setOnItemSelectedListener(this);
mSettings = new Settings(mContext);
mHandler = handler;
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Nameable item = (Nameable) mSpinner.getSelectedItem();
if (!mHandler.checkCustomOptionSelected(item)) {
if (item instanceof InventoryItem) {
mHandler.onInventoryItemSelected((InventoryItem) item);
} else {
mHandler.onDefinedTypeSelected(item);
}
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
//Do nothing
}
public void setSelection(int idx) {
mSpinner.setSelection(idx);
}
public void setNamedItem(Nameable selected, Nameable stored, String customName) {
NameableAdapter adapter = (NameableAdapter) mSpinner.getAdapter();
adapter.setNamedItem(selected, stored, customName);
}
public Nameable getSelectedItem() {
return (Nameable) mSpinner.getSelectedItem();
}
public void showOptions(InventoryList inventory, Nameable nameable, List<T> nameables, int customResource) {
if (isInventoryShowable(inventory, nameable)) {
showInventoryOnly(inventory);
} else {
showAllIngredientOptions(nameables, customResource);
}
}
public boolean isInventoryShowable(InventoryList inventory, Nameable nameable) {
boolean showInventory = mSettings.getShowInventoryInIngredientEdit();
return showInventory && !inventory.isEmpty() && (inventory.contains(nameable) || nameable.getName().length() == 0);
}
public void showInventoryOnly(InventoryList inventory) {
mInventoryLabel.setVisibility(View.VISIBLE);
NameableAdapter<InventoryItem> adapter = new NameableAdapter<InventoryItem>(mContext, inventory);
mSpinner.setAdapter(adapter);
}
public void showAllIngredientOptions(List<T> nameables, int customResource) {
mInventoryLabel.setVisibility(View.GONE);
String customName = mContext.getResources().getString(customResource);
NameableAdapter<T> adapter = new NameableAdapter<T>(mContext, nameables, customName);
mSpinner.setAdapter(adapter);
}
}