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);
|
||||
|
||||
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()) {
|
||||
|
|
|
@ -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 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 -> {
|
||||
|
|
Ładowanie…
Reference in New Issue