diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java index 8980463e7..a785def5e 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java @@ -206,7 +206,7 @@ public class ContactItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.avatarDraweeView, roundPlaceholderDrawable))); } else { holder.binding.avatarDraweeView.setImageResource(fallbackImageResource); 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 184f42141..e0fd1275e 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 @@ -266,7 +266,7 @@ public class ConversationItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.dialogAvatar.setImageDrawable( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.dialogAvatar, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.dialogAvatar, R.drawable.ic_avatar_document))); } else { holder.binding.dialogAvatar.setImageDrawable( @@ -316,7 +316,7 @@ public class ConversationItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.dialogAvatar.setImageDrawable( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.dialogAvatar, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.dialogAvatar, R.drawable.ic_avatar_group))); } else { holder.binding.dialogAvatar.setImageDrawable( @@ -327,7 +327,7 @@ public class ConversationItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.dialogAvatar.setImageDrawable( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.dialogAvatar, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.dialogAvatar, R.drawable.ic_avatar_link))); } else { holder.binding.dialogAvatar.setImageDrawable( diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java index 777908b49..1773e1c60 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java @@ -153,7 +153,7 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.avatarDraweeView, R.drawable.ic_avatar_group))); } else { holder.binding.avatarDraweeView.setImageResource(R.drawable.ic_circular_group); diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.java index b6624a798..eb440001f 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.java @@ -155,7 +155,7 @@ public class ParticipantItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.avatarDraweeView, R.drawable.ic_avatar_group))); } else { holder.binding.avatarDraweeView.setImageResource(R.drawable.ic_circular_group); @@ -164,7 +164,7 @@ public class ParticipantItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, + viewThemeUtils.talk.themePlaceholderAvatar(holder.binding.avatarDraweeView, R.drawable.ic_avatar_mail))); } else { holder.binding.avatarDraweeView.setImageResource(R.drawable.ic_circular_mail); diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt index a7045d1bb..d579503c7 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt @@ -161,7 +161,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) } private fun setParentMessageDataOnMessageItem(message: ChatMessage) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt index c1f15b22c..937c95ed5 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt @@ -191,7 +191,7 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : MessageH } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) } private fun setParentMessageDataOnMessageItem(message: ChatMessage) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt index d7b16f93a..a11e737a4 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt @@ -266,7 +266,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) } private fun setParentMessageDataOnMessageItem(message: ChatMessage) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt index e419fd822..db93d9e90 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt @@ -87,7 +87,7 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message binding.messageAuthor.visibility = View.GONE } - viewThemeUtils.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) itemView.isSelected = false 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 158fd2323..4ae870b0f 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 @@ -156,7 +156,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage } private fun setBubbleOnChatMessage(message: ChatMessage) { - viewThemeUtils.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) } private fun processMessageParameters( 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 8f7217dfd..d61e5df5f 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 @@ -167,8 +167,8 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom progressBar = getPreviewContactProgressBar(); getMessageText().setVisibility(View.INVISIBLE); clickView = getPreviewContactContainer(); - viewThemeUtils.colorContactChatItemBackground(getPreviewContactContainer()); - viewThemeUtils.colorContactChatItemName(getPreviewContactName()); + viewThemeUtils.talk.colorContactChatItemBackground(getPreviewContactContainer()); + viewThemeUtils.talk.colorContactChatItemName(getPreviewContactName()); viewThemeUtils.platform.colorCircularProgressBarOnPrimaryContainer(getPreviewContactProgressBar()); } else { getPreviewContainer().setVisibility(View.VISIBLE); 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 37ddc8bb6..209b24496 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 @@ -212,9 +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 - viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) - viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) - viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) + viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.talk.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.talk.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -223,7 +223,7 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) } private fun openGeoLink() { 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 e8da3f5ba..47de01e13 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 @@ -176,9 +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 - viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) - viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) - viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) + viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.talk.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.talk.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -187,7 +187,7 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) } fun assignReactionInterface(reactionsInterface: ReactionsInterface) { 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 73f4a9fd7..96bed4b6c 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 @@ -263,9 +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 - viewThemeUtils.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) - viewThemeUtils.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) - viewThemeUtils.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) + viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) + viewThemeUtils.talk.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor) + viewThemeUtils.talk.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView) binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE } else { @@ -274,7 +274,7 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) } fun assignVoiceMessageInterface(voiceMessageInterface: VoiceMessageInterface) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt index 1eff0dae0..3d2e0e8f5 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt @@ -112,7 +112,7 @@ class Reaction { } else { layoutInfo.viewThemeUtils.getScheme(emojiWithAmountWrapper.context).primaryContainer } - layoutInfo.viewThemeUtils.setCheckedBackground(emojiWithAmountWrapper, color) + layoutInfo.viewThemeUtils.talk.setCheckedBackground(emojiWithAmountWrapper, color) emojiWithAmountWrapper.setPaddingRelative( layoutInfo.paddingSide, diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt index 5baa2efef..d428801bb 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt @@ -334,7 +334,7 @@ class ContactsController(args: Bundle) : val searchManager: SearchManager? = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager? if (searchItem != null) { searchView = MenuItemCompat.getActionView(searchItem) as SearchView - viewThemeUtils.themeSearchView(searchView!!) + viewThemeUtils.appcompat.themeSearchView(searchView!!) searchView!!.maxWidth = Int.MAX_VALUE searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER var imeOptions: Int = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index 5e7c7f82a..a7637caf4 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -780,7 +780,7 @@ class ConversationInfoController(args: Bundle) : if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { binding.avatarImage.hierarchy.setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(binding.avatarImage, R.drawable.ic_avatar_group) + viewThemeUtils.talk.themePlaceholderAvatar(binding.avatarImage, R.drawable.ic_avatar_group) ) ) } else { @@ -793,7 +793,7 @@ class ConversationInfoController(args: Bundle) : if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { binding.avatarImage.hierarchy.setPlaceholderImage( DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(binding.avatarImage, R.drawable.ic_avatar_link) + viewThemeUtils.talk.themePlaceholderAvatar(binding.avatarImage, R.drawable.ic_avatar_link) ) ) } else { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt index 949e0e946..033b464fa 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt @@ -296,7 +296,7 @@ class ConversationsListController(bundle: Bundle) : val searchManager = activity!!.getSystemService(Context.SEARCH_SERVICE) as SearchManager? if (searchItem != null) { searchView = MenuItemCompat.getActionView(searchItem) as SearchView - viewThemeUtils.themeSearchView(searchView!!) + viewThemeUtils.appcompat.themeSearchView(searchView!!) searchView!!.maxWidth = Int.MAX_VALUE searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER var imeOptions = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN diff --git a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt index 631e1c601..bef8be657 100644 --- a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt @@ -98,7 +98,7 @@ class RemoteFileBrowserItemsListViewHolder( binding.fileIcon .hierarchy .setPlaceholderImage( - viewThemeUtils.getPlaceholderImage(binding.root.context, item.mimeType) + viewThemeUtils.talk.getPlaceholderImage(binding.root.context, item.mimeType) ) if (item.hasPreview) { diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt index cad4743dd..a1861cdaa 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/adapters/SharedItemsViewHolder.kt @@ -70,7 +70,7 @@ abstract class SharedItemsViewHolder( ) open fun onBind(item: SharedFileItem) { - image.hierarchy.setPlaceholderImage(viewThemeUtils.getPlaceholderImage(image.context, item.mimeType)) + image.hierarchy.setPlaceholderImage(viewThemeUtils.talk.getPlaceholderImage(image.context, item.mimeType)) if (item.previewAvailable) { image.controller = configurePreview(item) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt index c349fedb8..cc1d4924a 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt @@ -225,7 +225,7 @@ class MessageActionsDialog( private fun checkAndSetEmojiSelfReaction(emoji: EmojiTextView) { if (emoji.text?.toString() != null && message.reactionsSelf?.contains(emoji.text?.toString()) == true) { - viewThemeUtils.setCheckedBackground(emoji) + viewThemeUtils.talk.setCheckedBackground(emoji) } } 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 5c45fa47c..2487d25ba 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 @@ -21,48 +21,27 @@ package com.nextcloud.talk.ui.theme -import android.annotation.TargetApi import android.content.Context import android.content.res.ColorStateList -import android.graphics.Color import android.graphics.drawable.Drawable -import android.graphics.drawable.LayerDrawable -import android.os.Build import android.text.Spannable import android.text.SpannableString -import android.view.View -import android.view.ViewGroup import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView -import androidx.annotation.ColorInt -import androidx.annotation.DrawableRes import androidx.appcompat.content.res.AppCompatResources -import androidx.appcompat.widget.SearchView -import androidx.appcompat.widget.SwitchCompat -import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat -import androidx.core.graphics.ColorUtils import androidx.core.graphics.drawable.DrawableCompat -import androidx.core.view.ViewCompat -import androidx.core.view.children import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.button.MaterialButton -import com.google.android.material.card.MaterialCardView -import com.google.android.material.chip.ChipDrawable import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase import com.nextcloud.talk.R import com.nextcloud.talk.ui.theme.viewthemeutils.AndroidViewThemeUtils +import com.nextcloud.talk.ui.theme.viewthemeutils.AppCompatViewThemeUtils import com.nextcloud.talk.ui.theme.viewthemeutils.MaterialViewThemeUtils +import com.nextcloud.talk.ui.theme.viewthemeutils.TalkSpecificViewThemeUtils import com.nextcloud.talk.utils.DisplayUtils -import com.nextcloud.talk.utils.DrawableUtils -import com.vanniktech.emoji.EmojiTextView -import com.yarolegovich.mp.MaterialPreferenceCategory -import com.yarolegovich.mp.MaterialSwitchPreference import eu.davidea.flexibleadapter.utils.FlexibleUtils import javax.inject.Inject -import kotlin.math.roundToInt @Suppress("TooManyFunctions") class ViewThemeUtils @Inject constructor( @@ -70,149 +49,13 @@ class ViewThemeUtils @Inject constructor( @JvmField val platform: AndroidViewThemeUtils, @JvmField - val material: MaterialViewThemeUtils + val material: MaterialViewThemeUtils, + @JvmField + val appcompat: AppCompatViewThemeUtils, + @JvmField + val talk: TalkSpecificViewThemeUtils ) : ViewThemeUtilsBase(schemes) { - fun themeSearchView(searchView: SearchView) { - withScheme(searchView) { scheme -> - // hacky as no default way is provided - val editText = searchView.findViewById(R.id.search_src_text) - val searchPlate = searchView.findViewById(R.id.search_plate) - editText.textSize = SEARCH_TEXT_SIZE - editText.setHintTextColor(scheme.onSurfaceVariant) - editText.setTextColor(scheme.onSurface) - editText.setBackgroundColor(scheme.surface) - searchPlate.setBackgroundColor(scheme.surface) - } - } - - fun themeIncomingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { - val resources = bubble.resources - - var bubbleResource = R.drawable.shape_incoming_message - - if (grouped) { - bubbleResource = R.drawable.shape_grouped_incoming_message - } - - val bgBubbleColor = if (deleted) { - resources.getColor(R.color.bg_message_list_incoming_bubble_deleted) - } else { - resources.getColor(R.color.bg_message_list_incoming_bubble) - } - val bubbleDrawable = DisplayUtils.getMessageSelector( - bgBubbleColor, - resources.getColor(R.color.transparent), - bgBubbleColor, - bubbleResource - ) - ViewCompat.setBackground(bubble, bubbleDrawable) - } - - fun themeOutgoingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { - withScheme(bubble) { scheme -> - val bgBubbleColor = if (deleted) { - ColorUtils.setAlphaComponent(scheme.surfaceVariant, HALF_ALPHA_INT) - } else { - scheme.surfaceVariant - } - - val layout = if (grouped) { - R.drawable.shape_grouped_outcoming_message - } else { - R.drawable.shape_outcoming_message - } - val bubbleDrawable = DisplayUtils.getMessageSelector( - bgBubbleColor, - ResourcesCompat.getColor(bubble.resources, R.color.transparent, null), - bgBubbleColor, - layout - ) - ViewCompat.setBackground(bubble, bubbleDrawable) - } - } - - 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 colorContactChatItemName(contactName: androidx.emoji.widget.EmojiTextView) { - withScheme(contactName) { scheme -> - contactName.setTextColor(scheme.onPrimaryContainer) - } - } - - fun colorContactChatItemBackground(card: MaterialCardView) { - withScheme(card) { scheme -> - card.setCardBackgroundColor(scheme.primaryContainer) - } - } - - // TODO split this util into classes depending on framework views vs library views - fun colorPreferenceCategory(category: MaterialPreferenceCategory) { - withScheme(category) { scheme -> - category.setTitleColor(scheme.primary) - } - } - - fun colorSwitchPreference(preference: MaterialSwitchPreference) { - val children = preference.children - val switch = children.find { it is SwitchCompat } - if (switch != null) { - val switchCompat = (switch as SwitchCompat) - colorSwitchCompat(switchCompat) - } - } - - fun colorSwitchCompat(switchCompat: SwitchCompat) { - withScheme(switchCompat) { scheme -> - - val context = switchCompat.context - - val thumbUncheckedColor = ResourcesCompat.getColor( - context.resources, - R.color.switch_thumb_color_unchecked, - context.theme - ) - val trackUncheckedColor = ResourcesCompat.getColor( - context.resources, - R.color.switch_track_color_unchecked, - context.theme - ) - - val trackColor = Color.argb( - SWITCH_COMPAT_TRACK_ALPHA, - Color.red(scheme.primary), - Color.green(scheme.primary), - Color.blue(scheme.primary) - ) - - switchCompat.thumbTintList = ColorStateList( - arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), - intArrayOf(scheme.primary, thumbUncheckedColor) - ) - - switchCompat.trackTintList = ColorStateList( - arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), - intArrayOf(trackColor, trackUncheckedColor) - ) - } - } - fun themeSwipeRefreshLayout(swipeRefreshLayout: SwipeRefreshLayout) { withScheme(swipeRefreshLayout) { scheme -> swipeRefreshLayout.setColorSchemeColors(scheme.primary) @@ -220,71 +63,6 @@ class ViewThemeUtils @Inject constructor( } } - fun getPlaceholderImage(context: Context, mimetype: String?): Drawable? { - val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(mimetype) - val drawable = AppCompatResources.getDrawable( - context, - drawableResourceId - ) - if (drawable != null && THEMEABLE_PLACEHOLDER_IDS.contains(drawableResourceId)) { - colorDrawable(context, drawable) - } - return drawable - } - - private fun colorDrawable(context: Context, drawable: Drawable) { - val scheme = getScheme(context) - drawable.setTint(scheme.primary) - } - - @TargetApi(Build.VERSION_CODES.O) - fun themePlaceholderAvatar(avatar: View, @DrawableRes foreground: Int): Drawable? { - var drawable: LayerDrawable? = null - withScheme(avatar) { scheme -> - val layers = arrayOfNulls(2) - layers[0] = ContextCompat.getDrawable(avatar.context, R.drawable.ic_avatar_background) - layers[0]?.setTint(scheme.surfaceVariant) - layers[1] = ContextCompat.getDrawable(avatar.context, foreground) - layers[1]?.setTint(scheme.onSurfaceVariant) - drawable = LayerDrawable(layers) - } - - return drawable - } - - fun themePrimaryMentionChip(context: Context, chip: ChipDrawable) { - withScheme(context) { scheme -> - chip.chipBackgroundColor = ColorStateList.valueOf(scheme.primary) - chip.setTextColor(scheme.onPrimary) - } - } - - fun setCheckedBackground(emoji: EmojiTextView) { - withScheme(emoji) { scheme -> - val drawable = AppCompatResources - .getDrawable(emoji.context, R.drawable.reaction_self_bottom_sheet_background)!! - .mutate() - DrawableCompat.setTintList( - drawable, - ColorStateList.valueOf(scheme.primary) - ) - emoji.background = drawable - } - } - - fun setCheckedBackground(linearLayout: LinearLayout, @ColorInt backgroundColor: Int) { - withScheme(linearLayout) { scheme -> - val drawable = AppCompatResources - .getDrawable(linearLayout.context, R.drawable.reaction_self_background)!! - .mutate() - DrawableCompat.setTintList( - drawable, - ColorStateList.valueOf(backgroundColor) - ) - linearLayout.background = drawable - } - } - fun colorDialogMenuText(button: MaterialButton) { withScheme(button) { scheme -> button.setTextColor(scheme.onSurface) @@ -331,18 +109,4 @@ class ViewThemeUtils @Inject constructor( } return drawable } - - companion object { - private val THEMEABLE_PLACEHOLDER_IDS = listOf( - 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 SEARCH_TEXT_SIZE: Float = 16f - } } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt new file mode 100644 index 000000000..560c2e18f --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt @@ -0,0 +1,93 @@ +/* + * Nextcloud Talk application + * + * @author Álvaro Brey + * Copyright (C) 2022 Álvaro Brey + * Copyright (C) 2022 Nextcloud GmbH + * + * 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.viewthemeutils + +import android.content.res.ColorStateList +import android.graphics.Color +import android.widget.LinearLayout +import androidx.appcompat.widget.SearchView +import androidx.appcompat.widget.SwitchCompat +import androidx.core.content.res.ResourcesCompat +import com.nextcloud.android.common.ui.color.ColorUtil +import com.nextcloud.android.common.ui.theme.MaterialSchemes +import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase +import com.nextcloud.talk.R +import javax.inject.Inject + +/** + * View theme utils for AppCompat views (androidx.appcompat.*) + */ +class AppCompatViewThemeUtils @Inject constructor(schemes: MaterialSchemes, private val colorUtil: ColorUtil) : + ViewThemeUtilsBase(schemes) { + fun themeSearchView(searchView: SearchView) { + withScheme(searchView) { scheme -> + // hacky as no default way is provided + val editText = searchView.findViewById(R.id.search_src_text) + val searchPlate = searchView.findViewById(R.id.search_plate) + editText.textSize = SEARCH_TEXT_SIZE + editText.setHintTextColor(scheme.onSurfaceVariant) + editText.setTextColor(scheme.onSurface) + editText.setBackgroundColor(scheme.surface) + searchPlate.setBackgroundColor(scheme.surface) + } + } + + fun colorSwitchCompat(switchCompat: SwitchCompat) { + withScheme(switchCompat) { scheme -> + + val context = switchCompat.context + + val thumbUncheckedColor = ResourcesCompat.getColor( + context.resources, + R.color.switch_thumb_color_unchecked, + context.theme + ) + val trackUncheckedColor = ResourcesCompat.getColor( + context.resources, + R.color.switch_track_color_unchecked, + context.theme + ) + + val trackColor = Color.argb( + SWITCH_COMPAT_TRACK_ALPHA, + Color.red(scheme.primary), + Color.green(scheme.primary), + Color.blue(scheme.primary) + ) + + switchCompat.thumbTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(scheme.primary, thumbUncheckedColor) + ) + + switchCompat.trackTintList = ColorStateList( + arrayOf(intArrayOf(android.R.attr.state_checked), intArrayOf()), + intArrayOf(trackColor, trackUncheckedColor) + ) + } + } + + companion object { + private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77 + private const val SEARCH_TEXT_SIZE: Float = 16f + } +} diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt new file mode 100644 index 000000000..4d8be52c3 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt @@ -0,0 +1,234 @@ +/* + * Nextcloud Talk application + * + * @author Álvaro Brey + * Copyright (C) 2022 Álvaro Brey + * Copyright (C) 2022 Nextcloud GmbH + * + * 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.viewthemeutils + +import android.annotation.TargetApi +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable +import android.os.Build +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.TextView +import androidx.annotation.ColorInt +import androidx.annotation.DrawableRes +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.SwitchCompat +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.ColorUtils +import androidx.core.graphics.drawable.DrawableCompat +import androidx.core.view.ViewCompat +import androidx.core.view.children +import com.google.android.material.card.MaterialCardView +import com.google.android.material.chip.ChipDrawable +import com.nextcloud.android.common.ui.theme.MaterialSchemes +import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase +import com.nextcloud.talk.R +import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.DrawableUtils +import com.vanniktech.emoji.EmojiTextView +import com.yarolegovich.mp.MaterialPreferenceCategory +import com.yarolegovich.mp.MaterialSwitchPreference +import javax.inject.Inject +import kotlin.math.roundToInt + +/** + * View theme utils specific for the Talk app. + * + * TODO some of these can be renamed and made generic + */ +@Suppress("TooManyFunctions") +class TalkSpecificViewThemeUtils @Inject constructor( + schemes: MaterialSchemes, + private val appcompat: AppCompatViewThemeUtils +) : + ViewThemeUtilsBase(schemes) { + fun themeIncomingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { + val resources = bubble.resources + + var bubbleResource = R.drawable.shape_incoming_message + + if (grouped) { + bubbleResource = R.drawable.shape_grouped_incoming_message + } + + val bgBubbleColor = if (deleted) { + resources.getColor(R.color.bg_message_list_incoming_bubble_deleted) + } else { + resources.getColor(R.color.bg_message_list_incoming_bubble) + } + val bubbleDrawable = DisplayUtils.getMessageSelector( + bgBubbleColor, + resources.getColor(R.color.transparent), + bgBubbleColor, + bubbleResource + ) + ViewCompat.setBackground(bubble, bubbleDrawable) + } + + fun themeOutgoingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { + withScheme(bubble) { scheme -> + val bgBubbleColor = if (deleted) { + ColorUtils.setAlphaComponent(scheme.surfaceVariant, HALF_ALPHA_INT) + } else { + scheme.surfaceVariant + } + + val layout = if (grouped) { + R.drawable.shape_grouped_outcoming_message + } else { + R.drawable.shape_outcoming_message + } + val bubbleDrawable = DisplayUtils.getMessageSelector( + bgBubbleColor, + ResourcesCompat.getColor(bubble.resources, R.color.transparent, null), + bgBubbleColor, + layout + ) + ViewCompat.setBackground(bubble, bubbleDrawable) + } + } + + 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 colorContactChatItemName(contactName: androidx.emoji.widget.EmojiTextView) { + withScheme(contactName) { scheme -> + contactName.setTextColor(scheme.onPrimaryContainer) + } + } + + fun colorContactChatItemBackground(card: MaterialCardView) { + withScheme(card) { scheme -> + card.setCardBackgroundColor(scheme.primaryContainer) + } + } + + fun colorPreferenceCategory(category: MaterialPreferenceCategory) { + withScheme(category) { scheme -> + category.setTitleColor(scheme.primary) + } + } + + fun colorSwitchPreference(preference: MaterialSwitchPreference) { + val children = preference.children + val switch = children.find { it is SwitchCompat } + if (switch != null) { + val switchCompat = (switch as SwitchCompat) + appcompat.colorSwitchCompat(switchCompat) + } + } + + fun setCheckedBackground(emoji: EmojiTextView) { + withScheme(emoji) { scheme -> + val drawable = AppCompatResources + .getDrawable(emoji.context, R.drawable.reaction_self_bottom_sheet_background)!! + .mutate() + DrawableCompat.setTintList( + drawable, + ColorStateList.valueOf(scheme.primary) + ) + emoji.background = drawable + } + } + + fun setCheckedBackground(linearLayout: LinearLayout, @ColorInt backgroundColor: Int) { + withScheme(linearLayout) { scheme -> + val drawable = AppCompatResources + .getDrawable(linearLayout.context, R.drawable.reaction_self_background)!! + .mutate() + DrawableCompat.setTintList( + drawable, + ColorStateList.valueOf(backgroundColor) + ) + linearLayout.background = drawable + } + } + + fun getPlaceholderImage(context: Context, mimetype: String?): Drawable? { + val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(mimetype) + val drawable = AppCompatResources.getDrawable( + context, + drawableResourceId + ) + if (drawable != null && THEMEABLE_PLACEHOLDER_IDS.contains(drawableResourceId)) { + colorDrawable(context, drawable) + } + return drawable + } + + private fun colorDrawable(context: Context, drawable: Drawable) { + val scheme = getScheme(context) + drawable.setTint(scheme.primary) + } + + @TargetApi(Build.VERSION_CODES.O) + fun themePlaceholderAvatar(avatar: View, @DrawableRes foreground: Int): Drawable? { + var drawable: LayerDrawable? = null + withScheme(avatar) { scheme -> + val layers = arrayOfNulls(2) + layers[0] = ContextCompat.getDrawable(avatar.context, R.drawable.ic_avatar_background) + layers[0]?.setTint(scheme.surfaceVariant) + layers[1] = ContextCompat.getDrawable(avatar.context, foreground) + layers[1]?.setTint(scheme.onSurfaceVariant) + drawable = LayerDrawable(layers) + } + + return drawable + } + + fun themePrimaryMentionChip(context: Context, chip: ChipDrawable) { + withScheme(context) { scheme -> + chip.chipBackgroundColor = ColorStateList.valueOf(scheme.primary) + chip.setTextColor(scheme.onPrimary) + } + } + + companion object { + private val THEMEABLE_PLACEHOLDER_IDS = listOf( + 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 HALF_ALPHA_INT: Int = 255 / 2 + } +} 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 4ce8b73ab..1e5f48c54 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -304,7 +304,7 @@ public class DisplayUtils { chip.setEllipsize(TextUtils.TruncateAt.MIDDLE); if (chipResource == R.xml.chip_you) { - viewThemeUtils.themePrimaryMentionChip(context, chip); + viewThemeUtils.talk.themePrimaryMentionChip(context, chip); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {