package de.westnordost.streetcomplete.view.dialogs;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.NumberPicker;
import java.util.Arrays;
import de.westnordost.streetcomplete.R;
/** A dialog in which you can select one value from a range of values */
public class ValuePickerDialog extends AlertDialog implements DialogInterface.OnClickListener
{
private final NumberPicker numberPicker;
private final NumberPicker.OnValueChangeListener listener;
private final int selectedIndex;
public ValuePickerDialog(Context context, NumberPicker.OnValueChangeListener listener,
String[] values, int selectedIndex, int minIndex, int maxIndex,
CharSequence title)
{
super(context, R.style.AppTheme_AlertDialog);
this.listener = listener;
this.selectedIndex = selectedIndex;
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.number_picker_dialog, null);
setView(view);
setTitle(title);
setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok), this);
setButton(BUTTON_NEGATIVE, context.getString(android.R.string.cancel), this);
numberPicker = (NumberPicker) view.findViewById(R.id.number_picker);
String[] selectableValues = Arrays.copyOfRange(values, minIndex, maxIndex+1);
numberPicker.setDisplayedValues(selectableValues);
numberPicker.setMinValue(minIndex);
numberPicker.setMaxValue(maxIndex);
numberPicker.setValue(selectedIndex);
numberPicker.setWrapSelectorWheel(false);
// do not allow keyboard input
EditText input = findInput(numberPicker);
if(input != null) input.setFocusable(false);
}
private EditText findInput(ViewGroup np) {
int count = np.getChildCount();
for (int i = 0; i < count; i++) {
final View child = np.getChildAt(i);
if (child instanceof ViewGroup) {
findInput((ViewGroup) child);
} else if (child instanceof EditText) {
return (EditText) child;
}
}
return null;
}
@Override public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (listener != null) {
listener.onValueChange(numberPicker, selectedIndex, numberPicker.getValue());
}
break;
case BUTTON_NEGATIVE:
cancel();
break;
}
}
}