Set theme result from onBackPressed
This commit is contained in:
parent
26215d3641
commit
8798dea67a
@ -1,6 +1,11 @@
|
|||||||
package com.philliphsu.clock2.settings;
|
package com.philliphsu.clock2.settings;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import com.philliphsu.clock2.BaseActivity;
|
import com.philliphsu.clock2.BaseActivity;
|
||||||
import com.philliphsu.clock2.R;
|
import com.philliphsu.clock2.R;
|
||||||
@ -11,9 +16,14 @@ import com.philliphsu.clock2.R;
|
|||||||
public class SettingsActivity extends BaseActivity {
|
public class SettingsActivity extends BaseActivity {
|
||||||
public static final String EXTRA_THEME_CHANGED = "com.philliphsu.clock2.settings.extra.THEME_CHANGED";
|
public static final String EXTRA_THEME_CHANGED = "com.philliphsu.clock2.settings.extra.THEME_CHANGED";
|
||||||
|
|
||||||
|
private String mInitialTheme;
|
||||||
|
private SharedPreferences mPrefs;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
mInitialTheme = getSelectedTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -30,4 +40,31 @@ public class SettingsActivity extends BaseActivity {
|
|||||||
protected boolean isDisplayShowTitleEnabled() {
|
protected boolean isDisplayShowTitleEnabled() {
|
||||||
return true;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,8 +1,6 @@
|
|||||||
package com.philliphsu.clock2.settings;
|
package com.philliphsu.clock2.settings;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.Ringtone;
|
import android.media.Ringtone;
|
||||||
@ -11,25 +9,17 @@ import android.net.Uri;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.preference.RingtonePreference;
|
import android.preference.RingtonePreference;
|
||||||
import android.view.MenuItem;
|
|
||||||
|
|
||||||
import com.philliphsu.clock2.R;
|
import com.philliphsu.clock2.R;
|
||||||
|
|
||||||
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private String mInitialTheme;
|
|
||||||
private SharedPreferences mPrefs;
|
|
||||||
|
|
||||||
public SettingsFragment() {}
|
public SettingsFragment() {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(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);
|
addPreferencesFromResource(R.xml.preferences);
|
||||||
// Set ringtone summary
|
// Set ringtone summary
|
||||||
setSummary(getPreferenceScreen().getSharedPreferences(), getString(R.string.key_timer_ringtone));
|
setSummary(getPreferenceScreen().getSharedPreferences(), getString(R.string.key_timer_ringtone));
|
||||||
@ -45,8 +35,6 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
|
||||||
mInitialTheme = mPrefs.getString(keyOfThemePreference(), "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -63,43 +51,9 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer
|
|||||||
.unregisterOnSharedPreferenceChangeListener(this);
|
.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
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
setSummary(sharedPreferences, 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) {
|
private void setSummary(SharedPreferences prefs, String key) {
|
||||||
@ -112,8 +66,4 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer
|
|||||||
pref.setSummary(ringtone.getTitle(getActivity()));
|
pref.setSummary(ringtone.getTitle(getActivity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String keyOfThemePreference() {
|
|
||||||
return getString(R.string.key_theme);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user