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