package com.vaguehope.onosendai.ui.pref; import java.util.Locale; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import com.vaguehope.onosendai.R; import com.vaguehope.onosendai.config.Prefs; import com.vaguehope.onosendai.model.SupportedLocales; import com.vaguehope.onosendai.util.LocaleHelper; import com.vaguehope.onosendai.util.StringHelper; import com.vaguehope.onosendai.widget.ComboPreference; public class UiPrefFragment extends PreferenceFragment { private static final String DEFAULT_COUNT = "default"; private static final CharSequence[] COUNTS = new CharSequence[] { DEFAULT_COUNT, "1", "2", "3", "4", "5", "6", "7", "8" }; private static final String KEY_LOCALE = "pref_locale"; private static final String KEY_COLUMNS_PORTRAIT = "pref_columns_portrait"; private static final String KEY_COLUMNS_LANDSCAPE = "pref_columns_landscape"; private static final String KEY_COLUMNS_RTL = "pref_columns_rtl"; @Override public void onCreate (final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity())); addLocalePref(); addColumnsCount(KEY_COLUMNS_PORTRAIT, "Visible columns, portrait"); //ES addColumnsCount(KEY_COLUMNS_LANDSCAPE, "Visible columns, landscape"); //ES addColumnsRtl(); } private void addLocalePref () { final ListPreference pref = new ComboPreference(getActivity()); pref.setKey(KEY_LOCALE); pref.setTitle("Locale"); //ES pref.setEntries(SupportedLocales.prefEntries()); pref.setEntryValues(SupportedLocales.prefEntryValues()); pref.setDefaultValue(SupportedLocales.DEFAULT.getValue()); pref.setOnPreferenceChangeListener(this.onLocaleChangeListener); getPreferenceScreen().addPreference(pref); } private void addColumnsCount (final String key, final String title) { final ListPreference pref = new ComboPreference(getActivity()); pref.setKey(key); pref.setTitle(title); pref.setEntries(COUNTS); pref.setEntryValues(COUNTS); pref.setDefaultValue(DEFAULT_COUNT); getPreferenceScreen().addPreference(pref); } private void addColumnsRtl () { final CheckBoxPreference pref = new CheckBoxPreference(getActivity()); pref.setKey(KEY_COLUMNS_RTL); pref.setTitle("Columns RTL"); //ES getPreferenceScreen().addPreference(pref); } final OnPreferenceChangeListener onLocaleChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange (final Preference preference, final Object newValue) { final Locale newLocale = readLocale((String) newValue); LocaleHelper.setLocale(getActivity(), newLocale); return true; } }; /** * Returns null for default. */ public static Locale readLocale (final Context context) { return readLocale(PreferenceManager.getDefaultSharedPreferences(context).getString(KEY_LOCALE, null)); } protected static Locale readLocale (final String rawLocale) { if (StringHelper.isEmpty(rawLocale)) return null; final String[] parts = rawLocale.split("_"); if (parts.length == 1) { return new Locale(parts[0]); } else if (parts.length == 2) { return new Locale(parts[0], parts[1]); } return new Locale(parts[0], parts[1], parts[2]); } /* * Returns 0.f to 1.f. */ public static float readColumnWidth (final Activity activity, final Prefs prefs) { final int orientation = activity.getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT) { final String str = prefs.getSharedPreferences().getString(KEY_COLUMNS_PORTRAIT, null); if (str != null && !DEFAULT_COUNT.equals(str)) return 1f / Integer.parseInt(str); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { final String str = prefs.getSharedPreferences().getString(KEY_COLUMNS_LANDSCAPE, null); if (str != null && !DEFAULT_COUNT.equals(str)) return 1f / Integer.parseInt(str); } return Float.parseFloat(activity.getResources().getString(R.string.column_width)); } public static boolean readColumnsRtl (final Prefs prefs) { return prefs.getSharedPreferences().getBoolean(KEY_COLUMNS_RTL, false); } }