diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java index 61ecece9c..51a455518 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java @@ -367,7 +367,6 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med revealButton.setOnClickListener(v -> viewModel.onRevealButtonToggled()); - qualityButton.setVisibility(Util.isLowMemory(this) ? View.GONE : View.VISIBLE); qualityButton.setOnClickListener(v -> QualitySelectorBottomSheetDialog.show(getSupportFragmentManager())); continueButton.setOnClickListener(v -> { @@ -785,6 +784,7 @@ public class MediaSendActivity extends PassphraseRequiredActivity implements Med } }); + viewModel.getShowMediaQualityToggle().observe(this, show -> qualityButton.setVisibility(show && !Util.isLowMemory(this) ? View.VISIBLE : View.GONE)); viewModel.getSentMediaQuality().observe(this, q -> qualityButton.setImageResource(q == SentMediaQuality.STANDARD ? R.drawable.ic_quality_standard_32 : R.drawable.ic_quality_high_32)); viewModel.getSelectedMedia().observe(this, media -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendViewModel.java index 542aadadd..2360e1053 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendViewModel.java @@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.util.MessageUtil; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.libsignal.util.guava.Preconditions; @@ -67,6 +68,7 @@ class MediaSendViewModel extends ViewModel { private final SingleLiveEvent error; private final SingleLiveEvent event; private final MutableLiveData sentMediaQuality; + private final LiveData showMediaQualityToggle; private final Map savedDrawState; private TransportOption transport; @@ -93,27 +95,28 @@ class MediaSendViewModel extends ViewModel { @NonNull MediaRepository repository, @NonNull MediaUploadRepository uploadRepository) { - this.application = application; - this.repository = repository; - this.uploadRepository = uploadRepository; - this.selectedMedia = new MutableLiveData<>(); - this.bucketMedia = new MutableLiveData<>(); - this.mostRecentMedia = new MutableLiveData<>(); - this.position = new MutableLiveData<>(); - this.bucketId = new MutableLiveData<>(); - this.folders = new MutableLiveData<>(); - this.hudState = new MutableLiveData<>(); - this.error = new SingleLiveEvent<>(); - this.event = new SingleLiveEvent<>(); - this.sentMediaQuality = new MutableLiveData<>(SentMediaQuality.STANDARD); - this.savedDrawState = new HashMap<>(); - this.lastCameraCapture = Optional.absent(); - this.body = ""; - this.buttonState = ButtonState.GONE; - this.railState = RailState.GONE; - this.viewOnceState = ViewOnceState.GONE; - this.page = Page.UNKNOWN; - this.preUploadEnabled = true; + this.application = application; + this.repository = repository; + this.uploadRepository = uploadRepository; + this.selectedMedia = new MutableLiveData<>(); + this.bucketMedia = new MutableLiveData<>(); + this.mostRecentMedia = new MutableLiveData<>(); + this.position = new MutableLiveData<>(); + this.bucketId = new MutableLiveData<>(); + this.folders = new MutableLiveData<>(); + this.hudState = new MutableLiveData<>(); + this.error = new SingleLiveEvent<>(); + this.event = new SingleLiveEvent<>(); + this.sentMediaQuality = new MutableLiveData<>(SentMediaQuality.STANDARD); + this.savedDrawState = new HashMap<>(); + this.lastCameraCapture = Optional.absent(); + this.body = ""; + this.buttonState = ButtonState.GONE; + this.railState = RailState.GONE; + this.viewOnceState = ViewOnceState.GONE; + this.page = Page.UNKNOWN; + this.preUploadEnabled = true; + this.showMediaQualityToggle = LiveDataUtil.mapAsync(this.selectedMedia, s -> s.stream().anyMatch(m -> MediaUtil.isImageAndNotGif(m.getMimeType()))); position.setValue(-1); } @@ -577,6 +580,10 @@ class MediaSendViewModel extends ViewModel { return sentMediaQuality; } + @NonNull LiveData getShowMediaQualityToggle() { + return showMediaQualityToggle; + } + @NonNull MediaConstraints getMediaConstraints() { return mediaConstraints; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java index 8b834b701..f95f0b8e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java @@ -313,6 +313,10 @@ public class MediaUtil { return isImageType(contentType) || isVideoType(contentType); } + public static boolean isImageAndNotGif(@NonNull String contentType) { + return isImageType(contentType) && !isGif(contentType); + } + public static boolean isLongTextType(String contentType) { return (null != contentType) && contentType.equals(LONG_TEXT); }