package android.support.v7.preference;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.util.AttributeSet;
import com.ubergeek42.WeechatAndroid.R;
import com.ubergeek42.WeechatAndroid.utils.Constants;
import java.util.Collections;
import java.util.LinkedList;
public class ThemePreference extends DialogPreference {
////////////////////////////////////////////////////////////////////////////////////////////////
public ThemePreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public @NonNull String getThemePath() {
return getSharedPreferences().getString(getKey(), Constants.PREF_COLOR_SCHEME_D);
}
public void setThemePath(String path) {
getSharedPreferences().edit().putString(getKey(), path).commit();
notifyChanged();
}
@Override public CharSequence getSummary() {
return getContext().getString(R.string.pref_theme_summary,
ThemeManager.SEARCH_DIR,
"".equals(getThemePath()) ? getContext().getString(R.string.pref_theme_not_set) : getThemePath());
}
////////////////////////////////////////////////////////////////////////////////////////////////
public static class ThemePreferenceFragment extends PreferenceDialogFragmentCompat implements DialogInterface.OnClickListener {
private LinkedList<ThemeManager.ThemeInfo> themes;
public static ThemePreferenceFragment newInstance(String key) {
ThemePreferenceFragment fragment = new ThemePreferenceFragment();
Bundle b = new Bundle(1);
b.putString("key", key);
fragment.setArguments(b);
return fragment;
}
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
super.onPrepareDialogBuilder(builder);
themes = ThemeManager.enumerateThemes(getContext());
Collections.sort(themes);
// find index of the current theme, and while we are at it
// create a CharSequence[] copy of the theme name list
CharSequence[] list = new CharSequence[themes.size()];
String currentPath = ((ThemePreference) getPreference()).getThemePath();
int idx = 0, checked_item = 0;
for (ThemeManager.ThemeInfo theme : themes) {
if (theme.path.equals(currentPath)) checked_item = idx;
list[idx] = theme.name;
idx++;
}
builder.setSingleChoiceItems(list, checked_item, this);
builder.setPositiveButton(null, null);
}
public void onClick(DialogInterface dialog, int which) {
if (which >= 0)
((ThemePreference) getPreference()).setThemePath(themes.get(which).path);
dialog.dismiss();
}
@Override public void onDialogClosed(boolean b) {}
}
}