From 7dde6c4d989703f3ea1e1b674b2177508d50569d Mon Sep 17 00:00:00 2001 From: cyberta Date: Thu, 2 Jul 2020 16:53:03 +0200 Subject: [PATCH 1/5] fix mailto link handling --- .../securesms/ConversationActivity.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 16536763a..bac4251e0 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -694,15 +694,41 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity isShareDraftInitialized = true; } }); - resetRelayingMessageContent(this); + //resetRelayingMessageContent(this); } } ///// Initializers + /** + * Drafts can be initialized by click on a mailto: link or from the database + * @return + */ private ListenableFuture initializeDraft() { - ListenableFuture result = initializeDraftFromDatabase(); - updateToggleButtonState(); + + final SettableFuture result = new SettableFuture<>(); + + final String draftText = getIntent().getStringExtra(TEXT_EXTRA); + final Uri draftMedia = getIntent().getData(); + final MediaType draftMediaType = MediaType.from(getIntent().getType()); + + if (draftText != null) { + composeText.setText(draftText); + result.set(true); + } + if (draftMedia != null && draftMediaType != null) { + return setMedia(draftMedia, draftMediaType); + } + + if (draftText == null && draftMedia == null && draftMediaType == null) { + return initializeDraftFromDatabase(); + } else { + updateToggleButtonState(); + result.set(false); + } + + //ListenableFuture result = initializeDraftFromDatabase(); + //updateToggleButtonState(); return result; } From 20189fdb51ad8d3ce4c8bf3d0fb1c181002e9126 Mon Sep 17 00:00:00 2001 From: cyberta Date: Thu, 2 Jul 2020 16:58:10 +0200 Subject: [PATCH 2/5] instead of stacking more ConversationListActivities, close the current one and go back to the origin chat so that the activity stack keeps clean --- src/org/thoughtcrime/securesms/ConversationListFragment.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationListFragment.java b/src/org/thoughtcrime/securesms/ConversationListFragment.java index a92a889d5..2a9ba40a6 100644 --- a/src/org/thoughtcrime/securesms/ConversationListFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationListFragment.java @@ -202,8 +202,7 @@ public class ConversationListFragment extends Fragment SendRelayedMessageUtil.immediatelyRelay(getActivity(), selectedChats.toArray(new Long[selectedChats.size()])); actionMode.finish(); actionMode = null; - // Start this activity again, this time with an intent without sharing: - startActivity(new Intent(getActivity(), ConversationListActivity.class)); + getActivity().finish(); }) .show(); } From 69b587cbfb9410908b86b4fd2eeaf57cca1b73ff Mon Sep 17 00:00:00 2001 From: cyberta Date: Mon, 6 Jul 2020 12:51:11 +0200 Subject: [PATCH 3/5] allow to share images as drafts w/o sending them as before, instead disallow to go back and forth between chat and chat list while sharing --- .../securesms/ConversationActivity.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index bac4251e0..e2a53565e 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -31,13 +31,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Vibrator; import android.provider.Browser; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.SearchView; -import androidx.core.view.WindowCompat; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.Toolbar; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -59,6 +52,14 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; +import androidx.core.view.WindowCompat; + import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; @@ -128,7 +129,6 @@ import static org.thoughtcrime.securesms.util.RelayUtil.getSharedText; import static org.thoughtcrime.securesms.util.RelayUtil.isForwarding; import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent; import static org.thoughtcrime.securesms.util.RelayUtil.isSharing; -import static org.thoughtcrime.securesms.util.RelayUtil.resetRelayingMessageContent; /** * Activity for displaying a message thread, as well as @@ -562,7 +562,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity if (isRelayingMessageContent(this)) { if (isSharing(this)) { - attachmentManager.cleanup(); + // we're allowing only 1 try to share, going back to the conversation list will + // close the conversation list in activtyForResult() as well, so that the user + // comes back to the extenal app's share menu + setResult(RESULT_OK); } finish(); return; From af2798dd7cc6c865c393d2265ee9b964df3ff6b2 Mon Sep 17 00:00:00 2001 From: cyberta Date: Mon, 6 Jul 2020 12:52:43 +0200 Subject: [PATCH 4/5] keep activity stack intact, of forwarding message was successful, close the current ConversationActivity and go back to the initial chat the message was forwarded from --- src/org/thoughtcrime/securesms/ConversationActivity.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index e2a53565e..8248bb360 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -194,6 +194,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private boolean isSecurityInitialized = false; private boolean isShareDraftInitialized = false; + private boolean successfulForwardingAttempt = false; + private final DynamicTheme dynamicTheme = new DynamicTheme(); private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); @@ -560,7 +562,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private void handleReturnToConversationList() { - if (isRelayingMessageContent(this)) { + if (isRelayingMessageContent(this) || successfulForwardingAttempt) { if (isSharing(this)) { // we're allowing only 1 try to share, going back to the conversation list will // close the conversation list in activtyForResult() as well, so that the user @@ -669,7 +671,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } new AlertDialog.Builder(this) .setMessage(getString(R.string.ask_forward, name)) - .setPositiveButton(R.string.ok, (dialogInterface, i) -> SendRelayedMessageUtil.immediatelyRelay(this, chatId)) + .setPositiveButton(R.string.ok, (dialogInterface, i) -> { + SendRelayedMessageUtil.immediatelyRelay(this, chatId); + successfulForwardingAttempt = true; + }) .setNegativeButton(R.string.cancel, (dialogInterface, i) -> finish()) .show(); } From 85502c9d05e2737e6b285236abe8e232de185c24 Mon Sep 17 00:00:00 2001 From: cyberta Date: Mon, 6 Jul 2020 13:12:51 +0200 Subject: [PATCH 5/5] cleanup --- src/org/thoughtcrime/securesms/ConversationActivity.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 8248bb360..cca33b176 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -702,7 +702,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity isShareDraftInitialized = true; } }); - //resetRelayingMessageContent(this); } } @@ -735,8 +734,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity result.set(false); } - //ListenableFuture result = initializeDraftFromDatabase(); - //updateToggleButtonState(); return result; }