Add photo media quality selector when sending images.

This commit is contained in:
Cody Henthorne
2021-05-07 14:03:53 -04:00
committed by Greyson Parrelli
parent 8c9df8d3be
commit dd934e0095
43 changed files with 630 additions and 55 deletions

View File

@@ -28,6 +28,8 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.blurhash.BlurHash;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties;
import org.thoughtcrime.securesms.util.MediaUtil;
public class ImageSlide extends Slide {
@@ -47,7 +49,11 @@ public class ImageSlide extends Slide {
}
public ImageSlide(Context context, Uri uri, String contentType, long size, int width, int height, boolean borderless, @Nullable String caption, @Nullable BlurHash blurHash) {
super(context, constructAttachmentFromUri(context, uri, contentType, size, width, height, true, null, caption, null, blurHash, null, false, borderless, false, false));
this(context, uri, contentType, size, width, height, borderless, caption, blurHash, null);
}
public ImageSlide(Context context, Uri uri, String contentType, long size, int width, int height, boolean borderless, @Nullable String caption, @Nullable BlurHash blurHash, @Nullable TransformProperties transformProperties) {
super(context, constructAttachmentFromUri(context, uri, contentType, size, width, height, true, null, caption, null, blurHash, null, false, borderless, false, false, transformProperties));
this.borderless = borderless;
}

View File

@@ -7,6 +7,7 @@ import android.util.Pair;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.attachments.Attachment;
@@ -23,7 +24,11 @@ public abstract class MediaConstraints {
private static final String TAG = Log.tag(MediaConstraints.class);
public static MediaConstraints getPushMediaConstraints() {
return new PushMediaConstraints();
return getPushMediaConstraints(null);
}
public static MediaConstraints getPushMediaConstraints(@Nullable SentMediaQuality sentMediaQuality) {
return new PushMediaConstraints(sentMediaQuality);
}
public static MediaConstraints getMmsMediaConstraints(int subscriptionId) {

View File

@@ -14,13 +14,13 @@ import java.util.Arrays;
public class PushMediaConstraints extends MediaConstraints {
private static final int KB = 1024;
private static final int MB = 1024 * KB;
private static final int KB = 1024;
private static final int MB = 1024 * KB;
private final MediaConfig currentConfig;
public PushMediaConstraints() {
currentConfig = getCurrentConfig(ApplicationDependencies.getApplication());
public PushMediaConstraints(@Nullable SentMediaQuality sentMediaQuality) {
currentConfig = getCurrentConfig(ApplicationDependencies.getApplication(), sentMediaQuality);
}
@Override
@@ -80,11 +80,14 @@ public class PushMediaConstraints extends MediaConstraints {
return currentConfig.qualitySetting;
}
private static @NonNull MediaConfig getCurrentConfig(@NonNull Context context) {
private static @NonNull MediaConfig getCurrentConfig(@NonNull Context context, @Nullable SentMediaQuality sentMediaQuality) {
if (Util.isLowMemory(context)) {
return MediaConfig.LEVEL_1_LOW_MEMORY;
}
if (sentMediaQuality == SentMediaQuality.HIGH) {
return MediaConfig.LEVEL_3;
}
return LocaleFeatureFlags.getMediaQualityLevel().orElse(MediaConfig.getDefault(context));
}
@@ -93,7 +96,7 @@ public class PushMediaConstraints extends MediaConstraints {
LEVEL_1(false, 1, MB, new int[] { 1600, 1024, 768, 512 }, 70),
LEVEL_2(false, 2, (int) (1.5 * MB), new int[] { 2048, 1600, 1024, 768, 512 }, 75),
LEVEL_3(false, 3, (int) (2.5 * MB), new int[] { 3072, 2048, 1600, 1024, 768, 512 }, 80);
LEVEL_3(false, 3, (int) (3 * MB), new int[] { 4096, 3072, 2048, 1600, 1024, 768, 512 }, 75);
private final boolean isLowMemory;
private final int level;

View File

@@ -0,0 +1,29 @@
package org.thoughtcrime.securesms.mms;
import androidx.annotation.NonNull;
/**
* Quality levels to send media at.
*/
public enum SentMediaQuality {
STANDARD(0),
HIGH(1);
private final int code;
SentMediaQuality(int code) {
this.code = code;
}
public static @NonNull SentMediaQuality fromCode(int code) {
if (HIGH.code == code) {
return HIGH;
}
return STANDARD;
}
public int getCode() {
return code;
}
}