Add transition fixes and improvements.

fork-5.53.8
Alex Hart 2022-03-23 15:20:05 -03:00 zatwierdzone przez Greyson Parrelli
rodzic 72b3a0555d
commit b0b1029d0f
7 zmienionych plików z 51 dodań i 19 usunięć

Wyświetl plik

@ -8,7 +8,6 @@ import android.util.TypedValue
import android.view.View
import androidx.annotation.ColorInt
import androidx.annotation.Px
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.doOnNextLayout
import androidx.core.view.isVisible
@ -161,10 +160,6 @@ class StoryTextPostView @JvmOverloads constructor(
hideCloseButton()
postAdjustLinkPreviewTranslationY()
doOnNextLayout {
(context as? AppCompatActivity)?.supportStartPostponedEnterTransition()
}
}
fun bindLinkPreview(linkPreview: LinkPreview?): ListenableFuture<Boolean> {

Wyświetl plik

@ -4,6 +4,7 @@ import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.RectF
import android.util.AttributeSet
import androidx.annotation.ColorInt
@ -15,6 +16,7 @@ class StoryTextView @JvmOverloads constructor(
attrs: AttributeSet? = null
) : EmojiTextView(context, attrs) {
private val canvasBounds: Rect = Rect()
private val textBounds: RectF = RectF()
private val wrappedBackgroundPaint = Paint().apply {
style = Paint.Style.FILL
@ -34,8 +36,9 @@ class StoryTextView @JvmOverloads constructor(
}
override fun onDraw(canvas: Canvas) {
if (wrappedBackgroundPaint.color != Color.TRANSPARENT) {
textBounds.set(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat())
if (wrappedBackgroundPaint.color != Color.TRANSPARENT && layout != null) {
canvas.getClipBounds(canvasBounds)
textBounds.set(canvasBounds)
val maxWidth = (0 until layout.lineCount).map {
layout.getLineWidth(it)

Wyświetl plik

@ -169,7 +169,7 @@ class StoryViewerPageFragment :
val canCloseFromHorizontalSlide = requireView().translationX > DimensionUnit.DP.toPixels(56f)
val canCloseFromVerticalSlide = requireView().translationY > DimensionUnit.DP.toPixels(56f)
if ((canCloseFromHorizontalSlide || canCloseFromVerticalSlide) && event.actionMasked == MotionEvent.ACTION_UP) {
requireActivity().finish()
requireActivity().onBackPressed()
} else {
requireView().animate()
.setInterpolator(StoryGestureListener.INTERPOLATOR)

Wyświetl plik

@ -4,7 +4,11 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.addCallback
import androidx.core.view.doOnNextLayout
import androidx.core.view.drawToBitmap
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import org.signal.core.util.DimensionUnit
@ -16,6 +20,7 @@ import org.thoughtcrime.securesms.stories.viewer.page.StoryPost
import org.thoughtcrime.securesms.util.CommunicationActions
import org.thoughtcrime.securesms.util.FragmentDialogs.displayInDialogAboveAnchor
import org.thoughtcrime.securesms.util.fragments.requireListener
import org.thoughtcrime.securesms.util.visible
class StoryTextPostPreviewFragment : Fragment(R.layout.stories_text_post_preview_fragment) {
@ -40,6 +45,12 @@ class StoryTextPostPreviewFragment : Fragment(R.layout.stories_text_post_preview
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val storyTextPostView: StoryTextPostView = view.findViewById(R.id.story_text_post)
val storyTextThumb: ImageView = view.findViewById(R.id.story_text_post_shared_element_target)
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
storyTextThumb.visible = true
requireActivity().supportFinishAfterTransition()
}
viewModel.state.observe(viewLifecycleOwner) { state ->
when (state.loadState) {
@ -55,6 +66,8 @@ class StoryTextPostPreviewFragment : Fragment(R.layout.stories_text_post_preview
} else {
storyTextPostView.setLinkPreviewClickListener(null)
}
requireActivity().supportStartPostponedEnterTransition()
loadPreview(storyTextThumb, storyTextPostView)
}
StoryTextPostState.LoadState.FAILED -> {
requireListener<MediaPreviewFragment.Events>().mediaNotAvailable()
@ -63,6 +76,16 @@ class StoryTextPostPreviewFragment : Fragment(R.layout.stories_text_post_preview
}
}
private fun loadPreview(storyTextThumb: ImageView, storyTextPreview: StoryTextPostView) {
storyTextPreview.doOnNextLayout {
storyTextThumb.setImageBitmap(storyTextPreview.drawToBitmap())
requireActivity().supportStartPostponedEnterTransition()
storyTextThumb.postDelayed({
storyTextThumb.visible = false
}, 200)
}
}
@SuppressLint("AlertDialogBuilderUsage")
private fun showLinkPreviewTooltip(view: View, linkPreview: LinkPreview) {
requireListener<Callback>().setIsDisplayingLinkPreviewTooltip(true)

Wyświetl plik

@ -19,15 +19,12 @@ class StoryTextPostViewModel(recordId: Long, repository: StoryTextPostRepository
init {
disposables += repository.getRecord(recordId)
.map { record ->
StoryTextPost.parseFrom(Base64.decode(record.body)) to record.linkPreviews.firstOrNull()
}
.subscribeBy(
onSuccess = { (post, previews) ->
onSuccess = { record ->
store.update { state ->
state.copy(
storyTextPost = post,
linkPreview = previews,
storyTextPost = StoryTextPost.parseFrom(Base64.decode(record.body)),
linkPreview = record.linkPreviews.firstOrNull(),
loadState = StoryTextPostState.LoadState.LOADED
)
}

Wyświetl plik

@ -1,5 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<org.thoughtcrime.securesms.stories.StoryTextPostView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/story_text_post"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent">
<org.thoughtcrime.securesms.stories.StoryTextPostView
android:id="@+id/story_text_post"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/story_text_post_shared_element_target"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:importantForAccessibility="no" />
</FrameLayout>

Wyświetl plik

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<transition class="org.thoughtcrime.securesms.stories.ScaleTransition" />
<transitionSet android:duration="200"
xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds/>
<changeTransform/>
<changeImageTransform/>
</transitionSet>