Various updates to theming settings & fixes

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-07-29 16:43:20 +02:00 committed by Mario Đanić
parent a4efa5a746
commit 925ac6724e
17 changed files with 206 additions and 38 deletions

View File

@ -63,6 +63,14 @@ android {
disable "ValidController" disable "ValidController"
disable "ValidControllerChangeHandler" disable "ValidControllerChangeHandler"
} }
javaCompileOptions {
annotationProcessorOptions {
arguments = [
parcelerStacktrace: "true"
]
}
}
} }
dexOptions { dexOptions {
@ -134,9 +142,9 @@ configurations.all {
dependencies { dependencies {
implementation fileTree(include: ['*'], dir: 'libs') implementation fileTree(include: ['*'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'com.google.android.material:material:1.1.0-alpha08'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
implementation 'com.github.vanniktech:Emoji:0.6.0' implementation 'com.github.vanniktech:Emoji:0.6.0'
implementation group: 'androidx.emoji', name: 'emoji-bundled', version: '1.0.0' implementation group: 'androidx.emoji', name: 'emoji-bundled', version: '1.0.0'
implementation 'org.michaelevans.colorart:library:0.0.3' implementation 'org.michaelevans.colorart:library:0.0.3'
@ -236,11 +244,3 @@ dependencies {
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0' findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6' findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6'
} }
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs +=
['-Adagger.floatingBindsMethods=enabled',
'-AparcelerStacktrace',]
}
}

View File

@ -124,7 +124,7 @@ public class MagicIncomingTextMessageViewHolder
} else { } else {
Resources resources = context.getResources(); 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_dark2) :
resources.getColor(R.color.bg_message_list_incoming_bubble); resources.getColor(R.color.bg_message_list_incoming_bubble);

View File

@ -135,7 +135,6 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM
image.setOnClickListener(v -> { image.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(message.getImageUrl())); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(message.getImageUrl()));
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
context.startActivity(browserIntent); context.startActivity(browserIntent);
}); });
} else { } else {

View File

@ -44,6 +44,9 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes
@Inject @Inject
AppPreferences appPreferences; AppPreferences appPreferences;
@Inject
Context context;
public MagicSystemMessageViewHolder(View itemView) { public MagicSystemMessageViewHolder(View itemView) {
super(itemView); super(itemView);
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
@ -59,7 +62,7 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes
int mentionYouColor; int mentionYouColor;
int mentionOthersColor; int mentionOthersColor;
if(appPreferences.isDarkThemeEnabled()) { if(DisplayUtils.isDarkModeActive(context)) {
normalColor = resources.getColor(R.color.bg_system_bubble_dark); normalColor = resources.getColor(R.color.bg_system_bubble_dark);
mentionYouColor = resources.getColor(R.color.fg_mention_you_dark); mentionYouColor = resources.getColor(R.color.fg_mention_you_dark);
mentionOthersColor = resources.getColor(R.color.fg_mention_others_dark); mentionOthersColor = resources.getColor(R.color.fg_mention_others_dark);

View File

@ -145,7 +145,7 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif
componentApplication.inject(this); componentApplication.inject(this);
setAppTheme(appPreferences.isDarkThemeEnabled()); setAppTheme(appPreferences.getTheme());
super.onCreate(); super.onCreate();
ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(this) ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(this)
@ -200,11 +200,21 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif
//endregion //endregion
//region Setters //region Setters
public static void setAppTheme(Boolean darkTheme) { public static void setAppTheme(String theme) {
if (darkTheme) { switch (theme) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); case "night_no":
} else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_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 //endregion

View File

@ -61,7 +61,7 @@ import com.nextcloud.talk.models.json.rooms.RoomOverall;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys; 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.LovelySaveStateHandler;
import com.yarolegovich.lovelydialog.LovelyStandardDialog; import com.yarolegovich.lovelydialog.LovelyStandardDialog;
import com.yarolegovich.mp.*; import com.yarolegovich.mp.*;

View File

@ -136,9 +136,6 @@ public class SettingsController extends BaseController {
@BindView(R.id.settings_screen_lock_timeout) @BindView(R.id.settings_screen_lock_timeout)
MaterialChoicePreference screenLockTimeoutChoicePreference; MaterialChoicePreference screenLockTimeoutChoicePreference;
@BindView(R.id.settings_theme)
MaterialSwitchPreference themeSwitchPreference;
@BindView(R.id.message_text) @BindView(R.id.message_text)
TextView messageText; TextView messageText;
@Inject @Inject
@ -159,7 +156,7 @@ public class SettingsController extends BaseController {
private OnPreferenceValueChangedListener<Boolean> screenSecurityChangeListener; private OnPreferenceValueChangedListener<Boolean> screenSecurityChangeListener;
private OnPreferenceValueChangedListener<Boolean> screenLockChangeListener; private OnPreferenceValueChangedListener<Boolean> screenLockChangeListener;
private OnPreferenceValueChangedListener<String> screenLockTimeoutChangeListener; private OnPreferenceValueChangedListener<String> screenLockTimeoutChangeListener;
private OnPreferenceValueChangedListener<Boolean> themeChangeListener; private OnPreferenceValueChangedListener<String> themeChangeListener;
private Disposable profileQueryDisposable; private Disposable profileQueryDisposable;
private Disposable dbQueryDisposable; private Disposable dbQueryDisposable;
@ -607,7 +604,6 @@ public class SettingsController extends BaseController {
messageView.setVisibility(View.GONE); messageView.setVisibility(View.GONE);
} }
} }
((Checkable) themeSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.isDarkThemeEnabled());
} }
private void loadAvatarImage() { private void loadAvatarImage() {
@ -782,11 +778,10 @@ public class SettingsController extends BaseController {
} }
} }
private class ThemeChangeListener implements OnPreferenceValueChangedListener<Boolean> { private class ThemeChangeListener implements OnPreferenceValueChangedListener<String> {
@Override @Override
public void onChanged(Boolean newValue) { public void onChanged(String newValue) {
NextcloudTalkApplication.setAppTheme(newValue); NextcloudTalkApplication.setAppTheme(newValue);
getActivity().recreate();
} }
} }
} }

View File

@ -382,4 +382,16 @@ public class DisplayUtils {
return drawable; 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;
}
}
} }

View File

@ -266,16 +266,20 @@ public interface AppPreferences {
void unregisterScreenLockTimeoutListener(OnPreferenceValueChangedListener<String> listener); void unregisterScreenLockTimeoutListener(OnPreferenceValueChangedListener<String> listener);
@KeyByResource(R.string.nc_settings_theme_key) @KeyByResource(R.string.nc_settings_theme_key)
@DefaultValue(R.bool.value_false) @DefaultValue(R.string.nc_default_theme)
boolean isDarkThemeEnabled(); String getTheme();
@KeyByResource(R.string.nc_settings_theme_key)
@RemoveMethod
void removeTheme();
@KeyByResource(R.string.nc_settings_theme_key) @KeyByResource(R.string.nc_settings_theme_key)
@RegisterChangeListenerMethod @RegisterChangeListenerMethod
void registerThemeChangeListener(OnPreferenceValueChangedListener<Boolean> listener); void registerThemeChangeListener(OnPreferenceValueChangedListener<String> listener);
@KeyByResource(R.string.nc_settings_theme_key) @KeyByResource(R.string.nc_settings_theme_key)
@UnregisterChangeListenerMethod @UnregisterChangeListenerMethod
void unregisterThemeChangeListener(OnPreferenceValueChangedListener<Boolean> listener); void unregisterThemeChangeListener(OnPreferenceValueChangedListener<String> listener);
@ClearMethod @ClearMethod
void clear(); void clear();

View File

@ -18,7 +18,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.nextcloud.talk.utils.preferencestorage; package com.nextcloud.talk.utils.preferences.preferencestorage;
import android.content.Context; import android.content.Context;
import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.database.UserEntity;

View File

@ -18,7 +18,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.nextcloud.talk.utils.preferencestorage; package com.nextcloud.talk.utils.preferences.preferencestorage;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;

View File

@ -120,12 +120,17 @@
apc:mpc_title="@string/nc_settings_appearance" apc:mpc_title="@string/nc_settings_appearance"
apc:mpc_title_color="@color/colorPrimary"> apc:mpc_title_color="@color/colorPrimary">
<com.yarolegovich.mp.MaterialSwitchPreference <com.yarolegovich.mp.MaterialChoicePreference
android:id="@+id/settings_theme" android:id="@+id/settings_theme"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
apc:mp_key="@string/nc_settings_theme_key" apc:mp_key="@string/nc_settings_theme_key"
apc:mp_title="@string/nc_settings_theme_title" /> 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"
/>
</com.yarolegovich.mp.MaterialPreferenceCategory> </com.yarolegovich.mp.MaterialPreferenceCategory>
@ -184,7 +189,7 @@
apc:mp_entry_values="@array/screen_lock_timeout_entry_values" apc:mp_entry_values="@array/screen_lock_timeout_entry_values"
apc:mp_entry_descriptions="@array/screen_lock_timeout_descriptions" apc:mp_entry_descriptions="@array/screen_lock_timeout_descriptions"
apc:mp_key="@string/nc_settings_screen_lock_timeout_key" 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" /> apc:mp_title="@string/nc_settings_screen_lock_timeout_title" />
<com.yarolegovich.mp.MaterialSwitchPreference <com.yarolegovich.mp.MaterialSwitchPreference

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Nextcloud Talk application
~
~ @author Mario Danic
~ Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<array name="proxy_type_descriptions">
<item>@string/nc_no_proxy</item>
<item>HTTP</item>
<item>DIRECT</item>
<item>SOCKS</item>
</array>
<array name="message_notification_levels">
<item>@string/nc_notify_me_never</item>
<item>@string/nc_notify_me_mention</item>
<item>@string/nc_notify_me_always</item>
</array>
<array name="message_notification_levels_entry_values">
<item>never</item>
<item>mention</item>
<item>always</item>
</array>
<array name="screen_lock_timeout_descriptions">
<item>@string/nc_screen_lock_timeout_30</item>
<item>@string/nc_screen_lock_timeout_60</item>
<item>@string/nc_screen_lock_timeout_300</item>
<item>@string/nc_screen_lock_timeout_600</item>
</array>
<array name="screen_lock_timeout_entry_values">
<item>@string/nc_screen_lock_timeout_thirty</item>
<item>@string/nc_screen_lock_timeout_sixty</item>
<item>@string/nc_screen_lock_timeout_three_hundred</item>
<item>@string/nc_screen_lock_timeout_six_hundred</item>
</array>
<array name="screen_lock_timeout_entry_int_values">
<item>30</item>
<item>60</item>
<item>300</item>
<item>600</item>
</array>
<array name="theme_descriptions">
<item>@string/nc_settings_theme_follow_system</item>
<item>@string/nc_settings_theme_light</item>
<item>@string/nc_settings_theme_dark</item>
</array>
<array name="theme_entry_values">
<item>@string/nc_settings_theme_follow_system_key</item>
<item>@string/nc_settings_theme_light_key</item>
<item>night_yes</item>
</array>
</resources>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Nextcloud Talk application
~
~ @author Mario Danic
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="nc_default_theme">@string/nc_settings_theme_follow_system_key</string>
</resources>

View File

@ -60,4 +60,16 @@
<item>600</item> <item>600</item>
</array> </array>
<array name="theme_descriptions">
<item>@string/nc_settings_theme_battery_saver</item>
<item>@string/nc_settings_theme_light</item>
<item>@string/nc_settings_theme_dark</item>
</array>
<array name="theme_entry_values">
<item>@string/nc_settings_theme_battery_saver_key</item>
<item>@string/nc_settings_theme_light_key</item>
<item>night_yes</item>
</array>
</resources> </resources>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Nextcloud Talk application
~
~ @author Mario Danic
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="nc_default_theme">@string/nc_settings_theme_battery_saver_key</string>
</resources>

View File

@ -91,6 +91,11 @@
<string name="nc_settings_appearance">Appearance</string> <string name="nc_settings_appearance">Appearance</string>
<string name="nc_settings_theme_title">Theme</string> <string name="nc_settings_theme_title">Theme</string>
<string name="nc_settings_theme_key">theme</string> <string name="nc_settings_theme_key">theme</string>
<string name="nc_settings_theme_battery_saver_key" translatable="false">battery_saver</string>
<string name="nc_settings_theme_follow_system_key" translatable="false">follow_system</string>
<string name="nc_settings_theme_light_key" translatable="false">night_no</string>
<string name="nc_settings_theme_follow_system">Use system default</string>
<string name="nc_settings_theme_battery_saver">Set by Battery Saver</string>
<string name="nc_settings_theme_light">Light</string> <string name="nc_settings_theme_light">Light</string>
<string name="nc_settings_theme_dark">Dark</string> <string name="nc_settings_theme_dark">Dark</string>
<string name="nc_settings_privacy">Privacy</string> <string name="nc_settings_privacy">Privacy</string>