From ad0bd58a9ea6e2934cfefc8832bfa3827206a321 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 21 May 2022 00:04:29 +0200 Subject: [PATCH 01/70] Change style to Material 3 Resolves #2076 Signed-off-by: Andy Scherzinger --- app/src/main/res/values/styles.xml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 011181880..28b5fc4e3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -23,7 +23,7 @@ - - - - - - - - - - - - @@ -263,7 +263,7 @@ 0dp - From d27f0e22225a3f6e5a6ce0567477cdac59260d7b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 1 Aug 2022 22:04:40 +0200 Subject: [PATCH 22/70] preoperly theme quoted messages for Material 3 including alignment Signed-off-by: Andy Scherzinger --- .../messages/MagicIncomingTextMessageViewHolder.kt | 14 +++++++++----- .../MagicOutcomingTextMessageViewHolder.kt | 12 +++--------- .../com/nextcloud/talk/ui/theme/ViewThemeUtils.kt | 6 ++++++ app/src/main/res/layout/item_message_quote.xml | 10 ++++++---- 4 files changed, 24 insertions(+), 18 deletions(-) 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 e12d67b3f..49eae862e 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 @@ -48,6 +48,8 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA import com.nextcloud.talk.databinding.ItemCustomIncomingTextMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage 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 import com.nextcloud.talk.utils.TextMatchers @@ -64,6 +66,9 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message @Inject lateinit var context: Context + @Inject + lateinit var viewThemeUtils: ViewThemeUtils + @Inject lateinit var appPreferences: AppPreferences @@ -181,13 +186,12 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message context!!.getText(R.string.nc_nick_guest) else parentChatMessage.actorDisplayName binding.messageQuote.quotedMessage.text = parentChatMessage.text - binding.messageQuote.quotedMessageAuthor - .setTextColor(ContextCompat.getColor(context!!, R.color.textColorMaxContrast)) - if (parentChatMessage.actorId?.equals(message.activeUser!!.userId) == true) { - binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.colorPrimary) + viewThemeUtils.colorPrimaryView(binding.messageQuote.quoteColoredView) } else { - binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.textColorMaxContrast) + binding.messageQuote.quoteColoredView.setBackgroundColor( + ContextCompat.getColor(binding.messageQuote.quoteColoredView.context, R.color.high_emphasis_text) + ) } } 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 738fe1a7e..1db56195f 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 @@ -30,8 +30,8 @@ import android.text.Spannable import android.text.SpannableString import android.util.TypedValue import android.view.View +import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat -import androidx.core.graphics.ColorUtils import autodagger.AutoInjector import coil.load import com.google.android.flexbox.FlexboxLayout @@ -150,16 +150,10 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage 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( + ContextCompat.getColor(binding.messageQuote.quoteColoredView.context, R.color.high_emphasis_text) ) - - binding.messageQuote.quoteColoredView.setBackgroundColor(serverTheme.colorText) } private fun setBubbleOnChatMessage(message: ChatMessage) { 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 eb5350486..432cc4f4c 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 @@ -195,6 +195,12 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorPrimaryView(view: View) { + withScheme(view) { scheme -> + view.setBackgroundColor(scheme.primary) + } + } + /** * Colors the background as element color and the foreground as text color. */ diff --git a/app/src/main/res/layout/item_message_quote.xml b/app/src/main/res/layout/item_message_quote.xml index 2144d2a66..8e28e1cd3 100644 --- a/app/src/main/res/layout/item_message_quote.xml +++ b/app/src/main/res/layout/item_message_quote.xml @@ -1,4 +1,5 @@ - + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_avatar_document.xml b/app/src/main/res/drawable/ic_avatar_document.xml new file mode 100644 index 000000000..5488941ab --- /dev/null +++ b/app/src/main/res/drawable/ic_avatar_document.xml @@ -0,0 +1,31 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_avatar_group.xml b/app/src/main/res/drawable/ic_avatar_group.xml new file mode 100644 index 000000000..3dcdb9e9b --- /dev/null +++ b/app/src/main/res/drawable/ic_avatar_group.xml @@ -0,0 +1,31 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_avatar_link.xml b/app/src/main/res/drawable/ic_avatar_link.xml new file mode 100644 index 000000000..c4890f82a --- /dev/null +++ b/app/src/main/res/drawable/ic_avatar_link.xml @@ -0,0 +1,31 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_avatar_mail.xml b/app/src/main/res/drawable/ic_avatar_mail.xml new file mode 100644 index 000000000..cbbfce6bf --- /dev/null +++ b/app/src/main/res/drawable/ic_avatar_mail.xml @@ -0,0 +1,31 @@ + + + + + From 37d88b7ea5e260fdf4179546edcf3279e6f9721d Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 13:08:11 +0200 Subject: [PATCH 29/70] theme Mentions filter Signed-off-by: Andy Scherzinger --- .../items/MentionAutocompleteItem.java | 105 ++++++++---------- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 2 +- 2 files changed, 46 insertions(+), 61 deletions(-) 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 f5c8a4c55..777908b49 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 @@ -32,7 +32,6 @@ import android.view.View; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.nextcloud.talk.R; -import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.models.json.mention.Mention; import com.nextcloud.talk.models.json.status.StatusType; @@ -42,7 +41,6 @@ import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; import java.util.List; -import java.util.Objects; import java.util.regex.Pattern; import androidx.constraintlayout.widget.ConstraintLayout; @@ -137,35 +135,28 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem= Build.VERSION_CODES.O) { - holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( - DisplayUtils.getRoundedDrawable( - viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, - R.drawable.ic_avatar_group))); - } else { - holder.binding.avatarDraweeView.setImageResource(R.drawable.ic_circular_group); - } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + holder.binding.avatarDraweeView.getHierarchy().setPlaceholderImage( + DisplayUtils.getRoundedDrawable( + viewThemeUtils.themePlaceholderAvatar(holder.binding.avatarDraweeView, + R.drawable.ic_avatar_group))); + } else { + holder.binding.avatarDraweeView.setImageResource(R.drawable.ic_circular_group); } } else { String avatarId = objectId; @@ -180,9 +171,7 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem theme.darkScheme else -> theme.lightScheme } From 9a2d7ee1ffe27004c500cf4b89de0cb29ba68489 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 13:28:28 +0200 Subject: [PATCH 30/70] extend tab layout theming for text / states and ripple effect Signed-off-by: Andy Scherzinger --- .../talk/ui/dialog/ShowReactionsDialog.kt | 12 +++++++++++- .../com/nextcloud/talk/ui/theme/ViewThemeUtils.kt | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) 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 554fc27b7..af89f5ea6 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 @@ -52,12 +52,14 @@ 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 import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import java.util.Collections +import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class) class ShowReactionsDialog( @@ -70,12 +72,19 @@ class ShowReactionsDialog( private val serverTheme: ServerTheme ) : BottomSheetDialog(activity), ReactionItemClickListener { + @Inject + lateinit var viewThemeUtils: ViewThemeUtils + private lateinit var binding: DialogMessageReactionsBinding private var adapter: ReactionsAdapter? = null private val tagAll: String? = null + init { + NextcloudTalkApplication.sharedApplication?.componentApplication?.inject(this) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DialogMessageReactionsBinding.inflate(layoutInflater) @@ -98,7 +107,6 @@ class ShowReactionsDialog( adapter?.list?.clear() if (chatMessage.reactions != null && chatMessage.reactions!!.isNotEmpty()) { var reactionsTotal = 0 - binding.emojiReactionsTabs.setSelectedTabIndicatorColor(serverTheme.primaryColor) for ((emoji, amount) in chatMessage.reactions!!) { reactionsTotal = reactionsTotal.plus(amount as Int) val tab: TabLayout.Tab = binding.emojiReactionsTabs.newTab() // Create a new Tab names "First Tab" @@ -139,6 +147,8 @@ class ShowReactionsDialog( } }) + viewThemeUtils.colorTabLayout(binding.emojiReactionsTabs) + updateParticipantsForEmoji(chatMessage, tagAll) } adapter?.notifyDataSetChanged() 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 f5240b9b4..6f8ed11b2 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 @@ -581,6 +581,21 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private fun colorTabLayout(tabLayout: TabLayout) { withScheme(tabLayout) { scheme -> tabLayout.setSelectedTabIndicatorColor(scheme.primary) + tabLayout.tabTextColors = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_selected), + intArrayOf(-android.R.attr.state_selected) + ), + intArrayOf(scheme.primary, ContextCompat.getColor(tabLayout.context, R.color.high_emphasis_text)) + ) + tabLayout.tabRippleColor = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_pressed) + ), + intArrayOf( + calculateDisabledColor(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) } } From 9eb3cbc2807bbe92e169b29e7dfb74b413619eab Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 16:08:34 +0200 Subject: [PATCH 31/70] proper chip theming for you-mentions Signed-off-by: Andy Scherzinger --- .../MagicIncomingTextMessageViewHolder.kt | 6 ++++-- .../MagicOutcomingTextMessageViewHolder.kt | 3 ++- .../MentionAutocompleteCallback.java | 14 ++++++++++--- .../talk/controllers/ChatController.kt | 3 ++- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 12 +++++++++++ .../nextcloud/talk/utils/DisplayUtils.java | 21 ++++++++++++++++--- 6 files changed, 49 insertions(+), 10 deletions(-) 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 7fba7d086..4df5a1bef 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 @@ -246,7 +246,8 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message individualHashMap["name"]!!, individualHashMap["type"]!!, message.activeUser!!, - R.xml.chip_you + R.xml.chip_you, + viewThemeUtils ) } else { messageStringInternal = DisplayUtils.searchAndReplaceWithMentionSpan( @@ -256,7 +257,8 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message individualHashMap["name"]!!, individualHashMap["type"]!!, message.activeUser!!, - R.xml.chip_others + R.xml.chip_others, + viewThemeUtils ) } } else if (individualHashMap["type"] == "file") { 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 1db56195f..35c444670 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 @@ -180,7 +180,8 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage individualHashMap["name"]!!, individualHashMap["type"]!!, message.activeUser, - R.xml.chip_others + R.xml.chip_others, + viewThemeUtils ) } else if (individualHashMap["type"] == "file") { realView.setOnClickListener { v: View? -> diff --git a/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java b/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java index 6c4985c48..c121946b1 100644 --- a/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java +++ b/app/src/main/java/com/nextcloud/talk/callbacks/MentionAutocompleteCallback.java @@ -31,6 +31,7 @@ import com.facebook.widget.text.span.BetterImageSpan; import com.nextcloud.talk.R; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.models.json.mention.Mention; +import com.nextcloud.talk.ui.theme.ViewThemeUtils; import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.MagicCharPolicy; import com.nextcloud.talk.utils.text.Spans; @@ -39,15 +40,19 @@ import com.vanniktech.emoji.EmojiRange; import com.vanniktech.emoji.Emojis; public class MentionAutocompleteCallback implements AutocompleteCallback { + private final ViewThemeUtils viewThemeUtils; private Context context; private User conversationUser; private EditText editText; - public MentionAutocompleteCallback(Context context, User conversationUser, - EditText editText) { + public MentionAutocompleteCallback(Context context, + User conversationUser, + EditText editText, + ViewThemeUtils viewThemeUtils) { this.context = context; this.conversationUser = conversationUser; this.editText = editText; + this.viewThemeUtils = viewThemeUtils; } @Override @@ -73,11 +78,14 @@ public class MentionAutocompleteCallback implements AutocompleteCallback Unit) { + block(getScheme(context)) + } + private fun withSchemeDark(block: (Scheme) -> Unit) { block(getSchemeDark()) } @@ -664,6 +669,13 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private ) } + 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, 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 134d00a81..a04da2da2 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -81,6 +81,7 @@ import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.events.UserMentionClickEvent; +import com.nextcloud.talk.ui.theme.ViewThemeUtils; import com.nextcloud.talk.utils.text.Spans; import org.greenrobot.eventbus.EventBus; @@ -297,11 +298,16 @@ public class DisplayUtils { User conversationUser, String type, @XmlRes int chipResource, - @Nullable EditText emojiEditText) { + @Nullable EditText emojiEditText, + ViewThemeUtils viewThemeUtils) { ChipDrawable chip = ChipDrawable.createFromResource(context, chipResource); chip.setText(EmojiCompat.get().process(label)); chip.setEllipsize(TextUtils.TruncateAt.MIDDLE); + if (chipResource == R.xml.chip_you) { + viewThemeUtils.themePrimaryMentionChip(context, chip); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Configuration config = context.getResources().getConfiguration(); chip.setLayoutDirection(config.getLayoutDirection()); @@ -367,7 +373,8 @@ public class DisplayUtils { public static Spannable searchAndReplaceWithMentionSpan(Context context, Spannable text, String id, String label, String type, User conversationUser, - @XmlRes int chipXmlRes) { + @XmlRes int chipXmlRes, + ViewThemeUtils viewThemeUtils) { Spannable spannableString = new SpannableString(text); String stringText = text.toString(); @@ -395,10 +402,18 @@ public class DisplayUtils { conversationUser, type, chipXmlRes, - null), + null, + viewThemeUtils), BetterImageSpan.ALIGN_CENTER, id, label); spannableString.setSpan(mentionChipSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + if (chipXmlRes == R.xml.chip_you) { + spannableString.setSpan( + new ForegroundColorSpan(viewThemeUtils.getScheme(context).getOnPrimary()), + start, + end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } if ("user".equals(type) && !conversationUser.getUserId().equals(id)) { spannableString.setSpan(clickableSpan, start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } From 02e18046cf2024479dc06c9c1c869d80f84eceb2 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 16:21:36 +0200 Subject: [PATCH 32/70] improve outgoing message theming Signed-off-by: Andy Scherzinger --- .../adapters/messages/MagicOutcomingTextMessageViewHolder.kt | 5 +++++ 1 file changed, 5 insertions(+) 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 35c444670..61d387602 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 @@ -25,6 +25,7 @@ package com.nextcloud.talk.adapters.messages import android.content.Context import android.content.Intent +import android.graphics.PorterDuff import android.net.Uri import android.text.Spannable import android.text.SpannableString @@ -76,6 +77,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage val layoutParams = binding.messageTime.layoutParams as FlexboxLayout.LayoutParams layoutParams.isWrapBefore = false var textSize = context!!.resources.getDimension(R.dimen.chat_text_size) + binding.messageTime.setTextColor(viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant) if (messageParameters != null && messageParameters.size > 0) { messageString = processMessageParameters(messageParameters, message, messageString) } else if (TextMatchers.isMessageWithSingleEmoticonOnly(message.text)) { @@ -91,6 +93,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) binding.messageTime.layoutParams = layoutParams + binding.messageText.setTextColor(viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant) binding.messageText.text = messageString // parent message handling @@ -116,6 +119,8 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage readStatusDrawableInt?.let { drawableInt -> ResourcesCompat.getDrawable(context!!.resources, drawableInt, null)?.let { binding.checkMark.setImageDrawable(it) + binding.checkMark.setColorFilter(viewThemeUtils.getScheme(binding.messageText.context) + .onSurfaceVariant, PorterDuff.Mode.SRC_ATOP) } } From b2e21aef7c72f9ed49923b9baa9eafe54357e3d0 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 16:26:57 +0200 Subject: [PATCH 33/70] correct themeing for reactions bottom sheet Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt | 3 +++ 1 file changed, 3 insertions(+) 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 af89f5ea6..4cd190b55 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 @@ -90,6 +90,7 @@ class ShowReactionsDialog( binding = DialogMessageReactionsBinding.inflate(layoutInflater) setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + viewThemeUtils.themeDialog(binding.root) adapter = ReactionsAdapter(this, user) binding.reactionsList.adapter = adapter binding.reactionsList.layoutManager = LinearLayoutManager(context) @@ -148,6 +149,8 @@ class ShowReactionsDialog( }) viewThemeUtils.colorTabLayout(binding.emojiReactionsTabs) + binding.emojiReactionsTabs.setBackgroundColor( + viewThemeUtils.getScheme(binding.emojiReactionsTabs .context).surface) updateParticipantsForEmoji(chatMessage, tagAll) } From fd49b13b1423be1e1ccaefba9f8edeca6a1606bc Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2022 16:37:31 +0200 Subject: [PATCH 34/70] theme checked reactions Signed-off-by: Andy Scherzinger --- .../talk/ui/dialog/MessageActionsDialog.kt | 3 +-- .../com/nextcloud/talk/ui/theme/ViewThemeUtils.kt | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) 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 ebc38c366..a968d7c3e 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 @@ -31,7 +31,6 @@ import android.view.View import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import androidx.annotation.NonNull -import androidx.appcompat.content.res.AppCompatResources import autodagger.AutoInjector import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog @@ -228,7 +227,7 @@ class MessageActionsDialog( private fun checkAndSetEmojiSelfReaction(emoji: EmojiTextView) { if (emoji.text?.toString() != null && message.reactionsSelf?.contains(emoji.text?.toString()) == true) { - emoji.background = AppCompatResources.getDrawable(context, R.drawable.reaction_self_bottom_sheet_background) + viewThemeUtils.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 8c0d3e1e3..5c5cb6bff 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 @@ -49,6 +49,7 @@ import androidx.appcompat.widget.SearchView.SearchAutoComplete import androidx.appcompat.widget.SwitchCompat import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.ViewCompat import androidx.core.view.children import androidx.swiperefreshlayout.widget.SwipeRefreshLayout @@ -67,6 +68,7 @@ import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DrawableUtils import com.nextcloud.talk.utils.ui.ColorUtil import com.nextcloud.talk.utils.ui.PlatformThemeUtil.isDarkMode +import com.vanniktech.emoji.EmojiTextView import com.yarolegovich.mp.MaterialPreferenceCategory import com.yarolegovich.mp.MaterialSwitchPreference import scheme.Scheme @@ -676,6 +678,18 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + 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 + } + } + companion object { private val THEMEABLE_PLACEHOLDER_IDS = listOf( R.drawable.ic_mimetype_package_x_generic, From 4c9f5bec2ecc40de55130226f4f0cceda8938d75 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 21:38:10 +0200 Subject: [PATCH 35/70] proper material 3 reactions theming Signed-off-by: Andy Scherzinger --- .../IncomingLocationMessageViewHolder.kt | 8 ++- .../messages/IncomingPollMessageViewHolder.kt | 8 ++- .../IncomingVoiceMessageViewHolder.kt | 8 ++- .../MagicIncomingTextMessageViewHolder.kt | 8 ++- .../MagicOutcomingTextMessageViewHolder.kt | 2 +- .../MagicPreviewMessageViewHolder.java | 10 +++- .../OutcomingLocationMessageViewHolder.kt | 8 ++- .../OutcomingPollMessageViewHolder.kt | 8 ++- .../OutcomingVoiceMessageViewHolder.kt | 8 ++- .../talk/adapters/messages/Reaction.kt | 50 ++++++++++++------- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 13 +++++ .../res/drawable/reaction_self_background.xml | 4 +- 12 files changed, 106 insertions(+), 29 deletions(-) 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 78047193c..1febe1bed 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 @@ -102,7 +102,13 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess // geo-location setLocationDataOnMessageItem(message) - Reaction().showReactions(message, binding.reactions, binding.messageText.context, false) + Reaction().showReactions( + message, + binding.reactions, + binding.messageText.context, + false, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 b50575a93..66d296b3e 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 @@ -88,7 +88,13 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : MessageH setPollPreview(message) - Reaction().showReactions(message, binding.reactions, binding.messageTime.context, false) + Reaction().showReactions( + message, + binding.reactions, + binding.messageTime.context, + false, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 1955859e7..3088d4b39 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 @@ -145,7 +145,13 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message } }) - Reaction().showReactions(message, binding.reactions, binding.messageTime.context, false) + Reaction().showReactions( + message, + binding.reactions, + binding.messageTime.context, + false, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 4df5a1bef..c94127b2d 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 @@ -122,7 +122,13 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.replyable) - Reaction().showReactions(message, binding.reactions, binding.messageText.context, false) + Reaction().showReactions( + message, + binding.reactions, + binding.messageText.context, + false, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 61d387602..fc9611b33 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 @@ -128,7 +128,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.replyable) - Reaction().showReactions(message, binding.reactions, context!!, true) + Reaction().showReactions(message, binding.reactions, context, true, viewThemeUtils) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 e6c5a7d23..d10532a65 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,6 +51,7 @@ 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; import com.nextcloud.talk.utils.FileViewerUtils; @@ -96,6 +97,9 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom @Inject ServerTheme serverTheme; + @Inject + ViewThemeUtils viewThemeUtils; + @Inject OkHttpClient okHttpClient; @@ -239,7 +243,11 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom itemView.setTag(REPLYABLE_VIEW_TAG, message.getReplyable()); reactionsBinding = getReactionsBinding(); - new Reaction().showReactions(message, reactionsBinding, getMessageText().getContext(), true); + new Reaction().showReactions(message, + reactionsBinding, + getMessageText().getContext(), + true, + viewThemeUtils); reactionsBinding.reactionsEmojiWrapper.setOnClickListener(l -> { reactionsInterface.onClickReactions(message); }); 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 4d42e6df3..84118d377 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 @@ -120,7 +120,13 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders // geo-location setLocationDataOnMessageItem(message) - Reaction().showReactions(message, binding.reactions, binding.messageText.context, true) + Reaction().showReactions( + message, + binding.reactions, + binding.messageText.context, + true, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 883241bc2..936c73342 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 @@ -106,7 +106,13 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag setPollPreview(message) - Reaction().showReactions(message, binding.reactions, binding.messageTime.context, true) + Reaction().showReactions( + message, + binding.reactions, + binding.messageTime.context, + true, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 1247135e9..c011efce4 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 @@ -137,7 +137,13 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders binding.checkMark.setContentDescription(readStatusContentDescriptionString) - Reaction().showReactions(message, binding.reactions, binding.messageTime.context, true) + Reaction().showReactions( + message, + binding.reactions, + binding.messageTime.context, + true, + viewThemeUtils + ) binding.reactions.reactionsEmojiWrapper.setOnClickListener { reactionsInterface.onClickReactions(message) } 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 08ae5d868..1eff0dae0 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 @@ -27,11 +27,11 @@ import android.content.Context import android.view.ViewGroup import android.widget.LinearLayout import android.widget.TextView -import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat import com.nextcloud.talk.R import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding import com.nextcloud.talk.models.json.chat.ChatMessage +import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.DisplayUtils import com.vanniktech.emoji.EmojiTextView @@ -41,7 +41,8 @@ class Reaction { message: ChatMessage, binding: ReactionsInsideMessageBinding, context: Context, - isOutgoingMessage: Boolean + isOutgoingMessage: Boolean, + viewThemeUtils: ViewThemeUtils ) { binding.reactionsEmojiWrapper.removeAllViews() if (message.reactions != null && message.reactions!!.isNotEmpty()) { @@ -49,7 +50,6 @@ class Reaction { var remainingEmojisToDisplay = MAX_EMOJIS_TO_DISPLAY val showInfoAboutMoreEmojis = message.reactions!!.size > MAX_EMOJIS_TO_DISPLAY - val textColor = getTextColor(context, isOutgoingMessage, binding) val amountParams = getAmountLayoutParams(context) val wrapperParams = getWrapperLayoutParams(context) @@ -58,9 +58,12 @@ class Reaction { val paddingBottom = DisplayUtils.convertDpToPixel(WRAPPER_PADDING_BOTTOM, context).toInt() for ((emoji, amount) in message.reactions!!) { + val isSelfReaction = message.reactionsSelf != null && + message.reactionsSelf!!.isNotEmpty() && + message.reactionsSelf!!.contains(emoji) + val textColor = getTextColor(isOutgoingMessage, isSelfReaction, binding, viewThemeUtils) val emojiWithAmountWrapper = getEmojiWithAmountWrapperLayout( - context, - message, + binding.reactionsEmojiWrapper.context, emoji, amount, EmojiWithAmountWrapperLayoutInfo( @@ -69,7 +72,10 @@ class Reaction { wrapperParams, paddingSide, paddingTop, - paddingBottom + paddingBottom, + viewThemeUtils, + isOutgoingMessage, + isSelfReaction ), ) @@ -86,7 +92,6 @@ class Reaction { private fun getEmojiWithAmountWrapperLayout( context: Context, - message: ChatMessage, emoji: String, amount: Int, layoutInfo: EmojiWithAmountWrapperLayoutInfo @@ -98,12 +103,17 @@ class Reaction { emojiWithAmountWrapper.addView(getReactionCount(context, layoutInfo.textColor, amount, layoutInfo.amountParams)) emojiWithAmountWrapper.layoutParams = layoutInfo.wrapperParams - if (message.reactionsSelf != null && - message.reactionsSelf!!.isNotEmpty() && - message.reactionsSelf!!.contains(emoji) - ) { - emojiWithAmountWrapper.background = - AppCompatResources.getDrawable(context, R.drawable.reaction_self_background) + if (layoutInfo.isSelfReaction) { + val color = if (layoutInfo.isOutgoingMessage) { + ContextCompat.getColor( + emojiWithAmountWrapper.context, + R.color.bg_message_list_incoming_bubble + ) + } else { + layoutInfo.viewThemeUtils.getScheme(emojiWithAmountWrapper.context).primaryContainer + } + layoutInfo.viewThemeUtils.setCheckedBackground(emojiWithAmountWrapper, color) + emojiWithAmountWrapper.setPaddingRelative( layoutInfo.paddingSide, layoutInfo.paddingTop, @@ -166,12 +176,13 @@ class Reaction { } private fun getTextColor( - context: Context, isOutgoingMessage: Boolean, - binding: ReactionsInsideMessageBinding + isSelfReaction: Boolean, + binding: ReactionsInsideMessageBinding, + viewThemeUtils: ViewThemeUtils ): Int { - var textColor = ContextCompat.getColor(context, R.color.white) - if (!isOutgoingMessage) { + var textColor = viewThemeUtils.getScheme(binding.root.context).onSurfaceVariant + if (!isOutgoingMessage || isSelfReaction) { textColor = ContextCompat.getColor(binding.root.context, R.color.high_emphasis_text) } return textColor @@ -183,7 +194,10 @@ class Reaction { val wrapperParams: LinearLayout.LayoutParams, val paddingSide: Int, val paddingTop: Int, - val paddingBottom: Int + val paddingBottom: Int, + val viewThemeUtils: ViewThemeUtils, + val isOutgoingMessage: Boolean, + val isSelfReaction: Boolean ) companion object { 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 5c5cb6bff..59b25f18e 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 @@ -690,6 +690,19 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + 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 + } + } + companion object { private val THEMEABLE_PLACEHOLDER_IDS = listOf( R.drawable.ic_mimetype_package_x_generic, diff --git a/app/src/main/res/drawable/reaction_self_background.xml b/app/src/main/res/drawable/reaction_self_background.xml index 3310cf25a..deaea7a6f 100644 --- a/app/src/main/res/drawable/reaction_self_background.xml +++ b/app/src/main/res/drawable/reaction_self_background.xml @@ -21,10 +21,10 @@ + android:color="@color/high_emphasis_text" /> + android:color="#FFFFFF" /> Date: Wed, 3 Aug 2022 21:39:20 +0200 Subject: [PATCH 36/70] unread chip style now material3 (while not typical chip coloring) Signed-off-by: Andy Scherzinger --- app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 59b25f18e..383ce9ae4 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 @@ -621,7 +621,7 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private fun colorChipBackground(chip: Chip) { withScheme(chip) { scheme -> chip.chipBackgroundColor = ColorStateList.valueOf(scheme.primary) - chip.setTextColor(theme.colorText) + chip.setTextColor(scheme.onPrimary) } } From cb44a707a9ea7c4b1a007888bba9e332b9581d32 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 21:47:40 +0200 Subject: [PATCH 37/70] fix status icon background tint to match dialog background color (surface) Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java index fff6d61b6..1317b0bfb 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java @@ -312,7 +312,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { status.getStatus(), status.getIcon(), size, - getContext().getResources().getColor(R.color.dialog_background), + viewThemeUtils.getScheme(binding.currentAccount.ticker.getContext()).getSurface(), getContext())); binding.currentAccount.ticker.setVisibility(View.VISIBLE); From 1d776ed6bd384e039a8ea2ff212a11ec5f73af44 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 22:11:28 +0200 Subject: [PATCH 38/70] tint dialog menu items based onSurface Signed-off-by: Andy Scherzinger --- .../talk/ui/dialog/ChooseAccountDialogFragment.java | 4 +++- .../com/nextcloud/talk/ui/theme/ViewThemeUtils.kt | 7 +++++++ app/src/main/res/layout/dialog_choose_account.xml | 12 ++++++------ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java index 1317b0bfb..24bea279c 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java @@ -39,7 +39,6 @@ import android.view.ViewGroup; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.nextcloud.talk.R; import com.nextcloud.talk.activities.MainActivity; import com.nextcloud.talk.adapters.items.AdvancedUserItem; import com.nextcloud.talk.api.NcApi; @@ -118,8 +117,11 @@ public class ChooseAccountDialogFragment extends DialogFragment { viewThemeUtils.themeDialogDivider(binding.divider); viewThemeUtils.colorMaterialTextButton(binding.setStatus); + viewThemeUtils.colorDialogMenuText(binding.setStatus); viewThemeUtils.colorMaterialTextButton(binding.addAccount); + viewThemeUtils.colorDialogMenuText(binding.addAccount); viewThemeUtils.colorMaterialTextButton(binding.manageSettings); + viewThemeUtils.colorDialogMenuText(binding.manageSettings); // Defining user picture binding.currentAccount.userIcon.setTag(""); 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 383ce9ae4..ddab140be 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 @@ -703,6 +703,13 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorDialogMenuText(button: MaterialButton) { + withScheme(button) { scheme -> + button.setTextColor(scheme.onSurface) + button.iconTint = ColorStateList.valueOf(scheme.onSurface) + } + } + companion object { private val THEMEABLE_PLACEHOLDER_IDS = listOf( R.drawable.ic_mimetype_package_x_generic, diff --git a/app/src/main/res/layout/dialog_choose_account.xml b/app/src/main/res/layout/dialog_choose_account.xml index 02b4adb4e..6869e533d 100644 --- a/app/src/main/res/layout/dialog_choose_account.xml +++ b/app/src/main/res/layout/dialog_choose_account.xml @@ -56,12 +56,12 @@ android:text="@string/set_status" android:textAlignment="textStart" android:textAllCaps="false" - android:textColor="@color/fontAppbar" + android:textColor="@color/high_emphasis_text" android:enabled="false" app:icon="@drawable/ic_edit" app:iconGravity="start" app:iconPadding="22dp" - app:iconTint="@color/fontAppbar" /> + app:iconTint="@color/high_emphasis_text" /> @@ -121,11 +121,11 @@ android:text="@string/nc_settings" android:textAlignment="textStart" android:textAllCaps="false" - android:textColor="@color/fontAppbar" + android:textColor="@color/high_emphasis_text" app:icon="@drawable/ic_settings" app:iconGravity="start" app:iconPadding="22dp" - app:iconTint="@color/fontAppbar" + app:iconTint="@color/high_emphasis_text" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> From 365a7502b442d35e62ed326786adfbccb44538c0 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 22:56:28 +0200 Subject: [PATCH 39/70] unify tab layout theming on surface Signed-off-by: Andy Scherzinger --- .../activities/RemoteFileBrowserActivity.kt | 17 +++++--- .../activities/SharedItemsActivity.kt | 2 + .../talk/ui/dialog/ShowReactionsDialog.kt | 4 +- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 39 +++++++++++-------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt index da0d78049..6dabd3567 100644 --- a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt @@ -24,6 +24,7 @@ package com.nextcloud.talk.remotefilebrowser.activities import android.app.Activity import android.content.Intent +import android.content.res.ColorStateList import android.os.Bundle import android.util.Log import android.view.Menu @@ -74,14 +75,18 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe binding = ActivityRemoteFileBrowserBinding.inflate(layoutInflater) setSupportActionBar(binding.remoteFileBrowserItemsToolbar) + viewThemeUtils.themeToolbar(binding.remoteFileBrowserItemsToolbar) + val scheme = viewThemeUtils.getScheme(binding.sortListButtonGroup.context) + binding.sortListButtonGroup.setBackgroundColor(scheme.surface) + binding.sortButton.iconTint = ColorStateList.valueOf(scheme.onSurface) + binding.sortButton.setTextColor(scheme.onSurface) + viewThemeUtils.colorMaterialTextButton(binding.sortButton) + binding.pathNavigationBackButton.iconTint = ColorStateList.valueOf(scheme.onSurface) + binding.pathNavigationBackButton.setTextColor(scheme.onSurface) + viewThemeUtils.colorMaterialTextButton(binding.pathNavigationBackButton) + viewThemeUtils.themeStatusBar(this, binding.remoteFileBrowserItemsToolbar) setContentView(binding.root) - DisplayUtils.applyColorToStatusBar( - this, - ResourcesCompat.getColor( - resources, R.color.appbar, null - ) - ) DisplayUtils.applyColorToNavigationBar( this.window, ResourcesCompat.getColor(resources, R.color.bg_default, null) diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt index 29b722a9b..05133ab2f 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt @@ -74,6 +74,8 @@ class SharedItemsActivity : AppCompatActivity() { setContentView(binding.root) viewThemeUtils.themeStatusBar(this, binding.sharedItemsToolbar) + viewThemeUtils.themeToolbar(binding.sharedItemsToolbar) + viewThemeUtils.themeTabLayoutOnSurface(binding.sharedItemsTabs) DisplayUtils.applyColorToNavigationBar( this.window, 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 4cd190b55..4fc04097a 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 @@ -148,9 +148,7 @@ class ShowReactionsDialog( } }) - viewThemeUtils.colorTabLayout(binding.emojiReactionsTabs) - binding.emojiReactionsTabs.setBackgroundColor( - viewThemeUtils.getScheme(binding.emojiReactionsTabs .context).surface) + viewThemeUtils.themeTabLayoutOnSurface(binding.emojiReactionsTabs) updateParticipantsForEmoji(chatMessage, tagAll) } 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 ddab140be..6139777fd 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 @@ -585,27 +585,32 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } - fun colorTabLayout(tabLayout: TabLayout) { + fun themeTabLayoutOnSurface(tabLayout: TabLayout) { withScheme(tabLayout) { scheme -> - tabLayout.setSelectedTabIndicatorColor(scheme.primary) - tabLayout.tabTextColors = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_selected), - intArrayOf(-android.R.attr.state_selected) - ), - intArrayOf(scheme.primary, ContextCompat.getColor(tabLayout.context, R.color.high_emphasis_text)) - ) - tabLayout.tabRippleColor = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_pressed) - ), - intArrayOf( - calculateDisabledColor(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) + tabLayout.setBackgroundColor(scheme.surface) + colorTabLayout(tabLayout, scheme) } } + fun colorTabLayout(tabLayout: TabLayout, scheme: Scheme) { + tabLayout.setSelectedTabIndicatorColor(scheme.primary) + tabLayout.tabTextColors = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_selected), + intArrayOf(-android.R.attr.state_selected) + ), + intArrayOf(scheme.primary, ContextCompat.getColor(tabLayout.context, R.color.high_emphasis_text)) + ) + tabLayout.tabRippleColor = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_pressed) + ), + intArrayOf( + calculateDisabledColor(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + fun getPlaceholderImage(context: Context, mimetype: String?): Drawable? { val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(mimetype) val drawable = AppCompatResources.getDrawable( From fa82641f31e048a29b6e01bc4cc876f26dfcd55b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 23:44:59 +0200 Subject: [PATCH 40/70] theme toolbar icons including overflow icon and search field Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/controllers/ChatController.kt | 10 ++++++++++ .../talk/controllers/ContactsController.kt | 9 +++++++++ .../talk/controllers/base/NewBaseController.kt | 1 + .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 16 +++++++++++++++- 4 files changed, 35 insertions(+), 1 deletion(-) 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 a587c5f0f..852369bf7 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2486,6 +2486,16 @@ class ChatController(args: Bundle) : super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_conversation, menu) + viewThemeUtils.colorToolbarMenuIcon( + binding.messageInputView.context, + menu.findItem(R.id.conversation_voice_call) + ) + + viewThemeUtils.colorToolbarMenuIcon( + binding.messageInputView.context, + menu.findItem(R.id.conversation_video_call) + ) + if (conversationUser?.userId == "?") { menu.removeItem(R.id.conversation_info) } else { 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 703926253..2bafd3486 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt @@ -334,6 +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!!) 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 @@ -377,6 +378,14 @@ class ContactsController(args: Bundle) : override fun onPrepareOptionsMenu(menu: Menu) { super.onPrepareOptionsMenu(menu) + + if (searchItem != null) { + viewThemeUtils.colorToolbarMenuIcon( + binding.titleTextView.context, + searchItem!! + ) + } + checkAndHandleDoneMenuItem() if (adapter?.hasFilter() == true) { searchItem!!.expandActionView() diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/NewBaseController.kt b/app/src/main/java/com/nextcloud/talk/controllers/base/NewBaseController.kt index 2bfd5f869..065c3b078 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/NewBaseController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/NewBaseController.kt @@ -188,6 +188,7 @@ abstract class NewBaseController(@LayoutRes var layoutRes: Int, args: Bundle? = val layoutParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams binding.searchToolbar.visibility = View.GONE binding.toolbar.visibility = View.VISIBLE + viewThemeUtils.colorToolbarOverflowIcon(binding.toolbar) layoutParams.scrollFlags = 0 binding.appBar.stateListAnimator = AnimatorInflater.loadStateListAnimator( binding.appBar.context, 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 6139777fd..29a5065eb 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 @@ -30,6 +30,7 @@ import android.graphics.PorterDuff import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Build +import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.CheckBox @@ -120,6 +121,18 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorToolbarMenuIcon(context: Context, item: MenuItem) { + withScheme(context) { scheme -> + item.icon.setColorFilter(scheme.onSurface, PorterDuff.Mode.SRC_ATOP) + } + } + + fun colorToolbarOverflowIcon(toolbar: MaterialToolbar) { + withScheme(toolbar) { scheme -> + toolbar.overflowIcon?.setColorFilter(scheme.onSurface, PorterDuff.Mode.SRC_ATOP) + } + } + fun themeSearchView(searchView: SearchView) { withScheme(searchView) { scheme -> // hacky as no default way is provided @@ -690,7 +703,8 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private .mutate() DrawableCompat.setTintList( drawable, - ColorStateList.valueOf(scheme.primary)) + ColorStateList.valueOf(scheme.primary) + ) emoji.background = drawable } } From 8c266fe229829ae2ea57a7dcc2d273f7e6fce017 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 3 Aug 2022 23:45:13 +0200 Subject: [PATCH 41/70] reformat kotlin code Signed-off-by: Andy Scherzinger --- .../adapters/messages/MagicOutcomingTextMessageViewHolder.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 fc9611b33..4ba094c25 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 @@ -119,8 +119,9 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage readStatusDrawableInt?.let { drawableInt -> ResourcesCompat.getDrawable(context!!.resources, drawableInt, null)?.let { binding.checkMark.setImageDrawable(it) - binding.checkMark.setColorFilter(viewThemeUtils.getScheme(binding.messageText.context) - .onSurfaceVariant, PorterDuff.Mode.SRC_ATOP) + binding.checkMark.setColorFilter( + viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant, PorterDuff.Mode.SRC_ATOP + ) } } From 34d6da68a1d25943bf2215f976fb5f27d4917c6d Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 4 Aug 2022 14:22:42 +0200 Subject: [PATCH 42/70] properly theme adapter filter highlighting Signed-off-by: Andy Scherzinger --- .../com/nextcloud/talk/activities/BaseActivity.kt | 6 +++++- .../talk/adapters/items/AdvancedUserItem.java | 12 ++++++++---- .../nextcloud/talk/adapters/items/ContactItem.java | 10 +++------- .../talk/adapters/items/ParticipantItem.java | 8 +++----- .../talk/controllers/SwitchAccountController.kt | 4 ++-- .../talk/messagesearch/MessageSearchActivity.kt | 3 --- .../talk/ui/dialog/ChooseAccountDialogFragment.java | 2 +- 7 files changed, 22 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt index 7a36c608a..9bf4fce5e 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt @@ -32,6 +32,7 @@ import autodagger.AutoInjector import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.events.CertificateEvent +import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.SecurityUtils import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.ssl.MagicTrustManager @@ -53,6 +54,9 @@ open class BaseActivity : AppCompatActivity() { @Inject lateinit var appPreferences: AppPreferences + @Inject + lateinit var viewThemeUtils: ViewThemeUtils + @Inject lateinit var context: Context @@ -113,7 +117,7 @@ open class BaseActivity : AppCompatActivity() { LovelyStandardDialog(this) .setTopColorRes(R.color.nc_darkRed) .setNegativeButtonColorRes(R.color.nc_darkRed) - .setPositiveButtonColorRes(R.color.colorPrimary) + .setPositiveButtonColor(viewThemeUtils.getScheme(this).primary) .setIcon(R.drawable.ic_security_white_24dp) .setTitle(R.string.nc_certificate_dialog_title) .setMessage(dialogText) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java index a7b49be04..cf6e084be 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java @@ -34,6 +34,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.AccountItemBinding; import com.nextcloud.talk.models.json.participants.Participant; +import com.nextcloud.talk.ui.theme.ViewThemeUtils; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; @@ -54,11 +55,16 @@ public class AdvancedUserItem extends AbstractFlexibleItem Date: Thu, 4 Aug 2022 14:35:37 +0200 Subject: [PATCH 43/70] Theme info messages primary color Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/controllers/SettingsController.kt | 12 +++++++++--- .../com/nextcloud/talk/jobs/NotificationWorker.java | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt index f031b283e..c5d0f1a99 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -562,7 +562,9 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { if (ApplicationWideMessageHolder.getInstance().messageType != null) { when (ApplicationWideMessageHolder.getInstance().messageType) { ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED -> { - binding.messageText.setTextColor(resources!!.getColor(R.color.colorPrimary)) + binding.messageText.setTextColor( + viewThemeUtils.getScheme(binding.messageText.context).primary + ) binding.messageText.text = resources!!.getString(R.string.nc_settings_account_updated) binding.messageView.visibility = View.VISIBLE } @@ -571,13 +573,17 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { binding.messageText.setTextColor(resources!!.getColor(R.color.nc_darkRed)) binding.messageText.text = resources!!.getString(R.string.nc_settings_wrong_account) binding.messageView.visibility = View.VISIBLE - binding.messageText.setTextColor(resources!!.getColor(R.color.colorPrimary)) + binding.messageText.setTextColor( + viewThemeUtils.getScheme(binding.messageText.context).primary + ) binding.messageText.text = resources!!.getString(R.string.nc_Server_account_imported) binding.messageView.visibility = View.VISIBLE } ApplicationWideMessageHolder.MessageType.ACCOUNT_WAS_IMPORTED -> { - binding.messageText.setTextColor(resources!!.getColor(R.color.colorPrimary)) + binding.messageText.setTextColor( + viewThemeUtils.getScheme(binding.messageText.context).primary + ) binding.messageText.text = resources!!.getString(R.string.nc_Server_account_imported) binding.messageView.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java index 24c1a5b31..7bcaef1e6 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -346,6 +346,7 @@ public class NotificationWorker extends Worker { if (Build.VERSION.SDK_INT >= 23) { // This method should exist since API 21, but some phones don't have it // So as a safeguard, we don't use it until 23 + notificationBuilder.setColor(context.getResources().getColor(R.color.colorPrimary)); } From 006c893318f083d35f65f690faa9ab321ac7388e Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 4 Aug 2022 14:36:03 +0200 Subject: [PATCH 44/70] Theme call spotlight based on server theme / material 3 Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/talk/activities/CallActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index e1ae1a25e..eca9367db 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -880,12 +880,13 @@ public class CallActivity extends CallBaseActivity { if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { if (!appPreferences.getPushToTalkIntroShown()) { + int primary = viewThemeUtils.getScheme(binding.audioOutputButton.getContext()).getPrimary(); spotlightView = new SpotlightView.Builder(this) .introAnimationDuration(300) .enableRevealAnimation(true) .performClick(false) .fadeinTextDuration(400) - .headingTvColor(getResources().getColor(R.color.colorPrimary)) + .headingTvColor(primary) .headingTvSize(20) .headingTvText(getResources().getString(R.string.nc_push_to_talk)) .subHeadingTvColor(getResources().getColor(R.color.bg_default)) @@ -894,7 +895,7 @@ public class CallActivity extends CallBaseActivity { .maskColor(Color.parseColor("#dc000000")) .target(binding.microphoneButton) .lineAnimDuration(400) - .lineAndArcColor(getResources().getColor(R.color.colorPrimary)) + .lineAndArcColor(primary) .enableDismissAfterShown(true) .dismissOnBackPress(true) .usageId("pushToTalk") From 2e8ea52e89dd0b67972a2a02d356b8d3012e3be4 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 4 Aug 2022 18:14:30 +0200 Subject: [PATCH 45/70] further optimize material coloring for messages, especially time, quotes and read status Signed-off-by: Andy Scherzinger --- .../IncomingLocationMessageViewHolder.kt | 3 +- .../messages/IncomingPollMessageViewHolder.kt | 3 +- .../IncomingPreviewMessageViewHolder.java | 13 +++++++++ .../IncomingVoiceMessageViewHolder.kt | 3 +- .../MagicIncomingTextMessageViewHolder.kt | 29 +------------------ .../MagicOutcomingTextMessageViewHolder.kt | 18 +++++------- .../MagicPreviewMessageViewHolder.java | 3 +- .../OutcomingLocationMessageViewHolder.kt | 6 ++++ .../OutcomingPollMessageViewHolder.kt | 6 ++++ .../OutcomingPreviewMessageViewHolder.java | 14 +++++++++ .../OutcomingVoiceMessageViewHolder.kt | 6 ++++ app/src/main/res/layout/controller_chat.xml | 1 + .../item_custom_incoming_location_message.xml | 3 +- .../item_custom_incoming_poll_message.xml | 3 +- .../item_custom_incoming_preview_message.xml | 8 +++-- .../item_custom_incoming_text_message.xml | 6 ++-- .../item_custom_incoming_voice_message.xml | 3 +- ...item_custom_outcoming_location_message.xml | 3 +- .../item_custom_outcoming_poll_message.xml | 3 +- .../item_custom_outcoming_preview_message.xml | 8 +++-- .../item_custom_outcoming_text_message.xml | 2 +- .../item_custom_outcoming_voice_message.xml | 3 +- .../main/res/layout/item_message_quote.xml | 3 +- app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + 25 files changed, 90 insertions(+), 62 deletions(-) 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 1febe1bed..78e59fd35 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 @@ -90,7 +90,6 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess colorizeMessageBubble(message) itemView.isSelected = false - binding.messageTime.setTextColor(context?.resources!!.getColor(R.color.warm_grey_four)) val textSize = context?.resources!!.getDimension(R.dimen.chat_text_size) binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) @@ -188,7 +187,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess .setTextColor(context!!.resources.getColor(R.color.textColorMaxContrast)) if (parentChatMessage.actorId?.equals(message.activeUser!!.userId) == true) { - binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.colorPrimary) + viewThemeUtils.colorPrimaryView(binding.messageQuote.quoteColoredView) } else { binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.textColorMaxContrast) } 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 66d296b3e..b92a5d21f 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 @@ -81,7 +81,6 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : MessageH colorizeMessageBubble(message) itemView.isSelected = false - binding.messageTime.setTextColor(ResourcesCompat.getColor(context?.resources!!, R.color.warm_grey_four, null)) // parent message handling setParentMessageDataOnMessageItem(message) @@ -218,7 +217,7 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) : MessageH .setTextColor(ContextCompat.getColor(context, R.color.textColorMaxContrast)) if (parentChatMessage.actorId?.equals(message.activeUser!!.userId) == true) { - binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.colorPrimary) + viewThemeUtils.colorPrimaryView(binding.messageQuote.quoteColoredView) } else { binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.textColorMaxContrast) } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java index 48fc8a041..1c9b59091 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java @@ -26,9 +26,12 @@ import android.view.View; import android.widget.ProgressBar; import com.facebook.drawee.view.SimpleDraweeView; +import com.nextcloud.talk.R; import com.nextcloud.talk.databinding.ItemCustomIncomingPreviewMessageBinding; import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding; +import com.nextcloud.talk.models.json.chat.ChatMessage; +import androidx.core.content.ContextCompat; import androidx.emoji.widget.EmojiTextView; public class IncomingPreviewMessageViewHolder extends MagicPreviewMessageViewHolder { @@ -39,6 +42,16 @@ public class IncomingPreviewMessageViewHolder extends MagicPreviewMessageViewHol binding = ItemCustomIncomingPreviewMessageBinding.bind(itemView); } + @Override + public void onBind(ChatMessage message) { + super.onBind(message); + + binding.messageText.setTextColor(ContextCompat.getColor(binding.messageText.getContext(), + R.color.no_emphasis_text)); + binding.messageTime.setTextColor(ContextCompat.getColor(binding.messageText.getContext(), + R.color.no_emphasis_text)); + } + @Override public EmojiTextView getMessageText() { return binding.messageText; 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 3088d4b39..553f0c9c1 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 @@ -89,7 +89,6 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message colorizeMessageBubble(message) itemView.isSelected = false - binding.messageTime.setTextColor(ResourcesCompat.getColor(context?.resources!!, R.color.warm_grey_four, null)) // parent message handling setParentMessageDataOnMessageItem(message) @@ -292,7 +291,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message .setTextColor(ContextCompat.getColor(context!!, R.color.textColorMaxContrast)) if (parentChatMessage.actorId?.equals(message.activeUser!!.userId) == true) { - binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.colorPrimary) + viewThemeUtils.colorPrimaryView(binding.messageQuote.quoteColoredView) } else { binding.messageQuote.quoteColoredView.setBackgroundResource(R.color.textColorMaxContrast) } 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 c94127b2d..b5d720b8b 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 @@ -89,12 +89,9 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message binding.messageAuthor.visibility = View.GONE } - val resources = itemView.resources - - setBubbleOnChatMessage(message, resources) + viewThemeUtils.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) itemView.isSelected = false - binding.messageTime.setTextColor(ResourcesCompat.getColor(resources, R.color.warm_grey_four, null)) var messageString: Spannable = SpannableString(message.text) @@ -149,30 +146,6 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message } } - private fun setBubbleOnChatMessage( - message: ChatMessage, - resources: Resources - ) { - val bgBubbleColor = if (message.isDeleted) { - ResourcesCompat.getColor(resources, R.color.bg_message_list_incoming_bubble_deleted, null) - } else { - ResourcesCompat.getColor(resources, R.color.bg_message_list_incoming_bubble, null) - } - - var bubbleResource = R.drawable.shape_incoming_message - - if (message.isGrouped) { - bubbleResource = R.drawable.shape_grouped_incoming_message - } - - val bubbleDrawable = DisplayUtils.getMessageSelector( - bgBubbleColor, - ResourcesCompat.getColor(resources, R.color.transparent, null), - bgBubbleColor, bubbleResource - ) - ViewCompat.setBackground(bubble, bubbleDrawable) - } - private fun processParentMessage(message: ChatMessage) { val parentChatMessage = message.parentMessage parentChatMessage!!.activeUser = message.activeUser 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 4ba094c25..e9efa209d 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 @@ -77,15 +77,13 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage val layoutParams = binding.messageTime.layoutParams as FlexboxLayout.LayoutParams layoutParams.isWrapBefore = false var textSize = context!!.resources.getDimension(R.dimen.chat_text_size) - binding.messageTime.setTextColor(viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant) + val textColor = viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant + binding.messageTime.setTextColor(textColor) if (messageParameters != null && messageParameters.size > 0) { messageString = processMessageParameters(messageParameters, message, messageString) } else if (TextMatchers.isMessageWithSingleEmoticonOnly(message.text)) { textSize = (textSize * TEXT_SIZE_MULTIPLIER).toFloat() layoutParams.isWrapBefore = true - binding.messageTime.setTextColor( - ResourcesCompat.getColor(context!!.resources, R.color.warm_grey_four, null) - ) realView.isSelected = true } @@ -93,7 +91,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) binding.messageTime.layoutParams = layoutParams - binding.messageText.setTextColor(viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant) + binding.messageText.setTextColor(textColor) binding.messageText.text = messageString // parent message handling @@ -141,6 +139,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage private fun processParentMessage(message: ChatMessage) { val parentChatMessage = message.parentMessage + val textColor = viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant parentChatMessage!!.activeUser = message.activeUser parentChatMessage.imageUrl?.let { binding.messageQuote.quotedMessageImage.visibility = View.VISIBLE @@ -157,9 +156,9 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage ?: context!!.getText(R.string.nc_nick_guest) binding.messageQuote.quotedMessage.text = parentChatMessage.text - binding.messageQuote.quoteColoredView.setBackgroundColor( - ContextCompat.getColor(binding.messageQuote.quoteColoredView.context, R.color.high_emphasis_text) - ) + binding.messageQuote.quotedMessageAuthor.setTextColor(textColor) + binding.messageQuote.quotedMessage.setTextColor(textColor) + binding.messageQuote.quoteColoredView.setBackgroundColor(textColor) } private fun setBubbleOnChatMessage(message: ChatMessage) { @@ -206,8 +205,5 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage companion object { const val TEXT_SIZE_MULTIPLIER = 2.5 - 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/MagicPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java index d10532a65..db69b5a61 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 @@ -188,7 +188,8 @@ public abstract class MagicPreviewMessageViewHolder extends MessageHolders.Incom if (drawable != null && (drawableResourceId == R.drawable.ic_mimetype_folder || drawableResourceId == R.drawable.ic_mimetype_package_x_generic)) { - drawable.setColorFilter(serverTheme.getPrimaryColor(), PorterDuff.Mode.SRC_ATOP); + drawable.setColorFilter(viewThemeUtils.getScheme(image.getContext()).getPrimary(), + PorterDuff.Mode.SRC_ATOP); } image.getHierarchy().setPlaceholderImage(drawable); 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 84118d377..81fabefae 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 @@ -25,6 +25,7 @@ package com.nextcloud.talk.adapters.messages import android.annotation.SuppressLint import android.content.Context import android.content.Intent +import android.graphics.PorterDuff import android.net.Uri import android.util.Log import android.util.TypedValue @@ -81,6 +82,8 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders override fun onBind(message: ChatMessage) { super.onBind(message) sharedApplication!!.componentApplication.inject(this) + val textColor = viewThemeUtils.getScheme(binding.messageTime.context).onSurfaceVariant + binding.messageTime.setTextColor(textColor) realView.isSelected = false val layoutParams = binding.messageTime.layoutParams as FlexboxLayout.LayoutParams @@ -112,6 +115,9 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders readStatusDrawableInt?.let { drawableInt -> AppCompatResources.getDrawable(context!!, drawableInt)?.let { binding.checkMark.setImageDrawable(it) + binding.checkMark.setColorFilter( + viewThemeUtils.getScheme(binding.checkMark.context).onSurfaceVariant, PorterDuff.Mode.SRC_ATOP + ) } } 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 936c73342..cdfe22687 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 @@ -23,6 +23,7 @@ package com.nextcloud.talk.adapters.messages import android.annotation.SuppressLint import android.content.Context +import android.graphics.PorterDuff import android.view.View import androidx.appcompat.content.res.AppCompatResources import androidx.core.graphics.ColorUtils @@ -76,6 +77,8 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag super.onBind(message) this.message = message sharedApplication!!.componentApplication.inject(this) + val textColor = viewThemeUtils.getScheme(binding.messageTime.context).onSurfaceVariant + binding.messageTime.setTextColor(textColor) colorizeMessageBubble(message) @@ -99,6 +102,9 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) : Messag readStatusDrawableInt?.let { drawableInt -> AppCompatResources.getDrawable(context, drawableInt)?.let { binding.checkMark.setImageDrawable(it) + binding.checkMark.setColorFilter( + viewThemeUtils.getScheme(binding.checkMark.context).onSurfaceVariant, PorterDuff.Mode.SRC_ATOP + ) } } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java index 3456b02a7..1662e1189 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java @@ -26,12 +26,16 @@ import android.view.View; import android.widget.ProgressBar; import com.facebook.drawee.view.SimpleDraweeView; +import com.nextcloud.talk.R; import com.nextcloud.talk.databinding.ItemCustomOutcomingPreviewMessageBinding; import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding; +import com.nextcloud.talk.models.json.chat.ChatMessage; +import androidx.core.content.ContextCompat; import androidx.emoji.widget.EmojiTextView; public class OutcomingPreviewMessageViewHolder extends MagicPreviewMessageViewHolder { + private final ItemCustomOutcomingPreviewMessageBinding binding; public OutcomingPreviewMessageViewHolder(View itemView) { @@ -39,6 +43,16 @@ public class OutcomingPreviewMessageViewHolder extends MagicPreviewMessageViewHo binding = ItemCustomOutcomingPreviewMessageBinding.bind(itemView); } + @Override + public void onBind(ChatMessage message) { + super.onBind(message); + + binding.messageText.setTextColor(ContextCompat.getColor(binding.messageText.getContext(), + R.color.no_emphasis_text)); + binding.messageTime.setTextColor(ContextCompat.getColor(binding.messageText.getContext(), + R.color.no_emphasis_text)); + } + @Override public EmojiTextView getMessageText() { return binding.messageText; 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 c011efce4..1148f1e70 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 @@ -24,6 +24,7 @@ package com.nextcloud.talk.adapters.messages import android.annotation.SuppressLint import android.content.Context +import android.graphics.PorterDuff import android.os.Handler import android.util.Log import android.view.View @@ -83,6 +84,8 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders super.onBind(message) this.message = message sharedApplication!!.componentApplication.inject(this) + val textColor = viewThemeUtils.getScheme(binding.messageTime.context).onSurfaceVariant + binding.messageTime.setTextColor(textColor) colorizeMessageBubble(message) @@ -132,6 +135,9 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders readStatusDrawableInt?.let { drawableInt -> AppCompatResources.getDrawable(context!!, drawableInt)?.let { binding.checkMark.setImageDrawable(it) + binding.checkMark.setColorFilter( + viewThemeUtils.getScheme(binding.checkMark.context).onSurfaceVariant, PorterDuff.Mode.SRC_ATOP + ) } } diff --git a/app/src/main/res/layout/controller_chat.xml b/app/src/main/res/layout/controller_chat.xml index e88e40c79..1e42b0657 100644 --- a/app/src/main/res/layout/controller_chat.xml +++ b/app/src/main/res/layout/controller_chat.xml @@ -74,6 +74,7 @@ app:incomingImageTimeTextSize="12sp" app:incomingTextColor="@color/nc_incoming_text_default" app:incomingTextLinkColor="@color/nc_incoming_text_default" + app:incomingTimeTextColor="@color/no_emphasis_text" app:incomingTextSize="@dimen/chat_text_size" app:incomingTimeTextSize="12sp" app:outcomingBubblePaddingBottom="@dimen/message_bubble_corners_padding" diff --git a/app/src/main/res/layout/item_custom_incoming_location_message.xml b/app/src/main/res/layout/item_custom_incoming_location_message.xml index 67a7ba331..5916d1b53 100644 --- a/app/src/main/res/layout/item_custom_incoming_location_message.xml +++ b/app/src/main/res/layout/item_custom_incoming_location_message.xml @@ -87,7 +87,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" /> diff --git a/app/src/main/res/layout/item_custom_incoming_preview_message.xml b/app/src/main/res/layout/item_custom_incoming_preview_message.xml index aa640544f..9b2751a6d 100644 --- a/app/src/main/res/layout/item_custom_incoming_preview_message.xml +++ b/app/src/main/res/layout/item_custom_incoming_preview_message.xml @@ -152,10 +152,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="2dp" + android:alpha="0.6" android:autoLink="none" android:textAlignment="viewStart" - android:textColor="@color/warm_grey_four" - android:textColorLink="@color/warm_grey_four" + android:textColor="@color/no_emphasis_text" + android:textColorLink="@color/no_emphasis_text" android:textIsSelectable="true" android:textSize="12sp" app:layout_alignSelf="flex_start" @@ -170,7 +171,8 @@ android:layout_alignParentEnd="true" android:layout_marginStart="8dp" android:layout_marginEnd="2dp" - android:textColor="@color/warm_grey_four" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="12:38" /> diff --git a/app/src/main/res/layout/item_custom_incoming_text_message.xml b/app/src/main/res/layout/item_custom_incoming_text_message.xml index efebfface..defaf021c 100644 --- a/app/src/main/res/layout/item_custom_incoming_text_message.xml +++ b/app/src/main/res/layout/item_custom_incoming_text_message.xml @@ -59,8 +59,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" + android:alpha="0.6" android:textAlignment="viewStart" - android:textColor="@color/textColorMaxContrast" + android:textColor="@color/no_emphasis_text" android:textIsSelectable="false" android:textSize="12sp" tools:text="Jane Doe" /> @@ -83,7 +84,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" android:textIsSelectable="false" app:layout_alignSelf="center" /> diff --git a/app/src/main/res/layout/item_custom_incoming_voice_message.xml b/app/src/main/res/layout/item_custom_incoming_voice_message.xml index f36399899..5a9330bed 100644 --- a/app/src/main/res/layout/item_custom_incoming_voice_message.xml +++ b/app/src/main/res/layout/item_custom_incoming_voice_message.xml @@ -105,7 +105,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="12:38" /> diff --git a/app/src/main/res/layout/item_custom_outcoming_location_message.xml b/app/src/main/res/layout/item_custom_outcoming_location_message.xml index 56e26e5f4..bd5a0aa62 100644 --- a/app/src/main/res/layout/item_custom_outcoming_location_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_location_message.xml @@ -69,7 +69,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="10:35" /> diff --git a/app/src/main/res/layout/item_custom_outcoming_poll_message.xml b/app/src/main/res/layout/item_custom_outcoming_poll_message.xml index fc4ea236c..6ae34a70a 100644 --- a/app/src/main/res/layout/item_custom_outcoming_poll_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_poll_message.xml @@ -82,7 +82,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="10:35" /> diff --git a/app/src/main/res/layout/item_custom_outcoming_preview_message.xml b/app/src/main/res/layout/item_custom_outcoming_preview_message.xml index d266e4bc0..e30d53fca 100644 --- a/app/src/main/res/layout/item_custom_outcoming_preview_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_preview_message.xml @@ -142,9 +142,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="2dp" + android:alpha="0.6" android:autoLink="none" - android:textColor="@color/warm_grey_four" - android:textColorLink="@color/warm_grey_four" + android:textColor="@color/no_emphasis_text" + android:textColorLink="@color/no_emphasis_text" android:textIsSelectable="true" android:textSize="12sp" android:visibility="invisible" @@ -160,7 +161,8 @@ android:layout_alignParentEnd="true" android:layout_marginStart="8dp" android:layout_marginEnd="2dp" - android:textColor="@color/warm_grey_four" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="12:34" /> diff --git a/app/src/main/res/layout/item_custom_outcoming_text_message.xml b/app/src/main/res/layout/item_custom_outcoming_text_message.xml index 6e4383c0a..fc10826d5 100644 --- a/app/src/main/res/layout/item_custom_outcoming_text_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_text_message.xml @@ -64,7 +64,7 @@ android:layout_below="@id/messageText" android:layout_marginStart="8dp" android:alpha="0.6" - android:textColor="@color/medium_emphasis_text" + android:textColor="@color/no_emphasis_text" android:textIsSelectable="false" app:layout_alignSelf="center" tools:text="10:35" /> diff --git a/app/src/main/res/layout/item_custom_outcoming_voice_message.xml b/app/src/main/res/layout/item_custom_outcoming_voice_message.xml index 38635c0f9..0a3223f30 100644 --- a/app/src/main/res/layout/item_custom_outcoming_voice_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_voice_message.xml @@ -92,7 +92,8 @@ android:layout_height="wrap_content" android:layout_below="@id/messageText" android:layout_marginStart="8dp" - android:textColor="@color/medium_emphasis_text" + android:alpha="0.6" + android:textColor="@color/no_emphasis_text" app:layout_alignSelf="center" tools:text="10:35" /> diff --git a/app/src/main/res/layout/item_message_quote.xml b/app/src/main/res/layout/item_message_quote.xml index dc9e15c1f..e4b7e4775 100644 --- a/app/src/main/res/layout/item_message_quote.xml +++ b/app/src/main/res/layout/item_message_quote.xml @@ -45,9 +45,10 @@ android:layout_alignParentTop="true" android:layout_marginEnd="8dp" android:layout_toEndOf="@id/quoteColoredView" + android:alpha="0.6" android:ellipsize="end" android:textAlignment="viewStart" - android:textColor="@color/medium_emphasis_text" + android:textColor="@color/no_emphasis_text" android:textIsSelectable="false" android:textSize="12sp" tools:text="Jane Doe" /> diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 7d28def39..5dcc92fb6 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -35,6 +35,7 @@ #222222 + #ffffff #deffffff #99ffffff #61ffffff diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cd3ebe443..1de3f5fb0 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -36,6 +36,7 @@ #ffffff + #000000 #de000000 #99000000 #61000000 From e76669439f013d3f21fd39e71993b4e4c5c0e432 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 4 Aug 2022 23:47:02 +0200 Subject: [PATCH 46/70] Migrate to a new, updated popup bubble based on MaterialButton Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/talk/controllers/ChatController.kt | 3 +-- .../talk/controllers/ConversationsListController.java | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) 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 852369bf7..22b27ab90 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -651,8 +651,7 @@ class ChatController(args: Bundle) : } } - binding.popupBubbleView.setTextColor(Color.WHITE) - binding.popupBubbleView.setIconTint(ColorStateList.valueOf(Color.WHITE)) + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.popupBubbleView) binding.messageInputView.setPadding(0, 0, 0, 0) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index e24a36b36..9870f8f27 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -806,9 +806,7 @@ public class ConversationsListController extends BaseController implements Flexi recyclerView.smoothScrollToPosition(nextUnreadConversationScrollPosition); } }); - - newMentionPopupBubble.setTextColor(Color.WHITE); - newMentionPopupBubble.setIconTint(ColorStateList.valueOf(Color.WHITE)); + viewThemeUtils.colorMaterialButtonPrimaryFilled(newMentionPopupBubble); } private void checkToShowUnreadBubble() { From 53b5db4f190fe9f339781db28e5528362e5ba88f Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 4 Aug 2022 23:48:55 +0200 Subject: [PATCH 47/70] remove unused imports Signed-off-by: Andy Scherzinger --- .../adapters/messages/MagicIncomingTextMessageViewHolder.kt | 2 -- .../adapters/messages/MagicOutcomingTextMessageViewHolder.kt | 2 -- .../com/nextcloud/talk/messagesearch/MessageSearchActivity.kt | 1 - 3 files changed, 5 deletions(-) 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 b5d720b8b..f5be6eea3 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 @@ -26,7 +26,6 @@ package com.nextcloud.talk.adapters.messages import android.content.Context import android.content.Intent -import android.content.res.Resources import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.net.Uri @@ -38,7 +37,6 @@ import android.util.TypedValue import android.view.View import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat -import androidx.core.view.ViewCompat import autodagger.AutoInjector import coil.load import com.amulyakhare.textdrawable.TextDrawable 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 e9efa209d..ae0bf136d 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 @@ -31,7 +31,6 @@ import android.text.Spannable import android.text.SpannableString import android.util.TypedValue import android.view.View -import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import autodagger.AutoInjector import coil.load @@ -50,7 +49,6 @@ import com.nextcloud.talk.utils.DisplayUtils.searchAndReplaceWithMentionSpan import com.nextcloud.talk.utils.TextMatchers import com.stfalcon.chatkit.messages.MessageHolders.OutcomingTextMessageViewHolder import javax.inject.Inject -import kotlin.math.roundToInt @AutoInjector(NextcloudTalkApplication::class) class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewHolder(itemView) { diff --git a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt index 942f3f55c..0f2a732a0 100644 --- a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt @@ -41,7 +41,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.controllers.ConversationsListController import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ActivityMessageSearchBinding -import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew From cca35c32af96dcc36556e774e867df6c1f422fd5 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 6 Aug 2022 13:16:15 +0200 Subject: [PATCH 48/70] fixes and cleanup after rebase Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) 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 29a5065eb..97e5f07df 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 @@ -50,6 +50,7 @@ import androidx.appcompat.widget.SearchView.SearchAutoComplete 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 @@ -538,14 +539,6 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } - private fun progressColor(context: Context, color: Int): Int { - val lightness = when (isDarkMode(context)) { - true -> PROGRESS_LIGHTNESS_DARK_THEME - false -> PROGRESS_LIGHTNESS_LIGHT_THEME - } - return colorUtil.setLightness(color, lightness) - } - fun colorEditText(editText: EditText) { withScheme(editText) { scheme -> // TODO check API-level compatibility @@ -667,19 +660,6 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private return drawable } - private fun progressColor(context: Context, color: Int): Int { - val hsl = FloatArray(HSL_SIZE) - ColorUtils.RGBToHSL(Color.red(color), Color.green(color), Color.blue(color), hsl) - - if (isDarkMode(context)) { - hsl[INDEX_LIGHTNESS] = LIGHTNESS_DARK_THEME - } else { - hsl[INDEX_LIGHTNESS] = LIGHTNESS_LIGHT_THEME - } - - return ColorUtils.HSLToColor(hsl) - } - private fun calculateDisabledColor(color: Int, opacity: Float): Int { return Color.argb( (Color.alpha(color) * opacity).roundToInt(), From ff2f58419e835451cfb7e3f683d9345073496eae Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 9 Aug 2022 15:27:01 +0200 Subject: [PATCH 49/70] Improve profile layouting Signed-off-by: Andy Scherzinger --- .../main/res/layout/controller_profile.xml | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/layout/controller_profile.xml b/app/src/main/res/layout/controller_profile.xml index a7c31c312..2d0d668b3 100644 --- a/app/src/main/res/layout/controller_profile.xml +++ b/app/src/main/res/layout/controller_profile.xml @@ -30,7 +30,7 @@ android:id="@+id/avatarContainer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingBottom="@dimen/standard_padding"> + android:layout_marginBottom="@dimen/standard_margin"> @@ -81,44 +80,45 @@ android:id="@+id/avatar_upload" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/standard_half_margin" - android:layout_marginRight="@dimen/standard_half_margin" + android:layout_marginLeft="@dimen/standard_quarter_margin" + android:layout_marginRight="@dimen/standard_quarter_margin" android:contentDescription="@string/upload_new_avatar_from_device" android:tint="@android:color/white" - app:fabCustomSize="@dimen/min_size_clickable_area" + app:fabSize="mini" app:srcCompat="@drawable/upload" /> From e57eb4442ff7be0634b478ca095f4368f0c4ce56 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 9 Aug 2022 18:21:56 +0200 Subject: [PATCH 50/70] Make upload confirmation dialog a material one Signed-off-by: Andy Scherzinger --- .../talk/controllers/ChatController.kt | 30 +++++++++------ .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 38 +++++++++++++++++++ app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/styles.xml | 1 + 4 files changed, 60 insertions(+), 11 deletions(-) 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 22b27ab90..5b737ff1d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -35,11 +35,9 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.res.AssetFileDescriptor -import android.content.res.ColorStateList import android.content.res.Resources import android.database.Cursor import android.graphics.Bitmap -import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.media.MediaPlayer import android.media.MediaRecorder @@ -74,6 +72,7 @@ import android.widget.ImageView import android.widget.PopupMenu import android.widget.RelativeLayout import android.widget.Toast +import androidx.appcompat.app.AlertDialog import androidx.appcompat.view.ContextThemeWrapper import androidx.core.content.ContextCompat import androidx.core.content.FileProvider @@ -100,6 +99,7 @@ import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber import com.facebook.imagepipeline.image.CloseableImage import com.google.android.flexbox.FlexboxLayout +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.R import com.nextcloud.talk.activities.CallActivity @@ -189,7 +189,6 @@ import com.stfalcon.chatkit.messages.MessageHolders.ContentChecker import com.stfalcon.chatkit.messages.MessagesListAdapter import com.stfalcon.chatkit.utils.DateFormatter import com.vanniktech.emoji.EmojiPopup -import com.yarolegovich.lovelydialog.LovelyStandardDialog import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -1410,28 +1409,37 @@ class ChatController(args: Bundle) : val confirmationQuestion = when (filesToUpload.size) { 1 -> context?.resources?.getString(R.string.nc_upload_confirm_send_single)?.let { - String.format(it, title) + String.format(it, title.trim()) } else -> context?.resources?.getString(R.string.nc_upload_confirm_send_multiple)?.let { - String.format(it, title) + String.format(it, title.trim()) } } - LovelyStandardDialog(activity) - .setPositiveButtonColorRes(R.color.nc_darkGreen) + val materialAlertDialogBuilder = MaterialAlertDialogBuilder(binding.messageInputView.context) .setTitle(confirmationQuestion) .setMessage(filenamesWithLinebreaks.toString()) - .setPositiveButton(R.string.nc_yes) { v -> - if (UploadAndShareFilesWorker.isStoragePermissionGranted(context!!)) { + .setPositiveButton(R.string.nc_yes) { _, _ -> + if (UploadAndShareFilesWorker.isStoragePermissionGranted(context)) { uploadFiles(filesToUpload, false) } else { UploadAndShareFilesWorker.requestStoragePermission(this) } } - .setNegativeButton(R.string.nc_no) { + .setNegativeButton(R.string.nc_no) { _, _ -> // unused atm } - .show() + + viewThemeUtils.colorMaterialAlertDialogBackground( + binding.messageInputView.context, + materialAlertDialogBuilder + ) + + val dialog = materialAlertDialogBuilder.show() + + val primary = viewThemeUtils.getScheme(binding.messageInputView.context).primary + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(primary) + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(primary) } catch (e: IllegalStateException) { Toast.makeText(context, context?.resources?.getString(R.string.nc_upload_failed), Toast.LENGTH_LONG) .show() 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 97e5f07df..cf2be7269 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 @@ -33,6 +33,7 @@ import android.os.Build import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.CheckBox import android.widget.EditText import android.widget.ImageButton @@ -60,8 +61,10 @@ import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipDrawable +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.progressindicator.LinearProgressIndicator +import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.tabs.TabLayout import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textview.MaterialTextView @@ -300,6 +303,20 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorButtonText(button: Button) { + withScheme(button) { scheme -> + val disabledColor = ContextCompat.getColor(button.context, R.color.disabled_text) + val colorStateList = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf(scheme.primary, disabledColor) + ) + button.setTextColor(colorStateList) + } + } + fun colorMaterialButtonPrimaryFilled(button: MaterialButton) { withScheme(button) { scheme -> button.backgroundTintList = @@ -709,6 +726,27 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + fun colorMaterialAlertDialogBackground(context: Context, dialogBuilder: MaterialAlertDialogBuilder) { + withScheme(dialogBuilder.context) { scheme -> + val materialShapeDrawable = MaterialShapeDrawable( + context, + null, + com.google.android.material.R.attr.alertDialogStyle, + com.google.android.material.R.style.MaterialAlertDialog_MaterialComponents + ) + materialShapeDrawable.initializeElevationOverlay(context) + materialShapeDrawable.fillColor = ColorStateList.valueOf(scheme.surface) + + // dialogCornerRadius first appeared in Android Pie + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + val radius = context.resources.getDimension(R.dimen.dialogBorderRadius) + materialShapeDrawable.setCornerSize(radius) + } + + dialogBuilder.background = materialShapeDrawable + } + } + companion object { private val THEMEABLE_PLACEHOLDER_IDS = listOf( R.drawable.ic_mimetype_package_x_generic, diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7e63618e5..5d2115c9e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -74,6 +74,8 @@ 2dp 12dp + 28dp + 18dp 50dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8fc005a26..0823b6b61 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -42,6 +42,7 @@ @style/Nextcloud.Material.Incoming.SeekBar @style/ThemeOverlay.App.BottomSheetDialog @style/ChatSendButtonMenu + @dimen/dialogBorderRadius