From 4f9c692dbd9a42b7b54b6853213fe2a67cb98bbc Mon Sep 17 00:00:00 2001 From: Florian Haar Date: Fri, 2 Nov 2018 09:57:50 +0100 Subject: [PATCH] forward selected messages #74 --- res/values/strings.xml | 1 + .../ContactSelectionListFragment.java | 8 +++++- .../securesms/ConversationFragment.java | 14 +++++++--- .../thoughtcrime/securesms/ShareActivity.java | 27 ++++++++++++++++--- 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index df6a235f7..0311cd23d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -305,6 +305,7 @@ Share with Can\'t find an app able to open this media. Could not find %1$s. + Forward selected messages to %1$s? Welcome to Delta Chat. diff --git a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java index f9c4e6fd6..9d660b6ef 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -84,6 +84,7 @@ public class ContactSelectionListFragment extends Fragment public static final String REFRESHABLE = "refreshable"; public static final String RECENTS = "recents"; public static final String SELECT_VERIFIED_EXTRA = "select_verified"; + public static final String FROM_SHARE_ACTIVITY_EXTRA = "from_share_activity"; private ApplicationDcContext dcContext; @@ -233,6 +234,10 @@ public class ContactSelectionListFragment extends Fragment return getActivity().getIntent().getBooleanExtra(SELECT_VERIFIED_EXTRA, false); } + private boolean isFromShareActivity() { + return getActivity().getIntent().getBooleanExtra(FROM_SHARE_ACTIVITY_EXTRA, false); + } + private void initializeCursor() { ContactSelectionListAdapter adapter = new ContactSelectionListAdapter(getActivity(), GlideApp.with(this), @@ -267,11 +272,12 @@ public class ContactSelectionListFragment extends Fragment @Override public Loader onCreateLoader(int id, Bundle args) { - boolean addCreateGroupLinks = !isMulti(); + boolean addCreateGroupLinks = isFromShareActivity() ? false : !isMulti(); int listflags = DcContext.DC_GCL_ADD_SELF; if(isSelectVerfied()) { listflags = DcContext.DC_GCL_VERIFIED_ONLY; } + return new DcContactsLoader(getActivity(), listflags, cursorFilter, addCreateGroupLinks); } diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index 1e518b2a1..06808189e 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -83,6 +83,7 @@ import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; @@ -90,6 +91,8 @@ import java.util.List; import java.util.Locale; import java.util.Set; +import static org.thoughtcrime.securesms.ShareActivity.EXTRA_MSG_IDS; + @SuppressLint("StaticFieldLeak") public class ConversationFragment extends Fragment implements LoaderManager.LoaderCallbacks, @@ -284,7 +287,7 @@ public class ConversationFragment extends Fragment } if (messageRecords.size() > 1) { - menu.findItem(R.id.menu_context_forward).setVisible(false); +// menu.findItem(R.id.menu_context_forward).setVisible(false); menu.findItem(R.id.menu_context_reply).setVisible(false); menu.findItem(R.id.menu_context_details).setVisible(false); menu.findItem(R.id.menu_context_save_attachment).setVisible(false); @@ -425,9 +428,11 @@ public class ConversationFragment extends Fragment .show(); } - private void handleForwardMessage(DcMsg message) { + private void handleForwardMessage(final Set messageRecords) { Intent composeIntent = new Intent(getActivity(), ShareActivity.class); - composeIntent.putExtra(Intent.EXTRA_TEXT, message.getDisplayBody().toString()); + int[] msgIds = DcMsg.msgSetToIds(messageRecords); + composeIntent.putExtra(EXTRA_MSG_IDS, msgIds); +// composeIntent.putExtra(Intent.EXTRA_TEXT, messageRecords.getDisplayBody().toString()); /* TODO: handle fowarding media if (message.isMms()) { MmsMessageRecord mediaMessage = (MmsMessageRecord) message; @@ -933,7 +938,8 @@ public class ConversationFragment extends Fragment actionMode.finish(); return true; case R.id.menu_context_forward: - handleForwardMessage(getSelectedMessageRecord()); +// handleForwardMessage(getSelectedMessageRecord()); + handleForwardMessage(getListAdapter().getSelectedItems()); actionMode.finish(); return true; case R.id.menu_context_resend: diff --git a/src/org/thoughtcrime/securesms/ShareActivity.java b/src/org/thoughtcrime/securesms/ShareActivity.java index 3cc92f834..cbf58acd6 100644 --- a/src/org/thoughtcrime/securesms/ShareActivity.java +++ b/src/org/thoughtcrime/securesms/ShareActivity.java @@ -38,6 +38,8 @@ import android.view.View; import android.widget.ImageView; import org.thoughtcrime.securesms.components.SearchToolbar; +import org.thoughtcrime.securesms.connect.ApplicationDcContext; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode; import org.thoughtcrime.securesms.database.Address; @@ -46,6 +48,7 @@ import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.providers.PersistentBlobProvider; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.util.Dialogs; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; @@ -57,6 +60,7 @@ import org.thoughtcrime.securesms.util.ViewUtil; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; /** * An activity to quickly share content with contacts @@ -71,6 +75,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity public static final String EXTRA_THREAD_ID = "thread_id"; public static final String EXTRA_ADDRESS_MARSHALLED = "address_marshalled"; public static final String EXTRA_DISTRIBUTION_TYPE = "distribution_type"; + public static final String EXTRA_MSG_IDS = "message_ids"; private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); @@ -82,6 +87,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity private Uri resolvedExtra; private String mimeType; private boolean isPassingAlongMedia; + private ApplicationDcContext dcContext; @Override protected void onPreCreate() { @@ -100,6 +106,12 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity getIntent().putExtra(ContactSelectionListFragment.REFRESHABLE, false); getIntent().putExtra(ContactSelectionListFragment.RECENTS, true); + getIntent().putExtra(ContactSelectionListFragment.MULTI_SELECT, false); + getIntent().putExtra(ContactSelectionListFragment.FROM_SHARE_ACTIVITY_EXTRA, true); + + + + dcContext = DcHelper.getContext(this); setContentView(R.layout.share_activity); @@ -247,7 +259,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity private void createConversation(int threadId) { final Intent intent = getBaseShareIntent(ConversationActivity.class); intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId); - + intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, distributionType); isPassingAlongMedia = true; startActivity(intent); } @@ -271,9 +283,16 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity @Override public void onContactSelected(int specialId, String number) { - Recipient recipient = Recipient.from(this, Address.fromExternal(this, number), true); - int existingThread = recipient.getAddress().getDcChatId(); - createConversation(existingThread); + Recipient recipient = dcContext.getRecipient(ApplicationDcContext.RECIPIENT_TYPE_CONTACT, specialId); + Dialogs.showResponseDialog(this, "", getString(R.string.ShareActivity_forward_message_to_user_info, dcContext.getContact(specialId).getDisplayName()), (dialogInterface, i) -> { + int chatId = dcContext.getChatIdByContactId(specialId); + if(chatId == 0){ + chatId = dcContext.createChatByContactId(specialId); + } + int[] value = getIntent().getIntArrayExtra(EXTRA_MSG_IDS); + dcContext.forwardMsgs(value, chatId); + createConversation(chatId, recipient.getAddress(), ThreadDatabase.DistributionTypes.DEFAULT); + }); } @Override