From 8d45efde4d3baf08a0600826793b23ce64cc9f9f Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 29 Jun 2021 11:14:58 +1000 Subject: [PATCH] Implement more option menu actions --- .../conversation/v2/ConversationActivityV2.kt | 26 ++++++++++++++++ .../v2/menus/ConversationMenuHelper.kt | 31 ++++++++++++++++--- 2 files changed, 52 insertions(+), 5 deletions(-) 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 6090b1a83e..dcd9e88602 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 @@ -45,14 +45,18 @@ import org.session.libsession.messaging.mentions.MentionsManager import org.session.libsession.messaging.messages.control.DataExtractionNotification import org.session.libsession.messaging.messages.signal.OutgoingMediaMessage import org.session.libsession.messaging.messages.signal.OutgoingTextMessage +import org.session.libsession.messaging.messages.visible.OpenGroupInvitation import org.session.libsession.messaging.messages.visible.VisibleMessage import org.session.libsession.messaging.open_groups.OpenGroupAPIV2 import org.session.libsession.messaging.sending_receiving.MessageSender +import org.session.libsession.messaging.sending_receiving.MessageSender.send import org.session.libsession.messaging.sending_receiving.attachments.Attachment import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel +import org.session.libsession.utilities.Address.Companion.fromSerialized import org.session.libsession.utilities.MediaTypes import org.session.libsession.utilities.TextSecurePreferences +import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.utilities.ListenableFuture import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity @@ -77,6 +81,8 @@ import org.thoughtcrime.securesms.giph.ui.GiphyActivity import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel.LinkPreviewState +import org.thoughtcrime.securesms.loki.activities.SelectContactsActivity +import org.thoughtcrime.securesms.loki.activities.SelectContactsActivity.Companion.selectedContactsKey import org.thoughtcrime.securesms.loki.utilities.MentionUtilities import org.thoughtcrime.securesms.loki.utilities.toPx import org.thoughtcrime.securesms.mediasend.Media @@ -156,6 +162,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe const val TAKE_PHOTO = 7 const val PICK_GIF = 10 const val PICK_FROM_LIBRARY = 12 + const val INVITE_CONTACTS = 124 } // endregion @@ -818,6 +825,25 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } sendAttachments(slideDeck.asAttachments(), body) } + INVITE_CONTACTS -> { + if (!thread.isOpenGroupRecipient) { return } + val extras = intent?.extras ?: return + if (!intent.hasExtra(SelectContactsActivity.selectedContactsKey)) { return } + val selectedContacts = extras.getStringArray(selectedContactsKey)!! + val openGroup = DatabaseFactory.getLokiThreadDatabase(this).getOpenGroupChat(threadID) + for (contact in selectedContacts) { + val recipient = Recipient.from(this, fromSerialized(contact), true) + val message = VisibleMessage() + message.sentTimestamp = System.currentTimeMillis() + val openGroupInvitation = OpenGroupInvitation() + openGroupInvitation.name = openGroup!!.name + openGroupInvitation.url = openGroup!!.joinURL + message.openGroupInvitation = openGroupInvitation + val outgoingTextMessage = OutgoingTextMessage.fromOpenGroupInvitation(openGroupInvitation, recipient, message.sentTimestamp) + DatabaseFactory.getSmsDatabase(this).insertMessageOutbox(-1, outgoingTextMessage, message.sentTimestamp!!) + MessageSender.send(message, recipient.address) + } + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt index b7ee480eb1..7aded91d0f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter +import android.os.AsyncTask import android.view.Menu import android.view.MenuInflater import android.view.MenuItem @@ -17,18 +18,19 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import network.loki.messenger.R import org.session.libsession.messaging.sending_receiving.MessageSender -import org.session.libsession.messaging.sending_receiving.MessageSender.explicitLeave import org.session.libsession.messaging.sending_receiving.leave import org.session.libsession.utilities.ExpirationUtil import org.session.libsession.utilities.GroupUtil.doubleDecodeGroupID import org.session.libsession.utilities.TextSecurePreferences -import org.session.libsession.utilities.TextSecurePreferences.getLocalNumber import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.utilities.toHexString +import org.thoughtcrime.securesms.MuteDialog import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity +import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2 import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.loki.activities.EditClosedGroupActivity import org.thoughtcrime.securesms.loki.activities.EditClosedGroupActivity.Companion.groupIDKey +import org.thoughtcrime.securesms.loki.activities.SelectContactsActivity import org.thoughtcrime.securesms.loki.utilities.getColorWithID import java.io.IOException @@ -94,9 +96,9 @@ object ConversationMenuHelper { R.id.menu_copy_session_id -> { copySessionID(context, thread) } R.id.menu_edit_group -> { editClosedGroup(context, thread) } R.id.menu_leave_group -> { leaveClosedGroup(context, thread) } - R.id.menu_invite_to_open_group -> { } - R.id.menu_unmute_notifications -> { } - R.id.menu_mute_notifications -> { } + R.id.menu_invite_to_open_group -> { inviteContacts(context, thread) } + R.id.menu_unmute_notifications -> { unmute(context, thread) } + R.id.menu_mute_notifications -> { mute(context, thread) } } return true } @@ -186,4 +188,23 @@ object ConversationMenuHelper { builder.setNegativeButton(R.string.no, null) builder.show() } + + private fun inviteContacts(context: Context, thread: Recipient) { + if (!thread.isOpenGroupRecipient) { return } + val intent = Intent(context, SelectContactsActivity::class.java) + val activity = context as AppCompatActivity + activity.startActivityForResult(intent, ConversationActivityV2.INVITE_CONTACTS) + } + + private fun unmute(context: Context, thread: Recipient) { + thread.setMuted(0) + DatabaseFactory.getRecipientDatabase(context).setMuted(thread, 0) + } + + private fun mute(context: Context, thread: Recipient) { + MuteDialog.show(context) { until: Long -> + thread.setMuted(until) + DatabaseFactory.getRecipientDatabase(context).setMuted(thread, until) + } + } } \ No newline at end of file