Make adding properties to media send result easier.

main
Cody Henthorne 2023-01-11 09:07:21 -05:00 zatwierdzone przez Alex Hart
rodzic 40f9a25b87
commit 1d2fbf0ebf
3 zmienionych plików z 75 dodań i 168 usunięć

Wyświetl plik

@ -1,165 +0,0 @@
package org.thoughtcrime.securesms.mediasend;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.conversation.ConversationActivity;
import org.thoughtcrime.securesms.conversation.MessageSendType;
import org.thoughtcrime.securesms.database.model.Mention;
import org.thoughtcrime.securesms.database.model.StoryType;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult;
import org.thoughtcrime.securesms.util.ParcelUtil;
import org.whispersystems.signalservice.api.util.Preconditions;
import java.util.Collection;
import java.util.Collections;
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 {
public static final String EXTRA_RESULT = "result";
private final RecipientId recipientId;
private final Collection<PreUploadResult> uploadResults;
private final Collection<Media> nonUploadedMedia;
private final String body;
private final MessageSendType sendType;
private final boolean viewOnce;
private final Collection<Mention> mentions;
private final StoryType storyType;
public static @NonNull MediaSendActivityResult fromData(@NonNull Intent data) {
MediaSendActivityResult result = data.getParcelableExtra(MediaSendActivityResult.EXTRA_RESULT);
if (result == null) {
throw new IllegalArgumentException();
}
return result;
}
public static @NonNull MediaSendActivityResult forPreUpload(@NonNull RecipientId recipientId,
@NonNull Collection<PreUploadResult> uploadResults,
@NonNull String body,
@NonNull MessageSendType sendType,
boolean viewOnce,
@NonNull List<Mention> mentions,
@NonNull StoryType storyType)
{
Preconditions.checkArgument(uploadResults.size() > 0, "Must supply uploadResults!");
return new MediaSendActivityResult(recipientId, uploadResults, Collections.emptyList(), body, sendType, viewOnce, mentions, storyType);
}
public static @NonNull MediaSendActivityResult forTraditionalSend(@NonNull RecipientId recipientId,
@NonNull List<Media> nonUploadedMedia,
@NonNull String body,
@NonNull MessageSendType sendType,
boolean viewOnce,
@NonNull List<Mention> mentions,
@NonNull StoryType storyType)
{
Preconditions.checkArgument(nonUploadedMedia.size() > 0, "Must supply media!");
return new MediaSendActivityResult(recipientId, Collections.emptyList(), nonUploadedMedia, body, sendType, viewOnce, mentions, storyType);
}
private MediaSendActivityResult(@NonNull RecipientId recipientId,
@NonNull Collection<PreUploadResult> uploadResults,
@NonNull List<Media> nonUploadedMedia,
@NonNull String body,
@NonNull MessageSendType sendType,
boolean viewOnce,
@NonNull List<Mention> mentions,
@NonNull StoryType storyType)
{
this.recipientId = recipientId;
this.uploadResults = uploadResults;
this.nonUploadedMedia = nonUploadedMedia;
this.body = body;
this.sendType = sendType;
this.viewOnce = viewOnce;
this.mentions = mentions;
this.storyType = storyType;
}
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();
this.sendType = in.readParcelable(MessageSendType.class.getClassLoader());
this.viewOnce = ParcelUtil.readBoolean(in);
this.mentions = ParcelUtil.readParcelableCollection(in, Mention.class);
this.storyType = StoryType.fromCode(in.readInt());
}
public @NonNull RecipientId getRecipientId() {
return recipientId;
}
public boolean isPushPreUpload() {
return uploadResults.size() > 0;
}
public @NonNull Collection<PreUploadResult> getPreUploadResults() {
return uploadResults;
}
public @NonNull Collection<Media> getNonUploadedMedia() {
return nonUploadedMedia;
}
public @NonNull String getBody() {
return body;
}
public @NonNull MessageSendType getMessageSendType() {
return sendType;
}
public boolean isViewOnce() {
return viewOnce;
}
public @NonNull Collection<Mention> getMentions() {
return mentions;
}
public @NonNull StoryType getStoryType() {
return storyType;
}
public static final Creator<MediaSendActivityResult> CREATOR = new Creator<MediaSendActivityResult>() {
@Override
public MediaSendActivityResult createFromParcel(Parcel in) {
return new MediaSendActivityResult(in);
}
@Override
public MediaSendActivityResult[] newArray(int size) {
return new MediaSendActivityResult[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(recipientId, 0);
ParcelUtil.writeParcelableCollection(dest, uploadResults);
ParcelUtil.writeParcelableCollection(dest, nonUploadedMedia);
dest.writeString(body);
dest.writeParcelable(sendType, 0);
ParcelUtil.writeBoolean(dest, viewOnce);
ParcelUtil.writeParcelableCollection(dest, mentions);
dest.writeInt(storyType.getCode());
}
}

Wyświetl plik

@ -0,0 +1,42 @@
package org.thoughtcrime.securesms.mediasend
import android.content.Intent
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import org.thoughtcrime.securesms.conversation.MessageSendType
import org.thoughtcrime.securesms.database.model.Mention
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult
/**
* A class that lets us nicely format data that we'll send back to [ConversationActivity].
*/
@Parcelize
class MediaSendActivityResult(
val recipientId: RecipientId,
val preUploadResults: List<PreUploadResult> = emptyList(),
val nonUploadedMedia: List<Media> = emptyList(),
val body: String,
val messageSendType: MessageSendType,
val isViewOnce: Boolean,
val mentions: List<Mention>,
val storyType: StoryType
) : Parcelable {
val isPushPreUpload: Boolean
get() = preUploadResults.isNotEmpty()
init {
require((preUploadResults.isNotEmpty() && nonUploadedMedia.isEmpty()) || (preUploadResults.isEmpty() && nonUploadedMedia.isNotEmpty()))
}
companion object {
const val EXTRA_RESULT = "result"
@JvmStatic
fun fromData(data: Intent): MediaSendActivityResult {
return data.getParcelableExtra(EXTRA_RESULT) ?: throw IllegalArgumentException()
}
}
}

Wyświetl plik

@ -111,7 +111,17 @@ class MediaSelectionRepository(context: Context) {
if (isSms || MessageSender.isLocalSelfSend(context, singleRecipient, MessageSender.SendType.SIGNAL)) {
Log.i(TAG, "SMS or local self-send. Skipping pre-upload.")
emitter.onSuccess(MediaSendActivityResult.forTraditionalSend(singleRecipient!!.id, updatedMedia, trimmedBody, sendType, isViewOnce, trimmedMentions, StoryType.NONE))
emitter.onSuccess(
MediaSendActivityResult(
recipientId = singleRecipient!!.id,
nonUploadedMedia = updatedMedia,
body = trimmedBody,
messageSendType = sendType,
isViewOnce = isViewOnce,
mentions = trimmedMentions,
storyType = StoryType.NONE
)
)
} else {
val splitMessage = MessageUtil.getSplitMessage(context, trimmedBody, sendType.calculateCharacters(trimmedBody).maxPrimaryMessageSize)
val splitBody = splitMessage.body
@ -148,10 +158,30 @@ class MediaSelectionRepository(context: Context) {
uploadRepository.deleteAbandonedAttachments()
emitter.onComplete()
} else if (uploadResults.isNotEmpty()) {
emitter.onSuccess(MediaSendActivityResult.forPreUpload(singleRecipient!!.id, uploadResults, splitBody, sendType, isViewOnce, trimmedMentions, storyType))
emitter.onSuccess(
MediaSendActivityResult(
recipientId = singleRecipient!!.id,
preUploadResults = uploadResults.toList(),
body = splitBody,
messageSendType = sendType,
isViewOnce = isViewOnce,
mentions = trimmedMentions,
storyType = storyType
)
)
} else {
Log.w(TAG, "Got empty upload results! isSms: $isSms, updatedMedia.size(): ${updatedMedia.size}, isViewOnce: $isViewOnce, target: $singleContact")
emitter.onSuccess(MediaSendActivityResult.forTraditionalSend(singleRecipient!!.id, updatedMedia, trimmedBody, sendType, isViewOnce, trimmedMentions, storyType))
emitter.onSuccess(
MediaSendActivityResult(
recipientId = singleRecipient!!.id,
nonUploadedMedia = updatedMedia,
body = trimmedBody,
messageSendType = sendType,
isViewOnce = isViewOnce,
mentions = trimmedMentions,
storyType = storyType
)
)
}
}
}