package org.sugr.gearshift.ui.settings;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.v7.widget.Toolbar;
import org.sugr.gearshift.G;
import org.sugr.gearshift.R;
import java.util.Arrays;
public class BasePreferenceFragment extends PreferenceFragment
implements OnSharedPreferenceChangeListener {
protected SharedPreferences sharedPrefs;
protected Object[][] summaryPrefs = {
// key, format, values, entries, type_if_no_values_and_entries
};
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override public void onResume() {
super.onResume();
updatePrefSummary(null);
sharedPrefs.registerOnSharedPreferenceChangeListener(this);
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
}
@Override public void onPause() {
super.onPause();
sharedPrefs.unregisterOnSharedPreferenceChangeListener(this);
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
toolbar.setTitle(R.string.settings);
}
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(G.PREF_DEBUG)) {
G.DEBUG = sharedPreferences.getBoolean(key, false);
} else {
G.requestBackup(getActivity());
updatePrefSummary(key);
}
}
protected void updatePrefSummary(String aKey) {
for (Object[] summaryPref : summaryPrefs) {
String key;
if (aKey != null) {
if (aKey.equals(summaryPref[0]))
key = aKey;
else
continue;
} else {
key = (String) summaryPref[0];
}
Preference pref = findPreference(key);
if (pref == null)
continue;
String summary = (String) summaryPref[1];
if ((Integer) summaryPref[2] == -1)
pref.setSummary(String.format(summary, summaryPref[4] == "int"
? Integer.parseInt(sharedPrefs.getString(key, "-1"))
: sharedPrefs.getString(key, "")
));
else {
String[] values = getResources().getStringArray((Integer) summaryPref[2]);
String[] entries = getResources().getStringArray((Integer) summaryPref[3]);
int index = Arrays.asList(values).indexOf(
sharedPrefs.getString(key, sharedPrefs.getString(key, null)));
if (index > -1 && entries.length > index)
pref.setSummary(String.format(summary, entries[index]));
}
}
}
}