mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 02:39:55 +01:00
Add recipient protections and logging to media send flow.
This commit is contained in:
@@ -245,9 +245,16 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med
|
||||
|
||||
RecipientId recipientId = getIntent().getParcelableExtra(KEY_RECIPIENT);
|
||||
if (recipientId != null) {
|
||||
Log.i(TAG, "Preparing for " + recipientId);
|
||||
recipient = Recipient.live(recipientId);
|
||||
}
|
||||
|
||||
List<RecipientId> recipientIds = getIntent().getParcelableArrayListExtra(KEY_RECIPIENTS);
|
||||
if (recipientIds != null && recipientIds.size() > 0) {
|
||||
Log.i(TAG, "Preparing for " + recipientIds);
|
||||
}
|
||||
|
||||
|
||||
viewModel = ViewModelProviders.of(this, new MediaSendViewModel.Factory(getApplication(), new MediaRepository())).get(MediaSendViewModel.class);
|
||||
transport = getIntent().getParcelableExtra(KEY_TRANSPORT);
|
||||
|
||||
@@ -348,7 +355,6 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med
|
||||
|
||||
revealButton.setOnClickListener(v -> viewModel.onRevealButtonToggled());
|
||||
|
||||
List<RecipientId> recipientIds = getIntent().getParcelableArrayListExtra(KEY_RECIPIENTS);
|
||||
continueButton.setOnClickListener(v -> {
|
||||
continueButton.setEnabled(false);
|
||||
if (recipientIds == null || recipientIds.isEmpty()) {
|
||||
@@ -595,7 +601,11 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med
|
||||
viewModel.onSendClicked(buildModelsToTransform(fragment), recipients, composeText.getMentions())
|
||||
.observe(this, result -> {
|
||||
dialog.dismiss();
|
||||
setActivityResultAndFinish(result);
|
||||
if (recipients.size() > 1) {
|
||||
finishWithoutSettingResults();
|
||||
} else {
|
||||
setActivityResultAndFinish(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -977,6 +987,14 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med
|
||||
return (MediaSendFragment) getSupportFragmentManager().findFragmentByTag(TAG_SEND);
|
||||
}
|
||||
|
||||
private void finishWithoutSettingResults() {
|
||||
Intent intent = new Intent();
|
||||
setResult(RESULT_OK, intent);
|
||||
|
||||
finish();
|
||||
overridePendingTransition(R.anim.stationary, R.anim.camera_slide_to_bottom);
|
||||
}
|
||||
|
||||
private void setActivityResultAndFinish(@NonNull MediaSendActivityResult result) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(EXTRA_RESULT, result);
|
||||
|
||||
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
|
||||
import org.thoughtcrime.securesms.TransportOption;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationActivity;
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult;
|
||||
import org.thoughtcrime.securesms.util.ParcelUtil;
|
||||
import org.whispersystems.libsignal.util.guava.Preconditions;
|
||||
@@ -20,6 +21,7 @@ import java.util.List;
|
||||
* A class that lets us nicely format data that we'll send back to {@link ConversationActivity}.
|
||||
*/
|
||||
public class MediaSendActivityResult implements Parcelable {
|
||||
private final RecipientId recipientId;
|
||||
private final Collection<PreUploadResult> uploadResults;
|
||||
private final Collection<Media> nonUploadedMedia;
|
||||
private final String body;
|
||||
@@ -27,33 +29,37 @@ public class MediaSendActivityResult implements Parcelable {
|
||||
private final boolean viewOnce;
|
||||
private final Collection<Mention> mentions;
|
||||
|
||||
static @NonNull MediaSendActivityResult forPreUpload(@NonNull Collection<PreUploadResult> uploadResults,
|
||||
static @NonNull MediaSendActivityResult forPreUpload(@NonNull RecipientId recipientId,
|
||||
@NonNull Collection<PreUploadResult> uploadResults,
|
||||
@NonNull String body,
|
||||
@NonNull TransportOption transport,
|
||||
boolean viewOnce,
|
||||
@NonNull List<Mention> mentions)
|
||||
{
|
||||
Preconditions.checkArgument(uploadResults.size() > 0, "Must supply uploadResults!");
|
||||
return new MediaSendActivityResult(uploadResults, Collections.emptyList(), body, transport, viewOnce, mentions);
|
||||
return new MediaSendActivityResult(recipientId, uploadResults, Collections.emptyList(), body, transport, viewOnce, mentions);
|
||||
}
|
||||
|
||||
static @NonNull MediaSendActivityResult forTraditionalSend(@NonNull List<Media> nonUploadedMedia,
|
||||
static @NonNull MediaSendActivityResult forTraditionalSend(@NonNull RecipientId recipientId,
|
||||
@NonNull List<Media> nonUploadedMedia,
|
||||
@NonNull String body,
|
||||
@NonNull TransportOption transport,
|
||||
boolean viewOnce,
|
||||
@NonNull List<Mention> mentions)
|
||||
{
|
||||
Preconditions.checkArgument(nonUploadedMedia.size() > 0, "Must supply media!");
|
||||
return new MediaSendActivityResult(Collections.emptyList(), nonUploadedMedia, body, transport, viewOnce, mentions);
|
||||
return new MediaSendActivityResult(recipientId, Collections.emptyList(), nonUploadedMedia, body, transport, viewOnce, mentions);
|
||||
}
|
||||
|
||||
private MediaSendActivityResult(@NonNull Collection<PreUploadResult> uploadResults,
|
||||
private MediaSendActivityResult(@NonNull RecipientId recipientId,
|
||||
@NonNull Collection<PreUploadResult> uploadResults,
|
||||
@NonNull List<Media> nonUploadedMedia,
|
||||
@NonNull String body,
|
||||
@NonNull TransportOption transport,
|
||||
boolean viewOnce,
|
||||
@NonNull List<Mention> mentions)
|
||||
{
|
||||
this.recipientId = recipientId;
|
||||
this.uploadResults = uploadResults;
|
||||
this.nonUploadedMedia = nonUploadedMedia;
|
||||
this.body = body;
|
||||
@@ -63,6 +69,7 @@ public class MediaSendActivityResult implements Parcelable {
|
||||
}
|
||||
|
||||
private MediaSendActivityResult(Parcel in) {
|
||||
this.recipientId = in.readParcelable(RecipientId.class.getClassLoader());
|
||||
this.uploadResults = ParcelUtil.readParcelableCollection(in, PreUploadResult.class);
|
||||
this.nonUploadedMedia = ParcelUtil.readParcelableCollection(in, Media.class);
|
||||
this.body = in.readString();
|
||||
@@ -71,6 +78,10 @@ public class MediaSendActivityResult implements Parcelable {
|
||||
this.mentions = ParcelUtil.readParcelableCollection(in, Mention.class);
|
||||
}
|
||||
|
||||
public @NonNull RecipientId getRecipientId() {
|
||||
return recipientId;
|
||||
}
|
||||
|
||||
public boolean isPushPreUpload() {
|
||||
return uploadResults.size() > 0;
|
||||
}
|
||||
@@ -118,6 +129,7 @@ public class MediaSendActivityResult implements Parcelable {
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeParcelable(recipientId, 0);
|
||||
ParcelUtil.writeParcelableCollection(dest, uploadResults);
|
||||
ParcelUtil.writeParcelableCollection(dest, nonUploadedMedia);
|
||||
dest.writeString(body);
|
||||
|
||||
@@ -475,7 +475,7 @@ class MediaSendViewModel extends ViewModel {
|
||||
|
||||
if (isSms || MessageSender.isLocalSelfSend(application, recipient, isSms)) {
|
||||
Log.i(TAG, "SMS or local self-send. Skipping pre-upload.");
|
||||
result.postValue(MediaSendActivityResult.forTraditionalSend(updatedMedia, trimmedBody, transport, isViewOnce(), trimmedMentions));
|
||||
result.postValue(MediaSendActivityResult.forTraditionalSend(recipient.getId(), updatedMedia, trimmedBody, transport, isViewOnce(), trimmedMentions));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -494,9 +494,10 @@ class MediaSendViewModel extends ViewModel {
|
||||
if (recipients.size() > 0) {
|
||||
sendMessages(recipients, splitBody, uploadResults, trimmedMentions);
|
||||
uploadRepository.deleteAbandonedAttachments();
|
||||
result.postValue(null);
|
||||
} else {
|
||||
result.postValue(MediaSendActivityResult.forPreUpload(recipient.getId(), uploadResults, splitBody, transport, isViewOnce(), trimmedMentions));
|
||||
}
|
||||
|
||||
result.postValue(MediaSendActivityResult.forPreUpload(uploadResults, splitBody, transport, isViewOnce(), trimmedMentions));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user