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) {
|
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) {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue