From 66494fa418dd9ea5f0654023bc7306cc50c9abe8 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 15 Feb 2023 14:48:42 -0400 Subject: [PATCH] Fix transition for very tall images. --- .../mediapreview/MediaPreviewV2Activity.kt | 36 +++++++++++++------ .../res/layout/activity_mediapreview_v2.xml | 2 +- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt index 8cb1fbddd..22259498a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -3,12 +3,14 @@ package org.thoughtcrime.securesms.mediapreview import android.content.Context import android.os.Bundle import android.view.View +import android.view.ViewGroup.LayoutParams import android.widget.ImageView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import androidx.core.transition.addListener import androidx.core.view.animation.PathInterpolatorCompat +import androidx.core.view.updateLayoutParams import androidx.fragment.app.commit import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.transition.platform.MaterialContainerTransform @@ -86,22 +88,36 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr setContentView(R.layout.activity_mediapreview_v2) transitionImageView = findViewById(R.id.transition_image_view) - if (MediaPreviewCache.drawable != null) { + val cacheDrawable = MediaPreviewCache.drawable + if (cacheDrawable != null) { + val bounds = cacheDrawable.bounds + val aspectRatio = bounds.width().toFloat() / bounds.height() + val screenRatio = resources.displayMetrics.widthPixels.toFloat() / resources.displayMetrics.heightPixels + if (aspectRatio > screenRatio) { + transitionImageView.updateLayoutParams { + width = LayoutParams.MATCH_PARENT + } + } else { + transitionImageView.updateLayoutParams { + height = LayoutParams.MATCH_PARENT + } + } + transitionImageView.setImageDrawable(MediaPreviewCache.drawable) + + lifecycleDisposable += viewModel.state.map { + it.isInSharedAnimation to it.loadState + }.distinctUntilChanged().subscribe { (isInSharedAnimation, loadState) -> + if (!isInSharedAnimation && loadState == MediaPreviewV2State.LoadState.MEDIA_READY) { + transitionImageView.clearAnimation() + transitionImageView.animate().alpha(0f) + } + } } else { transitionImageView.visibility = View.INVISIBLE viewModel.setIsInSharedAnimation(false) } - lifecycleDisposable += viewModel.state.map { - it.isInSharedAnimation to it.loadState - }.distinctUntilChanged().subscribe { (isInSharedAnimation, loadState) -> - if (!isInSharedAnimation && loadState == MediaPreviewV2State.LoadState.MEDIA_READY) { - transitionImageView.clearAnimation() - transitionImageView.animate().alpha(0f) - } - } - voiceNoteMediaController = VoiceNoteMediaController(this) val systemBarColor = ContextCompat.getColor(this, R.color.signal_dark_colorSurface) diff --git a/app/src/main/res/layout/activity_mediapreview_v2.xml b/app/src/main/res/layout/activity_mediapreview_v2.xml index 81326e504..ef315d2f6 100644 --- a/app/src/main/res/layout/activity_mediapreview_v2.xml +++ b/app/src/main/res/layout/activity_mediapreview_v2.xml @@ -11,7 +11,7 @@