package fr.free.nrw.commons; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; 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.v7.app.AppCompatDelegate; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { CommonsApplication app; private AppCompatDelegate mDelegate; @Override protected void onCreate(Bundle savedInstanceState) { getDelegate().installViewFactory(); getDelegate().onCreate(savedInstanceState); // Check prefs on every activity starts if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("theme",false)) { setTheme(R.style.DarkAppTheme); }else { setTheme(R.style.LightAppTheme); // default } super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); ListPreference licensePreference = (ListPreference) findPreference(Prefs.DEFAULT_LICENSE); // WARNING: ORDERING NEEDS TO MATCH FOR THE LICENSE NAMES AND DISPLAY VALUES licensePreference.setEntries(new String[]{ getString(R.string.license_name_cc0), getString(R.string.license_name_cc_by), getString(R.string.license_name_cc_by_four), getString(R.string.license_name_cc_by_sa), getString(R.string.license_name_cc_by_sa_four) }); licensePreference.setEntryValues(new String[]{ Prefs.Licenses.CC0, Prefs.Licenses.CC_BY_3, Prefs.Licenses.CC_BY_4, Prefs.Licenses.CC_BY_SA_3, Prefs.Licenses.CC_BY_SA_4 }); licensePreference.setSummary(getString(Utils.licenseNameFor(licensePreference.getValue()))); licensePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { preference.setSummary(getString(Utils.licenseNameFor((String)newValue))); return true; } }); app = (CommonsApplication)getApplicationContext(); } @Override protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(key.equals("theme")){ // Finish current activity and start new one with selected theme Intent intent = getIntent(); finish(); startActivity(intent); } } // All the stuff below is just to get a actionbar that says settings... @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getDelegate().onPostCreate(savedInstanceState); } @Override public MenuInflater getMenuInflater() { return getDelegate().getMenuInflater(); } @Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID); } @Override public void setContentView(View view) { getDelegate().setContentView(view); } @Override public void setContentView(View view, ViewGroup.LayoutParams params) { getDelegate().setContentView(view, params); } @Override public void addContentView(View view, ViewGroup.LayoutParams params) { getDelegate().addContentView(view, params); } @Override protected void onPostResume() { super.onPostResume(); getDelegate().onPostResume(); } @Override protected void onTitleChanged(CharSequence title, int color) { super.onTitleChanged(title, color); getDelegate().setTitle(title); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); getDelegate().onConfigurationChanged(newConfig); } @Override protected void onStop() { super.onStop(); getDelegate().onStop(); } @Override protected void onDestroy() { super.onDestroy(); getDelegate().onDestroy(); } @Override public void invalidateOptionsMenu() { getDelegate().invalidateOptionsMenu(); } private AppCompatDelegate getDelegate() { if (mDelegate == null) { mDelegate = AppCompatDelegate.create(this, null); } return mDelegate; } }