mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 00:29:11 +01:00
Prevent double tap send on camera first flow.
Defensive array list copies where used in builders and Intent#putParcelableArrayListExtra. Spelling.
This commit is contained in:
@@ -18,14 +18,14 @@ import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public final class MultiShareArgs implements Parcelable {
|
||||
|
||||
private static final String ARGS = "ShareInterstitialArgs";
|
||||
|
||||
private final Set<ShareContactAndThread> shareContactAndThreads;
|
||||
private final ArrayList<Media> media;
|
||||
private final List<Media> media;
|
||||
private final String draftText;
|
||||
private final StickerLocator stickerLocator;
|
||||
private final boolean borderless;
|
||||
@@ -36,7 +36,7 @@ public final class MultiShareArgs implements Parcelable {
|
||||
|
||||
private MultiShareArgs(@NonNull Builder builder) {
|
||||
shareContactAndThreads = builder.shareContactAndThreads;
|
||||
media = builder.media == null ? new ArrayList<>() : builder.media;
|
||||
media = builder.media == null ? new ArrayList<>() : new ArrayList<>(builder.media);
|
||||
draftText = builder.draftText;
|
||||
stickerLocator = builder.stickerLocator;
|
||||
borderless = builder.borderless;
|
||||
@@ -47,7 +47,7 @@ public final class MultiShareArgs implements Parcelable {
|
||||
}
|
||||
|
||||
protected MultiShareArgs(Parcel in) {
|
||||
shareContactAndThreads = new HashSet<>(in.createTypedArrayList(ShareContactAndThread.CREATOR));
|
||||
shareContactAndThreads = new HashSet<>(Objects.requireNonNull(in.createTypedArrayList(ShareContactAndThread.CREATOR)));
|
||||
media = in.createTypedArrayList(Media.CREATOR);
|
||||
draftText = in.readString();
|
||||
stickerLocator = in.readParcelable(StickerLocator.class.getClassLoader());
|
||||
@@ -56,9 +56,10 @@ public final class MultiShareArgs implements Parcelable {
|
||||
dataType = in.readString();
|
||||
viewOnce = in.readByte() != 0;
|
||||
|
||||
String linkedPreviewString = in.readString();
|
||||
LinkPreview preview;
|
||||
try {
|
||||
preview = LinkPreview.deserialize(in.readString());
|
||||
preview = linkedPreviewString != null ? LinkPreview.deserialize(linkedPreviewString) : null;
|
||||
} catch (IOException e) {
|
||||
preview = null;
|
||||
}
|
||||
@@ -70,7 +71,7 @@ public final class MultiShareArgs implements Parcelable {
|
||||
return shareContactAndThreads;
|
||||
}
|
||||
|
||||
public ArrayList<Media> getMedia() {
|
||||
public @NonNull List<Media> getMedia() {
|
||||
return media;
|
||||
}
|
||||
|
||||
@@ -176,21 +177,21 @@ public final class MultiShareArgs implements Parcelable {
|
||||
|
||||
private final Set<ShareContactAndThread> shareContactAndThreads;
|
||||
|
||||
private ArrayList<Media> media;
|
||||
private String draftText;
|
||||
private StickerLocator stickerLocator;
|
||||
private boolean borderless;
|
||||
private Uri dataUri;
|
||||
private String dataType;
|
||||
private LinkPreview linkPreview;
|
||||
private boolean viewOnce;
|
||||
private List<Media> media;
|
||||
private String draftText;
|
||||
private StickerLocator stickerLocator;
|
||||
private boolean borderless;
|
||||
private Uri dataUri;
|
||||
private String dataType;
|
||||
private LinkPreview linkPreview;
|
||||
private boolean viewOnce;
|
||||
|
||||
public Builder(@NonNull Set<ShareContactAndThread> shareContactAndThreads) {
|
||||
this.shareContactAndThreads = shareContactAndThreads;
|
||||
}
|
||||
|
||||
public @NonNull Builder withMedia(@Nullable ArrayList<Media> media) {
|
||||
this.media = media;
|
||||
public @NonNull Builder withMedia(@Nullable List<Media> media) {
|
||||
this.media = media != null ? new ArrayList<>(media) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ public final class MultiShareSender {
|
||||
return new MultiShareSendResultCollection(results);
|
||||
}
|
||||
|
||||
public static @NonNull TransportOption getWorseTransportOption(@NonNull Context context, @NonNull Set<ShareContactAndThread> shareContactAndThreads) {
|
||||
public static @NonNull TransportOption getWorstTransportOption(@NonNull Context context, @NonNull Set<ShareContactAndThread> shareContactAndThreads) {
|
||||
for (ShareContactAndThread shareContactAndThread : shareContactAndThreads) {
|
||||
TransportOption option = resolveTransportOption(context, shareContactAndThread.isForceSms());
|
||||
if (option.isSms()) {
|
||||
|
||||
@@ -160,7 +160,7 @@ public class ShareActivity extends PassphraseRequiredActivity
|
||||
switch (requestCode) {
|
||||
case RESULT_MEDIA_CONFIRMATION:
|
||||
case RESULT_TEXT_CONFIRMATION:
|
||||
viewModel.onSuccessulShare();
|
||||
viewModel.onSuccessfulShare();
|
||||
finish();
|
||||
break;
|
||||
default:
|
||||
@@ -504,7 +504,7 @@ public class ShareActivity extends PassphraseRequiredActivity
|
||||
Log.i(TAG, "Shared data was not external.");
|
||||
}
|
||||
|
||||
viewModel.onSuccessulShare();
|
||||
viewModel.onSuccessfulShare();
|
||||
|
||||
startActivity(builder.build());
|
||||
}
|
||||
@@ -558,14 +558,14 @@ public class ShareActivity extends PassphraseRequiredActivity
|
||||
media,
|
||||
Stream.of(multiShareArgs.getShareContactAndThreads()).map(ShareContactAndThread::getRecipientId).toList(),
|
||||
multiShareArgs.getDraftText(),
|
||||
MultiShareSender.getWorseTransportOption(this, multiShareArgs.getShareContactAndThreads())),
|
||||
MultiShareSender.getWorstTransportOption(this, multiShareArgs.getShareContactAndThreads())),
|
||||
RESULT_MEDIA_CONFIRMATION);
|
||||
break;
|
||||
default:
|
||||
//noinspection CodeBlock2Expr
|
||||
MultiShareSender.send(multiShareArgs, results -> {
|
||||
MultiShareDialogs.displayResultDialog(this, results, () -> {
|
||||
viewModel.onSuccessulShare();
|
||||
viewModel.onSuccessfulShare();
|
||||
finish();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.stickers.StickerLocator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public final class ShareIntents {
|
||||
|
||||
@@ -68,9 +69,9 @@ public final class ShareIntents {
|
||||
|
||||
private final Context context;
|
||||
|
||||
private String extraText;
|
||||
private ArrayList<Media> extraMedia;
|
||||
private Slide slide;
|
||||
private String extraText;
|
||||
private List<Media> extraMedia;
|
||||
private Slide slide;
|
||||
|
||||
public Builder(@NonNull Context context) {
|
||||
this.context = context;
|
||||
@@ -101,7 +102,7 @@ public final class ShareIntents {
|
||||
intent.putExtra(Intent.EXTRA_TEXT, extraText);
|
||||
|
||||
if (extraMedia != null) {
|
||||
intent.putParcelableArrayListExtra(EXTRA_MEDIA, extraMedia);
|
||||
intent.putParcelableArrayListExtra(EXTRA_MEDIA, new ArrayList<>(extraMedia));
|
||||
} else if (slide != null) {
|
||||
intent.putExtra(Intent.EXTRA_STREAM, slide.getUri());
|
||||
intent.putExtra(EXTRA_BORDERLESS, slide.isBorderless());
|
||||
|
||||
@@ -103,7 +103,7 @@ public class ShareViewModel extends ViewModel {
|
||||
externalShare = false;
|
||||
}
|
||||
|
||||
public void onSuccessulShare() {
|
||||
public void onSuccessfulShare() {
|
||||
mediaUsed = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user