Fix transition for very tall images.

main
Alex Hart 2023-02-15 14:48:42 -04:00 zatwierdzone przez Greyson Parrelli
rodzic 9fd763fe83
commit 66494fa418
2 zmienionych plików z 27 dodań i 11 usunięć

Wyświetl plik

@ -3,12 +3,14 @@ package org.thoughtcrime.securesms.mediapreview
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup.LayoutParams
import android.widget.ImageView import android.widget.ImageView
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.transition.addListener import androidx.core.transition.addListener
import androidx.core.view.animation.PathInterpolatorCompat import androidx.core.view.animation.PathInterpolatorCompat
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.commit import androidx.fragment.app.commit
import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.shape.ShapeAppearanceModel
import com.google.android.material.transition.platform.MaterialContainerTransform import com.google.android.material.transition.platform.MaterialContainerTransform
@ -86,22 +88,36 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
setContentView(R.layout.activity_mediapreview_v2) setContentView(R.layout.activity_mediapreview_v2)
transitionImageView = findViewById(R.id.transition_image_view) 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<LayoutParams> {
width = LayoutParams.MATCH_PARENT
}
} else {
transitionImageView.updateLayoutParams<LayoutParams> {
height = LayoutParams.MATCH_PARENT
}
}
transitionImageView.setImageDrawable(MediaPreviewCache.drawable) 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 { } else {
transitionImageView.visibility = View.INVISIBLE transitionImageView.visibility = View.INVISIBLE
viewModel.setIsInSharedAnimation(false) 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) voiceNoteMediaController = VoiceNoteMediaController(this)
val systemBarColor = ContextCompat.getColor(this, R.color.signal_dark_colorSurface) val systemBarColor = ContextCompat.getColor(this, R.color.signal_dark_colorSurface)

Wyświetl plik

@ -11,7 +11,7 @@
<ImageView <ImageView
android:id="@+id/transition_image_view" android:id="@+id/transition_image_view"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:adjustViewBounds="true" android:adjustViewBounds="true"