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 de.westnordost.streetcomplete.R;
public class RangePickerDialog extends AlertDialog implements DialogInterface.OnClickListener
{
private final NumberPicker startPicker, endPicker;
private final OnRangeChangeListener listener;
public interface OnRangeChangeListener
{
void onRangeChange(int startIndex, int endIndex);
}
public RangePickerDialog(Context context, OnRangeChangeListener listener, String[] values,
Integer startIndex, Integer endIndex, CharSequence title)
{
super(context, R.style.AppTheme_AlertDialog);
this.listener = listener;
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.range_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);
startPicker = (NumberPicker) view.findViewById(R.id.number_picker_start);
startPicker.setWrapSelectorWheel(false);
startPicker.setDisplayedValues(values);
startPicker.setMinValue(0);
startPicker.setMaxValue(values.length - 1);
startPicker.setValue(startIndex != null ? startIndex : 0);
endPicker = (NumberPicker) view.findViewById(R.id.number_picker_end);
endPicker.setWrapSelectorWheel(false);
endPicker.setDisplayedValues(values);
endPicker.setMinValue(0);
endPicker.setMaxValue(values.length - 1);
endPicker.setValue(endIndex != null ? endIndex : values.length - 1);
// do not allow keyboard input
disableEditTextsFocus(startPicker);
disableEditTextsFocus(endPicker);
}
private void disableEditTextsFocus(ViewGroup np) {
int count = np.getChildCount();
for (int i = 0; i < count; i++) {
final View child = np.getChildAt(i);
if (child instanceof ViewGroup) {
disableEditTextsFocus((ViewGroup) child);
} else if (child instanceof EditText) {
child.setFocusable(false);
}
}
}
@Override public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case BUTTON_POSITIVE:
if (listener != null)
{
listener.onRangeChange(startPicker.getValue(), endPicker.getValue());
}
dismiss();
break;
case BUTTON_NEGATIVE:
cancel();
break;
}
}
}