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) {
for (ShareContactAndThread shareContactAndThread : shareContactAndThreads) {
TransportOption option = resolveTransportOption(context, shareContactAndThread.isForceSms());
TransportOption option = resolveTransportOption(context, shareContactAndThread.isForceSms() && !shareContactAndThread.isStory());
if (option.isSms()) {
return option;
}
@ -134,7 +134,7 @@ public final class MultiShareSender {
}
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) {

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.RecipientId;
import org.thoughtcrime.securesms.sharing.interstitial.ShareInterstitialActivity;
import org.thoughtcrime.securesms.stories.Stories;
import org.thoughtcrime.securesms.util.ConversationUtil;
import org.thoughtcrime.securesms.util.DynamicLanguage;
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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -501,6 +503,11 @@ public class ShareActivity extends PassphraseRequiredActivity
}
private void onConfirmSingleDestination(@NonNull ShareContact shareContact) {
if (shareContact.getRecipientId().isPresent() && Recipient.resolved(shareContact.getRecipientId().get()).isDistributionList()) {
onConfirmMultipleDestinations(Collections.singleton(shareContact));
return;
}
shareConfirm.setClickable(false);
SimpleTask.run(this.getLifecycle(),
() -> resolveShareContact(shareContact),
@ -552,8 +559,10 @@ public class ShareActivity extends PassphraseRequiredActivity
if (mode == -1) return;
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 = isStoriesSupported ? mode | DisplayMode.FLAG_STORIES : mode & ~DisplayMode.FLAG_STORIES;
getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, mode);
contactsFragment.reset();

Wyświetl plik

@ -5,6 +5,7 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList;
@ -69,4 +70,14 @@ class ShareData {
public boolean 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())) {
return ContactSelectResult.FALSE_AND_SHOW_PERMISSION_TOAST;
}
} else if (SmsShareRestriction.DISALLOW_SMS_CONTACTS.equals(smsShareRestriction.getValue()) &&
(!recipient.isRegistered() || recipient.isForceSmsSelection())) {
} else if (SmsShareRestriction.DISALLOW_SMS_CONTACTS.equals(smsShareRestriction.getValue()) && isRecipientAnSmsContact(recipient)) {
return ContactSelectResult.FALSE_AND_SHOW_SMS_MULTISELECT_TOAST;
}
}
@ -154,7 +153,7 @@ public class ShareViewModel extends ViewModel {
if (shareContact.getRecipientId().isPresent()) {
Recipient recipient = Recipient.live(shareContact.getRecipientId().get()).get();
if (!recipient.isRegistered() || recipient.isForceSmsSelection()) {
if (isRecipientAnSmsContact(recipient)) {
return SmsShareRestriction.DISALLOW_MULTI_SHARE;
} else {
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 {
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);
}
public static boolean isStorySupportedType(String contentType) {
return isImageOrVideoType(contentType) && !isGif(contentType);
}
public static boolean isImageVideoOrAudioType(String contentType) {
return isImageOrVideoType(contentType) || isAudioType(contentType);
}