From aad58043d361e034892130f99d12a4c97300c50b Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Fri, 13 Aug 2021 15:30:26 +1000 Subject: [PATCH] add UI options for delete messages --- .../conversation/v2/ConversationActivityV2.kt | 47 ++++++++++++----- .../v2/DeleteOptionsBottomSheet.kt | 52 +++++++++++++++++++ .../fragment_delete_message_bottom_sheet.xml | 29 +++++++++++ 3 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DeleteOptionsBottomSheet.kt create mode 100644 app/src/main/res/layout/fragment_delete_message_bottom_sheet.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 7abe4a704d..a6e2426355 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -1167,22 +1167,41 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } override fun deleteMessages(messages: Set) { - val messageCount = messages.size - val builder = AlertDialog.Builder(this) - builder.setTitle(resources.getQuantityString(R.plurals.ConversationFragment_delete_selected_messages, messageCount, messageCount)) - builder.setMessage(resources.getQuantityString(R.plurals.ConversationFragment_this_will_permanently_delete_all_n_selected_messages, messageCount, messageCount)) - builder.setCancelable(true) - builder.setPositiveButton(R.string.delete) { _, _ -> - for (message in messages) { - this.deleteForEveryone(message) + if (thread.isOpenGroupRecipient) { + val messageCount = messages.size + val builder = AlertDialog.Builder(this) + builder.setTitle(resources.getQuantityString(R.plurals.ConversationFragment_delete_selected_messages, messageCount, messageCount)) + builder.setMessage(resources.getQuantityString(R.plurals.ConversationFragment_this_will_permanently_delete_all_n_selected_messages, messageCount, messageCount)) + builder.setCancelable(true) + builder.setPositiveButton(R.string.delete) { _, _ -> + for (message in messages) { + this.deleteForEveryone(message) + } + endActionMode() } - endActionMode() + builder.setNegativeButton(android.R.string.cancel) { dialog, _ -> + dialog.dismiss() + endActionMode() + } + builder.show() + } else { + val bottomSheet = DeleteOptionsBottomSheet() + bottomSheet.recipient = thread + bottomSheet.onDeleteForMeTapped = { + for (message in messages) { + this.deleteLocally(message) + } + bottomSheet.dismiss() + } + bottomSheet.onDeleteForEveryoneTapped = { + for (message in messages) { + this.deleteForEveryone(message) + } + bottomSheet.dismiss() + } + bottomSheet.onCancelTapped = { bottomSheet.dismiss() } + bottomSheet.show(supportFragmentManager, bottomSheet.tag) } - builder.setNegativeButton(android.R.string.cancel) { dialog, _ -> - dialog.dismiss() - endActionMode() - } - builder.show() } override fun banUser(messages: Set) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DeleteOptionsBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DeleteOptionsBottomSheet.kt new file mode 100644 index 0000000000..4d84f7c0f9 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DeleteOptionsBottomSheet.kt @@ -0,0 +1,52 @@ +package org.thoughtcrime.securesms.conversation.v2 + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.isVisible +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import kotlinx.android.synthetic.main.fragment_conversation_bottom_sheet.* +import kotlinx.android.synthetic.main.fragment_delete_message_bottom_sheet.* +import network.loki.messenger.R +import org.session.libsession.utilities.recipients.Recipient +import org.thoughtcrime.securesms.util.UiModeUtilities + +class DeleteOptionsBottomSheet: BottomSheetDialogFragment(), View.OnClickListener { + + lateinit var recipient: Recipient + + var onDeleteForMeTapped: (() -> Unit?)? = null + var onDeleteForEveryoneTapped: (() -> Unit)? = null + var onCancelTapped: (() -> Unit)? = null + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_delete_message_bottom_sheet, container, false) + } + + override fun onClick(v: View?) { + when (v) { + deleteForMeTextView -> onDeleteForMeTapped?.invoke() + deleteForEveryoneTextView -> onDeleteForEveryoneTapped?.invoke() + cancelTextView -> onCancelTapped?.invoke() + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + if (!this::recipient.isInitialized) { return dismiss() } + if (!recipient.isGroupRecipient) { + deleteForEveryoneTextView.text = resources.getString(R.string.delete_message_for_me_and_recipient, recipient.name) + } + deleteForMeTextView.setOnClickListener(this) + deleteForEveryoneTextView.setOnClickListener(this) + cancelTextView.setOnClickListener(this) + } + + override fun onStart() { + super.onStart() + val window = dialog?.window ?: return + val isLightMode = UiModeUtilities.isDayUiMode(requireContext()) + window.setDimAmount(if (isLightMode) 0.1f else 0.75f) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_delete_message_bottom_sheet.xml b/app/src/main/res/layout/fragment_delete_message_bottom_sheet.xml new file mode 100644 index 0000000000..592701ae08 --- /dev/null +++ b/app/src/main/res/layout/fragment_delete_message_bottom_sheet.xml @@ -0,0 +1,29 @@ + + + + + + + + + +