forked from melod1n/fast-messenger
* refactor Conversation -> Convo
* extract Message and Convo mappers to core/domain module * improve reply container text
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.ui.model.api
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
enum class ActionState {
|
||||
PHANTOM, CALL_IN_PROGRESS, NONE;
|
||||
+10
-10
@@ -1,41 +1,41 @@
|
||||
package dev.meloda.fast.ui.model.api
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
import dev.meloda.fast.common.model.UiImage
|
||||
import dev.meloda.fast.common.model.UiText
|
||||
import dev.meloda.fast.ui.R
|
||||
|
||||
sealed class ConversationOption(
|
||||
sealed class ConvoOption(
|
||||
val title: UiText,
|
||||
val icon: UiImage
|
||||
) {
|
||||
|
||||
data object MarkAsRead : ConversationOption(
|
||||
data object MarkAsRead : ConvoOption(
|
||||
title = UiText.Resource(R.string.action_mark_as_read),
|
||||
icon = UiImage.Resource(R.drawable.round_done_all_24)
|
||||
)
|
||||
|
||||
data object Pin : ConversationOption(
|
||||
data object Pin : ConvoOption(
|
||||
title = UiText.Resource(R.string.action_pin),
|
||||
icon = UiImage.Resource(R.drawable.pin_outline_24)
|
||||
)
|
||||
|
||||
data object Unpin : ConversationOption(
|
||||
data object Unpin : ConvoOption(
|
||||
title = UiText.Resource(R.string.action_unpin),
|
||||
icon = UiImage.Resource(R.drawable.pin_off_outline_24)
|
||||
)
|
||||
|
||||
data object Delete : ConversationOption(
|
||||
data object Delete : ConvoOption(
|
||||
title = UiText.Resource(R.string.action_delete),
|
||||
icon = UiImage.Resource(R.drawable.round_delete_outline_24)
|
||||
)
|
||||
|
||||
data object Archive : ConversationOption(
|
||||
title = UiText.Resource(R.string.conversation_context_action_archive),
|
||||
data object Archive : ConvoOption(
|
||||
title = UiText.Resource(R.string.convo_context_action_archive),
|
||||
icon = UiImage.Resource(R.drawable.outline_archive_24)
|
||||
)
|
||||
|
||||
data object Unarchive : ConversationOption(
|
||||
title = UiText.Resource(R.string.conversation_context_action_unarchive),
|
||||
data object Unarchive : ConvoOption(
|
||||
title = UiText.Resource(R.string.convo_context_action_unarchive),
|
||||
icon = UiImage.Resource(R.drawable.outline_unarchive_24)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
data class MentionIndex(
|
||||
val id: Long,
|
||||
val idPrefix: String,
|
||||
val indexRange: IntRange
|
||||
)
|
||||
@@ -0,0 +1,49 @@
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import dev.meloda.fast.common.model.UiImage
|
||||
import dev.meloda.fast.model.api.domain.VkAttachment
|
||||
import dev.meloda.fast.ui.util.ImmutableList
|
||||
|
||||
@Stable
|
||||
sealed class MessageUiItem(
|
||||
open val id: Long,
|
||||
open val cmId: Long
|
||||
) {
|
||||
|
||||
@Stable
|
||||
data class Message(
|
||||
override val id: Long,
|
||||
override val cmId: Long,
|
||||
val text: AnnotatedString?,
|
||||
val isOut: Boolean,
|
||||
val fromId: Long,
|
||||
val date: String,
|
||||
val randomId: Long,
|
||||
val isInChat: Boolean,
|
||||
val name: String,
|
||||
val showDate: Boolean,
|
||||
val showAvatar: Boolean,
|
||||
val showName: Boolean,
|
||||
val avatar: UiImage,
|
||||
val isEdited: Boolean,
|
||||
val isRead: Boolean,
|
||||
val sendingStatus: SendingStatus,
|
||||
val isSelected: Boolean,
|
||||
val isPinned: Boolean,
|
||||
val isImportant: Boolean,
|
||||
val attachments: ImmutableList<VkAttachment>?,
|
||||
val replyCmId: Long?,
|
||||
val replyTitle: String?,
|
||||
val replySummary: AnnotatedString?
|
||||
) : MessageUiItem(id, cmId)
|
||||
|
||||
@Stable
|
||||
data class ActionMessage(
|
||||
override val id: Long,
|
||||
override val cmId: Long,
|
||||
val text: AnnotatedString,
|
||||
val actionCmId: Long?
|
||||
) : MessageUiItem(id, cmId)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
enum class SendingStatus {
|
||||
SENDING, SENT, FAILED
|
||||
}
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.ui.model.api
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
@@ -8,7 +8,7 @@ import dev.meloda.fast.model.api.domain.VkMessage
|
||||
import dev.meloda.fast.ui.util.ImmutableList
|
||||
|
||||
@Immutable
|
||||
data class UiConversation(
|
||||
data class UiConvo(
|
||||
val id: Long,
|
||||
val lastMessageId: Long?,
|
||||
val avatar: UiImage?,
|
||||
@@ -28,5 +28,5 @@ data class UiConversation(
|
||||
val interactionText: String?,
|
||||
val isExpanded: Boolean,
|
||||
val isArchived: Boolean,
|
||||
val options: ImmutableList<ConversationOption>,
|
||||
val options: ImmutableList<ConvoOption>,
|
||||
)
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.ui.model.api
|
||||
package dev.meloda.fast.ui.model.vk
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
import dev.meloda.fast.common.model.UiImage
|
||||
@@ -11,6 +11,10 @@ import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.compositeOver
|
||||
import androidx.compose.ui.graphics.lerp
|
||||
import androidx.compose.ui.graphics.luminance
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.input.key.onKeyEvent
|
||||
@@ -121,3 +125,14 @@ fun isNeedToEnableDarkMode(darkMode: DarkMode): Boolean {
|
||||
|
||||
return appForceDarkMode || (appBatterySaver && isSystemBatterySaver) || (!appBatterySaver && isSystemUsingDarkTheme && darkMode == DarkMode.FOLLOW_SYSTEM)
|
||||
}
|
||||
|
||||
fun Color.lighten(amount: Float) = lerp(this, Color.White, amount.coerceIn(0f, 1f))
|
||||
fun Color.darken(amount: Float) = lerp(this, Color.Black, amount.coerceIn(0f, 1f))
|
||||
|
||||
fun Color.isDark(
|
||||
background: Color = Color.White,
|
||||
threshold: Float = 0.5f
|
||||
): Boolean {
|
||||
val opaque = if (alpha < 1f) this.compositeOver(background) else this
|
||||
return opaque.luminance() < threshold
|
||||
}
|
||||
|
||||
@@ -24,16 +24,16 @@
|
||||
<string name="message_mark_as_spam">Пометить как спам</string>
|
||||
<string name="action_mark_as_read">Прочитать</string>
|
||||
<string name="action_delete">Удалить</string>
|
||||
<string name="conversation_context_action_unarchive">Из архива</string>
|
||||
<string name="conversation_context_action_delete">Удалить</string>
|
||||
<string name="confirm_delete_conversation">Удалить чат?</string>
|
||||
<string name="convo_context_action_unarchive">Из архива</string>
|
||||
<string name="convo_context_action_delete">Удалить</string>
|
||||
<string name="confirm_delete_convo">Удалить чат?</string>
|
||||
<string name="action_sign_out">Выйти</string>
|
||||
<string name="sign_out_confirm_title">Выйти?</string>
|
||||
<string name="conversation_context_action_unpin">Открепить</string>
|
||||
<string name="conversation_context_action_pin">Закрепить</string>
|
||||
<string name="confirm_unpin_conversation">Открепить чат?</string>
|
||||
<string name="confirm_pin_conversation">Закрепить чат?</string>
|
||||
<string name="confirm_unarchive_conversation">Разархивировать чат?</string>
|
||||
<string name="convo_context_action_unpin">Открепить</string>
|
||||
<string name="convo_context_action_pin">Закрепить</string>
|
||||
<string name="confirm_unpin_convo">Открепить чат?</string>
|
||||
<string name="confirm_pin_convo">Закрепить чат?</string>
|
||||
<string name="confirm_unarchive_convo">Разархивировать чат?</string>
|
||||
<string name="action_pin">Закрепить</string>
|
||||
<string name="action_unpin">Открепить</string>
|
||||
<string name="action_mark">Пометить</string>
|
||||
@@ -181,7 +181,7 @@
|
||||
<string name="settings_amoled_dark_theme_description">Использовать AMOLED тему с чистым чёрным фоновым цветом, когда используется тёмная тема</string>
|
||||
<string name="members_count">Участники: %1$d</string>
|
||||
<string name="title_loading">Загрузка…</string>
|
||||
<string name="title_conversations">Чаты</string>
|
||||
<string name="title_convos">Чаты</string>
|
||||
<string name="title_archive">Архив</string>
|
||||
<string name="title_friends">Друзья</string>
|
||||
<string name="title_profile">Профиль</string>
|
||||
@@ -262,8 +262,8 @@
|
||||
<string name="unspam_message_text">Вы уверены, что хотите убрать пометку спама у этого сообщения?</string>
|
||||
<string name="pin_message_title">Закрепить сообщение</string>
|
||||
<string name="copied_to_clipboard">Скопировано в буфер обмена</string>
|
||||
<string name="conversation_context_action_archive">В архив</string>
|
||||
<string name="confirm_archive_conversation">Архивировать чат?</string>
|
||||
<string name="convo_context_action_archive">В архив</string>
|
||||
<string name="confirm_archive_convo">Архивировать чат?</string>
|
||||
<string name="action_archive">В архив</string>
|
||||
<string name="autofill">Автозаполнение</string>
|
||||
<string name="bold">Жирный</string>
|
||||
|
||||
@@ -153,18 +153,18 @@
|
||||
<string name="action_mark_as_read">Read</string>
|
||||
|
||||
<string name="action_delete">Delete</string>
|
||||
<string name="conversation_context_action_archive">Archive</string>
|
||||
<string name="conversation_context_action_unarchive">Unarchive</string>
|
||||
<string name="conversation_context_action_delete">Delete</string>
|
||||
<string name="confirm_delete_conversation">Delete the conversation?</string>
|
||||
<string name="convo_context_action_archive">Archive</string>
|
||||
<string name="convo_context_action_unarchive">Unarchive</string>
|
||||
<string name="convo_context_action_delete">Delete</string>
|
||||
<string name="confirm_delete_convo">Delete the conversation?</string>
|
||||
<string name="action_sign_out">Sign out</string>
|
||||
<string name="sign_out_confirm_title">Sign out?</string>
|
||||
<string name="conversation_context_action_unpin">Unpin</string>
|
||||
<string name="conversation_context_action_pin">Pin</string>
|
||||
<string name="confirm_unpin_conversation">Unpin the conversation?</string>
|
||||
<string name="confirm_pin_conversation">Pin the conversation?</string>
|
||||
<string name="confirm_archive_conversation">Archive the conversation?</string>
|
||||
<string name="confirm_unarchive_conversation">Unarchive the conversation?</string>
|
||||
<string name="convo_context_action_unpin">Unpin</string>
|
||||
<string name="convo_context_action_pin">Pin</string>
|
||||
<string name="confirm_unpin_convo">Unpin the conversation?</string>
|
||||
<string name="confirm_pin_convo">Pin the conversation?</string>
|
||||
<string name="confirm_archive_convo">Archive the conversation?</string>
|
||||
<string name="confirm_unarchive_convo">Unarchive the conversation?</string>
|
||||
<string name="action_pin">Pin</string>
|
||||
<string name="action_unpin">Unpin</string>
|
||||
<string name="action_mark">Mark</string>
|
||||
@@ -245,7 +245,7 @@
|
||||
<string name="action_refresh">Refresh</string>
|
||||
<string name="members_count">Members: %1$d</string>
|
||||
<string name="title_loading">Loading…</string>
|
||||
<string name="title_conversations">Conversations</string>
|
||||
<string name="title_convos">Conversations</string>
|
||||
<string name="title_archive">Archive</string>
|
||||
<string name="title_friends">Friends</string>
|
||||
<string name="title_profile">Profile</string>
|
||||
|
||||
Reference in New Issue
Block a user