mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-24 10:35:19 +00:00
Cleaning up thumbnail view bgs
This commit is contained in:
parent
f35f30a3b1
commit
d0537c1e8c
@ -9,6 +9,7 @@ import android.util.AttributeSet
|
|||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewOutlineProvider
|
import android.view.ViewOutlineProvider
|
||||||
|
import android.view.ViewTreeObserver
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
@ -27,7 +28,10 @@ import org.thoughtcrime.securesms.components.GlideDrawableListeningTarget
|
|||||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri
|
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.RequestManager
|
import com.bumptech.glide.RequestManager
|
||||||
|
import org.session.libsignal.utilities.Log
|
||||||
import org.thoughtcrime.securesms.mms.Slide
|
import org.thoughtcrime.securesms.mms.Slide
|
||||||
|
import org.thoughtcrime.securesms.ui.afterMeasured
|
||||||
|
import java.lang.Float.min
|
||||||
|
|
||||||
open class ThumbnailView @JvmOverloads constructor(
|
open class ThumbnailView @JvmOverloads constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
@ -114,8 +118,23 @@ open class ThumbnailView @JvmOverloads constructor(
|
|||||||
isPreview: Boolean, naturalWidth: Int,
|
isPreview: Boolean, naturalWidth: Int,
|
||||||
naturalHeight: Int
|
naturalHeight: Int
|
||||||
): ListenableFuture<Boolean> {
|
): ListenableFuture<Boolean> {
|
||||||
binding.playOverlay.isVisible = (slide.thumbnailUri != null && slide.hasPlayOverlay() &&
|
val showPlayOverlay = (slide.thumbnailUri != null && slide.hasPlayOverlay() &&
|
||||||
(slide.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_DONE || isPreview))
|
(slide.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_DONE || isPreview))
|
||||||
|
if(showPlayOverlay) {
|
||||||
|
binding.playOverlay.isVisible = true
|
||||||
|
// The views are poorly constructed at the moment and there is no good way to know
|
||||||
|
// if this is used in the main conversation or in the tiny quote window of a reply...
|
||||||
|
// But when the view is too small the 'play' icon does not scale,
|
||||||
|
// so we can do it based on measured sizes here
|
||||||
|
binding.playOverlay.afterMeasured {
|
||||||
|
// max size if 60% of the width
|
||||||
|
val ratio = min((binding.root.width * 0.6f) / binding.playOverlay.width, 1f)
|
||||||
|
binding.playOverlay.scaleX = ratio
|
||||||
|
binding.playOverlay.scaleY = ratio
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
binding.playOverlay.isVisible = false
|
||||||
|
}
|
||||||
|
|
||||||
if (equals(this.slide, slide)) {
|
if (equals(this.slide, slide)) {
|
||||||
// don't re-load slide
|
// don't re-load slide
|
||||||
|
@ -3,6 +3,8 @@ package org.thoughtcrime.securesms.ui
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.ContextWrapper
|
import android.content.ContextWrapper
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewTreeObserver
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.platform.ComposeView
|
import androidx.compose.ui.platform.ComposeView
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
@ -58,3 +60,14 @@ fun Context.findActivity(): Activity {
|
|||||||
}
|
}
|
||||||
throw IllegalStateException("Permissions should be called in the context of an Activity")
|
throw IllegalStateException("Permissions should be called in the context of an Activity")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <T : View> T.afterMeasured(crossinline block: T.() -> Unit) {
|
||||||
|
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||||
|
override fun onGlobalLayout() {
|
||||||
|
if (measuredWidth > 0 && measuredHeight > 0) {
|
||||||
|
viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||||
|
block()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -5,6 +5,4 @@
|
|||||||
|
|
||||||
<solid android:color="?backgroundSecondary" />
|
<solid android:color="?backgroundSecondary" />
|
||||||
|
|
||||||
<corners android:radius="?dialogCornerRadius" />
|
|
||||||
|
|
||||||
</shape>
|
</shape>
|
Loading…
Reference in New Issue
Block a user