mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 18:00:02 +01:00
Convert Media to kotlin.
This commit is contained in:
committed by
Greyson Parrelli
parent
c5397bc7d2
commit
169d0fa964
@@ -99,10 +99,10 @@ public class AvatarSelectionActivity extends AppCompatActivity implements Camera
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
Optional.of(Media.ALL_MEDIA_BUCKET_ID),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty()));
|
||||
Media.ALL_MEDIA_BUCKET_ID,
|
||||
null,
|
||||
null,
|
||||
null));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
public final class ImageEditorModelRenderMediaTransform implements MediaTransform {
|
||||
|
||||
@@ -50,7 +49,7 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor
|
||||
.withMimeType(MediaUtil.IMAGE_JPEG)
|
||||
.createForSingleSessionOnDisk(context);
|
||||
|
||||
return new Media(uri, MediaUtil.IMAGE_JPEG, media.getDate(), bitmap.getWidth(), bitmap.getHeight(), outputStream.size(), 0, false, false, media.getBucketId(), media.getCaption(), Optional.empty(), Optional.empty());
|
||||
return new Media(uri, MediaUtil.IMAGE_JPEG, media.getDate(), bitmap.getWidth(), bitmap.getHeight(), outputStream.size(), 0, false, false, media.getBucketId(), media.getCaption(), null, null);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to render image. Using base image.");
|
||||
return media;
|
||||
|
||||
@@ -1,232 +0,0 @@
|
||||
package org.thoughtcrime.securesms.mediasend;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.whispersystems.signalservice.api.util.Preconditions;
|
||||
import org.whispersystems.signalservice.internal.util.JsonUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Represents a piece of media that the user has on their device.
|
||||
*/
|
||||
public class Media implements Parcelable {
|
||||
|
||||
public static final String ALL_MEDIA_BUCKET_ID = "org.thoughtcrime.securesms.ALL_MEDIA";
|
||||
|
||||
private final Uri uri;
|
||||
private final String contentType;
|
||||
private final long date;
|
||||
private final int width;
|
||||
private final int height;
|
||||
private final long size;
|
||||
private final long duration;
|
||||
private final boolean borderless;
|
||||
private final boolean videoGif;
|
||||
|
||||
private Optional<String> bucketId;
|
||||
private Optional<String> caption;
|
||||
private Optional<AttachmentTable.TransformProperties> transformProperties;
|
||||
private Optional<String> fileName;
|
||||
|
||||
public Media(@NonNull Uri uri,
|
||||
@Nullable String contentType,
|
||||
long date,
|
||||
int width,
|
||||
int height,
|
||||
long size,
|
||||
long duration,
|
||||
boolean borderless,
|
||||
boolean videoGif,
|
||||
Optional<String> bucketId,
|
||||
Optional<String> caption,
|
||||
Optional<AttachmentTable.TransformProperties> transformProperties,
|
||||
Optional<String> fileName)
|
||||
{
|
||||
this.uri = uri;
|
||||
this.contentType = contentType;
|
||||
this.date = date;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.size = size;
|
||||
this.duration = duration;
|
||||
this.borderless = borderless;
|
||||
this.videoGif = videoGif;
|
||||
this.bucketId = bucketId;
|
||||
this.caption = caption;
|
||||
this.transformProperties = transformProperties;
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
protected Media(Parcel in) {
|
||||
uri = in.readParcelable(Uri.class.getClassLoader());
|
||||
contentType = in.readString();
|
||||
date = in.readLong();
|
||||
width = in.readInt();
|
||||
height = in.readInt();
|
||||
size = in.readLong();
|
||||
duration = in.readLong();
|
||||
borderless = in.readInt() == 1;
|
||||
videoGif = in.readInt() == 1;
|
||||
bucketId = Optional.ofNullable(in.readString());
|
||||
caption = Optional.ofNullable(in.readString());
|
||||
try {
|
||||
String json = in.readString();
|
||||
transformProperties = json == null ? Optional.empty() : Optional.ofNullable(JsonUtil.fromJson(json, AttachmentTable.TransformProperties.class));
|
||||
} catch (IOException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
fileName = Optional.ofNullable(in.readString());
|
||||
}
|
||||
|
||||
public Uri getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public String getContentType() {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
public long getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public long getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public boolean isBorderless() {
|
||||
return borderless;
|
||||
}
|
||||
|
||||
public boolean isVideoGif() {
|
||||
return videoGif;
|
||||
}
|
||||
|
||||
public Optional<String> getBucketId() {
|
||||
return bucketId;
|
||||
}
|
||||
|
||||
public Optional<String> getCaption() {
|
||||
return caption;
|
||||
}
|
||||
|
||||
public void setCaption(String caption) {
|
||||
this.caption = Optional.ofNullable(caption);
|
||||
}
|
||||
|
||||
public Optional<String> getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void setFileName(String name) {
|
||||
this.fileName = Optional.ofNullable(name);
|
||||
}
|
||||
|
||||
public Optional<AttachmentTable.TransformProperties> getTransformProperties() {
|
||||
return transformProperties;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeParcelable(uri, flags);
|
||||
dest.writeString(contentType);
|
||||
dest.writeLong(date);
|
||||
dest.writeInt(width);
|
||||
dest.writeInt(height);
|
||||
dest.writeLong(size);
|
||||
dest.writeLong(duration);
|
||||
dest.writeInt(borderless ? 1 : 0);
|
||||
dest.writeInt(videoGif ? 1 : 0);
|
||||
dest.writeString(bucketId.orElse(null));
|
||||
dest.writeString(caption.orElse(null));
|
||||
dest.writeString(transformProperties.map(JsonUtil::toJson).orElse(null));
|
||||
dest.writeString(fileName.orElse(null));
|
||||
}
|
||||
|
||||
public static final Creator<Media> CREATOR = new Creator<Media>() {
|
||||
@Override
|
||||
public Media createFromParcel(Parcel in) {
|
||||
return new Media(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Media[] newArray(int size) {
|
||||
return new Media[size];
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Media media = (Media) o;
|
||||
|
||||
return uri.equals(media.uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return uri.hashCode();
|
||||
}
|
||||
|
||||
public static @NonNull Media withMimeType(@NonNull Media media, @NonNull String newMimeType) {
|
||||
return new Media(media.getUri(),
|
||||
newMimeType,
|
||||
media.getDate(),
|
||||
media.getWidth(),
|
||||
media.getHeight(),
|
||||
media.getSize(),
|
||||
media.getDuration(),
|
||||
media.isBorderless(),
|
||||
media.isVideoGif(),
|
||||
media.getBucketId(),
|
||||
media.getCaption(),
|
||||
media.getTransformProperties(),
|
||||
media.getFileName());
|
||||
}
|
||||
|
||||
public static @NonNull Media stripTransform(@NonNull Media media) {
|
||||
Preconditions.checkArgument(MediaUtil.isImageType(media.contentType));
|
||||
|
||||
return new Media(media.getUri(),
|
||||
media.getContentType(),
|
||||
media.getDate(),
|
||||
media.getWidth(),
|
||||
media.getHeight(),
|
||||
media.getSize(),
|
||||
media.getDuration(),
|
||||
media.isBorderless(),
|
||||
media.isVideoGif(),
|
||||
media.getBucketId(),
|
||||
media.getCaption(),
|
||||
Optional.empty(),
|
||||
media.getFileName());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.thoughtcrime.securesms.mediasend
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties
|
||||
import org.thoughtcrime.securesms.serialization.UriSerializer
|
||||
|
||||
/**
|
||||
* Represents a piece of media that the user has on their device.
|
||||
*/
|
||||
@Serializable
|
||||
@Parcelize
|
||||
data class Media(
|
||||
@Serializable(with = UriSerializer::class) val uri: Uri,
|
||||
val contentType: String?,
|
||||
val date: Long,
|
||||
val width: Int,
|
||||
val height: Int,
|
||||
val size: Long,
|
||||
val duration: Long,
|
||||
@get:JvmName("isBorderless") val isBorderless: Boolean,
|
||||
@get:JvmName("isVideoGif") val isVideoGif: Boolean,
|
||||
val bucketId: String?,
|
||||
val caption: String?,
|
||||
val transformProperties: TransformProperties?,
|
||||
val fileName: String?
|
||||
) : Parcelable {
|
||||
companion object {
|
||||
const val ALL_MEDIA_BUCKET_ID: String = "org.thoughtcrime.securesms.ALL_MEDIA"
|
||||
}
|
||||
|
||||
fun withMimeType(newMimeType: String) = copy(contentType = newMimeType)
|
||||
}
|
||||
@@ -277,7 +277,7 @@ public class MediaRepository {
|
||||
long size = cursor.getLong(cursor.getColumnIndexOrThrow(Images.Media.SIZE));
|
||||
long duration = !isImage ? cursor.getInt(cursor.getColumnIndexOrThrow(Video.Media.DURATION)) : 0;
|
||||
|
||||
media.add(fixMimeType(context, new Media(uri, mimetype, date, width, height, size, duration, false, false, Optional.of(bucketId), Optional.empty(), Optional.of(AttachmentTable.TransformProperties.forSentMediaQuality(SignalStore.settings().getSentMediaQuality().getCode())), Optional.empty())));
|
||||
media.add(fixMimeType(context, new Media(uri, mimetype, date, width, height, size, duration, false, false, bucketId, null, AttachmentTable.TransformProperties.forSentMediaQuality(SignalStore.settings().getSentMediaQuality().getCode()), null)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ public class MediaRepository {
|
||||
height = dimens.second;
|
||||
}
|
||||
|
||||
return new Media(media.getUri(), media.getContentType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.empty(), Optional.empty());
|
||||
return new Media(media.getUri(), media.getContentType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), null, null);
|
||||
}
|
||||
|
||||
private Media getContentResolverPopulatedMedia(@NonNull Context context, @NonNull Media media) throws IOException {
|
||||
@@ -394,7 +394,7 @@ public class MediaRepository {
|
||||
height = dimens.second;
|
||||
}
|
||||
|
||||
return new Media(media.getUri(), media.getContentType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.empty(), Optional.empty());
|
||||
return new Media(media.getUri(), media.getContentType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), null, null);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -404,11 +404,11 @@ public class MediaRepository {
|
||||
String newMimeType = MediaUtil.getMimeType(context, media.getUri());
|
||||
if (newMimeType != null && !newMimeType.equals(media.getContentType())) {
|
||||
Log.d(TAG, "Changing mime type to '" + newMimeType + "'");
|
||||
return Media.withMimeType(media, newMimeType);
|
||||
return media.withMimeType(newMimeType);
|
||||
} else if (media.getSize() > 0 && media.getWidth() > 0 && media.getHeight() > 0) {
|
||||
boolean likelyVideo = media.getDuration() > 0;
|
||||
Log.d(TAG, "Assuming content is " + (likelyVideo ? "a video" : "an image") + ", setting mimetype");
|
||||
return Media.withMimeType(media, likelyVideo ? MediaUtil.VIDEO_UNSPECIFIED : MediaUtil.IMAGE_JPEG);
|
||||
return media.withMimeType(likelyVideo ? MediaUtil.VIDEO_UNSPECIFIED : MediaUtil.IMAGE_JPEG);
|
||||
} else {
|
||||
Log.d(TAG, "Unable to fix mimetype");
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ class MediaSendDocumentFragment : Fragment(R.layout.mediasend_document_fragment)
|
||||
|
||||
val fileInfo: Pair<String?, Long>? = getFileInfo()
|
||||
if (fileInfo != null) {
|
||||
media.setFileName(fileInfo.first)
|
||||
name.text = fileInfo.first ?: getString(R.string.DocumentView_unnamed_file)
|
||||
size.text = fileInfo.second.bytes.toUnitString()
|
||||
|
||||
@@ -126,7 +125,6 @@ class MediaSendDocumentFragment : Fragment(R.layout.mediasend_document_fragment)
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
val fileName = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
|
||||
val fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE))
|
||||
media.setFileName(fileName)
|
||||
|
||||
return Pair(fileName, fileSize)
|
||||
}
|
||||
|
||||
@@ -97,8 +97,8 @@ public class MediaUploadRepository {
|
||||
}
|
||||
|
||||
private boolean hasSameTransformProperties(@NonNull Media oldMedia, @NonNull Media newMedia) {
|
||||
TransformProperties oldProperties = oldMedia.getTransformProperties().orElse(null);
|
||||
TransformProperties newProperties = newMedia.getTransformProperties().orElse(null);
|
||||
TransformProperties oldProperties = oldMedia.getTransformProperties();
|
||||
TransformProperties newProperties = newMedia.getTransformProperties();
|
||||
|
||||
if (oldProperties == null || newProperties == null) {
|
||||
return oldProperties == newProperties;
|
||||
@@ -181,9 +181,9 @@ public class MediaUploadRepository {
|
||||
PreUploadResult result = uploadResults.get(updated);
|
||||
|
||||
if (result != null) {
|
||||
db.updateAttachmentCaption(result.getAttachmentId(), updated.getCaption().orElse(null));
|
||||
db.updateAttachmentCaption(result.getAttachmentId(), updated.getCaption());
|
||||
} else {
|
||||
Log.w(TAG,"When updating captions, no pre-upload result could be found for media with URI: " + updated.getUri());
|
||||
Log.w(TAG, "When updating captions, no pre-upload result could be found for media with URI: " + updated.getUri());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,11 +215,11 @@ public class MediaUploadRepository {
|
||||
|
||||
public static @NonNull Attachment asAttachment(@NonNull Context context, @NonNull Media media) {
|
||||
if (MediaUtil.isVideoType(media.getContentType())) {
|
||||
return new VideoSlide(context, media.getUri(), media.getSize(), media.isVideoGif(), media.getWidth(), media.getHeight(), media.getCaption().orElse(null), media.getTransformProperties().orElse(null)).asAttachment();
|
||||
return new VideoSlide(context, media.getUri(), media.getSize(), media.isVideoGif(), media.getWidth(), media.getHeight(), media.getCaption(), media.getTransformProperties()).asAttachment();
|
||||
} else if (MediaUtil.isGif(media.getContentType())) {
|
||||
return new GifSlide(context, media.getUri(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orElse(null)).asAttachment();
|
||||
return new GifSlide(context, media.getUri(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption()).asAttachment();
|
||||
} else if (MediaUtil.isImageType(media.getContentType())) {
|
||||
return new ImageSlide(context, media.getUri(), media.getContentType(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orElse(null), null, media.getTransformProperties().orElse(null)).asAttachment();
|
||||
return new ImageSlide(context, media.getUri(), media.getContentType(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption(), null, media.getTransformProperties()).asAttachment();
|
||||
} else if (MediaUtil.isTextType(media.getContentType())) {
|
||||
return new TextSlide(context, media.getUri(), null, media.getSize()).asAttachment();
|
||||
} else {
|
||||
|
||||
@@ -37,7 +37,7 @@ public final class SentMediaQualityTransform implements MediaTransform {
|
||||
media.isVideoGif(),
|
||||
media.getBucketId(),
|
||||
media.getCaption(),
|
||||
Optional.of(AttachmentTable.TransformProperties.forSentMediaQuality(media.getTransformProperties(), sentMediaQuality)),
|
||||
AttachmentTable.TransformProperties.forSentMediaQuality(Optional.ofNullable(media.getTransformProperties()), sentMediaQuality),
|
||||
media.getFileName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,25 +5,24 @@ import androidx.annotation.WorkerThread
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties
|
||||
import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData
|
||||
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
||||
import java.util.Optional
|
||||
|
||||
class VideoTrimTransform(private val data: VideoTrimData) : MediaTransform {
|
||||
@WorkerThread
|
||||
override fun transform(context: Context, media: Media): Media {
|
||||
return Media(
|
||||
media.uri,
|
||||
media.contentType,
|
||||
media.date,
|
||||
media.width,
|
||||
media.height,
|
||||
media.size,
|
||||
media.duration,
|
||||
media.isBorderless,
|
||||
media.isVideoGif,
|
||||
media.bucketId,
|
||||
media.caption,
|
||||
Optional.of(TransformProperties(false, data.isDurationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.code, false)),
|
||||
media.fileName
|
||||
uri = media.uri,
|
||||
contentType = media.contentType,
|
||||
date = media.date,
|
||||
width = media.width,
|
||||
height = media.height,
|
||||
size = media.size,
|
||||
duration = media.duration,
|
||||
isBorderless = media.isBorderless,
|
||||
isVideoGif = media.isVideoGif,
|
||||
bucketId = media.bucketId,
|
||||
caption = media.caption,
|
||||
transformProperties = TransformProperties(false, data.isDurationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.code, false),
|
||||
fileName = media.fileName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.thoughtcrime.securesms.mediasend.v2
|
||||
|
||||
import android.net.Uri
|
||||
import org.signal.core.util.orNull
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable
|
||||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import java.util.Optional
|
||||
@@ -20,5 +21,5 @@ object MediaBuilder {
|
||||
caption: Optional<String> = Optional.empty(),
|
||||
transformProperties: Optional<AttachmentTable.TransformProperties> = Optional.empty(),
|
||||
fileName: Optional<String> = Optional.empty()
|
||||
) = Media(uri, mimeType, date, width, height, size, duration, borderless, videoGif, bucketId, caption, transformProperties, fileName)
|
||||
) = Media(uri, mimeType, date, width, height, size, duration, borderless, videoGif, bucketId.orNull(), caption.orNull(), transformProperties.orNull(), fileName.orNull())
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
|
||||
for (media in updatedMedia) {
|
||||
val uri: Uri = media.uri
|
||||
val transformProperties: Boolean? = media.transformProperties.map { it.videoTrim }.orElse(null)
|
||||
val transformProperties: Boolean? = media.transformProperties?.videoTrim
|
||||
Log.w(TAG, "$uri : trimmed=$transformProperties")
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
|
||||
fun deleteBlobs(media: List<Media>) {
|
||||
media
|
||||
.map(Media::getUri)
|
||||
.map(Media::uri)
|
||||
.filter(BlobProvider::isAuthority)
|
||||
.forEach { BlobProvider.getInstance().delete(context, it) }
|
||||
}
|
||||
@@ -297,11 +297,11 @@ class MediaSelectionRepository(context: Context) {
|
||||
|
||||
for (mediaItem in nonUploadedMedia) {
|
||||
if (MediaUtil.isVideoType(mediaItem.contentType)) {
|
||||
slideDeck.addSlide(VideoSlide(context, mediaItem.uri, mediaItem.size, mediaItem.isVideoGif, mediaItem.width, mediaItem.height, mediaItem.caption.orElse(null), mediaItem.transformProperties.orElse(null)))
|
||||
slideDeck.addSlide(VideoSlide(context, mediaItem.uri, mediaItem.size, mediaItem.isVideoGif, mediaItem.width, mediaItem.height, mediaItem.caption, mediaItem.transformProperties))
|
||||
} else if (MediaUtil.isGif(mediaItem.contentType)) {
|
||||
slideDeck.addSlide(GifSlide(context, mediaItem.uri, mediaItem.size, mediaItem.width, mediaItem.height, mediaItem.isBorderless, mediaItem.caption.orElse(null)))
|
||||
slideDeck.addSlide(GifSlide(context, mediaItem.uri, mediaItem.size, mediaItem.width, mediaItem.height, mediaItem.isBorderless, mediaItem.caption))
|
||||
} else if (MediaUtil.isImageType(mediaItem.contentType)) {
|
||||
slideDeck.addSlide(ImageSlide(context, mediaItem.uri, mediaItem.contentType, mediaItem.size, mediaItem.width, mediaItem.height, mediaItem.isBorderless, mediaItem.caption.orElse(null), null, mediaItem.transformProperties.orElse(null)))
|
||||
slideDeck.addSlide(ImageSlide(context, mediaItem.uri, mediaItem.contentType, mediaItem.size, mediaItem.width, mediaItem.height, mediaItem.isBorderless, mediaItem.caption, null, mediaItem.transformProperties))
|
||||
} else {
|
||||
Log.w(TAG, "Asked to send an unexpected mimeType: '" + mediaItem.contentType + "'. Skipping.")
|
||||
}
|
||||
@@ -443,7 +443,7 @@ class MediaSelectionRepository(context: Context) {
|
||||
}
|
||||
|
||||
private fun Media.asKey(): MediaKey {
|
||||
return MediaKey(this, this.transformProperties)
|
||||
return MediaKey(this, Optional.ofNullable(this.transformProperties))
|
||||
}
|
||||
|
||||
data class MediaKey(val media: Media, val mediaTransform: Optional<TransformProperties>)
|
||||
|
||||
@@ -30,8 +30,8 @@ object MediaValidator {
|
||||
|
||||
val truncatedMedia = filteredMedia.take(maxSelection)
|
||||
val bucketId = if (truncatedMedia.isNotEmpty()) {
|
||||
truncatedMedia.drop(1).fold(truncatedMedia.first().bucketId.orElse(Media.ALL_MEDIA_BUCKET_ID)) { acc, m ->
|
||||
if (Util.equals(acc, m.bucketId.orElse(Media.ALL_MEDIA_BUCKET_ID))) {
|
||||
truncatedMedia.drop(1).fold(truncatedMedia.first().bucketId ?: Media.ALL_MEDIA_BUCKET_ID) { acc, m ->
|
||||
if (Util.equals(acc, m.bucketId ?: Media.ALL_MEDIA_BUCKET_ID)) {
|
||||
acc
|
||||
} else {
|
||||
Media.ALL_MEDIA_BUCKET_ID
|
||||
@@ -51,9 +51,9 @@ object MediaValidator {
|
||||
@WorkerThread
|
||||
private fun filterForValidMedia(context: Context, media: List<Media>, mediaConstraints: MediaConstraints, isStory: Boolean): List<Media> {
|
||||
return media
|
||||
.filter { m -> isSupportedMediaType(m.contentType) }
|
||||
.filter { m -> isSupportedMediaType(m.contentType!!) }
|
||||
.filter { m ->
|
||||
MediaUtil.isImageAndNotGif(m.contentType) || isValidGif(context, m, mediaConstraints) || isValidVideo(context, m, mediaConstraints) || isValidDocument(context, m, mediaConstraints)
|
||||
MediaUtil.isImageAndNotGif(m.contentType!!) || isValidGif(context, m, mediaConstraints) || isValidVideo(context, m, mediaConstraints) || isValidDocument(context, m, mediaConstraints)
|
||||
}
|
||||
.filter { m ->
|
||||
!isStory || Stories.MediaTransform.getSendRequirements(m) != Stories.MediaTransform.SendRequirements.CAN_NOT_SEND
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.io.FileDescriptor
|
||||
import java.io.FileInputStream
|
||||
import java.io.IOException
|
||||
import java.util.LinkedList
|
||||
import java.util.Optional
|
||||
|
||||
private val TAG = Log.tag(MediaCaptureRepository::class.java)
|
||||
|
||||
@@ -95,19 +94,19 @@ class MediaCaptureRepository(context: Context) {
|
||||
.createForSingleSessionOnDisk(context)
|
||||
|
||||
Media(
|
||||
uri,
|
||||
mimeType,
|
||||
System.currentTimeMillis(),
|
||||
width,
|
||||
height,
|
||||
length,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
Optional.of(Media.ALL_MEDIA_BUCKET_ID),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty()
|
||||
uri = uri,
|
||||
contentType = mimeType,
|
||||
date = System.currentTimeMillis(),
|
||||
width = width,
|
||||
height = height,
|
||||
size = length,
|
||||
duration = 0,
|
||||
isBorderless = false,
|
||||
isVideoGif = false,
|
||||
bucketId = Media.ALL_MEDIA_BUCKET_ID,
|
||||
caption = null,
|
||||
transformProperties = null,
|
||||
fileName = null
|
||||
)
|
||||
} catch (e: IOException) {
|
||||
return null
|
||||
@@ -150,19 +149,19 @@ class MediaCaptureRepository(context: Context) {
|
||||
MediaRepository.fixMimeType(
|
||||
context,
|
||||
Media(
|
||||
uri,
|
||||
mimetype,
|
||||
date,
|
||||
width,
|
||||
height,
|
||||
size,
|
||||
duration,
|
||||
false,
|
||||
false,
|
||||
Optional.of(bucketId),
|
||||
Optional.empty(),
|
||||
Optional.empty(),
|
||||
Optional.empty()
|
||||
uri = uri,
|
||||
contentType = mimetype,
|
||||
date = date,
|
||||
width = width,
|
||||
height = height,
|
||||
size = size,
|
||||
duration = duration,
|
||||
isBorderless = false,
|
||||
isVideoGif = false,
|
||||
bucketId = bucketId,
|
||||
caption = null,
|
||||
transformProperties = null,
|
||||
fileName = null
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user