diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt index 8bf3bf0fa7..1662b2c4cd 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt @@ -13,6 +13,8 @@ import android.content.Context import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.res.ResourcesCompat +import coil.Coil +import coil.request.ImageRequest import com.nextcloud.talk.R import com.nextcloud.talk.adapters.items.ParticipantItem.ParticipantItemViewHolder import com.nextcloud.talk.data.user.model.User @@ -165,6 +167,22 @@ class MentionAutocompleteItem( } } + SOURCE_TEAMS -> { + holder.binding.avatarView.post { + val imageViewWidth = holder.binding.avatarView.width + val imageViewHeight = holder.binding.avatarView.height + + val request = ImageRequest.Builder(context) + .data(R.drawable.icon_team) + .size(imageViewWidth, imageViewHeight) + .scale(coil.size.Scale.FILL) + .target(holder.binding.avatarView) + .build() + + Coil.imageLoader(context).enqueue(request) + } + } + else -> { holder.binding.avatarView.loadUserAvatar( currentUser, @@ -237,6 +255,7 @@ class MentionAutocompleteItem( const val SOURCE_GUESTS = "guests" const val SOURCE_GROUPS = "groups" const val SOURCE_EMAILS = "emails" + const val SOURCE_TEAMS = "teams" const val SOURCE_FEDERATION = "federated_users" } } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.kt index dd6b40b778..4dac6c2b1c 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.kt @@ -25,6 +25,7 @@ import com.nextcloud.talk.extensions.loadDefaultAvatar import com.nextcloud.talk.extensions.loadDefaultGroupCallAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFirstLetterAvatar +import com.nextcloud.talk.extensions.loadTeamAvatar import com.nextcloud.talk.extensions.loadUserAvatar import com.nextcloud.talk.models.domain.ConversationModel import com.nextcloud.talk.models.json.participants.Participant @@ -207,10 +208,14 @@ class ParticipantItem( private fun loadAvatars(holder: ParticipantItemViewHolder) { when (model.calculatedActorType) { - Participant.ActorType.GROUPS, Participant.ActorType.CIRCLES -> { + Participant.ActorType.GROUPS -> { holder.binding.avatarView.loadDefaultGroupCallAvatar(viewThemeUtils) } + Participant.ActorType.CIRCLES -> { + holder.binding.avatarView.loadTeamAvatar(viewThemeUtils) + } + Participant.ActorType.USERS -> { holder.binding.avatarView.loadUserAvatar(user, model.calculatedActorId!!, true, false) } diff --git a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt index 14607a2105..76d7eaf071 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -838,7 +838,8 @@ class MessageInputFragment : Fragment() { mentionId.contains("@") || mentionId.startsWith("guest/") || mentionId.startsWith("group/") || - mentionId.startsWith("email/") + mentionId.startsWith("email/") || + mentionId.startsWith("team/") if (shouldQuote) { mentionId = "\"" + mentionId + "\"" } diff --git a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt index 9411756c08..a989359bda 100644 --- a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt +++ b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt @@ -343,6 +343,11 @@ fun ImageView.loadDefaultGroupCallAvatar(viewThemeUtils: ViewThemeUtils): io.rea return loadUserAvatar(data) } +fun ImageView.loadTeamAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable { + val data: Any = viewThemeUtils.talk.themePlaceholderAvatar(this, R.drawable.icon_team) as Any + return loadUserAvatar(data) +} + fun ImageView.loadDefaultAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable { val data: Any = viewThemeUtils.talk.themePlaceholderAvatar(this, R.drawable.account_circle_96dp) as Any return loadUserAvatar(data) diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt index 6a7a70f315..927d330253 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt @@ -29,7 +29,9 @@ class ChatUtils { if (individualHashMap != null) { val type = individualHashMap["type"] - resultMessage = if (type == "user" || type == "guest" || type == "call" || type == "email") { + resultMessage = if (type == "user" || type == "guest" || type == "call" || type == "email" || + type == "circle" + ) { resultMessage?.replace("{$key}", "@" + individualHashMap["name"]) } else if (type == "geo-location") { individualHashMap["name"] diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt index 6ca1937a66..5d7249915f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt @@ -176,6 +176,9 @@ object DisplayUtils { } else { chip.setChipIconResource(R.drawable.ic_circular_group) } + if (type == "circle" || type == "teams") { + chip.setChipIconResource(R.drawable.icon_team) + } chip.setBounds(0, 0, chip.intrinsicWidth, chip.intrinsicHeight) if (!isCallOrGroup) { var url = getUrlForAvatar(conversationUser.baseUrl, id, false) diff --git a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt index 4c6b3c07e3..ea0c0335c0 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt @@ -107,7 +107,7 @@ class MessageUtils(val context: Context) { val individualHashMap = message.messageParameters!![key] if (individualHashMap != null) { when (individualHashMap["type"]) { - "user", "guest", "call", "user-group", "email" -> { + "user", "guest", "call", "user-group", "email", "circle" -> { val chip = if (individualHashMap["id"] == message.activeUser!!.userId) { R.xml.chip_you } else { diff --git a/app/src/main/res/drawable-night/icon_team.xml b/app/src/main/res/drawable-night/icon_team.xml new file mode 100644 index 0000000000..3db1be0bd6 --- /dev/null +++ b/app/src/main/res/drawable-night/icon_team.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_team.xml b/app/src/main/res/drawable/icon_team.xml new file mode 100644 index 0000000000..1b266f1455 --- /dev/null +++ b/app/src/main/res/drawable/icon_team.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/detekt.yml b/detekt.yml index f0922b2d9a..a516d586a5 100644 --- a/detekt.yml +++ b/detekt.yml @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: GPL-3.0-or-later build: - maxIssues: 78 + maxIssues: 80 weights: # complexity: 2 # LongParameterList: 1