From 096c9e0ff76c0dc811585dfdc6703cee3d082690 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 17 Oct 2019 20:28:51 -0400 Subject: [PATCH] Ensure videos are paused properly in MediaSendActivity. --- .../mediasend/MediaSendFragment.java | 9 +++++++++ .../MediaSendFragmentPagerAdapter.java | 19 ++++++++++++++++++ .../mediasend/MediaSendGifFragment.java | 4 ++++ .../mediasend/MediaSendPageFragment.java | 2 ++ .../mediasend/MediaSendVideoFragment.java | 20 +++++++++++++++++++ .../scribbles/ImageEditorFragment.java | 4 ++++ 6 files changed, 58 insertions(+) diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java index 622442d006..db84e17e97 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java @@ -82,9 +82,17 @@ public class MediaSendFragment extends Fragment { super.onHiddenChanged(hidden); if (!hidden) { viewModel.onImageEditorStarted(); + } else { + fragmentPagerAdapter.notifyHidden(); } } + @Override + public void onPause() { + super.onPause(); + fragmentPagerAdapter.notifyHidden(); + } + @Override public void onStop() { super.onStop(); @@ -143,6 +151,7 @@ public class MediaSendFragment extends Fragment { @Override public void onPageSelected(int position) { viewModel.onPageChanged(position); + fragmentPagerAdapter.notifyPageChanged(position); } } } diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendFragmentPagerAdapter.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendFragmentPagerAdapter.java index 4d6107044f..aa71e96b86 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaSendFragmentPagerAdapter.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendFragmentPagerAdapter.java @@ -9,6 +9,8 @@ import androidx.fragment.app.FragmentStatePagerAdapter; import android.view.View; import android.view.ViewGroup; +import com.annimon.stream.Stream; + import org.thoughtcrime.securesms.scribbles.ImageEditorFragment; import org.thoughtcrime.securesms.util.MediaUtil; @@ -119,4 +121,21 @@ class MediaSendFragmentPagerAdapter extends FragmentStatePagerAdapter { @Nullable View getPlaybackControls(int position) { return fragments.containsKey(position) ? fragments.get(position).getPlaybackControls() : null; } + + void notifyHidden() { + Stream.of(fragments.values()).forEach(MediaSendPageFragment::notifyHidden); + } + + void notifyPageChanged(int currentPage) { + notifyHiddenIfExists(currentPage - 1); + notifyHiddenIfExists(currentPage + 1); + } + + private void notifyHiddenIfExists(int position) { + MediaSendPageFragment fragment = fragments.get(position); + + if (fragment != null) { + fragment.notifyHidden(); + } + } } diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java index 08a38be526..801d2eebe1 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java @@ -65,4 +65,8 @@ public class MediaSendGifFragment extends Fragment implements MediaSendPageFragm @Override public void restoreState(@NonNull Object state) { } + + @Override + public void notifyHidden() { + } } diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java index 6de248489f..d60431f115 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java @@ -19,4 +19,6 @@ public interface MediaSendPageFragment { @Nullable Object saveState(); void restoreState(@NonNull Object state); + + void notifyHidden(); } diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendVideoFragment.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendVideoFragment.java index c20d25dbdc..c6b45190f3 100644 --- a/src/org/thoughtcrime/securesms/mediasend/MediaSendVideoFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendVideoFragment.java @@ -59,6 +59,19 @@ public class MediaSendVideoFragment extends Fragment implements MediaSendPageFra } } + @Override + public void onPause() { + super.onPause(); + notifyHidden(); + } + + @Override + public void onHiddenChanged(boolean hidden) { + if (hidden) { + notifyHidden(); + } + } + @Override public void setUri(@NonNull Uri uri) { this.uri = uri; @@ -82,4 +95,11 @@ public class MediaSendVideoFragment extends Fragment implements MediaSendPageFra @Override public void restoreState(@NonNull Object state) { } + + @Override + public void notifyHidden() { + if (getView() != null) { + ((VideoPlayer) getView()).pause(); + } + } } diff --git a/src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index 93703a83fe..67d7aba0a6 100644 --- a/src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -212,6 +212,10 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu } } + @Override + public void notifyHidden() { + } + private void changeEntityColor(int selectedColor) { if (currentSelection != null) { Renderer renderer = currentSelection.getRenderer();