From 9416beb4aa26555321778037cde2002bbf5d791d Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 20 Sep 2021 10:35:01 -0300 Subject: [PATCH] Trigger pending transition at right time for video gifs. --- .../mediasend/VideoEditorFragment.java | 16 +++++ .../v2/gif/MediaReviewGifPageFragment.kt | 65 +++++++++++++++++++ .../review/MediaReviewFragmentPagerAdapter.kt | 3 +- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gif/MediaReviewGifPageFragment.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java index e404c6815..7aefc556f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java @@ -93,6 +93,22 @@ public class VideoEditorFragment extends Fragment implements VideoEditorHud.Even player.setVideoSource(slide, true); if (slide.isVideoGif()) { + player.setPlayerCallback(new VideoPlayer.PlayerCallback() { + @Override + public void onPlaying() { + controller.onPlayerReady(); + } + + @Override + public void onStopped() { + // Do nothing. + } + + @Override + public void onError() { + controller.onPlayerError(); + } + }); player.hideControls(); player.loopForever(); } else if (MediaConstraints.isVideoTranscodeAvailable()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gif/MediaReviewGifPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gif/MediaReviewGifPageFragment.kt new file mode 100644 index 000000000..e4ea574f6 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gif/MediaReviewGifPageFragment.kt @@ -0,0 +1,65 @@ +package org.thoughtcrime.securesms.mediasend.v2.gif + +import android.net.Uri +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.mediasend.MediaSendGifFragment +import org.thoughtcrime.securesms.mediasend.v2.HudCommand +import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel + +private const val GIF_TAG = "media.send.gif.fragment" + +/** + * Fragment which ensures we fire off ResumeEntryTransition when viewing a non-video gif. + */ +class MediaReviewGifPageFragment : Fragment(R.layout.fragment_container) { + + private lateinit var mediaSendGifFragment: MediaSendGifFragment + + private val sharedViewModel: MediaSelectionViewModel by viewModels(ownerProducer = { requireActivity() }) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + mediaSendGifFragment = ensureGifFragment() + sharedViewModel.sendCommand(HudCommand.ResumeEntryTransition) + } + + private fun ensureGifFragment(): MediaSendGifFragment { + val fragmentInManager: MediaSendGifFragment? = childFragmentManager.findFragmentByTag(GIF_TAG) as? MediaSendGifFragment + + return if (fragmentInManager != null) { + sharedViewModel.sendCommand(HudCommand.ResumeEntryTransition) + fragmentInManager + } else { + val mediaSendGifFragment = MediaSendGifFragment.newInstance( + requireUri() + ) + + childFragmentManager.beginTransaction() + .replace( + R.id.fragment_container, + mediaSendGifFragment, + GIF_TAG + ) + .commitAllowingStateLoss() + + mediaSendGifFragment + } + } + + private fun requireUri(): Uri = requireNotNull(requireArguments().getParcelable(ARG_URI)) + + companion object { + private const val ARG_URI = "arg.uri" + + fun newInstance(uri: Uri): Fragment { + return MediaReviewGifPageFragment().apply { + arguments = Bundle().apply { + putParcelable(ARG_URI, uri) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragmentPagerAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragmentPagerAdapter.kt index 2599d78d3..16638b6bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragmentPagerAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragmentPagerAdapter.kt @@ -6,6 +6,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.MediaSendGifFragment +import org.thoughtcrime.securesms.mediasend.v2.gif.MediaReviewGifPageFragment import org.thoughtcrime.securesms.mediasend.v2.images.MediaReviewImagePageFragment import org.thoughtcrime.securesms.mediasend.v2.videos.MediaReviewVideoPageFragment import org.thoughtcrime.securesms.util.MediaUtil @@ -43,7 +44,7 @@ class MediaReviewFragmentPagerAdapter(fragment: Fragment) : FragmentStateAdapter val mediaItem: Media = mediaList[position] return when { - MediaUtil.isGif(mediaItem.mimeType) -> MediaSendGifFragment.newInstance(mediaItem.uri) + MediaUtil.isGif(mediaItem.mimeType) -> MediaReviewGifPageFragment.newInstance(mediaItem.uri) MediaUtil.isImageType(mediaItem.mimeType) -> MediaReviewImagePageFragment.newInstance(mediaItem.uri) MediaUtil.isVideoType(mediaItem.mimeType) -> MediaReviewVideoPageFragment.newInstance(mediaItem.uri, mediaItem.isVideoGif) else -> {