/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.activity.setting; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.database.DataSetObserver; import android.os.Parcel; import android.os.Parcelable; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.RadioButton; import android.widget.TextView; import com.galaxy.meetup.client.android.R; /** * * @author sihai * */ public class EsListPreference extends DialogPreference { private int mClickedDialogEntryIndex; private CharSequence mEntries[]; private CharSequence mEntrySummaries[]; private CharSequence mEntrySummaryArgument; private CharSequence mEntryValues[]; private LayoutInflater mInflater; private String mValue; public EsListPreference(Context context) { this(context, null); } public EsListPreference(Context context, AttributeSet attributeset) { super(context, attributeset); TypedArray typedarray = context.obtainStyledAttributes(attributeset, R.styleable.EsListPreference, 0, 0); mEntries = typedarray.getTextArray(0); mEntryValues = typedarray.getTextArray(1); mEntrySummaries = typedarray.getTextArray(2); typedarray.recycle(); mInflater = (LayoutInflater)context.getSystemService("layout_inflater"); } private int getValueIndex() { String s; int i; s = mValue; if(s == null || mEntryValues == null) { i = -1 + mEntryValues.length; if(i >= 0) { if(!mEntryValues[i].equals(s)) { i--; return i; } } } i = -1; return i; } protected void onDialogClosed(boolean flag) { super.onDialogClosed(flag); if(flag && mClickedDialogEntryIndex >= 0 && mEntryValues != null) { String s = mEntryValues[mClickedDialogEntryIndex].toString(); if(callChangeListener(s)) setValue(s); } } protected Object onGetDefaultValue(TypedArray typedarray, int i) { return typedarray.getString(i); } protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder builder) { super.onPrepareDialogBuilder(builder); if(mEntries == null || mEntryValues == null) { throw new IllegalStateException("ListPreference requires an entries array and an entryValues array."); } else { mClickedDialogEntryIndex = getValueIndex(); builder.setSingleChoiceItems(new ListAdapter() { public final boolean areAllItemsEnabled() { return true; } public final int getCount() { return mEntries.length; } public final Object getItem(int i) { return mEntryValues[i]; } public final long getItemId(int i) { return (long)i; } public final int getItemViewType(int i) { return 0; } public final View getView(int i, View view, ViewGroup viewgroup) { boolean flag = true; View view1; TextView textview; RadioButton radiobutton; if(view == null) view1 = mInflater.inflate(R.layout.simple_list_item_2_single_choice, viewgroup, false); else view1 = view; ((TextView)view1.findViewById(0x1020014)).setText(mEntries[i]); textview = (TextView)view1.findViewById(0x1020015); if(mEntrySummaryArgument != null) { String s = mEntrySummaries[i].toString(); Object aobj[] = new Object[1]; aobj[0] = mEntrySummaryArgument; textview.setText(String.format(s, aobj)); } else { textview.setText(mEntrySummaries[i]); } radiobutton = (RadioButton)view1.findViewById(R.id.radio); if(i != mClickedDialogEntryIndex) flag = false; radiobutton.setChecked(flag); return view1; } public final int getViewTypeCount() { return 1; } public final boolean hasStableIds() { return true; } public final boolean isEmpty() { boolean flag; if(mEntries.length == 0) flag = true; else flag = false; return flag; } public final boolean isEnabled(int i) { return true; } public final void registerDataSetObserver(DataSetObserver datasetobserver) { } public final void unregisterDataSetObserver(DataSetObserver datasetobserver) { } }, mClickedDialogEntryIndex, new android.content.DialogInterface.OnClickListener() { public final void onClick(DialogInterface dialoginterface, int i) { mClickedDialogEntryIndex = i; EsListPreference.this.onClick(dialoginterface, -1); dialoginterface.dismiss(); } }); builder.setPositiveButton(null, null); return; } } protected void onRestoreInstanceState(Parcelable parcelable) { if(parcelable == null || !parcelable.getClass().equals(SavedState.class)) { super.onRestoreInstanceState(parcelable); } else { SavedState savedstate = (SavedState)parcelable; super.onRestoreInstanceState(savedstate.getSuperState()); setValue(savedstate.value); } } protected Parcelable onSaveInstanceState() { Object obj = super.onSaveInstanceState(); if(!isPersistent()) { SavedState savedstate = new SavedState(((Parcelable) (obj))); savedstate.value = mValue; obj = savedstate; } return ((Parcelable) (obj)); } protected void onSetInitialValue(boolean flag, Object obj) { String s; if(flag) s = getPersistedString(mValue); else s = (String)obj; setValue(s); } public final void setEntrySummaryArgument(CharSequence charsequence) { mEntrySummaryArgument = charsequence; } public final void setValue(String s) { mValue = s; persistString(s); } private static class SavedState extends android.preference.Preference.BaseSavedState { public static final android.os.Parcelable.Creator CREATOR = new android.os.Parcelable.Creator() { public final Object createFromParcel(Parcel parcel) { return new SavedState(parcel); } public final Object[] newArray(int i) { return new SavedState[i]; } }; String value; public SavedState(Parcel parcel) { super(parcel); value = parcel.readString(); } public SavedState(Parcelable parcelable) { super(parcelable); } public void writeToParcel(Parcel parcel, int i) { super.writeToParcel(parcel, i); parcel.writeString(value); } } }