mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-11 16:37:41 +00:00
Simplified deletion dialog to be reused for note to self and the rest as only the labels change
This commit is contained in:
@@ -19,6 +19,8 @@ import network.loki.messenger.R
|
|||||||
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
|
import org.session.libsession.utilities.StringSubstitutionConstants.APP_NAME_KEY
|
||||||
import org.session.libsession.utilities.StringSubstitutionConstants.EMOJI_KEY
|
import org.session.libsession.utilities.StringSubstitutionConstants.EMOJI_KEY
|
||||||
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.*
|
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.Commands.*
|
||||||
|
import org.thoughtcrime.securesms.conversation.v2.ConversationViewModel.DeleteForEveryoneDialogData
|
||||||
|
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||||
import org.thoughtcrime.securesms.ui.AlertDialog
|
import org.thoughtcrime.securesms.ui.AlertDialog
|
||||||
import org.thoughtcrime.securesms.ui.DialogButtonModel
|
import org.thoughtcrime.securesms.ui.DialogButtonModel
|
||||||
import org.thoughtcrime.securesms.ui.GetString
|
import org.thoughtcrime.securesms.ui.GetString
|
||||||
@@ -48,9 +50,10 @@ fun ConversationV2Dialogs(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete message(s) for everyone
|
// delete message(s)
|
||||||
if(dialogsState.deleteEveryone != null){
|
if(dialogsState.deleteEveryone != null){
|
||||||
var deleteForEveryone by remember { mutableStateOf(dialogsState.deleteEveryone.defaultToEveryone)}
|
val data = dialogsState.deleteEveryone
|
||||||
|
var deleteForEveryone by remember { mutableStateOf(data.defaultToEveryone)}
|
||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = {
|
onDismissRequest = {
|
||||||
@@ -59,17 +62,17 @@ fun ConversationV2Dialogs(
|
|||||||
},
|
},
|
||||||
title = pluralStringResource(
|
title = pluralStringResource(
|
||||||
R.plurals.deleteMessage,
|
R.plurals.deleteMessage,
|
||||||
dialogsState.deleteEveryone.messages.size,
|
data.messages.size,
|
||||||
dialogsState.deleteEveryone.messages.size
|
data.messages.size
|
||||||
),
|
),
|
||||||
text = pluralStringResource(
|
text = pluralStringResource(
|
||||||
R.plurals.deleteMessageConfirm,
|
R.plurals.deleteMessageConfirm,
|
||||||
dialogsState.deleteEveryone.messages.size,
|
data.messages.size,
|
||||||
dialogsState.deleteEveryone.messages.size
|
data.messages.size
|
||||||
),
|
),
|
||||||
content = {
|
content = {
|
||||||
// add warning text, if any
|
// add warning text, if any
|
||||||
dialogsState.deleteEveryone.warning?.let {
|
data.warning?.let {
|
||||||
Text(
|
Text(
|
||||||
text = it,
|
text = it,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
@@ -103,9 +106,9 @@ fun ConversationV2Dialogs(
|
|||||||
),
|
),
|
||||||
option = RadioOption(
|
option = RadioOption(
|
||||||
value = Unit,
|
value = Unit,
|
||||||
title = GetString(stringResource(R.string.deleteMessageEveryone)),
|
title = GetString(data.deleteForEveryoneLabel),
|
||||||
selected = deleteForEveryone,
|
selected = deleteForEveryone,
|
||||||
enabled = dialogsState.deleteEveryone.everyoneEnabled
|
enabled = data.everyoneEnabled
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
deleteForEveryone = true
|
deleteForEveryone = true
|
||||||
@@ -119,9 +122,9 @@ fun ConversationV2Dialogs(
|
|||||||
// delete messages based on chosen option
|
// delete messages based on chosen option
|
||||||
sendCommand(
|
sendCommand(
|
||||||
if(deleteForEveryone) MarkAsDeletedForEveryone(
|
if(deleteForEveryone) MarkAsDeletedForEveryone(
|
||||||
dialogsState.deleteEveryone.copy(defaultToEveryone = deleteForEveryone)
|
data.copy(defaultToEveryone = deleteForEveryone)
|
||||||
)
|
)
|
||||||
else MarkAsDeletedLocally(dialogsState.deleteEveryone.messages)
|
else MarkAsDeletedLocally(data.messages)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
@@ -132,76 +135,6 @@ fun ConversationV2Dialogs(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete message(s) for all my devices
|
|
||||||
if(dialogsState.deleteAllDevices != null){
|
|
||||||
var deleteAllDevices by remember { mutableStateOf(dialogsState.deleteAllDevices.defaultToEveryone) }
|
|
||||||
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = {
|
|
||||||
// hide dialog
|
|
||||||
sendCommand(HideDeleteAllDevicesDialog)
|
|
||||||
},
|
|
||||||
title = pluralStringResource(
|
|
||||||
R.plurals.deleteMessage,
|
|
||||||
dialogsState.deleteAllDevices.messages.size,
|
|
||||||
dialogsState.deleteAllDevices.messages.size
|
|
||||||
),
|
|
||||||
text = pluralStringResource(
|
|
||||||
R.plurals.deleteMessageConfirm,
|
|
||||||
dialogsState.deleteAllDevices.messages.size,
|
|
||||||
dialogsState.deleteAllDevices.messages.size
|
|
||||||
),
|
|
||||||
content = {
|
|
||||||
TitledRadioButton(
|
|
||||||
contentPadding = PaddingValues(
|
|
||||||
horizontal = LocalDimensions.current.xxsSpacing,
|
|
||||||
vertical = 0.dp
|
|
||||||
),
|
|
||||||
option = RadioOption(
|
|
||||||
value = Unit,
|
|
||||||
title = GetString(stringResource(R.string.deleteMessageDeviceOnly)),
|
|
||||||
selected = !deleteAllDevices
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
deleteAllDevices = false
|
|
||||||
}
|
|
||||||
|
|
||||||
TitledRadioButton(
|
|
||||||
contentPadding = PaddingValues(
|
|
||||||
horizontal = LocalDimensions.current.xxsSpacing,
|
|
||||||
vertical = 0.dp
|
|
||||||
),
|
|
||||||
option = RadioOption(
|
|
||||||
value = Unit,
|
|
||||||
title = GetString(stringResource(R.string.deleteMessageDevicesAll)),
|
|
||||||
selected = deleteAllDevices
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
deleteAllDevices = true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
buttons = listOf(
|
|
||||||
DialogButtonModel(
|
|
||||||
text = GetString(stringResource(id = R.string.delete)),
|
|
||||||
color = LocalColors.current.danger,
|
|
||||||
onClick = {
|
|
||||||
// delete messages based on chosen option
|
|
||||||
sendCommand(
|
|
||||||
if(deleteAllDevices) MarkAsDeletedForEveryone(
|
|
||||||
dialogsState.deleteAllDevices.copy(defaultToEveryone = deleteAllDevices)
|
|
||||||
)
|
|
||||||
else MarkAsDeletedLocally(dialogsState.deleteAllDevices.messages)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
),
|
|
||||||
DialogButtonModel(
|
|
||||||
GetString(stringResource(R.string.cancel))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Clear emoji
|
// Clear emoji
|
||||||
if(dialogsState.clearAllEmoji != null){
|
if(dialogsState.clearAllEmoji != null){
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
|
@@ -245,12 +245,12 @@ class ConversationViewModel(
|
|||||||
|
|
||||||
// hashes are required if wanting to delete messages from the 'storage server'
|
// hashes are required if wanting to delete messages from the 'storage server'
|
||||||
// They are not required for communities OR if all messages are outgoing
|
// They are not required for communities OR if all messages are outgoing
|
||||||
// also we can only delete deleted messages (marked as deleted) locally
|
// also we can only delete deleted messages and control messages (marked as deleted) locally
|
||||||
val canDeleteForEveryone = messages.all{ !it.isDeleted && !it.isControlMessage } && (
|
val canDeleteForEveryone = messages.all{ !it.isDeleted && !it.isControlMessage } && (
|
||||||
messages.all { it.isOutgoing } ||
|
messages.all { it.isOutgoing } ||
|
||||||
conversationType == MessageType.COMMUNITY ||
|
conversationType == MessageType.COMMUNITY ||
|
||||||
messages.all { lokiMessageDb.getMessageServerHash(it.id, it.isMms) != null
|
messages.all { lokiMessageDb.getMessageServerHash(it.id, it.isMms) != null }
|
||||||
})
|
)
|
||||||
|
|
||||||
// There are three types of dialogs for deletion:
|
// There are three types of dialogs for deletion:
|
||||||
// 1- Delete on device only OR all devices - Used for Note to self
|
// 1- Delete on device only OR all devices - Used for Note to self
|
||||||
@@ -260,11 +260,16 @@ class ConversationViewModel(
|
|||||||
// the conversation is a note to self
|
// the conversation is a note to self
|
||||||
conversationType == MessageType.NOTE_TO_SELF -> {
|
conversationType == MessageType.NOTE_TO_SELF -> {
|
||||||
_dialogsState.update {
|
_dialogsState.update {
|
||||||
it.copy(deleteAllDevices = DeleteForEveryoneDialogData(
|
it.copy(deleteEveryone = DeleteForEveryoneDialogData(
|
||||||
messages = messages,
|
messages = messages,
|
||||||
defaultToEveryone = false,
|
defaultToEveryone = false,
|
||||||
everyoneEnabled = true,
|
everyoneEnabled = canDeleteForEveryone,
|
||||||
messageType = conversationType
|
messageType = conversationType,
|
||||||
|
deleteForEveryoneLabel = application.getString(R.string.deleteMessageDevicesAll),
|
||||||
|
warning = if(canDeleteForEveryone) null else
|
||||||
|
application.resources.getQuantityString(
|
||||||
|
R.plurals.deleteMessageNoteToSelfWarning, messages.count(), messages.count()
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -278,6 +283,7 @@ class ConversationViewModel(
|
|||||||
messages = messages,
|
messages = messages,
|
||||||
defaultToEveryone = isAdmin.value,
|
defaultToEveryone = isAdmin.value,
|
||||||
everyoneEnabled = true,
|
everyoneEnabled = true,
|
||||||
|
deleteForEveryoneLabel = application.getString(R.string.deleteMessageEveryone),
|
||||||
messageType = conversationType
|
messageType = conversationType
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -293,6 +299,7 @@ class ConversationViewModel(
|
|||||||
defaultToEveryone = false,
|
defaultToEveryone = false,
|
||||||
everyoneEnabled = false, // disable 'delete for everyone' - can only delete locally in this case
|
everyoneEnabled = false, // disable 'delete for everyone' - can only delete locally in this case
|
||||||
messageType = conversationType,
|
messageType = conversationType,
|
||||||
|
deleteForEveryoneLabel = application.getString(R.string.deleteMessageEveryone),
|
||||||
warning = application.resources.getQuantityString(
|
warning = application.resources.getQuantityString(
|
||||||
R.plurals.deleteMessageWarning, messages.count(), messages.count()
|
R.plurals.deleteMessageWarning, messages.count(), messages.count()
|
||||||
)
|
)
|
||||||
@@ -548,7 +555,7 @@ class ConversationViewModel(
|
|||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
_dialogsState.update { it.copy(deleteAllDevices = data) }
|
_dialogsState.update { it.copy(deleteEveryone = data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// hide loading indicator
|
// hide loading indicator
|
||||||
@@ -731,12 +738,6 @@ class ConversationViewModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is Commands.HideDeleteAllDevicesDialog -> {
|
|
||||||
_dialogsState.update {
|
|
||||||
it.copy(deleteAllDevices = null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
is Commands.MarkAsDeletedLocally -> {
|
is Commands.MarkAsDeletedLocally -> {
|
||||||
// hide dialog first
|
// hide dialog first
|
||||||
_dialogsState.update {
|
_dialogsState.update {
|
||||||
@@ -818,8 +819,7 @@ class ConversationViewModel(
|
|||||||
data class DialogsState(
|
data class DialogsState(
|
||||||
val openLinkDialogUrl: String? = null,
|
val openLinkDialogUrl: String? = null,
|
||||||
val clearAllEmoji: ClearAllEmoji? = null,
|
val clearAllEmoji: ClearAllEmoji? = null,
|
||||||
val deleteEveryone: DeleteForEveryoneDialogData? = null,
|
val deleteEveryone: DeleteForEveryoneDialogData? = null
|
||||||
val deleteAllDevices: DeleteForEveryoneDialogData? = null,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
data class DeleteForEveryoneDialogData(
|
data class DeleteForEveryoneDialogData(
|
||||||
@@ -827,6 +827,7 @@ class ConversationViewModel(
|
|||||||
val messageType: MessageType,
|
val messageType: MessageType,
|
||||||
val defaultToEveryone: Boolean,
|
val defaultToEveryone: Boolean,
|
||||||
val everyoneEnabled: Boolean,
|
val everyoneEnabled: Boolean,
|
||||||
|
val deleteForEveryoneLabel: String,
|
||||||
val warning: String? = null
|
val warning: String? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -841,7 +842,6 @@ class ConversationViewModel(
|
|||||||
data class ClearEmoji(val emoji:String, val messageId: MessageId) : Commands()
|
data class ClearEmoji(val emoji:String, val messageId: MessageId) : Commands()
|
||||||
|
|
||||||
data object HideDeleteEveryoneDialog : Commands()
|
data object HideDeleteEveryoneDialog : Commands()
|
||||||
data object HideDeleteAllDevicesDialog : Commands()
|
|
||||||
data object HideClearEmoji : Commands()
|
data object HideClearEmoji : Commands()
|
||||||
|
|
||||||
data class MarkAsDeletedLocally(val messages: Set<MessageRecord>): Commands()
|
data class MarkAsDeletedLocally(val messages: Set<MessageRecord>): Commands()
|
||||||
|
Reference in New Issue
Block a user