diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt index 56fd01480..841a02a88 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt @@ -13,13 +13,17 @@ import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.PollResultVoterItemBinding +import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadGuestAvatar import com.nextcloud.talk.extensions.loadUserAvatar +import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.polls.model.PollDetails import com.nextcloud.talk.ui.theme.ViewThemeUtils +import com.nextcloud.talk.utils.DisplayUtils class PollResultVoterViewHolder( private val user: User, + private val roomToken: String, override val binding: PollResultVoterItemBinding, private val viewThemeUtils: ViewThemeUtils ) : PollResultViewHolder(binding) { @@ -36,14 +40,33 @@ class PollResultVoterViewHolder( } private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) { - if (pollDetail.actorType == "guests") { - var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest) - if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) { - displayName = pollDetail.actorDisplayName!! + when (pollDetail.actorType) { + Participant.ActorType.GUESTS -> { + var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest) + if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) { + displayName = pollDetail.actorDisplayName!! + } + avatar.loadGuestAvatar(user, displayName!!, false) } - avatar.loadGuestAvatar(user, displayName!!, false) - } else if (pollDetail.actorType == "users") { - avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + + Participant.ActorType.USERS -> { + avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + } + + Participant.ActorType.FEDERATED -> { + val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0 + avatar.loadFederatedUserAvatar( + user, + user.baseUrl!!, + roomToken, + pollDetail.actorId!!, + darkTheme, + false, + false + ) + } + + else -> {} } } } diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt index 3f6f809a5..5b3184e49 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVotersOverviewViewHolder.kt @@ -16,12 +16,16 @@ import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.PollResultVotersOverviewItemBinding +import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadGuestAvatar import com.nextcloud.talk.extensions.loadUserAvatar +import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.polls.model.PollDetails +import com.nextcloud.talk.utils.DisplayUtils class PollResultVotersOverviewViewHolder( private val user: User, + private val roomToken: String, override val binding: PollResultVotersOverviewItemBinding ) : PollResultViewHolder(binding) { @@ -66,14 +70,33 @@ class PollResultVotersOverviewViewHolder( } private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) { - if (pollDetail.actorType == "guests") { - var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest) - if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) { - displayName = pollDetail.actorDisplayName!! + when (pollDetail.actorType) { + Participant.ActorType.GUESTS -> { + var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest) + if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) { + displayName = pollDetail.actorDisplayName!! + } + avatar.loadGuestAvatar(user, displayName!!, false) } - avatar.loadGuestAvatar(user, displayName!!, false) - } else if (pollDetail.actorType == "users") { - avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + + Participant.ActorType.USERS -> { + avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false) + } + + Participant.ActorType.FEDERATED -> { + val darkTheme = if (DisplayUtils.isDarkModeOn(binding.root.context)) 1 else 0 + avatar.loadFederatedUserAvatar( + user, + user.baseUrl!!, + roomToken, + pollDetail.actorId!!, + darkTheme, + false, + false + ) + } + + else -> {} } } diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt index 82f3be807..6ca1b1f98 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultsAdapter.kt @@ -17,6 +17,7 @@ import com.nextcloud.talk.ui.theme.ViewThemeUtils class PollResultsAdapter( private val user: User, + private val roomToken: String, private val clickListener: PollResultItemClickListener, private val viewThemeUtils: ViewThemeUtils ) : RecyclerView.Adapter<PollResultViewHolder>() { @@ -40,7 +41,7 @@ class PollResultsAdapter( parent, false ) - viewHolder = PollResultVoterViewHolder(user, itemBinding, viewThemeUtils) + viewHolder = PollResultVoterViewHolder(user, roomToken, itemBinding, viewThemeUtils) } PollResultVotersOverviewItem.VIEW_TYPE -> { val itemBinding = PollResultVotersOverviewItemBinding.inflate( @@ -48,7 +49,7 @@ class PollResultsAdapter( parent, false ) - viewHolder = PollResultVotersOverviewViewHolder(user, itemBinding) + viewHolder = PollResultVotersOverviewViewHolder(user, roomToken, itemBinding) } } return viewHolder!! diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt index 939186a61..c1a1e98a4 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt @@ -6,12 +6,14 @@ */ package com.nextcloud.talk.polls.model +import com.nextcloud.talk.models.json.participants.Participant + data class Poll( val id: String, val question: String?, val options: List<String>?, val votes: Map<String, Int>?, - val actorType: String?, + val actorType: Participant.ActorType?, val actorId: String?, val actorDisplayName: String?, val status: Int, diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt b/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt index 2e36d96b5..63d704bc1 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/model/PollDetails.kt @@ -6,8 +6,10 @@ */ package com.nextcloud.talk.polls.model +import com.nextcloud.talk.models.json.participants.Participant + data class PollDetails( - val actorType: String?, + val actorType: Participant.ActorType?, val actorId: String?, val actorDisplayName: String?, val optionId: Int diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt index b052296f0..24e8fa5aa 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollDetailsResponse.kt @@ -9,13 +9,15 @@ package com.nextcloud.talk.polls.repositories.model import android.os.Parcelable import com.bluelinelabs.logansquare.annotation.JsonField import com.bluelinelabs.logansquare.annotation.JsonObject +import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter +import com.nextcloud.talk.models.json.participants.Participant import kotlinx.parcelize.Parcelize @Parcelize @JsonObject data class PollDetailsResponse( - @JsonField(name = ["actorType"]) - var actorType: String? = null, + @JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class) + var actorType: Participant.ActorType? = null, @JsonField(name = ["actorId"]) var actorId: String, diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt index 2531eb069..e406fbbd2 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/model/PollResponse.kt @@ -9,6 +9,8 @@ package com.nextcloud.talk.polls.repositories.model import android.os.Parcelable import com.bluelinelabs.logansquare.annotation.JsonField import com.bluelinelabs.logansquare.annotation.JsonObject +import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter +import com.nextcloud.talk.models.json.participants.Participant import kotlinx.parcelize.Parcelize @Parcelize @@ -26,8 +28,8 @@ data class PollResponse( @JsonField(name = ["votes"]) var votes: Map<String, Int>? = null, - @JsonField(name = ["actorType"]) - var actorType: String? = null, + @JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class) + var actorType: Participant.ActorType? = null, @JsonField(name = ["actorId"]) var actorId: String? = null, diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt index 3218cc3b4..48b4ceaba 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt @@ -68,11 +68,17 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } viewModel.items.observe(viewLifecycleOwner) { - val adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils).apply { - if (it != null) { - list = it + val adapter = PollResultsAdapter( + parentViewModel.user, + parentViewModel.roomToken, + this, + viewThemeUtils + ) + .apply { + if (it != null) { + list = it + } } - } binding.pollResultsList.adapter = adapter } @@ -85,7 +91,12 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } private fun initAdapter() { - adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils) + adapter = PollResultsAdapter( + parentViewModel.user, + parentViewModel.roomToken, + this, + viewThemeUtils + ) binding.pollResultsList.adapter = adapter binding.pollResultsList.layoutManager = LinearLayoutManager(context) }