diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java index 58cd78a32..f8277bb1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java @@ -100,7 +100,8 @@ public class ShareActivity extends PassphraseRequiredActivity private ShareSelectionAdapter adapter; private boolean disallowMultiShare; - private ShareViewModel viewModel; + private ShareIntents.Args args; + private ShareViewModel viewModel; @Override protected void onPreCreate() { @@ -112,6 +113,7 @@ public class ShareActivity extends PassphraseRequiredActivity protected void onCreate(Bundle icicle, boolean ready) { setContentView(R.layout.share_activity); + initializeArgs(); initializeViewModel(); initializeMedia(); initializeIntent(); @@ -211,7 +213,7 @@ public class ShareActivity extends PassphraseRequiredActivity if (!getIntent().hasExtra(ContactSelectionListFragment.DISPLAY_MODE)) { int mode = DisplayMode.FLAG_PUSH | DisplayMode.FLAG_ACTIVE_GROUPS | DisplayMode.FLAG_SELF | DisplayMode.FLAG_HIDE_NEW; - if (TextSecurePreferences.isSmsEnabled(this) && viewModel.isExternalShare()) { + if (TextSecurePreferences.isSmsEnabled(this)) { mode |= DisplayMode.FLAG_SMS; } @@ -289,7 +291,7 @@ public class ShareActivity extends PassphraseRequiredActivity return; } - if (TextSecurePreferences.isSmsEnabled(this) && viewModel.isExternalShare() && (displayMode & DisplayMode.FLAG_SMS) == 0) { + if (TextSecurePreferences.isSmsEnabled(this) && (displayMode & DisplayMode.FLAG_SMS) == 0) { getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, displayMode | DisplayMode.FLAG_SMS); contactsFragment.setQueryFilter(null); } @@ -310,9 +312,15 @@ public class ShareActivity extends PassphraseRequiredActivity disallowMultiShare = true; break; } + + validateAvailableRecipients(); }); } + private void initializeArgs() { + this.args = ShareIntents.Args.from(getIntent()); + } + private void initializeViewModel() { this.viewModel = ViewModelProviders.of(this, new ShareViewModel.Factory()).get(ShareViewModel.class); } @@ -374,8 +382,6 @@ public class ShareActivity extends PassphraseRequiredActivity contactsFragment.getView().setVisibility(View.GONE); } onSingleDestinationChosen(threadId, recipientId); - } else if (viewModel.isExternalShare()) { - validateAvailableRecipients(); } } @@ -430,7 +436,9 @@ public class ShareActivity extends PassphraseRequiredActivity if (mode == -1) return; - mode = data.isMmsOrSmsSupported() ? mode | DisplayMode.FLAG_SMS : mode & ~DisplayMode.FLAG_SMS; + boolean isMmsOrSmsSupported = data != null ? data.isMmsOrSmsSupported() : TextSecurePreferences.isSmsEnabled(this); + + mode = isMmsOrSmsSupported ? mode | DisplayMode.FLAG_SMS : mode & ~DisplayMode.FLAG_SMS; getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, mode); contactsFragment.reset(); @@ -452,14 +460,14 @@ public class ShareActivity extends PassphraseRequiredActivity progressWheel.set(null); } - if (!data.isPresent()) { + if (!data.isPresent() && args.isEmpty()) { Log.w(TAG, "No data to share!"); Toast.makeText(this, R.string.ShareActivity_multiple_attachments_are_only_supported, Toast.LENGTH_LONG).show(); finish(); return; } - onResolved.accept(data.get()); + onResolved.accept(data.orNull()); }); } @@ -482,7 +490,6 @@ public class ShareActivity extends PassphraseRequiredActivity } private void openConversation(long threadId, @NonNull RecipientId recipientId, @Nullable ShareData shareData) { - ShareIntents.Args args = ShareIntents.Args.from(getIntent()); ConversationIntents.Builder builder = ConversationIntents.createBuilder(this, recipientId, threadId) .withMedia(args.getExtraMedia()) .withDraftText(args.getExtraText() != null ? args.getExtraText().toString() : null) @@ -510,7 +517,6 @@ public class ShareActivity extends PassphraseRequiredActivity } private void openInterstitial(@NonNull Set shareContactAndThreads, @Nullable ShareData shareData) { - ShareIntents.Args args = ShareIntents.Args.from(getIntent()); MultiShareArgs.Builder builder = new MultiShareArgs.Builder(shareContactAndThreads) .withMedia(args.getExtraMedia()) .withDraftText(args.getExtraText() != null ? args.getExtraText().toString() : null) diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareIntents.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareIntents.java index fec7aa427..828da0856 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareIntents.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareIntents.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.sharing; import android.content.Context; import android.content.Intent; +import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -63,6 +64,12 @@ public final class ShareIntents { public boolean isBorderless() { return isBorderless; } + + public boolean isEmpty() { + return extraSticker == null && + (extraMedia == null || extraMedia.isEmpty()) && + TextUtils.isEmpty(extraText); + } } public static final class Builder { diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java index d16ce9232..91aaf2c0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java @@ -100,6 +100,7 @@ public class ShareViewModel extends ViewModel { } void onNonExternalShare() { + shareData.setValue(Optional.absent()); externalShare = false; }