From 925ac6724eb4ff1562857b69318a2ab2b0f8d704 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Mon, 29 Jul 2019 16:43:20 +0200 Subject: [PATCH] Various updates to theming settings & fixes Signed-off-by: Mario Danic --- app/build.gradle | 22 +++--- .../MagicIncomingTextMessageViewHolder.java | 2 +- .../MagicPreviewMessageViewHolder.java | 1 - .../MagicSystemMessageViewHolder.java | 5 +- .../application/NextcloudTalkApplication.java | 22 ++++-- .../ConversationInfoController.java | 2 +- .../talk/controllers/SettingsController.java | 11 +-- .../nextcloud/talk/utils/DisplayUtils.java | 12 +++ .../utils/preferences/AppPreferences.java | 12 ++- .../DatabaseStorageFactory.java | 2 +- .../DatabaseStorageModule.java | 2 +- .../main/res/layout/controller_settings.xml | 11 ++- app/src/main/res/values-v28/arrays.xml | 75 +++++++++++++++++++ app/src/main/res/values-v28/defaults.xml | 24 ++++++ app/src/main/res/values/arrays.xml | 12 +++ app/src/main/res/values/defaults.xml | 24 ++++++ app/src/main/res/values/strings.xml | 5 ++ 17 files changed, 206 insertions(+), 38 deletions(-) rename app/src/main/java/com/nextcloud/talk/utils/{ => preferences}/preferencestorage/DatabaseStorageFactory.java (95%) rename app/src/main/java/com/nextcloud/talk/utils/{ => preferences}/preferencestorage/DatabaseStorageModule.java (99%) create mode 100644 app/src/main/res/values-v28/arrays.xml create mode 100644 app/src/main/res/values-v28/defaults.xml create mode 100644 app/src/main/res/values/defaults.xml diff --git a/app/build.gradle b/app/build.gradle index 0d1e9c2ec..65d2c4882 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,6 +63,14 @@ android { disable "ValidController" disable "ValidControllerChangeHandler" } + + javaCompileOptions { + annotationProcessorOptions { + arguments = [ + parcelerStacktrace: "true" + ] + } + } } dexOptions { @@ -134,9 +142,9 @@ configurations.all { dependencies { implementation fileTree(include: ['*'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'com.google.android.material:material:1.1.0-alpha07' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1' + implementation 'androidx.appcompat:appcompat:1.1.0-rc01' + implementation 'com.google.android.material:material:1.1.0-alpha08' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' implementation 'com.github.vanniktech:Emoji:0.6.0' implementation group: 'androidx.emoji', name: 'emoji-bundled', version: '1.0.0' implementation 'org.michaelevans.colorart:library:0.0.3' @@ -236,11 +244,3 @@ dependencies { findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0' findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6' } - -gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs += - ['-Adagger.floatingBindsMethods=enabled', - '-AparcelerStacktrace',] - } -} diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index e37f2ee7c..670ab6e49 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -124,7 +124,7 @@ public class MagicIncomingTextMessageViewHolder } else { Resources resources = context.getResources(); - int bg_bubble_color = appPreferences.isDarkThemeEnabled() ? + int bg_bubble_color = DisplayUtils.isDarkModeActive(context) ? resources.getColor(R.color.bg_message_list_incoming_bubble_dark2) : resources.getColor(R.color.bg_message_list_incoming_bubble); diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java index a3ff765c9..44eef2b4a 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java @@ -135,7 +135,6 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM image.setOnClickListener(v -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(message.getImageUrl())); browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); context.startActivity(browserIntent); }); } else { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java index 739f2a14c..ffef89eab 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java @@ -44,6 +44,9 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes @Inject AppPreferences appPreferences; + @Inject + Context context; + public MagicSystemMessageViewHolder(View itemView) { super(itemView); NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); @@ -59,7 +62,7 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes int mentionYouColor; int mentionOthersColor; - if(appPreferences.isDarkThemeEnabled()) { + if(DisplayUtils.isDarkModeActive(context)) { normalColor = resources.getColor(R.color.bg_system_bubble_dark); mentionYouColor = resources.getColor(R.color.fg_mention_you_dark); mentionOthersColor = resources.getColor(R.color.fg_mention_others_dark); diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java index 1ef9f7125..03c49e2e7 100644 --- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java +++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java @@ -145,7 +145,7 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif componentApplication.inject(this); - setAppTheme(appPreferences.isDarkThemeEnabled()); + setAppTheme(appPreferences.getTheme()); super.onCreate(); ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(this) @@ -200,11 +200,21 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif //endregion //region Setters - public static void setAppTheme(Boolean darkTheme) { - if (darkTheme) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); - } else { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + public static void setAppTheme(String theme) { + switch (theme) { + case "night_no": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + break; + case "night_yes": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + break; + case "battery_saver": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY); + break; + default: + // will be "follow_system" only for now + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + } } //endregion diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java index 9c8127bf9..5f8d4350c 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java @@ -61,7 +61,7 @@ import com.nextcloud.talk.models.json.rooms.RoomOverall; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; -import com.nextcloud.talk.utils.preferencestorage.DatabaseStorageModule; +import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule; import com.yarolegovich.lovelydialog.LovelySaveStateHandler; import com.yarolegovich.lovelydialog.LovelyStandardDialog; import com.yarolegovich.mp.*; diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java index 2f0645692..3bb49ba2b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java @@ -136,9 +136,6 @@ public class SettingsController extends BaseController { @BindView(R.id.settings_screen_lock_timeout) MaterialChoicePreference screenLockTimeoutChoicePreference; - @BindView(R.id.settings_theme) - MaterialSwitchPreference themeSwitchPreference; - @BindView(R.id.message_text) TextView messageText; @Inject @@ -159,7 +156,7 @@ public class SettingsController extends BaseController { private OnPreferenceValueChangedListener screenSecurityChangeListener; private OnPreferenceValueChangedListener screenLockChangeListener; private OnPreferenceValueChangedListener screenLockTimeoutChangeListener; - private OnPreferenceValueChangedListener themeChangeListener; + private OnPreferenceValueChangedListener themeChangeListener; private Disposable profileQueryDisposable; private Disposable dbQueryDisposable; @@ -607,7 +604,6 @@ public class SettingsController extends BaseController { messageView.setVisibility(View.GONE); } } - ((Checkable) themeSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.isDarkThemeEnabled()); } private void loadAvatarImage() { @@ -782,11 +778,10 @@ public class SettingsController extends BaseController { } } - private class ThemeChangeListener implements OnPreferenceValueChangedListener { + private class ThemeChangeListener implements OnPreferenceValueChangedListener { @Override - public void onChanged(Boolean newValue) { + public void onChanged(String newValue) { NextcloudTalkApplication.setAppTheme(newValue); - getActivity().recreate(); } } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java index 32d1c64f8..b5b3485f9 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -382,4 +382,16 @@ public class DisplayUtils { return drawable; } + public static boolean isDarkModeActive(Context context) { + int currentNightMode = + context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + switch (currentNightMode) { + case Configuration.UI_MODE_NIGHT_NO: + return false; + case Configuration.UI_MODE_NIGHT_YES: + return true; + default: + return false; + } + } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java index 5ae6d65d5..455da289b 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java @@ -266,16 +266,20 @@ public interface AppPreferences { void unregisterScreenLockTimeoutListener(OnPreferenceValueChangedListener listener); @KeyByResource(R.string.nc_settings_theme_key) - @DefaultValue(R.bool.value_false) - boolean isDarkThemeEnabled(); + @DefaultValue(R.string.nc_default_theme) + String getTheme(); + + @KeyByResource(R.string.nc_settings_theme_key) + @RemoveMethod + void removeTheme(); @KeyByResource(R.string.nc_settings_theme_key) @RegisterChangeListenerMethod - void registerThemeChangeListener(OnPreferenceValueChangedListener listener); + void registerThemeChangeListener(OnPreferenceValueChangedListener listener); @KeyByResource(R.string.nc_settings_theme_key) @UnregisterChangeListenerMethod - void unregisterThemeChangeListener(OnPreferenceValueChangedListener listener); + void unregisterThemeChangeListener(OnPreferenceValueChangedListener listener); @ClearMethod void clear(); diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageFactory.java similarity index 95% rename from app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java rename to app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageFactory.java index 54bf7ee02..cfc03eefb 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageFactory.java @@ -18,7 +18,7 @@ * along with this program. If not, see . */ -package com.nextcloud.talk.utils.preferencestorage; +package com.nextcloud.talk.utils.preferences.preferencestorage; import android.content.Context; import com.nextcloud.talk.models.database.UserEntity; diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java similarity index 99% rename from app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java rename to app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index ed770d686..05a1f4cd6 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -18,7 +18,7 @@ * along with this program. If not, see . */ -package com.nextcloud.talk.utils.preferencestorage; +package com.nextcloud.talk.utils.preferences.preferencestorage; import android.os.Bundle; import android.text.TextUtils; diff --git a/app/src/main/res/layout/controller_settings.xml b/app/src/main/res/layout/controller_settings.xml index 5858e391f..f406ef09c 100644 --- a/app/src/main/res/layout/controller_settings.xml +++ b/app/src/main/res/layout/controller_settings.xml @@ -120,12 +120,17 @@ apc:mpc_title="@string/nc_settings_appearance" apc:mpc_title_color="@color/colorPrimary"> - + apc:mp_title="@string/nc_settings_theme_title" + apc:mp_default_value="@string/nc_default_theme" + apc:mp_entry_values="@array/theme_entry_values" + apc:mp_entry_descriptions="@array/theme_descriptions" + apc:mp_show_value="onBottom" + /> @@ -184,7 +189,7 @@ apc:mp_entry_values="@array/screen_lock_timeout_entry_values" apc:mp_entry_descriptions="@array/screen_lock_timeout_descriptions" apc:mp_key="@string/nc_settings_screen_lock_timeout_key" - apc:mp_show_value="onRight" + apc:mp_show_value="onBottom" apc:mp_title="@string/nc_settings_screen_lock_timeout_title" /> + + + + + @string/nc_no_proxy + HTTP + DIRECT + SOCKS + + + + @string/nc_notify_me_never + @string/nc_notify_me_mention + @string/nc_notify_me_always + + + + never + mention + always + + + + @string/nc_screen_lock_timeout_30 + @string/nc_screen_lock_timeout_60 + @string/nc_screen_lock_timeout_300 + @string/nc_screen_lock_timeout_600 + + + + @string/nc_screen_lock_timeout_thirty + @string/nc_screen_lock_timeout_sixty + @string/nc_screen_lock_timeout_three_hundred + @string/nc_screen_lock_timeout_six_hundred + + + + 30 + 60 + 300 + 600 + + + + @string/nc_settings_theme_follow_system + @string/nc_settings_theme_light + @string/nc_settings_theme_dark + + + + @string/nc_settings_theme_follow_system_key + @string/nc_settings_theme_light_key + night_yes + + + diff --git a/app/src/main/res/values-v28/defaults.xml b/app/src/main/res/values-v28/defaults.xml new file mode 100644 index 000000000..a79cc44cc --- /dev/null +++ b/app/src/main/res/values-v28/defaults.xml @@ -0,0 +1,24 @@ + + + + + @string/nc_settings_theme_follow_system_key + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 7046e56d2..39bd83373 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -60,4 +60,16 @@ 600 + + @string/nc_settings_theme_battery_saver + @string/nc_settings_theme_light + @string/nc_settings_theme_dark + + + + @string/nc_settings_theme_battery_saver_key + @string/nc_settings_theme_light_key + night_yes + + diff --git a/app/src/main/res/values/defaults.xml b/app/src/main/res/values/defaults.xml new file mode 100644 index 000000000..1f7fc441b --- /dev/null +++ b/app/src/main/res/values/defaults.xml @@ -0,0 +1,24 @@ + + + + + @string/nc_settings_theme_battery_saver_key + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9bdfaedf3..79fe11b6c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -91,6 +91,11 @@ Appearance Theme theme + battery_saver + follow_system + night_no + Use system default + Set by Battery Saver Light Dark Privacy