Trigger pending transition at right time for video gifs.

fork-5.53.8
Alex Hart 2021-09-20 10:35:01 -03:00
rodzic 39b80a48c7
commit 9416beb4aa
3 zmienionych plików z 83 dodań i 1 usunięć

Wyświetl plik

@ -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()) {

Wyświetl plik

@ -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)
}
}
}
}
}

Wyświetl plik

@ -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 -> {