package com.vaguehope.onosendai.ui; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import com.vaguehope.onosendai.R; import com.vaguehope.onosendai.util.DialogHelper; import com.vaguehope.onosendai.util.DialogHelper.Listener; import com.vaguehope.onosendai.util.TextFilter; public class TextFiltersDialog { public static void show (final Context context, final String inputText, final Listener<String> onFilteredText) { final TextFiltersDialog dlg = new TextFiltersDialog(context, inputText); final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setView(dlg.getRootView()); builder.setNegativeButton(android.R.string.cancel, DialogHelper.DLG_CANCEL_CLICK_LISTENER); builder.setPositiveButton(android.R.string.ok, new android.content.DialogInterface.OnClickListener() { @Override public void onClick (final DialogInterface dialog, final int which) { onFilteredText.onAnswer(dlg.getOutput()); dialog.dismiss(); } }); builder.show(); } private final Context context; private final View llParent; private final String inputText; private final TextView txtPreview; private final Spinner spnFilters; public TextFiltersDialog (final Context context, final String inputText) { this.context = context; this.inputText = inputText; final LayoutInflater inflater = LayoutInflater.from(context); this.llParent = inflater.inflate(R.layout.textfilters, null); this.txtPreview = ((TextView) this.llParent.findViewById(R.id.txtPreview)); this.spnFilters = ((Spinner) this.llParent.findViewById(R.id.spnFilters)); final ArrayAdapter<TextFilter> filtersAdapter = new ArrayAdapter<TextFilter>(context, R.layout.numberspinneritem); filtersAdapter.addAll(TextFilter.values()); this.spnFilters.setAdapter(filtersAdapter); this.spnFilters.setOnItemSelectedListener(this.spnChangeListener); } private View getRootView () { return this.llParent; } protected String getOutput () { final TextFilter filter = (TextFilter) this.spnFilters.getSelectedItem(); if (filter == null) return this.inputText; return filter.apply(this.inputText); } private final OnItemSelectedListener spnChangeListener = new OnItemSelectedListener() { @Override public void onItemSelected (final AdapterView<?> parent, final View view, final int position, final long id) { updatePreview(); } @Override public void onNothingSelected (final AdapterView<?> arg0) {/**/} }; protected void updatePreview () { try { this.txtPreview.setText(getOutput()); } catch (final Exception e) { DialogHelper.alert(this.context, e); } } }