kopia lustrzana https://github.com/ryukoposting/Signal-Android
Trigger pending transition at right time for video gifs.
rodzic
39b80a48c7
commit
9416beb4aa
|
@ -93,6 +93,22 @@ public class VideoEditorFragment extends Fragment implements VideoEditorHud.Even
|
||||||
player.setVideoSource(slide, true);
|
player.setVideoSource(slide, true);
|
||||||
|
|
||||||
if (slide.isVideoGif()) {
|
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.hideControls();
|
||||||
player.loopForever();
|
player.loopForever();
|
||||||
} else if (MediaConstraints.isVideoTranscodeAvailable()) {
|
} else if (MediaConstraints.isVideoTranscodeAvailable()) {
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import org.thoughtcrime.securesms.mediasend.Media
|
import org.thoughtcrime.securesms.mediasend.Media
|
||||||
import org.thoughtcrime.securesms.mediasend.MediaSendGifFragment
|
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.images.MediaReviewImagePageFragment
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.videos.MediaReviewVideoPageFragment
|
import org.thoughtcrime.securesms.mediasend.v2.videos.MediaReviewVideoPageFragment
|
||||||
import org.thoughtcrime.securesms.util.MediaUtil
|
import org.thoughtcrime.securesms.util.MediaUtil
|
||||||
|
@ -43,7 +44,7 @@ class MediaReviewFragmentPagerAdapter(fragment: Fragment) : FragmentStateAdapter
|
||||||
val mediaItem: Media = mediaList[position]
|
val mediaItem: Media = mediaList[position]
|
||||||
|
|
||||||
return when {
|
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.isImageType(mediaItem.mimeType) -> MediaReviewImagePageFragment.newInstance(mediaItem.uri)
|
||||||
MediaUtil.isVideoType(mediaItem.mimeType) -> MediaReviewVideoPageFragment.newInstance(mediaItem.uri, mediaItem.isVideoGif)
|
MediaUtil.isVideoType(mediaItem.mimeType) -> MediaReviewVideoPageFragment.newInstance(mediaItem.uri, mediaItem.isVideoGif)
|
||||||
else -> {
|
else -> {
|
||||||
|
|
Ładowanie…
Reference in New Issue