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); }