mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +01:00
Merge pull request #3806 from nextcloud/feature/noid/showFederatedAvatarsForPolls
show federated avatars for polls
This commit is contained in:
commit
cbc1eed336
@ -13,13 +13,17 @@ import com.nextcloud.talk.R
|
|||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.data.user.model.User
|
import com.nextcloud.talk.data.user.model.User
|
||||||
import com.nextcloud.talk.databinding.PollResultVoterItemBinding
|
import com.nextcloud.talk.databinding.PollResultVoterItemBinding
|
||||||
|
import com.nextcloud.talk.extensions.loadFederatedUserAvatar
|
||||||
import com.nextcloud.talk.extensions.loadGuestAvatar
|
import com.nextcloud.talk.extensions.loadGuestAvatar
|
||||||
import com.nextcloud.talk.extensions.loadUserAvatar
|
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.polls.model.PollDetails
|
||||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||||
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
|
|
||||||
class PollResultVoterViewHolder(
|
class PollResultVoterViewHolder(
|
||||||
private val user: User,
|
private val user: User,
|
||||||
|
private val roomToken: String,
|
||||||
override val binding: PollResultVoterItemBinding,
|
override val binding: PollResultVoterItemBinding,
|
||||||
private val viewThemeUtils: ViewThemeUtils
|
private val viewThemeUtils: ViewThemeUtils
|
||||||
) : PollResultViewHolder(binding) {
|
) : PollResultViewHolder(binding) {
|
||||||
@ -36,14 +40,33 @@ class PollResultVoterViewHolder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
|
private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
|
||||||
if (pollDetail.actorType == "guests") {
|
when (pollDetail.actorType) {
|
||||||
|
Participant.ActorType.GUESTS -> {
|
||||||
var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
|
var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
|
||||||
if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
|
if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
|
||||||
displayName = pollDetail.actorDisplayName!!
|
displayName = pollDetail.actorDisplayName!!
|
||||||
}
|
}
|
||||||
avatar.loadGuestAvatar(user, displayName!!, false)
|
avatar.loadGuestAvatar(user, displayName!!, false)
|
||||||
} else if (pollDetail.actorType == "users") {
|
}
|
||||||
|
|
||||||
|
Participant.ActorType.USERS -> {
|
||||||
avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
|
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 -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,16 @@ import com.nextcloud.talk.R
|
|||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.data.user.model.User
|
import com.nextcloud.talk.data.user.model.User
|
||||||
import com.nextcloud.talk.databinding.PollResultVotersOverviewItemBinding
|
import com.nextcloud.talk.databinding.PollResultVotersOverviewItemBinding
|
||||||
|
import com.nextcloud.talk.extensions.loadFederatedUserAvatar
|
||||||
import com.nextcloud.talk.extensions.loadGuestAvatar
|
import com.nextcloud.talk.extensions.loadGuestAvatar
|
||||||
import com.nextcloud.talk.extensions.loadUserAvatar
|
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.polls.model.PollDetails
|
||||||
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
|
|
||||||
class PollResultVotersOverviewViewHolder(
|
class PollResultVotersOverviewViewHolder(
|
||||||
private val user: User,
|
private val user: User,
|
||||||
|
private val roomToken: String,
|
||||||
override val binding: PollResultVotersOverviewItemBinding
|
override val binding: PollResultVotersOverviewItemBinding
|
||||||
) : PollResultViewHolder(binding) {
|
) : PollResultViewHolder(binding) {
|
||||||
|
|
||||||
@ -66,15 +70,34 @@ class PollResultVotersOverviewViewHolder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
|
private fun loadAvatar(pollDetail: PollDetails, avatar: ImageView) {
|
||||||
if (pollDetail.actorType == "guests") {
|
when (pollDetail.actorType) {
|
||||||
|
Participant.ActorType.GUESTS -> {
|
||||||
var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
|
var displayName = NextcloudTalkApplication.sharedApplication?.resources?.getString(R.string.nc_guest)
|
||||||
if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
|
if (!TextUtils.isEmpty(pollDetail.actorDisplayName)) {
|
||||||
displayName = pollDetail.actorDisplayName!!
|
displayName = pollDetail.actorDisplayName!!
|
||||||
}
|
}
|
||||||
avatar.loadGuestAvatar(user, displayName!!, false)
|
avatar.loadGuestAvatar(user, displayName!!, false)
|
||||||
} else if (pollDetail.actorType == "users") {
|
}
|
||||||
|
|
||||||
|
Participant.ActorType.USERS -> {
|
||||||
avatar.loadUserAvatar(user, pollDetail.actorId!!, false, false)
|
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 -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -17,6 +17,7 @@ import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
|||||||
|
|
||||||
class PollResultsAdapter(
|
class PollResultsAdapter(
|
||||||
private val user: User,
|
private val user: User,
|
||||||
|
private val roomToken: String,
|
||||||
private val clickListener: PollResultItemClickListener,
|
private val clickListener: PollResultItemClickListener,
|
||||||
private val viewThemeUtils: ViewThemeUtils
|
private val viewThemeUtils: ViewThemeUtils
|
||||||
) : RecyclerView.Adapter<PollResultViewHolder>() {
|
) : RecyclerView.Adapter<PollResultViewHolder>() {
|
||||||
@ -40,7 +41,7 @@ class PollResultsAdapter(
|
|||||||
parent,
|
parent,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
viewHolder = PollResultVoterViewHolder(user, itemBinding, viewThemeUtils)
|
viewHolder = PollResultVoterViewHolder(user, roomToken, itemBinding, viewThemeUtils)
|
||||||
}
|
}
|
||||||
PollResultVotersOverviewItem.VIEW_TYPE -> {
|
PollResultVotersOverviewItem.VIEW_TYPE -> {
|
||||||
val itemBinding = PollResultVotersOverviewItemBinding.inflate(
|
val itemBinding = PollResultVotersOverviewItemBinding.inflate(
|
||||||
@ -48,7 +49,7 @@ class PollResultsAdapter(
|
|||||||
parent,
|
parent,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
viewHolder = PollResultVotersOverviewViewHolder(user, itemBinding)
|
viewHolder = PollResultVotersOverviewViewHolder(user, roomToken, itemBinding)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return viewHolder!!
|
return viewHolder!!
|
||||||
|
@ -6,12 +6,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.nextcloud.talk.polls.model
|
package com.nextcloud.talk.polls.model
|
||||||
|
|
||||||
|
import com.nextcloud.talk.models.json.participants.Participant
|
||||||
|
|
||||||
data class Poll(
|
data class Poll(
|
||||||
val id: String,
|
val id: String,
|
||||||
val question: String?,
|
val question: String?,
|
||||||
val options: List<String>?,
|
val options: List<String>?,
|
||||||
val votes: Map<String, Int>?,
|
val votes: Map<String, Int>?,
|
||||||
val actorType: String?,
|
val actorType: Participant.ActorType?,
|
||||||
val actorId: String?,
|
val actorId: String?,
|
||||||
val actorDisplayName: String?,
|
val actorDisplayName: String?,
|
||||||
val status: Int,
|
val status: Int,
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.nextcloud.talk.polls.model
|
package com.nextcloud.talk.polls.model
|
||||||
|
|
||||||
|
import com.nextcloud.talk.models.json.participants.Participant
|
||||||
|
|
||||||
data class PollDetails(
|
data class PollDetails(
|
||||||
val actorType: String?,
|
val actorType: Participant.ActorType?,
|
||||||
val actorId: String?,
|
val actorId: String?,
|
||||||
val actorDisplayName: String?,
|
val actorDisplayName: String?,
|
||||||
val optionId: Int
|
val optionId: Int
|
||||||
|
@ -9,13 +9,15 @@ package com.nextcloud.talk.polls.repositories.model
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonField
|
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject
|
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
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@JsonObject
|
@JsonObject
|
||||||
data class PollDetailsResponse(
|
data class PollDetailsResponse(
|
||||||
@JsonField(name = ["actorType"])
|
@JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class)
|
||||||
var actorType: String? = null,
|
var actorType: Participant.ActorType? = null,
|
||||||
|
|
||||||
@JsonField(name = ["actorId"])
|
@JsonField(name = ["actorId"])
|
||||||
var actorId: String,
|
var actorId: String,
|
||||||
|
@ -9,6 +9,8 @@ package com.nextcloud.talk.polls.repositories.model
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonField
|
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||||
import com.bluelinelabs.logansquare.annotation.JsonObject
|
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
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@ -26,8 +28,8 @@ data class PollResponse(
|
|||||||
@JsonField(name = ["votes"])
|
@JsonField(name = ["votes"])
|
||||||
var votes: Map<String, Int>? = null,
|
var votes: Map<String, Int>? = null,
|
||||||
|
|
||||||
@JsonField(name = ["actorType"])
|
@JsonField(name = ["actorType"], typeConverter = EnumActorTypeConverter::class)
|
||||||
var actorType: String? = null,
|
var actorType: Participant.ActorType? = null,
|
||||||
|
|
||||||
@JsonField(name = ["actorId"])
|
@JsonField(name = ["actorId"])
|
||||||
var actorId: String? = null,
|
var actorId: String? = null,
|
||||||
|
@ -68,7 +68,13 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
viewModel.items.observe(viewLifecycleOwner) {
|
viewModel.items.observe(viewLifecycleOwner) {
|
||||||
val adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils).apply {
|
val adapter = PollResultsAdapter(
|
||||||
|
parentViewModel.user,
|
||||||
|
parentViewModel.roomToken,
|
||||||
|
this,
|
||||||
|
viewThemeUtils
|
||||||
|
)
|
||||||
|
.apply {
|
||||||
if (it != null) {
|
if (it != null) {
|
||||||
list = it
|
list = it
|
||||||
}
|
}
|
||||||
@ -85,7 +91,12 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initAdapter() {
|
private fun initAdapter() {
|
||||||
adapter = PollResultsAdapter(parentViewModel.user, this, viewThemeUtils)
|
adapter = PollResultsAdapter(
|
||||||
|
parentViewModel.user,
|
||||||
|
parentViewModel.roomToken,
|
||||||
|
this,
|
||||||
|
viewThemeUtils
|
||||||
|
)
|
||||||
binding.pollResultsList.adapter = adapter
|
binding.pollResultsList.adapter = adapter
|
||||||
binding.pollResultsList.layoutManager = LinearLayoutManager(context)
|
binding.pollResultsList.layoutManager = LinearLayoutManager(context)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user