diff options
Diffstat (limited to 'OpenKeychain/src/main/java/org')
4 files changed, 57 insertions, 1 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index 621387ca2..a45cac832 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -103,6 +103,7 @@ public final class Constants {          public static final String PROXY_HOST = "proxyHost";          public static final String PROXY_PORT = "proxyPort";          public static final String PROXY_TYPE = "proxyType"; +        public static final String THEME = "theme";      }      /** 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 bcf42ba74..27ce3ac56 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java @@ -53,6 +53,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {      public static final String ACTION_PREFS_CLOUD = "org.sufficientlysecure.keychain.ui.PREFS_CLOUD";      public static final String ACTION_PREFS_ADV = "org.sufficientlysecure.keychain.ui.PREFS_ADV";      public static final String ACTION_PREFS_PROXY = "org.sufficientlysecure.keychain.ui.PREFS_PROXY"; +    public static final String ACTION_PREFS_GUI = "org.sufficientlysecure.keychain.ui.PREFS_GUI";      public static final int REQUEST_CODE_KEYSERVER_PREF = 0x00007005; @@ -106,6 +107,10 @@ public class SettingsActivity extends AppCompatPreferenceActivity {              initializeUseNumKeypadForYubiKeyPin(                      (CheckBoxPreference) findPreference(Constants.Pref.USE_NUMKEYPAD_FOR_YUBIKEY_PIN)); +        } else if (action != null && action.equals(ACTION_PREFS_GUI)) { +            addPreferencesFromResource(R.xml.gui_preferences); + +            initializeTheme((ListPreference) findPreference(Constants.Pref.THEME));          }      } @@ -425,14 +430,30 @@ public class SettingsActivity extends AppCompatPreferenceActivity {                  mUseTor.setEnabled(true);              }          } +    } + +    /** +     * This fragment shows gui preferences. +     */ +    public static class GuiPrefsFragment extends PreferenceFragment { + +        @Override +        public void onCreate(Bundle savedInstanceState) { +            super.onCreate(savedInstanceState); + +            // Load the preferences from an XML resource +            addPreferencesFromResource(R.xml.gui_preferences); + +            initializeTheme((ListPreference) findPreference(Constants.Pref.THEME)); +        }      } -    @TargetApi(Build.VERSION_CODES.KITKAT)      protected boolean isValidFragment(String fragmentName) {          return AdvancedPrefsFragment.class.getName().equals(fragmentName)                  || CloudSearchPrefsFragment.class.getName().equals(fragmentName)                  || ProxyPrefsFragment.class.getName().equals(fragmentName) +                || GuiPrefsFragment.class.getName().equals(fragmentName)                  || super.isValidFragment(fragmentName);      } @@ -461,6 +482,19 @@ public class SettingsActivity extends AppCompatPreferenceActivity {                  });      } +    private static void initializeTheme(final ListPreference mTheme) { +        mTheme.setValue(sPreferences.getTheme()); +        mTheme.setSummary(mTheme.getEntry()); +        mTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { +            public boolean onPreferenceChange(Preference preference, Object newValue) { +                mTheme.setValue((String) newValue); +                mTheme.setSummary(mTheme.getEntry()); +                sPreferences.setTheme((String) newValue); +                return false; +            } +        }); +    } +      private static void initializeSearchKeyserver(final CheckBoxPreference mSearchKeyserver) {          Preferences.CloudSearchPrefs prefs = sPreferences.getCloudSearchPrefs();          mSearchKeyserver.setChecked(prefs.searchKeyserver); 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 9529d8689..82f62f933 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 @@ -22,6 +22,7 @@ import android.os.Bundle;  import android.support.v7.app.ActionBar;  import android.support.v7.app.AppCompatActivity;  import android.support.v7.widget.Toolbar; +import android.view.ContextThemeWrapper;  import android.view.Gravity;  import android.view.LayoutInflater;  import android.view.View; @@ -29,6 +30,7 @@ import android.view.ViewGroup;  import android.widget.TextView;  import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.util.Preferences;  /**   * Setups Toolbar @@ -36,9 +38,19 @@ import org.sufficientlysecure.keychain.R;  public abstract class BaseActivity extends AppCompatActivity {      protected Toolbar mToolbar;      protected View mStatusBar; +    private static Preferences sPreferences;      @Override      protected void onCreate(Bundle savedInstanceState) { +        sPreferences = Preferences.getPreferences(this); +        int themeId = R.style.LightTheme; +        if ("dark".equals(sPreferences.getTheme())) { +            themeId = R.style.DarkTheme; +        } + +        ContextThemeWrapper w = new ContextThemeWrapper(this, themeId); +        getTheme().setTo(w.getTheme()); +          super.onCreate(savedInstanceState);          initLayout();          initToolbar(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index c13c07503..c7b02f696 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -220,6 +220,15 @@ public class Preferences {          return mSharedPreferences.getBoolean(Pref.TEXT_USE_COMPRESSION, true);      } +    public String getTheme() { +        return mSharedPreferences.getString(Pref.THEME, "light"); +    } + +    public void setTheme(String value) { +        SharedPreferences.Editor editor = mSharedPreferences.edit(); +        editor.putString(Constants.Pref.THEME, value); +        editor.commit(); +    }      public void setUseArmor(boolean useArmor) {          SharedPreferences.Editor editor = mSharedPreferences.edit();  | 
