package co.mwater.clientapp.ui; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import co.mwater.clientapp.R; public class PreferenceWidget extends LinearLayout { TextView title, summary; boolean emptySummary = true; OnChangeListener onChangeListener; String[] listItems; int listValue = Spinner.INVALID_POSITION; boolean editable = true; public PreferenceWidget(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.preference_widget, this); this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); if (isInEditMode()) return; title = (TextView) findViewById(R.id.title); summary = (TextView) findViewById(R.id.summary); this.findViewById(R.id.pref).setOnClickListener(new OnClickListener() { public void onClick(View v) { PreferenceWidget.this.onClick(); } }); } void onClick() { if (!editable) return; EditText inputText = null; Spinner inputSpinner = null; if (listItems == null) { inputText = new EditText(getContext()); inputText.setText(emptySummary ? "" : summary.getText()); } else { inputSpinner = new Spinner(getContext()); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), R.array.source_types, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); inputSpinner.setAdapter(adapter); inputSpinner.setSelection(listValue); } final View input = inputText != null ? inputText : inputSpinner; new AlertDialog.Builder(getContext()) .setTitle(title.getText()) .setView(input) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Object value; if (input instanceof EditText) value = ((EditText) input).getText().toString(); else { int pos = ((Spinner) input).getSelectedItemPosition(); if (pos == Spinner.INVALID_POSITION) value = null; else value = pos; } if (PreferenceWidget.this.onChangeListener != null) PreferenceWidget.this.onChangeListener.onChange(value); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do nothing. } }).show(); } public void setOnChangeListener(OnChangeListener l) { this.onChangeListener = l; } public void setEditable(boolean editable) { this.editable = editable; this.setClickable(editable); } public void setTitle(CharSequence text) { title.setText(text); } public void setSummary(CharSequence text) { if (text.length() == 0) { summary.setTextColor(0xFFD0D0D0); summary.setText("None"); emptySummary = true; } else { summary.setText(text); summary.setTextColor(0xFF000000); emptySummary = false; } } public void setListValue(int listValue) { this.listValue = listValue; } public void setList(String[] listItems) { this.listItems = listItems; } public interface OnChangeListener { public void onChange(Object value); } // EditDialogFragment frag = new EditDialogFragment(); // Bundle args = new Bundle(); // args.putString("title", title.getText().toString()); // args.putString("value", summary.getText().toString()); // frag.setArguments(args); // frag.show(getContext(). getFragmentManager(), "dialog"); // // // public static class EditDialogFragment extends DialogFragment { // @Override // public Dialog onCreateDialog(Bundle savedInstanceState) { // final EditText input = new EditText(getActivity()); // input.setText(getArguments().getString("value")); // return new AlertDialog.Builder(getActivity()) // .setTitle(getArguments().getString("title")) // .setMessage("Some message") // .setView(input) // .setPositiveButton("Ok", new DialogInterface.OnClickListener() { // public void onClick(DialogInterface dialog, int whichButton) { // Editable value = input.getText(); // Toast.makeText(getActivity(), value, Toast.LENGTH_SHORT).show(); // } // }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { // public void onClick(DialogInterface dialog, int whichButton) { // } // }).create(); // // } // } }