diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.java index 03731c983..d29edba9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewFragment.java @@ -98,6 +98,8 @@ public abstract class MediaPreviewFragment extends Fragment { boolean singleTapOnMedia(); void onMediaNotAvailable(); void onMediaReady(); + void onPlaying(); + void onStopped(); default @Nullable VideoControlsDelegate getVideoControlsDelegate() { return null; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt index 204d1b660..4677a668e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -41,6 +41,7 @@ import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.DateUtils +import org.thoughtcrime.securesms.util.Debouncer import org.thoughtcrime.securesms.util.FullscreenHelper import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.MediaUtil @@ -49,6 +50,7 @@ import org.thoughtcrime.securesms.util.StorageUtil import org.thoughtcrime.securesms.util.ViewUtil import java.util.Locale import java.util.Optional +import java.util.concurrent.TimeUnit class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), MediaPreviewFragment.Events { private val TAG = Log.tag(MediaPreviewV2Fragment::class.java) @@ -56,6 +58,8 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med private val lifecycleDisposable = LifecycleDisposable() private val binding by ViewBinderDelegate(FragmentMediaPreviewV2Binding::bind) private val viewModel: MediaPreviewV2ViewModel by viewModels() + private val debouncer = Debouncer(2, TimeUnit.SECONDS) + private lateinit var fullscreenHelper: FullscreenHelper @@ -337,6 +341,14 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med viewModel.setMediaReady() } + override fun onPlaying() { + debouncer.publish { fullscreenHelper.hideSystemUI() } + } + + override fun onStopped() { + debouncer.clear() + } + private fun forward(mediaItem: MediaDatabase.MediaRecord) { val attachment = mediaItem.attachment val uri = attachment?.uri diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java index 2ff377450..143456b9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java @@ -74,10 +74,12 @@ public final class VideoMediaPreviewFragment extends MediaPreviewFragment { if (!isVideoGif && activity instanceof VoiceNoteMediaControllerOwner) { ((VoiceNoteMediaControllerOwner) activity).getVoiceNoteMediaController().pausePlayback(); } + events.onPlaying(); } @Override public void onStopped() { + events.onStopped(); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java index e4a992f4b..80066f13b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java @@ -107,7 +107,11 @@ public class VideoPlayer extends FrameLayout { switch (playbackState) { case Player.STATE_READY: playerCallback.onReady(); - if (playWhenReady) playerCallback.onPlaying(); + if (playWhenReady) { + playerCallback.onPlaying(); + } else { + playerCallback.onStopped(); + } break; case Player.STATE_ENDED: playerCallback.onStopped();