package com.pedrocarrillo.expensetracker.ui.settings; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; import android.view.View; import com.pedrocarrillo.expensetracker.R; /** * Created by pcarrillo on 22/09/2015. */ public class SettingsActivity extends PreferenceActivity implements Preference.OnPreferenceChangeListener, SharedPreferences.OnSharedPreferenceChangeListener { private AppCompatDelegate mDelegate; @Override public void onCreate(Bundle savedInstanceState) { // Add 'general' preferences, defined in the XML file getDelegate().installViewFactory(); getDelegate().onCreate(savedInstanceState); super.onCreate(savedInstanceState); setContentView(R.layout.settings_activity); setToolbar((Toolbar) findViewById(R.id.toolbar)); addPreferencesFromResource(R.xml.pref_general); // For all preferences, attach an OnPreferenceChangeListener so the UI summary can be // updated when the preference changes. bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_country_key))); bindPreferenceSummaryToValue(findPreference(getString(R.string.date_format_key))); } private void setToolbar(Toolbar mToolbar) { setSupportActionBar(mToolbar); getDelegate().getSupportActionBar().setDisplayHomeAsUpEnabled(true); mToolbar.setNavigationIcon(getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha)); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getDelegate().onPostCreate(savedInstanceState); } @Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID); } @Override protected void onPostResume() { super.onPostResume(); getDelegate().onPostResume(); } @Override protected void onStop() { super.onStop(); getDelegate().onStop(); } @Override protected void onDestroy() { super.onDestroy(); getDelegate().onDestroy(); } private void setSupportActionBar(@Nullable Toolbar toolbar) { getDelegate().setSupportActionBar(toolbar); } private AppCompatDelegate getDelegate() { if (mDelegate == null) { mDelegate = AppCompatDelegate.create(this, null); } return mDelegate; } // Registers a shared preference change listener that gets notified when preferences change @Override protected void onResume() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); sp.registerOnSharedPreferenceChangeListener(this); super.onResume(); } // Unregisters a shared preference change listener @Override protected void onPause() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); sp.unregisterOnSharedPreferenceChangeListener(this); super.onPause(); } // This gets called before the preference is changed @Override public boolean onPreferenceChange(Preference preference, Object value) { setPreferenceSummary(preference, value); return true; } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { } private void bindPreferenceSummaryToValue(Preference preference) { preference.setOnPreferenceChangeListener(this); setPreferenceSummary(preference, PreferenceManager .getDefaultSharedPreferences(preference.getContext()) .getString(preference.getKey(), "")); } private void setPreferenceSummary(Preference preference, Object value) { String stringValue = value.toString(); String key = preference.getKey(); if (preference instanceof ListPreference) { // For list preferences, look up the correct display value in // the preference's 'entries' list (since they have separate labels/values). ListPreference listPreference = (ListPreference) preference; int prefIndex = listPreference.findIndexOfValue(stringValue); if (prefIndex >= 0) { preference.setSummary(listPreference.getEntries()[prefIndex]); } } } }