From 8798dea67a02a073f116ab0d39e1ee0c0b775d58 Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Tue, 27 Sep 2016 03:51:33 -0700 Subject: [PATCH] Set theme result from onBackPressed --- .../clock2/settings/SettingsActivity.java | 37 ++++++++++++++ .../clock2/settings/SettingsFragment.java | 50 ------------------- 2 files changed, 37 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/settings/SettingsActivity.java b/app/src/main/java/com/philliphsu/clock2/settings/SettingsActivity.java index bfdc605..4e5bb0d 100644 --- a/app/src/main/java/com/philliphsu/clock2/settings/SettingsActivity.java +++ b/app/src/main/java/com/philliphsu/clock2/settings/SettingsActivity.java @@ -1,6 +1,11 @@ package com.philliphsu.clock2.settings; +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; +import android.view.MenuItem; import com.philliphsu.clock2.BaseActivity; import com.philliphsu.clock2.R; @@ -11,9 +16,14 @@ import com.philliphsu.clock2.R; public class SettingsActivity extends BaseActivity { public static final String EXTRA_THEME_CHANGED = "com.philliphsu.clock2.settings.extra.THEME_CHANGED"; + private String mInitialTheme; + private SharedPreferences mPrefs; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mPrefs = PreferenceManager.getDefaultSharedPreferences(this); + mInitialTheme = getSelectedTheme(); } @Override @@ -30,4 +40,31 @@ public class SettingsActivity extends BaseActivity { protected boolean isDisplayShowTitleEnabled() { return true; } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + setThemeResult(getSelectedTheme()); + return false; // Don't capture, proceed as usual + default: + return false; + } + } + + @Override + public void onBackPressed() { + setThemeResult(getSelectedTheme()); + super.onBackPressed(); + } + + private String getSelectedTheme() { + return mPrefs.getString(getString(R.string.key_theme), ""); + } + + private void setThemeResult(String selectedTheme) { + Intent result = new Intent(); + result.putExtra(EXTRA_THEME_CHANGED, !selectedTheme.equals(mInitialTheme)); + setResult(Activity.RESULT_OK, result); + } } \ No newline at end of file diff --git a/app/src/main/java/com/philliphsu/clock2/settings/SettingsFragment.java b/app/src/main/java/com/philliphsu/clock2/settings/SettingsFragment.java index c916bf4..871e893 100644 --- a/app/src/main/java/com/philliphsu/clock2/settings/SettingsFragment.java +++ b/app/src/main/java/com/philliphsu/clock2/settings/SettingsFragment.java @@ -1,8 +1,6 @@ package com.philliphsu.clock2.settings; -import android.app.Activity; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.media.AudioManager; import android.media.Ringtone; @@ -11,25 +9,17 @@ import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; import android.preference.RingtonePreference; -import android.view.MenuItem; import com.philliphsu.clock2.R; public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { - private String mInitialTheme; - private SharedPreferences mPrefs; - public SettingsFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // We don't have a menu, but this is needed so we can receive callbacks to the options menu. - // The only callback we are interested in is onOptionsItemSelected(). - setHasOptionsMenu(true); addPreferencesFromResource(R.xml.preferences); // Set ringtone summary setSummary(getPreferenceScreen().getSharedPreferences(), getString(R.string.key_timer_ringtone)); @@ -45,8 +35,6 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer return true; } }); - mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - mInitialTheme = mPrefs.getString(keyOfThemePreference(), ""); } @Override @@ -63,43 +51,9 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer .unregisterOnSharedPreferenceChangeListener(this); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - /* - * https://developer.android.com/guide/topics/ui/menus.html#RespondingOptionsMenu - * "If your activity includes fragments, the system first calls onOptionsItemSelected() - * for the activity then for each fragment (in the order each fragment was added) - * until one returns true or all fragments have been called." - */ - switch (item.getItemId()) { - case android.R.id.home: - String selectedTheme = mPrefs.getString(keyOfThemePreference(), ""); - Intent result = new Intent(); - result.putExtra(SettingsActivity.EXTRA_THEME_CHANGED, !selectedTheme.equals(mInitialTheme)); - getActivity().setResult(Activity.RESULT_OK, result); - return false; // Don't capture, proceed as usual - default: - return false; - } - } - @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { setSummary(sharedPreferences, key); - // -------------------------------------------------------------------------------------- - // TOneverDO - // - // A new instance of the activity would be created and onCreate() called again. - // Our reading of the initial theme for the previous instance, which would be destroyed, - // would not be retained. - // Reading the initial theme *for the new instance* would give us the theme - // that the previous instance had just changed to, prior to its recreate(). - // As such, the result passed back *by the new instance* via the up button - // would always indicate the theme didn't change. -// if (key.equals(keyOfThemePreference())) { -// getActivity().recreate(); -// } - // -------------------------------------------------------------------------------------- } private void setSummary(SharedPreferences prefs, String key) { @@ -112,8 +66,4 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer pref.setSummary(ringtone.getTitle(getActivity())); } } - - private String keyOfThemePreference() { - return getString(R.string.key_theme); - } }