kopia lustrzana https://github.com/ryukoposting/Signal-Android
Allow external shares to a story.
rodzic
732b67d8cb
commit
54eb579558
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue