From 4d412d53dc85d2f1d50f43b92a03c3e374872445 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Thu, 25 Jun 2015 19:22:13 +0200 Subject: Automatically recreate activities on theme change --- .../keychain/ui/SettingsActivity.java | 33 ++++++++++++++++++++++ .../keychain/ui/base/BaseActivity.java | 33 +++++++++++++++++++--- 2 files changed, 62 insertions(+), 4 deletions(-) (limited to 'OpenKeychain/src/main/java/org') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java index 27ce3ac56..e7c5f51ab 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java @@ -33,6 +33,7 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.support.v7.widget.Toolbar; import android.text.TextUtils; +import android.view.ContextThemeWrapper; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -59,10 +60,13 @@ public class SettingsActivity extends AppCompatPreferenceActivity { private PreferenceScreen mKeyServerPreference = null; private static Preferences sPreferences; + private String mCurrentTheme = null; @Override protected void onCreate(Bundle savedInstanceState) { sPreferences = Preferences.getPreferences(this); + + changeTheme(); super.onCreate(savedInstanceState); setupToolbar(); @@ -114,6 +118,35 @@ public class SettingsActivity extends AppCompatPreferenceActivity { } } + @Override + protected void onResume() { + super.onResume(); + + if (changeTheme()) { + Intent intent = getIntent(); + finish(); + startActivity(intent); + } + } + + protected boolean changeTheme() { + String newTheme = sPreferences.getTheme(); + if (mCurrentTheme != null && mCurrentTheme.equals(newTheme)) { + return false; + } + + int themeId = R.style.LightTheme; + if ("dark".equals(newTheme)) { + themeId = R.style.DarkTheme; + } + + ContextThemeWrapper w = new ContextThemeWrapper(this, themeId); + getTheme().setTo(w.getTheme()); + mCurrentTheme = newTheme; + + return true; + } + /** * Hack to get Toolbar in PreferenceActivity. See http://stackoverflow.com/a/26614696 */ diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java index 82f62f933..6ba4b9e22 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java @@ -18,6 +18,7 @@ package org.sufficientlysecure.keychain.ui.base; import android.app.Activity; +import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -39,21 +40,45 @@ public abstract class BaseActivity extends AppCompatActivity { protected Toolbar mToolbar; protected View mStatusBar; private static Preferences sPreferences; + private String mCurrentTheme = null; @Override protected void onCreate(Bundle savedInstanceState) { sPreferences = Preferences.getPreferences(this); + + changeTheme(); + super.onCreate(savedInstanceState); + initLayout(); + initToolbar(); + } + + @Override + protected void onResume() { + super.onResume(); + + if (changeTheme()) { + Intent intent = getIntent(); + finish(); + startActivity(intent); + } + } + + protected boolean changeTheme() { + String newTheme = sPreferences.getTheme(); + if (mCurrentTheme != null && mCurrentTheme.equals(newTheme)) { + return false; + } + int themeId = R.style.LightTheme; - if ("dark".equals(sPreferences.getTheme())) { + if ("dark".equals(newTheme)) { themeId = R.style.DarkTheme; } ContextThemeWrapper w = new ContextThemeWrapper(this, themeId); getTheme().setTo(w.getTheme()); + mCurrentTheme = newTheme; - super.onCreate(savedInstanceState); - initLayout(); - initToolbar(); + return true; } protected void initLayout() { -- cgit v1.2.3