diff options
author | Thialfihar <thi@thialfihar.org> | 2015-06-25 15:17:32 +0200 |
---|---|---|
committer | Thialfihar <thi@thialfihar.org> | 2015-07-21 20:49:08 +0200 |
commit | e51eff40503a9715a98f7d1fb41c3a607b8f67d0 (patch) | |
tree | 445a1baadb0f69b3d701a180557f9ace7c670266 /OpenKeychain | |
parent | e4b113701cfd12b89a18365491b50f6508184bc2 (diff) | |
download | open-keychain-e51eff40503a9715a98f7d1fb41c3a607b8f67d0.tar.gz open-keychain-e51eff40503a9715a98f7d1fb41c3a607b8f67d0.tar.bz2 open-keychain-e51eff40503a9715a98f7d1fb41c3a607b8f67d0.zip |
Add theme setting
This prepares that different themes can be added. Currently light and
dark will just use the default OK theme.
Diffstat (limited to 'OpenKeychain')
11 files changed, 121 insertions, 10 deletions
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index 83d8bce91..35048b936 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -9,15 +9,15 @@ =============== - Last APG 1 version was 10900 (1.0.9 beta 00) - Keychain starting with versionCode 20000! - + Association of file types to Keychain ===================================== General remarks about file ending conventions: - *.gpg,*.pgp for binary files - *.asc for ascii armored files The actual content can be anything. - + The file ending only shows if it is binary or ascii encoded. - + Remarks about the ugly android:pathPattern: - We are matching all files with a specific file ending. This is done in an ugly way because of Android limitations. @@ -73,7 +73,7 @@ android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" - android:theme="@style/KeychainTheme"> + android:theme="@style/LightTheme"> <activity android:name=".ui.MainActivity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" 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(); diff --git a/OpenKeychain/src/main/res/values-v21/themes.xml b/OpenKeychain/src/main/res/values-v21/themes.xml index b47026e5b..dab38f97a 100644 --- a/OpenKeychain/src/main/res/values-v21/themes.xml +++ b/OpenKeychain/src/main/res/values-v21/themes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <style name="KeychainTheme" parent="KeychainTheme.Base"> + <style name="LightTheme" parent="LightBaseTheme"> <item name="android:windowTranslucentStatus">true</item> <!-- enable window content transitions --> @@ -12,4 +12,17 @@ <item name="android:windowSharedElementExitTransition">@android:transition/move</item> </style> -</resources>
\ No newline at end of file + + <style name="DarkTheme" parent="DarkBaseTheme"> + <item name="android:windowTranslucentStatus">true</item> + + <!-- enable window content transitions --> + <item name="android:windowContentTransitions">true</item> + <item name="android:windowAllowEnterTransitionOverlap">true</item> + <item name="android:windowAllowReturnTransitionOverlap">true</item> + <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> + <item name="android:windowSharedElementExitTransition">@android:transition/move</item> + + </style> + +</resources> diff --git a/OpenKeychain/src/main/res/values/arrays.xml b/OpenKeychain/src/main/res/values/arrays.xml index a9f521b17..ef3970672 100644 --- a/OpenKeychain/src/main/res/values/arrays.xml +++ b/OpenKeychain/src/main/res/values/arrays.xml @@ -61,4 +61,12 @@ <item>@string/key_size_custom</item> </string-array> + <string-array name="theme_entries" translatable="false"> + <item>@string/theme_dark</item> + <item>@string/theme_light</item> + </string-array> + <string-array name="theme_values" translatable="false"> + <item>"dark"</item> + <item>"ligh"</item> + </string-array> </resources> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index db81963c1..faa9aa39c 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -50,6 +50,7 @@ <string name="section_cloud_search">"Cloud search"</string> <string name="section_passphrase_cache">"Password/PIN Handling"</string> <string name="section_proxy_settings">"Proxy Settings"</string> + <string name="section_gui">"Interface"</string> <string name="section_certify">"Confirm"</string> <string name="section_actions">"Actions"</string> <string name="section_share_key">"Key"</string> @@ -167,6 +168,7 @@ <string name="label_verify_keyserver">"Verify keyserver"</string> <string name="label_enter_keyserver_url">"Enter keyserver URL"</string> <string name="label_keyserver_dialog_delete">"Delete keyserver"</string> + <string name="label_theme">"Theme"</string> <string name="pref_keyserver">"OpenPGP keyservers"</string> <string name="pref_keyserver_summary">"Search keys on selected OpenPGP keyservers (HKP protocol)"</string> @@ -245,6 +247,8 @@ <string name="filemanager_title_open">"Open…"</string> <string name="error">"Error"</string> <string name="error_message">"Error: %s"</string> + <string name="theme_dark">"Dark"</string> + <string name="theme_light">"Light"</string> <!-- key flags --> <string name="flag_certify">"Certify"</string> diff --git a/OpenKeychain/src/main/res/values/themes.xml b/OpenKeychain/src/main/res/values/themes.xml index 8e0ea6ac0..d15106966 100644 --- a/OpenKeychain/src/main/res/values/themes.xml +++ b/OpenKeychain/src/main/res/values/themes.xml @@ -1,9 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <style name="KeychainTheme" parent="KeychainTheme.Base" /> + <style name="LightBaseTheme" parent="Theme.AppCompat.Light"> + <item name="colorPrimary">@color/primary</item> + <item name="colorPrimaryDark">@color/primary_dark</item> + <item name="colorAccent">@color/accent</item> - <style name="KeychainTheme.Base" parent="Theme.AppCompat.Light"> + <!-- remove actionbar and title, we use toolbar! --> + <item name="windowNoTitle">true</item> + <item name="windowActionBar">false</item> + <!-- multi selection should overlay Toolbar! http://stackoverflow.com/a/26450875 --> + <item name="windowActionModeOverlay">true</item> + <item name="searchViewStyle">@style/MySearchViewStyle</item> + </style> + + <style name="DarkBaseTheme" parent="Theme.AppCompat"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> @@ -16,6 +27,12 @@ <item name="searchViewStyle">@style/MySearchViewStyle</item> </style> + <style name="LightTheme" parent="LightBaseTheme"> + </style> + + <style name="DarkTheme" parent="DarkBaseTheme"> + </style> + <!-- http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html --> <style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> <!-- Background for the search query section (e.g. EditText) --> @@ -40,4 +57,4 @@ <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> -</resources>
\ No newline at end of file +</resources> diff --git a/OpenKeychain/src/main/res/xml/gui_preferences.xml b/OpenKeychain/src/main/res/xml/gui_preferences.xml new file mode 100644 index 000000000..cda7beeef --- /dev/null +++ b/OpenKeychain/src/main/res/xml/gui_preferences.xml @@ -0,0 +1,10 @@ +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> + <ListPreference + android:persistent="false" + android:key="theme" + android:title="@string/label_theme" + android:entries="@array/theme_entries" + android:entryValues="@array/theme_values" + android:dialogTitle="@string/label_theme" /> + +</PreferenceScreen> diff --git a/OpenKeychain/src/main/res/xml/preference_headers.xml b/OpenKeychain/src/main/res/xml/preference_headers.xml index 70e400567..7a0ea18bb 100644 --- a/OpenKeychain/src/main/res/xml/preference_headers.xml +++ b/OpenKeychain/src/main/res/xml/preference_headers.xml @@ -1,5 +1,8 @@ <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> <header + android:fragment="org.sufficientlysecure.keychain.ui.SettingsActivity$GuiPrefsFragment" + android:title="@string/section_gui" /> + <header android:fragment="org.sufficientlysecure.keychain.ui.SettingsActivity$CloudSearchPrefsFragment" android:title="@string/section_cloud_search" /> <header |