From 1bba8ee4e667b43ab626451ef7a44a1e40bdf657 Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Mon, 11 Oct 2021 00:33:38 +0300 Subject: [PATCH] new attachments: gift, graffiti fix NullPointerException on VkPhoto.kt text param --- .../kotlin/com/meloda/fast/api/VkUtils.kt | 8 +--- .../fast/api/model/attachments/VkGift.kt | 5 ++- .../fast/api/model/attachments/VkGraffiti.kt | 7 +++- .../fast/api/model/attachments/VkPhoto.kt | 2 +- .../api/model/base/attachments/BaseVkGift.kt | 12 +++++- .../model/base/attachments/BaseVkGraffiti.kt | 14 ++++++- .../api/model/base/attachments/BaseVkPhoto.kt | 2 +- .../screens/messages/AttachmentInflater.kt | 40 ++++++++++++++++++- .../layout/item_message_attachment_gift.xml | 16 ++++++++ .../item_message_attachment_graffiti.xml | 16 ++++++++ 10 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/layout/item_message_attachment_gift.xml create mode 100644 app/src/main/res/layout/item_message_attachment_graffiti.xml diff --git a/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt b/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt index 67dfe624..e82af0b9 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt @@ -150,9 +150,7 @@ object VkUtils { } BaseVkAttachmentItem.AttachmentType.GIFT -> { val gift = baseAttachment.gift ?: continue - attachments += VkGift( - link = gift.thumb_48 - ) + attachments += gift.asVkGift() } BaseVkAttachmentItem.AttachmentType.WALL -> { val wall = baseAttachment.wall ?: continue @@ -160,9 +158,7 @@ object VkUtils { } BaseVkAttachmentItem.AttachmentType.GRAFFITI -> { val graffiti = baseAttachment.graffiti ?: continue - attachments += VkGraffiti( - link = graffiti.url - ) + attachments += graffiti.asVkGraffiti() } BaseVkAttachmentItem.AttachmentType.POLL -> { val poll = baseAttachment.poll ?: continue diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt index 2fea4243..6be29fca 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt @@ -5,7 +5,10 @@ import kotlinx.parcelize.Parcelize @Parcelize data class VkGift( - val link: String + val id: Int, + val thumb256: String?, + val thumb96: String?, + val thumb48: String ) : VkAttachment() { @IgnoredOnParcel diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt index a9b2ca9b..9ce65371 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt @@ -5,7 +5,12 @@ import kotlinx.parcelize.Parcelize @Parcelize data class VkGraffiti( - val link: String + val id: Int, + val ownerId: Int, + val url: String, + val width: Int, + val height: Int, + val accessKey: String ) : VkAttachment() { @IgnoredOnParcel diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt index 6c3d9d56..5e008c84 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt @@ -15,7 +15,7 @@ data class VkPhoto( val hasTags: Boolean, val accessKey: String?, val sizes: List, - val text: String, + val text: String?, val userId: Int? ) : VkAttachment() { diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt index 2ed684ff..29e646b9 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt @@ -1,6 +1,7 @@ package com.meloda.fast.api.model.base.attachments import android.os.Parcelable +import com.meloda.fast.api.model.attachments.VkGift import kotlinx.parcelize.Parcelize @Parcelize @@ -9,4 +10,13 @@ data class BaseVkGift( val thumb_256: String?, val thumb_96: String?, val thumb_48: String -) : Parcelable \ No newline at end of file +) : Parcelable { + + fun asVkGift() = VkGift( + id = id, + thumb256 = thumb_256, + thumb96 = thumb_96, + thumb48 = thumb_48 + ) + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt index da07731a..c5e841ef 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt @@ -1,6 +1,7 @@ package com.meloda.fast.api.model.base.attachments import android.os.Parcelable +import com.meloda.fast.api.model.attachments.VkGraffiti import kotlinx.parcelize.Parcelize @Parcelize @@ -11,4 +12,15 @@ data class BaseVkGraffiti( val width: Int, val height: Int, val access_key: String -) : Parcelable \ No newline at end of file +) : Parcelable { + + fun asVkGraffiti() = VkGraffiti( + id = id, + ownerId = owner_id, + url = url, + width = width, + height = height, + accessKey = access_key + ) + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt index 218f7109..babe40e4 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt @@ -13,7 +13,7 @@ data class BaseVkPhoto( val has_tags: Boolean, val access_key: String?, val sizes: List, - val text: String, + val text: String?, val user_id: Int?, val lat: Double?, val long: Double?, diff --git a/app/src/main/kotlin/com/meloda/fast/screens/messages/AttachmentInflater.kt b/app/src/main/kotlin/com/meloda/fast/screens/messages/AttachmentInflater.kt index 902748af..bb7de5a4 100644 --- a/app/src/main/kotlin/com/meloda/fast/screens/messages/AttachmentInflater.kt +++ b/app/src/main/kotlin/com/meloda/fast/screens/messages/AttachmentInflater.kt @@ -66,6 +66,10 @@ class AttachmentInflater constructor( when (val attachment = attachments[0]) { is VkSticker -> return sticker(attachment) is VkWall -> return wall(attachment) + is VkVoiceMessage -> return voice(attachment) + is VkCall -> return call(attachment) + is VkGraffiti -> return graffiti(attachment) + is VkGift -> return gift(attachment) } } @@ -94,8 +98,6 @@ class AttachmentInflater constructor( is VkAudio -> audio(attachment) is VkFile -> file(attachment) is VkLink -> link(attachment) - is VkVoiceMessage -> voice(attachment) - is VkCall -> call(attachment) else -> Log.e( "Attachment inflater", @@ -370,4 +372,38 @@ class AttachmentInflater constructor( binding.state.text = callState } + private fun graffiti(graffiti: VkGraffiti) { + val binding = ItemMessageAttachmentGraffitiBinding.inflate(inflater, container, true) + + val url = graffiti.url + + val heightCoefficient = graffiti.height / AndroidUtils.px(140) + + with(binding.image) { + layoutParams = LinearLayoutCompat.LayoutParams( + AndroidUtils.px(140).roundToInt(), + (graffiti.height / heightCoefficient).roundToInt() + ) + + load(url) { crossfade(150) } + } + } + + private fun gift(gift: VkGift) { + val binding = ItemMessageAttachmentGiftBinding.inflate(inflater, container, true) + + val url = gift.thumb256 ?: gift.thumb96 ?: gift.thumb48 + + with(binding.image) { + shapeAppearanceModel = shapeAppearanceModel.withCornerSize { AndroidUtils.px(12) } + + layoutParams = LinearLayoutCompat.LayoutParams( + AndroidUtils.px(140).roundToInt(), + AndroidUtils.px(140).roundToInt() + ) + + load(url) { crossfade(150) } + } + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/item_message_attachment_gift.xml b/app/src/main/res/layout/item_message_attachment_gift.xml new file mode 100644 index 00000000..5cc4fe57 --- /dev/null +++ b/app/src/main/res/layout/item_message_attachment_gift.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_message_attachment_graffiti.xml b/app/src/main/res/layout/item_message_attachment_graffiti.xml new file mode 100644 index 00000000..5cc4fe57 --- /dev/null +++ b/app/src/main/res/layout/item_message_attachment_graffiti.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file