package io.evercam.androidapp.custom; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.preference.ListPreference; import android.util.AttributeSet; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import io.evercam.androidapp.R; public class ThemedListPreference extends ListPreference implements OnItemClickListener { public static final String TAG = "evercamplay-ThemedListPreference"; private int mClickedDialogEntryIndex; private CharSequence mDialogTitle; public ThemedListPreference(Context context, AttributeSet attrs) { super(context, attrs); } public ThemedListPreference(Context context) { super(context); } @Override protected View onCreateDialogView() { // inflate custom layout with custom title & listview View view = View.inflate(getContext(), R.layout.custom_list_preference, null); mDialogTitle = getDialogTitle(); if(mDialogTitle == null) mDialogTitle = getTitle(); TextView titleTextView = ((TextView) view.findViewById(R.id.dialog_title)); titleTextView.setText(mDialogTitle); ListView list = (ListView) view.findViewById(android.R.id.list); // note the layout we're providing for the ListView entries ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(), R.layout.list_radio_button, getEntries()); list.setAdapter(adapter); list.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); list.setItemChecked(findIndexOfValue(getValue()), true); list.setOnItemClickListener(this); return view; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mClickedDialogEntryIndex = position; ThemedListPreference.this.onClick(getDialog(), DialogInterface.BUTTON_POSITIVE); getDialog().dismiss(); } @Override protected void onPrepareDialogBuilder(Builder builder) { // adapted from ListPreference if(getEntries() == null || getEntryValues() == null) { // throws exception super.onPrepareDialogBuilder(builder); return; } mClickedDialogEntryIndex = findIndexOfValue(getValue()); // .setTitle(null) to prevent default (blue) // title+divider from showing up builder.setTitle(null); builder.setPositiveButton(null, null); } @Override protected void onDialogClosed(boolean positiveResult) { // adapted from ListPreference super.onDialogClosed(positiveResult); if(positiveResult && mClickedDialogEntryIndex >= 0 && getEntryValues() != null) { String value = getEntryValues()[mClickedDialogEntryIndex].toString(); if(callChangeListener(value)) { setValue(value); } } } }