From a8422e665a036569f7fed72703e0ac1f84193208 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 11 Aug 2022 18:04:13 +0200 Subject: [PATCH] Add MaterialSchemes and remove any in-line color theming to be replaced with a themeUtils call Signed-off-by: Andy Scherzinger --- .../talk/adapters/items/ConversationItem.java | 1 - .../MagicOutcomingTextMessageViewHolder.kt | 4 -- .../MagicPreviewMessageViewHolder.java | 4 -- .../OutcomingLocationMessageViewHolder.kt | 18 ++------- .../OutcomingPollMessageViewHolder.kt | 16 ++------ .../OutcomingVoiceMessageViewHolder.kt | 21 ++-------- .../talk/controllers/ChatController.kt | 7 +--- .../bottomsheet/EntryMenuController.kt | 4 -- .../talk/ui/dialog/AudioOutputDialog.kt | 12 ++---- .../talk/ui/dialog/ShowReactionsDialog.kt | 4 +- .../talk/ui/theme/MaterialSchemes.kt | 35 +++++++++++++++++ .../talk/ui/theme/MaterialSchemesImpl.kt | 33 ++++++++++++++++ ...Provider.kt => MaterialSchemesProvider.kt} | 8 ++-- ...Impl.kt => MaterialSchemesProviderImpl.kt} | 18 ++++----- .../nextcloud/talk/ui/theme/ServerTheme.kt | 11 ------ .../talk/ui/theme/ServerThemeImpl.kt | 11 +----- .../nextcloud/talk/ui/theme/ThemeModule.kt | 6 +-- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 39 ++++++++++++++----- detekt.yml | 2 +- 19 files changed, 132 insertions(+), 122 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemes.kt create mode 100644 app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesImpl.kt rename app/src/main/java/com/nextcloud/talk/ui/theme/{ServerThemeProvider.kt => MaterialSchemesProvider.kt} (79%) rename app/src/main/java/com/nextcloud/talk/ui/theme/{ServerThemeProviderImpl.kt => MaterialSchemesProviderImpl.kt} (70%) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java index d91a55d1b..cf42f44fe 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java @@ -61,7 +61,6 @@ import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.flexibleadapter.items.IFilterable; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.flexibleadapter.items.ISectionable; -import eu.davidea.flexibleadapter.utils.FlexibleUtils; import eu.davidea.viewholders.FlexibleViewHolder; public class ConversationItem extends AbstractFlexibleItem implements diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt index ae0bf136d..158fd2323 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt @@ -42,7 +42,6 @@ import com.nextcloud.talk.databinding.ItemCustomOutcomingTextMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils.searchAndReplaceWithMentionSpan @@ -61,9 +60,6 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage @Inject lateinit var viewThemeUtils: ViewThemeUtils - @Inject - lateinit var serverTheme: ServerTheme - lateinit var reactionsInterface: ReactionsInterface override fun onBind(message: ChatMessage) { 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 2b8160fd5..5b2609540 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 @@ -51,7 +51,6 @@ import com.nextcloud.talk.components.filebrowser.webdav.ReadFilesystemOperation; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding; import com.nextcloud.talk.models.json.chat.ChatMessage; -import com.nextcloud.talk.ui.theme.ServerTheme; import com.nextcloud.talk.ui.theme.ViewThemeUtils; import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.DrawableUtils; @@ -95,9 +94,6 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom @Inject Context context; - @Inject - ServerTheme serverTheme; - @Inject ViewThemeUtils viewThemeUtils; diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt index 81fabefae..37ddc8bb6 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt @@ -35,7 +35,6 @@ import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Toast import androidx.appcompat.content.res.AppCompatResources -import androidx.core.graphics.ColorUtils import autodagger.AutoInjector import coil.load import com.google.android.flexbox.FlexboxLayout @@ -45,7 +44,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA import com.nextcloud.talk.databinding.ItemCustomOutcomingLocationMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ReadStatus -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.UriUtils @@ -66,16 +64,12 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders var locationName: String? = "" var locationGeoLink: String? = "" - @JvmField @Inject - var context: Context? = null + lateinit var context: Context @Inject lateinit var viewThemeUtils: ViewThemeUtils - @Inject - lateinit var serverTheme: ServerTheme - lateinit var reactionsInterface: ReactionsInterface @SuppressLint("SetTextI18n") @@ -218,12 +212,9 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName ?: context!!.getText(R.string.nc_nick_guest) binding.messageQuote.quotedMessage.text = parentChatMessage.text - binding.messageQuote.quotedMessage.setTextColor(serverTheme.colorText) - binding.messageQuote.quotedMessageAuthor.setTextColor( - ColorUtils.setAlphaComponent(serverTheme.colorText, ALPHA_80_INT) - ) - - binding.messageQuote.quoteColoredView.setBackgroundColor(serverTheme.colorText) + viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -259,6 +250,5 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders private const val TAG = "LocOutMessageView" private const val HALF_ALPHA_INT: Int = 255 / 2 private val ALPHA_60_INT: Int = (255 * 0.6).roundToInt() - private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() } } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt index cdfe22687..e8da3f5ba 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt @@ -26,7 +26,6 @@ import android.content.Context import android.graphics.PorterDuff import android.view.View import androidx.appcompat.content.res.AppCompatResources -import androidx.core.graphics.ColorUtils import autodagger.AutoInjector import coil.load import com.nextcloud.talk.R @@ -38,13 +37,11 @@ import com.nextcloud.talk.databinding.ItemCustomOutcomingPollMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.polls.ui.PollMainDialogFragment -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.preferences.AppPreferences import com.stfalcon.chatkit.messages.MessageHolders import javax.inject.Inject -import kotlin.math.roundToInt @AutoInjector(NextcloudTalkApplication::class) class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : MessageHolders @@ -59,9 +56,6 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag @Inject lateinit var viewThemeUtils: ViewThemeUtils - @Inject - lateinit var serverTheme: ServerTheme - @Inject lateinit var appPreferences: AppPreferences @@ -182,12 +176,9 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName ?: context.getText(R.string.nc_nick_guest) binding.messageQuote.quotedMessage.text = parentChatMessage.text - binding.messageQuote.quotedMessage.setTextColor(serverTheme.colorText) - binding.messageQuote.quotedMessageAuthor.setTextColor( - ColorUtils.setAlphaComponent(serverTheme.colorText, ALPHA_80_INT) - ) - - binding.messageQuote.quoteColoredView.setBackgroundColor(serverTheme.colorText) + viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -205,6 +196,5 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag companion object { private val TAG = NextcloudTalkApplication::class.java.simpleName - private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() } } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt index 44e781d7a..ffd94e1e4 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt @@ -31,7 +31,6 @@ import android.view.View import android.widget.SeekBar import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat -import androidx.core.graphics.ColorUtils import androidx.work.WorkInfo import androidx.work.WorkManager import autodagger.AutoInjector @@ -42,14 +41,12 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA import com.nextcloud.talk.databinding.ItemCustomOutcomingVoiceMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ReadStatus -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.preferences.AppPreferences import com.stfalcon.chatkit.messages.MessageHolders import java.util.concurrent.ExecutionException import javax.inject.Inject -import kotlin.math.roundToInt @AutoInjector(NextcloudTalkApplication::class) class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders @@ -65,9 +62,6 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders @Inject lateinit var viewThemeUtils: ViewThemeUtils - @Inject - lateinit var serverTheme: ServerTheme - @JvmField @Inject var appPreferences: AppPreferences? = null @@ -269,15 +263,9 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName ?: context!!.getText(R.string.nc_nick_guest) binding.messageQuote.quotedMessage.text = parentChatMessage.text - binding.messageQuote.quotedMessage.setTextColor(serverTheme.colorText) - binding.messageQuote.quotedMessageAuthor.setTextColor( - ColorUtils.setAlphaComponent( - serverTheme.colorText, - ALPHA_80_INT - ) - ) - - binding.messageQuote.quoteColoredView.setBackgroundColor(serverTheme.colorText) + viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -300,8 +288,5 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders companion object { private const val TAG = "VoiceOutMessageView" private const val SEEKBAR_START: Int = 0 - private const val HALF_ALPHA_INT: Int = 255 / 2 - private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() - private val ALPHA_60_INT: Int = (255 * 0.6).roundToInt() } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index b37130069..86c027248 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -154,7 +154,6 @@ import com.nextcloud.talk.ui.dialog.MessageActionsDialog import com.nextcloud.talk.ui.dialog.ShowReactionsDialog import com.nextcloud.talk.ui.recyclerview.MessageSwipeActions import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.AttendeePermissionsUtil import com.nextcloud.talk.utils.ConductorRemapping @@ -235,9 +234,6 @@ class ChatController(args: Bundle) : @Inject lateinit var permissionUtil: PlatformPermissionUtil - @Inject - lateinit var serverTheme: ServerTheme - val disposables = DisposableSet() var roomToken: String? = null @@ -2702,8 +2698,7 @@ class ChatController(args: Bundle) : chatMessage, conversationUser, hasChatPermission, - ncApi!!, - serverTheme + ncApi ).show() } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt index ccce01a7e..79b6a15f2 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt @@ -46,7 +46,6 @@ import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.util.viewBinding import com.nextcloud.talk.databinding.ControllerEntryMenuBinding import com.nextcloud.talk.models.json.conversations.Conversation -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.utils.ShareUtils import com.nextcloud.talk.utils.UriUtils @@ -73,9 +72,6 @@ class EntryMenuController(args: Bundle) : @Inject lateinit var userManager: UserManager - @Inject - lateinit var serverTheme: ServerTheme - private val operation: ConversationOperationEnum private var conversation: Conversation? = null private var shareIntent: Intent? = null diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt index 062cf2849..f55a30967 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt @@ -31,7 +31,6 @@ import com.nextcloud.talk.R import com.nextcloud.talk.activities.CallActivity import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.databinding.DialogAudioOutputBinding -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.webrtc.WebRtcAudioManager import javax.inject.Inject @@ -42,9 +41,6 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call @Inject lateinit var viewThemeUtils: ViewThemeUtils - @Inject - lateinit var serverTheme: ServerTheme - private lateinit var dialogAudioOutputBinding: DialogAudioOutputBinding override fun onCreate(savedInstanceState: Bundle?) { @@ -97,22 +93,22 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call when (callActivity.audioManager?.currentAudioDevice) { WebRtcAudioManager.AudioDevice.BLUETOOTH -> { viewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputBluetoothIcon) - dialogAudioOutputBinding.audioOutputBluetoothText.setTextColor(serverTheme.primaryColor) + viewThemeUtils.colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputBluetoothText) } WebRtcAudioManager.AudioDevice.SPEAKER_PHONE -> { viewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputSpeakerIcon) - dialogAudioOutputBinding.audioOutputSpeakerText.setTextColor(serverTheme.primaryColor) + viewThemeUtils.colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputSpeakerText) } WebRtcAudioManager.AudioDevice.EARPIECE -> { viewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputEarspeakerIcon) - dialogAudioOutputBinding.audioOutputEarspeakerText.setTextColor(serverTheme.primaryColor) + viewThemeUtils.colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputEarspeakerText) } WebRtcAudioManager.AudioDevice.WIRED_HEADSET -> { viewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputWiredHeadsetIcon) - dialogAudioOutputBinding.audioOutputWiredHeadsetText.setTextColor(serverTheme.primaryColor) + viewThemeUtils.colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputWiredHeadsetText) } else -> Log.d(TAG, "AudioOutputDialog doesn't know this AudioDevice") diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt index dcba6c2fa..9b496c338 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt @@ -51,7 +51,6 @@ import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.reactions.ReactionsOverall -import com.nextcloud.talk.ui.theme.ServerTheme import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import io.reactivex.Observer @@ -68,8 +67,7 @@ class ShowReactionsDialog( private val chatMessage: ChatMessage, private val user: User?, private val hasChatPermission: Boolean, - private val ncApi: NcApi, - private val serverTheme: ServerTheme + private val ncApi: NcApi ) : BottomSheetDialog(activity), ReactionItemClickListener { @Inject diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemes.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemes.kt new file mode 100644 index 000000000..9ed1a3d11 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemes.kt @@ -0,0 +1,35 @@ +/* + * Nextcloud Talk application + * + * @author Andy Scherzinger + * Copyright (C) 2022 Andy Scherzinger + * + * 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 . + */ + +package com.nextcloud.talk.ui.theme + +import scheme.Scheme + +interface MaterialSchemes { + /** + * Schema for light theme + */ + val lightScheme: Scheme + + /** + * Schema for light theme + */ + val darkScheme: Scheme +} diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesImpl.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesImpl.kt new file mode 100644 index 000000000..713266a5b --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesImpl.kt @@ -0,0 +1,33 @@ +/* + * Nextcloud Talk application + * + * @author Andy Scherzinger + * Copyright (C) 2022 Andy Scherzinger + * + * 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 . + */ + +package com.nextcloud.talk.ui.theme + +import scheme.Scheme + +class MaterialSchemesImpl(serverTheme: ServerTheme) : MaterialSchemes { + override val lightScheme: Scheme + override val darkScheme: Scheme + + init { + lightScheme = Scheme.light(serverTheme.primaryColor) + darkScheme = Scheme.dark(serverTheme.primaryColor) + } +} diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProvider.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProvider.kt similarity index 79% rename from app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProvider.kt rename to app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProvider.kt index 3011956e6..10a0f8cdf 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProvider.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProvider.kt @@ -24,8 +24,8 @@ package com.nextcloud.talk.ui.theme import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.models.json.capabilities.Capabilities -interface ServerThemeProvider { - fun getServerThemeForUser(user: User?): ServerTheme - fun getServerThemeForCapabilities(capabilities: Capabilities?): ServerTheme - fun getServerThemeForCurrentUser(): ServerTheme +interface MaterialSchemesProvider { + fun getMaterialSchemesForUser(user: User?): MaterialSchemes + fun getMaterialSchemesForCapabilities(capabilities: Capabilities?): MaterialSchemes + fun getMaterialSchemesForCurrentUser(): MaterialSchemes } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProviderImpl.kt similarity index 70% rename from app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt rename to app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProviderImpl.kt index ada276a40..bcd1e534b 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/MaterialSchemesProviderImpl.kt @@ -30,14 +30,14 @@ import com.nextcloud.talk.utils.ui.ColorUtil import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject -internal class ServerThemeProviderImpl @Inject constructor( +internal class MaterialSchemesProviderImpl @Inject constructor( private val userProvider: CurrentUserProviderNew, private val colorUtil: ColorUtil -) : ServerThemeProvider { +) : MaterialSchemesProvider { - private val themeCache: ConcurrentHashMap = ConcurrentHashMap() + private val themeCache: ConcurrentHashMap = ConcurrentHashMap() - override fun getServerThemeForUser(user: User?): ServerTheme { + override fun getMaterialSchemesForUser(user: User?): MaterialSchemes { val url: String = if (user?.baseUrl != null) { user.baseUrl!! } else { @@ -45,18 +45,18 @@ internal class ServerThemeProviderImpl @Inject constructor( } if (!themeCache.containsKey(url)) { - themeCache[url] = getServerThemeForCapabilities(user?.capabilities) + themeCache[url] = getMaterialSchemesForCapabilities(user?.capabilities) } return themeCache[url]!! } - override fun getServerThemeForCurrentUser(): ServerTheme { - return getServerThemeForUser(userProvider.currentUser.blockingGet()) + override fun getMaterialSchemesForCurrentUser(): MaterialSchemes { + return getMaterialSchemesForUser(userProvider.currentUser.blockingGet()) } - override fun getServerThemeForCapabilities(capabilities: Capabilities?): ServerTheme { - return ServerThemeImpl(capabilities?.themingCapability, colorUtil) + override fun getMaterialSchemesForCapabilities(capabilities: Capabilities?): MaterialSchemes { + return MaterialSchemesImpl(ServerThemeImpl(capabilities?.themingCapability, colorUtil)) } companion object { diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerTheme.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerTheme.kt index 8df4aa117..ad31f29d9 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerTheme.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerTheme.kt @@ -22,7 +22,6 @@ package com.nextcloud.talk.ui.theme import androidx.annotation.ColorInt -import scheme.Scheme interface ServerTheme { @get:ColorInt @@ -51,14 +50,4 @@ interface ServerTheme { */ @get:ColorInt val colorText: Int - - /** - * Schema for light theme - */ - val lightScheme: Scheme - - /** - * Schema for light theme - */ - val darkScheme: Scheme } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeImpl.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeImpl.kt index 63cf1f53d..1020a0727 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeImpl.kt @@ -26,29 +26,20 @@ package com.nextcloud.talk.ui.theme import com.nextcloud.talk.R import com.nextcloud.talk.models.json.capabilities.ThemingCapability import com.nextcloud.talk.utils.ui.ColorUtil -import scheme.Scheme -internal class ServerThemeImpl(themingCapability: ThemingCapability?, colorUtil: ColorUtil) : - ServerTheme { +internal class ServerThemeImpl(themingCapability: ThemingCapability?, colorUtil: ColorUtil) : ServerTheme { override val primaryColor: Int override val colorElement: Int override val colorElementBright: Int override val colorElementDark: Int override val colorText: Int - override val lightScheme: Scheme - override val darkScheme: Scheme init { primaryColor = colorUtil.getNullSafeColorWithFallbackRes(themingCapability?.color, R.color.colorPrimary) - colorElement = colorUtil.getNullSafeColor(themingCapability?.colorElement, primaryColor) colorElementBright = colorUtil.getNullSafeColor(themingCapability?.colorElementBright, primaryColor) colorElementDark = colorUtil.getNullSafeColor(themingCapability?.colorElementDark, primaryColor) - colorText = colorUtil.getTextColor(themingCapability?.colorText, primaryColor) - - lightScheme = Scheme.light(primaryColor) - darkScheme = Scheme.dark(primaryColor) } } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ThemeModule.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ThemeModule.kt index 54410e609..ac9405b0d 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ThemeModule.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ThemeModule.kt @@ -33,12 +33,12 @@ internal abstract class ThemeModule { @Binds @Reusable - abstract fun bindServerThemeProvider(provider: ServerThemeProviderImpl): ServerThemeProvider + abstract fun bindMaterialSchemesProvider(provider: MaterialSchemesProviderImpl): MaterialSchemesProvider companion object { @Provides - fun provideCurrentServerTheme(themeProvider: ServerThemeProvider): ServerTheme { - return themeProvider.getServerThemeForCurrentUser() + fun provideCurrentMaterialSchemes(themeProvider: MaterialSchemesProvider): MaterialSchemes { + return themeProvider.getMaterialSchemesForCurrentUser() } } } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt index c4e1ea60d..7fa45980f 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt @@ -81,19 +81,20 @@ import com.yarolegovich.mp.MaterialSwitchPreference import eu.davidea.flexibleadapter.utils.FlexibleUtils import scheme.Scheme import javax.inject.Inject +import kotlin.math.roundToInt @Suppress("TooManyFunctions") -class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private val colorUtil: ColorUtil) { +class ViewThemeUtils @Inject constructor(private val schemes: MaterialSchemes, private val colorUtil: ColorUtil) { /** * Scheme for painting elements */ fun getScheme(context: Context): Scheme = when { - isDarkMode(context) -> theme.darkScheme - else -> theme.lightScheme + isDarkMode(context) -> schemes.darkScheme + else -> schemes.lightScheme } - private fun getSchemeDark(): Scheme = theme.darkScheme + private fun getSchemeDark(): Scheme = schemes.darkScheme private fun withScheme(view: View, block: (Scheme) -> Unit) { block(getScheme(view.context)) @@ -220,6 +221,12 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorPrimaryTextViewElementDarkMode(textView: TextView) { + withSchemeDark { scheme -> + textView.setTextColor(scheme.primary) + } + } + fun colorPrimaryView(view: View) { withScheme(view) { scheme -> view.setBackgroundColor(scheme.primary) @@ -264,11 +271,22 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } - /** - * Tints the image with text color - */ - fun colorImageViewText(imageView: ImageView) { - imageView.imageTintList = ColorStateList.valueOf(theme.colorText) + fun colorOutgoingQuoteText(textView: TextView) { + withScheme(textView) { scheme -> + textView.setTextColor(scheme.onSurfaceVariant) + } + } + + fun colorOutgoingQuoteAuthorText(textView: TextView) { + withScheme(textView) { scheme -> + ColorUtils.setAlphaComponent(scheme.onSurfaceVariant, ALPHA_80_INT) + } + } + + fun colorOutgoingQuoteBackground(view: View) { + withScheme(view) { scheme -> + view.setBackgroundColor(scheme.onSurfaceVariant) + } } fun colorMaterialTextButton(button: MaterialButton) { @@ -814,6 +832,9 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private R.drawable.ic_mimetype_package_x_generic, R.drawable.ic_mimetype_folder ) + + private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() + private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77 private const val HALF_ALPHA_INT: Int = 255 / 2 private const val SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.12f diff --git a/detekt.yml b/detekt.yml index 6a6e42108..81828645b 100644 --- a/detekt.yml +++ b/detekt.yml @@ -1,5 +1,5 @@ build: - maxIssues: 86 + maxIssues: 84 weights: # complexity: 2 # LongParameterList: 1