Adding a confirmation dialog when clearing emoji

pull/1686/head
ThomasSession 6 months ago
parent 38ac9dd97a
commit 1121003e80

@ -1536,14 +1536,11 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
sendEmojiRemoval(emoji, message)
}
/**
* Called when the user is attempting to clear all instance of a specific emoji.
*/
override fun onClearAll(emoji: String, messageId: MessageId) {
reactionDb.deleteEmojiReactions(emoji, messageId)
viewModel.openGroup?.let { openGroup ->
lokiMessageDb.getServerID(messageId.id, !messageId.mms)?.let { serverId ->
OpenGroupApi.deleteAllReactions(openGroup.room, openGroup.server, serverId, emoji)
}
}
threadDb.notifyThreadUpdated(viewModel.threadId)
viewModel.onEmojiClear(emoji, messageId)
}
override fun onMicrophoneButtonMove(event: MotionEvent) {

@ -14,12 +14,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.squareup.phrase.Phrase
import network.loki.messenger.R
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.HideDeleteAllDevicesDialog
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.HideDeleteEveryoneDialog
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.MarkAsDeletedForEveryone
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.MarkAsDeletedLocally
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.ShowOpenUrlDialog
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
import org.session.libsession.utilities.StringSubstitutionConstants.EMOJI_KEY
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.*
import org.thoughtcrime.securesms.ui.AlertDialog
import org.thoughtcrime.securesms.ui.DialogButtonModel
import org.thoughtcrime.securesms.ui.GetString
@ -195,6 +194,33 @@ fun ConversationV2Dialogs(
)
}
// Clear emoji
if(dialogsState.clearAllEmoji != null){
AlertDialog(
onDismissRequest = {
// hide dialog
sendCommand(HideClearEmoji)
},
text = stringResource(R.string.emojiReactsClearAll).let { txt ->
Phrase.from(txt).put(EMOJI_KEY, dialogsState.clearAllEmoji.emoji).format().toString()
},
buttons = listOf(
DialogButtonModel(
text = GetString(stringResource(id = R.string.clear)),
color = LocalColors.current.danger,
onClick = {
// delete emoji
sendCommand(
ClearEmoji(dialogsState.clearAllEmoji.emoji, dialogsState.clearAllEmoji.messageId)
)
}
),
DialogButtonModel(
GetString(stringResource(R.string.cancel))
)
)
)
}
}
}

@ -37,7 +37,10 @@ import org.session.libsignal.utilities.IdPrefix
import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.audio.AudioSlidePlayer
import org.thoughtcrime.securesms.database.LokiMessageDatabase
import org.thoughtcrime.securesms.database.ReactionDatabase
import org.thoughtcrime.securesms.database.Storage
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
import org.thoughtcrime.securesms.groups.OpenGroupManager
@ -52,6 +55,8 @@ class ConversationViewModel(
private val repository: ConversationRepository,
private val storage: Storage,
private val messageDataProvider: MessageDataProvider,
private val threadDb: ThreadDatabase,
private val reactionDb: ReactionDatabase,
private val lokiMessageDb: LokiMessageDatabase,
private val textSecurePreferences: TextSecurePreferences
) : ViewModel() {
@ -716,6 +721,12 @@ class ConversationViewModel(
}
}
is Commands.HideClearEmoji -> {
_dialogsState.update {
it.copy(clearAllEmoji = null)
}
}
is Commands.HideDeleteAllDevicesDialog -> {
_dialogsState.update {
it.copy(deleteAllDevices = null)
@ -733,6 +744,34 @@ class ConversationViewModel(
is Commands.MarkAsDeletedForEveryone -> {
markAsDeletedForEveryone(command.data)
}
is Commands.ClearEmoji -> {
clearEmoji(command.emoji, command.messageId)
}
}
}
private fun clearEmoji(emoji: String, messageId: MessageId){
viewModelScope.launch(Dispatchers.Default) {
reactionDb.deleteEmojiReactions(emoji, messageId)
openGroup?.let { openGroup ->
lokiMessageDb.getServerID(messageId.id, !messageId.mms)?.let { serverId ->
OpenGroupApi.deleteAllReactions(
openGroup.room,
openGroup.server,
serverId,
emoji
)
}
}
threadDb.notifyThreadUpdated(threadId)
}
}
fun onEmojiClear(emoji: String, messageId: MessageId) {
// show a confirmation dialog
_dialogsState.update {
it.copy(clearAllEmoji = ClearAllEmoji(emoji, messageId))
}
}
@ -749,6 +788,8 @@ class ConversationViewModel(
private val repository: ConversationRepository,
private val storage: Storage,
private val messageDataProvider: MessageDataProvider,
private val threadDb: ThreadDatabase,
private val reactionDb: ReactionDatabase,
private val lokiMessageDb: LokiMessageDatabase,
private val textSecurePreferences: TextSecurePreferences
) : ViewModelProvider.Factory {
@ -761,6 +802,8 @@ class ConversationViewModel(
repository = repository,
storage = storage,
messageDataProvider = messageDataProvider,
threadDb = threadDb,
reactionDb = reactionDb,
lokiMessageDb = lokiMessageDb,
textSecurePreferences = textSecurePreferences
) as T
@ -769,6 +812,7 @@ class ConversationViewModel(
data class DialogsState(
val openLinkDialogUrl: String? = null,
val clearAllEmoji: ClearAllEmoji? = null,
val deleteEveryone: DeleteForEveryoneDialogData? = null,
val deleteAllDevices: DeleteForEveryoneDialogData? = null,
)
@ -781,10 +825,19 @@ class ConversationViewModel(
val warning: String? = null
)
data class ClearAllEmoji(
val emoji: String,
val messageId: MessageId
)
sealed class Commands {
data class ShowOpenUrlDialog(val url: String?) : Commands()
data class ClearEmoji(val emoji:String, val messageId: MessageId) : Commands()
data object HideDeleteEveryoneDialog : Commands()
data object HideDeleteAllDevicesDialog : Commands()
data object HideClearEmoji : Commands()
data class MarkAsDeletedLocally(val messages: Set<MessageRecord>): Commands()
data class MarkAsDeletedForEveryone(val data: DeleteForEveryoneDialogData): Commands()

@ -36,7 +36,8 @@ class ConversationViewModelTest: BaseViewModelTest() {
private lateinit var messageRecord: MessageRecord
private val viewModel: ConversationViewModel by lazy {
ConversationViewModel(threadId, edKeyPair, application, repository, storage, mock(), mock(), mock())
ConversationViewModel(threadId, edKeyPair, application, repository, storage,
mock(), mock(), mock(), mock(), mock())
}
@Before

Loading…
Cancel
Save