diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index 18c68a2ae..4d5c9f7ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -55,6 +55,8 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.animation.DepthPageTransformer; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.components.viewpager.ExtendedOnPageChangedListener; +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController; +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardBottomSheet; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment; @@ -91,7 +93,8 @@ import java.util.Objects; public final class MediaPreviewActivity extends PassphraseRequiredActivity implements LoaderManager.LoaderCallbacks>, MediaRailAdapter.RailItemListener, - MediaPreviewFragment.Events + MediaPreviewFragment.Events, + VoiceNoteMediaControllerOwner { private final static String TAG = Log.tag(MediaPreviewActivity.class); @@ -131,6 +134,8 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity private MediaDatabase.Sorting sorting; private FullscreenHelper fullscreenHelper; + private VoiceNoteMediaController voiceNoteMediaController; + private @Nullable Cursor cursor = null; public static @NonNull Intent intentFromMediaRecord(@NonNull Context context, @@ -163,6 +168,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity setSupportActionBar(findViewById(R.id.toolbar)); + voiceNoteMediaController = new VoiceNoteMediaController(this); viewModel = ViewModelProviders.of(this).get(MediaPreviewViewModel.class); fullscreenHelper = new FullscreenHelper(this); @@ -609,6 +615,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActivity public void onMediaReady() { } + @Override + public @NonNull VoiceNoteMediaController getVoiceNoteMediaController() { + return voiceNoteMediaController; + } + private class ViewPagerListener extends ExtendedOnPageChangedListener { @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java index 0b48335f4..c3fcc70f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java @@ -220,6 +220,13 @@ public class VoiceNoteMediaController implements DefaultLifecycleObserver { } } + /** + * Pauses playback regardless of which audio slide is playing. + */ + public void pausePlayback() { + getMediaController().getTransportControls().pause(); + } + /** * Seeks to a given position if th given audio slide is playing. This call * is ignored if the given audio slide is not currently playing. 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 c074cce8e..fce8d8b25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/VideoMediaPreviewFragment.java @@ -11,6 +11,8 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController; +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner; import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.video.VideoPlayer; @@ -61,6 +63,9 @@ public final class VideoMediaPreviewFragment extends MediaPreviewFragment { @Override public void onPlaying() { + if (!isVideoGif && requireActivity() instanceof VoiceNoteMediaControllerOwner) { + ((VoiceNoteMediaControllerOwner) requireActivity()).getVoiceNoteMediaController().pausePlayback(); + } } @Override @@ -93,6 +98,7 @@ public final class VideoMediaPreviewFragment extends MediaPreviewFragment { @Override public void onResume() { super.onResume(); + if (videoView != null && isVideoGif) { videoView.play(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerActivity.kt index 943649cc7..8bed6f535 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerActivity.kt @@ -7,10 +7,14 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatDelegate import org.thoughtcrime.securesms.PassphraseRequiredActivity import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController +import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.stories.StoryTextPostModel -class StoryViewerActivity : PassphraseRequiredActivity() { +class StoryViewerActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner { + + override lateinit var voiceNoteMediaController: VoiceNoteMediaController override fun attachBaseContext(newBase: Context) { delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES @@ -23,6 +27,8 @@ class StoryViewerActivity : PassphraseRequiredActivity() { super.onCreate(savedInstanceState, ready) setContentView(R.layout.fragment_container) + voiceNoteMediaController = VoiceNoteMediaController(this) + if (savedInstanceState == null) { supportFragmentManager.beginTransaction() .replace(