2022-09-30 13:42:06 +00:00
|
|
|
package org.thoughtcrime.securesms.mediapreview
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.net.Uri
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.Parcelable
|
|
|
|
import kotlinx.parcelize.Parcelize
|
2023-02-09 18:38:48 +00:00
|
|
|
import org.signal.core.util.dp
|
2023-02-26 18:45:24 +00:00
|
|
|
import org.signal.core.util.getParcelableCompat
|
2022-10-31 13:23:11 +00:00
|
|
|
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
|
2022-11-29 15:47:12 +00:00
|
|
|
import org.thoughtcrime.securesms.database.MediaTable
|
|
|
|
import org.thoughtcrime.securesms.database.MediaTable.MediaRecord
|
2022-09-30 13:42:06 +00:00
|
|
|
|
|
|
|
object MediaIntentFactory {
|
|
|
|
private const val ARGS_KEY = "args"
|
|
|
|
|
|
|
|
const val NOT_IN_A_THREAD = -2
|
|
|
|
const val UNKNOWN_TIMESTAMP = -2
|
2023-02-09 18:38:48 +00:00
|
|
|
|
|
|
|
@Parcelize
|
|
|
|
data class SharedElementArgs(
|
|
|
|
val width: Int = 1,
|
|
|
|
val height: Int = 1,
|
|
|
|
val topLeft: Float = 0f,
|
|
|
|
val topRight: Float = 0f,
|
|
|
|
val bottomRight: Float = 0f,
|
|
|
|
val bottomLeft: Float = 0f
|
|
|
|
) : Parcelable
|
2022-09-30 13:42:06 +00:00
|
|
|
|
|
|
|
@Parcelize
|
|
|
|
data class MediaPreviewArgs(
|
|
|
|
val threadId: Long,
|
|
|
|
val date: Long,
|
|
|
|
val initialMediaUri: Uri,
|
|
|
|
val initialMediaType: String,
|
|
|
|
val initialMediaSize: Long,
|
|
|
|
val initialCaption: String? = null,
|
|
|
|
val leftIsRecent: Boolean = false,
|
|
|
|
val hideAllMedia: Boolean = false,
|
2022-09-30 00:13:10 +00:00
|
|
|
val showThread: Boolean = false,
|
2022-10-12 20:53:39 +00:00
|
|
|
val allMediaInRail: Boolean = false,
|
2022-11-29 15:47:12 +00:00
|
|
|
val sorting: MediaTable.Sorting,
|
2023-02-09 18:38:48 +00:00
|
|
|
val isVideoGif: Boolean,
|
|
|
|
val sharedElementArgs: SharedElementArgs = SharedElementArgs()
|
2022-09-30 13:42:06 +00:00
|
|
|
) : Parcelable
|
|
|
|
|
|
|
|
@JvmStatic
|
2023-02-26 18:45:24 +00:00
|
|
|
fun requireArguments(bundle: Bundle): MediaPreviewArgs = bundle.getParcelableCompat(ARGS_KEY, MediaPreviewArgs::class.java)!!
|
2022-09-30 13:42:06 +00:00
|
|
|
|
|
|
|
@JvmStatic
|
|
|
|
fun create(context: Context, args: MediaPreviewArgs): Intent {
|
2022-10-18 19:59:52 +00:00
|
|
|
return Intent(context, MediaPreviewV2Activity::class.java).putExtra(ARGS_KEY, args)
|
2022-09-30 13:42:06 +00:00
|
|
|
}
|
2022-10-31 13:23:11 +00:00
|
|
|
|
|
|
|
fun intentFromMediaRecord(
|
|
|
|
context: Context,
|
|
|
|
mediaRecord: MediaRecord,
|
2022-11-14 22:28:36 +00:00
|
|
|
leftIsRecent: Boolean,
|
|
|
|
allMediaInRail: Boolean
|
2022-10-31 13:23:11 +00:00
|
|
|
): Intent {
|
|
|
|
val attachment: DatabaseAttachment = mediaRecord.attachment!!
|
|
|
|
return create(
|
|
|
|
context,
|
|
|
|
MediaPreviewArgs(
|
|
|
|
mediaRecord.threadId,
|
|
|
|
mediaRecord.date,
|
|
|
|
attachment.uri!!,
|
|
|
|
attachment.contentType,
|
|
|
|
attachment.size,
|
|
|
|
attachment.caption,
|
|
|
|
leftIsRecent,
|
2022-11-14 22:28:36 +00:00
|
|
|
allMediaInRail = allMediaInRail,
|
2022-11-29 15:47:12 +00:00
|
|
|
sorting = MediaTable.Sorting.Newest,
|
2023-02-09 18:38:48 +00:00
|
|
|
isVideoGif = attachment.isVideoGif,
|
|
|
|
sharedElementArgs = SharedElementArgs(
|
|
|
|
attachment.width,
|
|
|
|
attachment.height,
|
|
|
|
12.dp.toFloat(),
|
|
|
|
12.dp.toFloat(),
|
|
|
|
12.dp.toFloat(),
|
|
|
|
12.dp.toFloat()
|
|
|
|
)
|
2022-10-31 13:23:11 +00:00
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
2022-09-30 13:42:06 +00:00
|
|
|
}
|