package org.thoughtcrime.securesms.mediasend import android.content.Intent import android.os.Parcel import android.os.Parcelable import kotlinx.parcelize.Parceler import kotlinx.parcelize.Parcelize import kotlinx.parcelize.TypeParceler import org.signal.core.util.getParcelableExtraCompat import org.thoughtcrime.securesms.conversation.MessageSendType import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult import org.thoughtcrime.securesms.util.ParcelUtil /** * A class that lets us nicely format data that we'll send back to [ConversationActivity]. */ @Parcelize class MediaSendActivityResult( val recipientId: RecipientId, val preUploadResults: List = emptyList(), val nonUploadedMedia: List = emptyList(), val body: String, val messageSendType: MessageSendType, val isViewOnce: Boolean, val mentions: List, @TypeParceler() val bodyRanges: BodyRangeList?, val storyType: StoryType, val scheduledTime: Long = -1 ) : 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.getParcelableExtraCompat(EXTRA_RESULT, MediaSendActivityResult::class.java) ?: throw IllegalArgumentException() } } } object BodyRangeListParceler : Parceler { override fun create(parcel: Parcel): BodyRangeList? { val data: ByteArray? = ParcelUtil.readByteArray(parcel) return if (data != null) { BodyRangeList.parseFrom(data) } else { null } } override fun BodyRangeList?.write(parcel: Parcel, flags: Int) { ParcelUtil.writeByteArray(parcel, this?.toByteArray()) } }