From 673c3412e919e05e28d400cb48d58096cbb227da Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 14 Jul 2024 18:32:08 +0200 Subject: [PATCH] add 'share' to contact's profile menu --- .../securesms/ConversationActivity.java | 10 ++++++---- .../securesms/ProfileActivity.java | 15 ++++++++++++++ .../securesms/util/RelayUtil.java | 20 +++++++++++++++++++ src/main/res/menu/profile_common.xml | 4 ++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index ae6552223..0d64ca972 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -391,7 +391,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity setMedia(data.getData(), MediaType.AUDIO); break; case PICK_CONTACT: - addAttachmentContactInfo(data); + addAttachmentContactInfo(data.getIntExtra(AttachContactActivity.CONTACT_ID_EXTRA, 0)); break; case GROUP_EDIT: dcChat = dcContext.getChat(chatId); @@ -695,6 +695,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private void handleSharing() { ArrayList uriList = RelayUtil.getSharedUris(this); + int sharedContactId = RelayUtil.getSharedContactId(this); if (uriList.size() > 1) { String message = String.format(getString(R.string.share_multiple_attachments), uriList.size()); new AlertDialog.Builder(this) @@ -704,7 +705,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity .setPositiveButton(R.string.menu_send, (dialog, which) -> SendRelayedMessageUtil.immediatelyRelay(this, chatId)) .show(); } else { - if (uriList.isEmpty()) { + if (sharedContactId != 0) { + addAttachmentContactInfo(sharedContactId); + } else if (uriList.isEmpty()) { dcContext.setDraft(chatId, SendRelayedMessageUtil.createMessage(this, null, getSharedText(this))); } else { dcContext.setDraft(chatId, SendRelayedMessageUtil.createMessage(this, uriList.get(0), getSharedText(this))); @@ -975,8 +978,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity return attachmentManager.setMedia(glideRequests, Uri.fromFile(new File(msg.getFile())), msg, mediaType, 0, 0, chatId); } - private void addAttachmentContactInfo(Intent data) { - int contactId = data.getIntExtra(AttachContactActivity.CONTACT_ID_EXTRA, 0); + private void addAttachmentContactInfo(int contactId) { if (contactId == 0) { return; } diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java index 250416a77..6affffac3 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java @@ -1,5 +1,7 @@ package org.thoughtcrime.securesms; +import static org.thoughtcrime.securesms.util.RelayUtil.setForwardingMessageIds; + import android.app.Activity; import android.content.Intent; import android.media.RingtoneManager; @@ -27,6 +29,7 @@ import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcEvent; +import com.b44t.messenger.DcMsg; import com.google.android.material.tabs.TabLayout; import org.thoughtcrime.securesms.connect.DcEventCenter; @@ -34,6 +37,7 @@ import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.Prefs; +import org.thoughtcrime.securesms.util.RelayUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; @@ -135,6 +139,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity menu.findItem(R.id.edit_name).setVisible(false); menu.findItem(R.id.show_encr_info).setVisible(false); menu.findItem(R.id.copy_addr_to_clipboard).setVisible(false); + menu.findItem(R.id.share).setVisible(false); } else if (chatIsMultiUser) { if (chatIsBroadcast) { canReceive = false; @@ -145,6 +150,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity } } menu.findItem(R.id.copy_addr_to_clipboard).setVisible(false); + menu.findItem(R.id.share).setVisible(false); } } else { canReceive = false; @@ -416,6 +422,9 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity case R.id.edit_name: onEditName(); break; + case R.id.share: + onShare(); + break; case R.id.copy_addr_to_clipboard: onCopyAddrToClipboard(); break; @@ -535,6 +544,12 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity } } + private void onShare() { + Intent composeIntent = new Intent(); + RelayUtil.setSharedContact(composeIntent, contactId); + ConversationListRelayingActivity.start(this, composeIntent); + } + private void onCopyAddrToClipboard() { DcContact dcContact = dcContext.getContact(contactId); Util.writeTextToClipboard(this, dcContact.getAddr()); diff --git a/src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java b/src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java index 08a62637d..ffb90c076 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java @@ -13,6 +13,7 @@ import static org.thoughtcrime.securesms.ConversationActivity.TEXT_EXTRA; public class RelayUtil { private static final String FORWARDED_MESSAGE_IDS = "forwarded_message_ids"; private static final String SHARED_URIS = "shared_uris"; + private static final String SHARED_CONTACT_ID = "shared_contact_id"; private static final String IS_SHARING = "is_sharing"; private static final String SHARED_TITLE = "shared_title"; private static final String DIRECT_SHARING_CHAT_ID = "direct_sharing_chat_id"; @@ -72,6 +73,16 @@ public class RelayUtil { return new ArrayList<>(); } + + public static int getSharedContactId(Activity activity) { + try { + return activity.getIntent().getIntExtra(SHARED_CONTACT_ID, 0); + } catch(Exception e) { + e.printStackTrace(); + return 0; + } + } + public static String getSharedText(Activity activity) { try { return activity.getIntent().getStringExtra(TEXT_EXTRA); @@ -93,6 +104,7 @@ public class RelayUtil { try { activity.getIntent().removeExtra(FORWARDED_MESSAGE_IDS); activity.getIntent().removeExtra(SHARED_URIS); + activity.getIntent().removeExtra(SHARED_CONTACT_ID); activity.getIntent().removeExtra(IS_SHARING); activity.getIntent().removeExtra(DIRECT_SHARING_CHAT_ID); activity.getIntent().removeExtra(TEXT_EXTRA); @@ -112,6 +124,9 @@ public class RelayUtil { if (!getSharedUris(currentActivity).isEmpty()) { newActivityIntent.putParcelableArrayListExtra(SHARED_URIS, getSharedUris(currentActivity)); } + if (getSharedContactId(currentActivity) != 0) { + newActivityIntent.putExtra(SHARED_CONTACT_ID, getSharedContactId(currentActivity)); + } if (getSharedText(currentActivity) != null) { newActivityIntent.putExtra(TEXT_EXTRA, getSharedText(currentActivity)); } @@ -132,6 +147,11 @@ public class RelayUtil { composeIntent.putExtra(IS_SHARING, true); } + public static void setSharedContact(Intent composeIntent, int contactId) { + composeIntent.putExtra(SHARED_CONTACT_ID, contactId); + composeIntent.putExtra(IS_SHARING, true); + } + public static void setSharedTitle(Intent composeIntent, String text) { composeIntent.putExtra(SHARED_TITLE, text); } diff --git a/src/main/res/menu/profile_common.xml b/src/main/res/menu/profile_common.xml index 94931f97f..db4b9581b 100644 --- a/src/main/res/menu/profile_common.xml +++ b/src/main/res/menu/profile_common.xml @@ -2,6 +2,10 @@ + +