package com.james.status.data.preference;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.view.View;
import com.james.status.utils.PreferenceUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListPreferenceData extends PreferenceData<Integer> {
private int preference;
private List<ListPreference> items;
private ListPreference selectedPreference;
public ListPreferenceData(Context context, Identifier identifier, OnPreferenceChangeListener<Integer> listener, int defaultItem, ListPreference... items) {
super(context, identifier, listener);
this.items = new ArrayList<>();
this.items.addAll(Arrays.asList(items));
PreferenceUtils.PreferenceIdentifier preferenceIdentifier = identifier.getPreference();
Integer integer = null;
if (preferenceIdentifier != null)
integer = PreferenceUtils.getIntegerPreference(context, preferenceIdentifier);
if (integer != null) preference = integer;
else preference = defaultItem;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
}
@Override
public void onClick(View v) {
selectedPreference = getListPreference(preference);
if (selectedPreference == null) return;
CharSequence[] array = new CharSequence[items.size()];
for (int i = 0; i < items.size(); i++) {
array[i] = items.get(i).name;
}
new AlertDialog.Builder(getContext())
.setTitle(getIdentifier().getTitle())
.setSingleChoiceItems(array, items.indexOf(selectedPreference), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedPreference = items.get(which);
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (selectedPreference != null) {
ListPreferenceData.this.preference = selectedPreference.id;
PreferenceUtils.PreferenceIdentifier identifier = getIdentifier().getPreference();
if (identifier != null)
PreferenceUtils.putPreference(getContext(), identifier, selectedPreference.id);
onPreferenceChange(selectedPreference.id);
selectedPreference = null;
}
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedPreference = null;
}
})
.create()
.show();
}
@Nullable
private ListPreference getListPreference(int id) {
for (ListPreference preference : items) {
if (preference.id == id) return preference;
}
return null;
}
public static class ListPreference implements Parcelable {
public String name;
public int id;
public ListPreference(String name, int id) {
this.name = name;
this.id = id;
}
protected ListPreference(Parcel in) {
name = in.readString();
id = in.readInt();
}
public static final Creator<ListPreference> CREATOR = new Creator<ListPreference>() {
@Override
public ListPreference createFromParcel(Parcel in) {
return new ListPreference(in);
}
@Override
public ListPreference[] newArray(int size) {
return new ListPreference[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(id);
}
}
}