Make adding properties to media send result easier.
This commit is contained in:
parent
40f9a25b87
commit
1d2fbf0ebf
3 changed files with 75 additions and 168 deletions
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -111,7 +111,17 @@ class MediaSelectionRepository(context: Context) {
|
||||||
|
|
||||||
if (isSms || MessageSender.isLocalSelfSend(context, singleRecipient, MessageSender.SendType.SIGNAL)) {
|
if (isSms || MessageSender.isLocalSelfSend(context, singleRecipient, MessageSender.SendType.SIGNAL)) {
|
||||||
Log.i(TAG, "SMS or local self-send. Skipping pre-upload.")
|
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 {
|
} else {
|
||||||
val splitMessage = MessageUtil.getSplitMessage(context, trimmedBody, sendType.calculateCharacters(trimmedBody).maxPrimaryMessageSize)
|
val splitMessage = MessageUtil.getSplitMessage(context, trimmedBody, sendType.calculateCharacters(trimmedBody).maxPrimaryMessageSize)
|
||||||
val splitBody = splitMessage.body
|
val splitBody = splitMessage.body
|
||||||
|
@ -148,10 +158,30 @@ class MediaSelectionRepository(context: Context) {
|
||||||
uploadRepository.deleteAbandonedAttachments()
|
uploadRepository.deleteAbandonedAttachments()
|
||||||
emitter.onComplete()
|
emitter.onComplete()
|
||||||
} else if (uploadResults.isNotEmpty()) {
|
} 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 {
|
} else {
|
||||||
Log.w(TAG, "Got empty upload results! isSms: $isSms, updatedMedia.size(): ${updatedMedia.size}, isViewOnce: $isViewOnce, target: $singleContact")
|
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
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue