Skip to content

Commit 9416beb

Browse files
committed
Trigger pending transition at right time for video gifs.
1 parent 39b80a4 commit 9416beb

File tree

3 files changed

+83
-1
lines changed

3 files changed

+83
-1
lines changed

app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
9393
player.setVideoSource(slide, true);
9494

9595
if (slide.isVideoGif()) {
96+
player.setPlayerCallback(new VideoPlayer.PlayerCallback() {
97+
@Override
98+
public void onPlaying() {
99+
controller.onPlayerReady();
100+
}
101+
102+
@Override
103+
public void onStopped() {
104+
// Do nothing.
105+
}
106+
107+
@Override
108+
public void onError() {
109+
controller.onPlayerError();
110+
}
111+
});
96112
player.hideControls();
97113
player.loopForever();
98114
} else if (MediaConstraints.isVideoTranscodeAvailable()) {
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.thoughtcrime.securesms.mediasend.v2.gif
2+
3+
import android.net.Uri
4+
import android.os.Bundle
5+
import android.view.View
6+
import androidx.fragment.app.Fragment
7+
import androidx.fragment.app.viewModels
8+
import org.thoughtcrime.securesms.R
9+
import org.thoughtcrime.securesms.mediasend.MediaSendGifFragment
10+
import org.thoughtcrime.securesms.mediasend.v2.HudCommand
11+
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
12+
13+
private const val GIF_TAG = "media.send.gif.fragment"
14+
15+
/**
16+
* Fragment which ensures we fire off ResumeEntryTransition when viewing a non-video gif.
17+
*/
18+
class MediaReviewGifPageFragment : Fragment(R.layout.fragment_container) {
19+
20+
private lateinit var mediaSendGifFragment: MediaSendGifFragment
21+
22+
private val sharedViewModel: MediaSelectionViewModel by viewModels(ownerProducer = { requireActivity() })
23+
24+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
25+
mediaSendGifFragment = ensureGifFragment()
26+
sharedViewModel.sendCommand(HudCommand.ResumeEntryTransition)
27+
}
28+
29+
private fun ensureGifFragment(): MediaSendGifFragment {
30+
val fragmentInManager: MediaSendGifFragment? = childFragmentManager.findFragmentByTag(GIF_TAG) as? MediaSendGifFragment
31+
32+
return if (fragmentInManager != null) {
33+
sharedViewModel.sendCommand(HudCommand.ResumeEntryTransition)
34+
fragmentInManager
35+
} else {
36+
val mediaSendGifFragment = MediaSendGifFragment.newInstance(
37+
requireUri()
38+
)
39+
40+
childFragmentManager.beginTransaction()
41+
.replace(
42+
R.id.fragment_container,
43+
mediaSendGifFragment,
44+
GIF_TAG
45+
)
46+
.commitAllowingStateLoss()
47+
48+
mediaSendGifFragment
49+
}
50+
}
51+
52+
private fun requireUri(): Uri = requireNotNull(requireArguments().getParcelable(ARG_URI))
53+
54+
companion object {
55+
private const val ARG_URI = "arg.uri"
56+
57+
fun newInstance(uri: Uri): Fragment {
58+
return MediaReviewGifPageFragment().apply {
59+
arguments = Bundle().apply {
60+
putParcelable(ARG_URI, uri)
61+
}
62+
}
63+
}
64+
}
65+
}

app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragmentPagerAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.recyclerview.widget.RecyclerView
66
import androidx.viewpager2.adapter.FragmentStateAdapter
77
import org.thoughtcrime.securesms.mediasend.Media
88
import org.thoughtcrime.securesms.mediasend.MediaSendGifFragment
9+
import org.thoughtcrime.securesms.mediasend.v2.gif.MediaReviewGifPageFragment
910
import org.thoughtcrime.securesms.mediasend.v2.images.MediaReviewImagePageFragment
1011
import org.thoughtcrime.securesms.mediasend.v2.videos.MediaReviewVideoPageFragment
1112
import org.thoughtcrime.securesms.util.MediaUtil
@@ -43,7 +44,7 @@ class MediaReviewFragmentPagerAdapter(fragment: Fragment) : FragmentStateAdapter
4344
val mediaItem: Media = mediaList[position]
4445

4546
return when {
46-
MediaUtil.isGif(mediaItem.mimeType) -> MediaSendGifFragment.newInstance(mediaItem.uri)
47+
MediaUtil.isGif(mediaItem.mimeType) -> MediaReviewGifPageFragment.newInstance(mediaItem.uri)
4748
MediaUtil.isImageType(mediaItem.mimeType) -> MediaReviewImagePageFragment.newInstance(mediaItem.uri)
4849
MediaUtil.isVideoType(mediaItem.mimeType) -> MediaReviewVideoPageFragment.newInstance(mediaItem.uri, mediaItem.isVideoGif)
4950
else -> {

0 commit comments

Comments
 (0)