Allow external shares to a story.

fork-5.53.8
Alex Hart 2022-03-11 14:32:08 -04:00 zatwierdzone przez Cody Henthorne
rodzic 732b67d8cb
commit 54eb579558
5 zmienionych plików z 32 dodań i 5 usunięć

Wyświetl plik

@ -124,7 +124,7 @@ public final class MultiShareSender {
public static @NonNull TransportOption getWorstTransportOption(@NonNull Context context, @NonNull Set<ShareContactAndThread> shareContactAndThreads) { public static @NonNull TransportOption getWorstTransportOption(@NonNull Context context, @NonNull Set<ShareContactAndThread> shareContactAndThreads) {
for (ShareContactAndThread shareContactAndThread : shareContactAndThreads) { for (ShareContactAndThread shareContactAndThread : shareContactAndThreads) {
TransportOption option = resolveTransportOption(context, shareContactAndThread.isForceSms()); TransportOption option = resolveTransportOption(context, shareContactAndThread.isForceSms() && !shareContactAndThread.isStory());
if (option.isSms()) { if (option.isSms()) {
return option; return option;
} }
@ -134,7 +134,7 @@ public final class MultiShareSender {
} }
private static @NonNull TransportOption resolveTransportOption(@NonNull Context context, @NonNull Recipient recipient) { private static @NonNull TransportOption resolveTransportOption(@NonNull Context context, @NonNull Recipient recipient) {
return resolveTransportOption(context, recipient.isForceSmsSelection() || !recipient.isRegistered()); return resolveTransportOption(context, !recipient.isDistributionList() && (recipient.isForceSmsSelection() || !recipient.isRegistered()));
} }
public static @NonNull TransportOption resolveTransportOption(@NonNull Context context, boolean forceSms) { public static @NonNull TransportOption resolveTransportOption(@NonNull Context context, boolean forceSms) {

Wyświetl plik

@ -55,6 +55,7 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.sharing.interstitial.ShareInterstitialActivity; import org.thoughtcrime.securesms.sharing.interstitial.ShareInterstitialActivity;
import org.thoughtcrime.securesms.stories.Stories;
import org.thoughtcrime.securesms.util.ConversationUtil; import org.thoughtcrime.securesms.util.ConversationUtil;
import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
@ -68,6 +69,7 @@ import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -501,6 +503,11 @@ public class ShareActivity extends PassphraseRequiredActivity
} }
private void onConfirmSingleDestination(@NonNull ShareContact shareContact) { private void onConfirmSingleDestination(@NonNull ShareContact shareContact) {
if (shareContact.getRecipientId().isPresent() && Recipient.resolved(shareContact.getRecipientId().get()).isDistributionList()) {
onConfirmMultipleDestinations(Collections.singleton(shareContact));
return;
}
shareConfirm.setClickable(false); shareConfirm.setClickable(false);
SimpleTask.run(this.getLifecycle(), SimpleTask.run(this.getLifecycle(),
() -> resolveShareContact(shareContact), () -> resolveShareContact(shareContact),
@ -552,8 +559,10 @@ public class ShareActivity extends PassphraseRequiredActivity
if (mode == -1) return; if (mode == -1) return;
boolean isMmsOrSmsSupported = data != null ? data.isMmsOrSmsSupported() : Util.isDefaultSmsProvider(this); boolean isMmsOrSmsSupported = data != null ? data.isMmsOrSmsSupported() : Util.isDefaultSmsProvider(this);
boolean isStoriesSupported = Stories.isFeatureEnabled() && data != null && data.isStoriesSupported();
mode = isMmsOrSmsSupported ? mode | DisplayMode.FLAG_SMS : mode & ~DisplayMode.FLAG_SMS; mode = isMmsOrSmsSupported ? mode | DisplayMode.FLAG_SMS : mode & ~DisplayMode.FLAG_SMS;
mode = isStoriesSupported ? mode | DisplayMode.FLAG_STORIES : mode & ~DisplayMode.FLAG_STORIES;
getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, mode); getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, mode);
contactsFragment.reset(); contactsFragment.reset();

Wyświetl plik

@ -5,6 +5,7 @@ import android.net.Uri;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList; import java.util.ArrayList;
@ -69,4 +70,14 @@ class ShareData {
public boolean isMmsOrSmsSupported() { public boolean isMmsOrSmsSupported() {
return isMmsOrSmsSupported; return isMmsOrSmsSupported;
} }
public boolean isStoriesSupported() {
if (isForIntent()) {
return MediaUtil.isStorySupportedType(getMimeType());
} else if (isForMedia()) {
return getMedia().stream().allMatch(media -> MediaUtil.isStorySupportedType(media.getMimeType()));
} else {
return false;
}
}
} }

Wyświetl plik

@ -76,8 +76,7 @@ public class ShareViewModel extends ViewModel {
if (record.isPresent() && record.get().isAnnouncementGroup() && !record.get().isAdmin(Recipient.self())) { if (record.isPresent() && record.get().isAnnouncementGroup() && !record.get().isAdmin(Recipient.self())) {
return ContactSelectResult.FALSE_AND_SHOW_PERMISSION_TOAST; return ContactSelectResult.FALSE_AND_SHOW_PERMISSION_TOAST;
} }
} else if (SmsShareRestriction.DISALLOW_SMS_CONTACTS.equals(smsShareRestriction.getValue()) && } else if (SmsShareRestriction.DISALLOW_SMS_CONTACTS.equals(smsShareRestriction.getValue()) && isRecipientAnSmsContact(recipient)) {
(!recipient.isRegistered() || recipient.isForceSmsSelection())) {
return ContactSelectResult.FALSE_AND_SHOW_SMS_MULTISELECT_TOAST; return ContactSelectResult.FALSE_AND_SHOW_SMS_MULTISELECT_TOAST;
} }
} }
@ -154,7 +153,7 @@ public class ShareViewModel extends ViewModel {
if (shareContact.getRecipientId().isPresent()) { if (shareContact.getRecipientId().isPresent()) {
Recipient recipient = Recipient.live(shareContact.getRecipientId().get()).get(); Recipient recipient = Recipient.live(shareContact.getRecipientId().get()).get();
if (!recipient.isRegistered() || recipient.isForceSmsSelection()) { if (isRecipientAnSmsContact(recipient)) {
return SmsShareRestriction.DISALLOW_MULTI_SHARE; return SmsShareRestriction.DISALLOW_MULTI_SHARE;
} else { } else {
return SmsShareRestriction.DISALLOW_SMS_CONTACTS; return SmsShareRestriction.DISALLOW_SMS_CONTACTS;
@ -167,6 +166,10 @@ public class ShareViewModel extends ViewModel {
} }
} }
private static boolean isRecipientAnSmsContact(@NonNull Recipient recipient) {
return !recipient.isDistributionList() && (!recipient.isRegistered() || recipient.isForceSmsSelection());
}
enum ContactSelectResult { enum ContactSelectResult {
TRUE, FALSE, FALSE_AND_SHOW_PERMISSION_TOAST, FALSE_AND_SHOW_SMS_MULTISELECT_TOAST TRUE, FALSE, FALSE_AND_SHOW_PERMISSION_TOAST, FALSE_AND_SHOW_SMS_MULTISELECT_TOAST
} }

Wyświetl plik

@ -320,6 +320,10 @@ public class MediaUtil {
return isImageType(contentType) || isVideoType(contentType); return isImageType(contentType) || isVideoType(contentType);
} }
public static boolean isStorySupportedType(String contentType) {
return isImageOrVideoType(contentType) && !isGif(contentType);
}
public static boolean isImageVideoOrAudioType(String contentType) { public static boolean isImageVideoOrAudioType(String contentType) {
return isImageOrVideoType(contentType) || isAudioType(contentType); return isImageOrVideoType(contentType) || isAudioType(contentType);
} }