From d075a33d4e97fe7ef29d767843bf1187f4b609ea Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 23 Oct 2019 14:36:50 -0700 Subject: [PATCH] Fix issue where video controls may be missing. Fixes #9121 --- .../securesms/MediaPreviewActivity.java | 30 ++++++++++++++----- .../mediapreview/MediaPreviewViewModel.java | 4 +++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java index bfff02eecf..4118dc097d 100644 --- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -239,6 +239,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv return; } + if (!((MediaItemAdapter) mediaPager.getAdapter()).hasFragmentFor(mediaPager.getCurrentItem())) { + Log.d(TAG, "MediaItemAdapter wasn't ready. Posting again..."); + viewModel.resubmitPreviewData(); + } + View playbackControls = ((MediaItemAdapter) mediaPager.getAdapter()).getPlaybackControls(mediaPager.getCurrentItem()); if (previewData.getAlbumThumbnails().isEmpty() && previewData.getCaption() == null && playbackControls == null) { @@ -427,16 +432,14 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv mediaPager.setAdapter(adapter); adapter.setActive(true); - Util.postToMain(() -> { - viewModel.setCursor(this, data.first, leftIsRecent); + viewModel.setCursor(this, data.first, leftIsRecent); - int item = restartItem >= 0 ? restartItem : data.second; - mediaPager.setCurrentItem(item); + int item = restartItem >= 0 ? restartItem : data.second; + mediaPager.setCurrentItem(item); - if (item == 0) { - viewPagerListener.onPageSelected(0); - } - }); + if (item == 0) { + viewPagerListener.onPageSelected(0); + } } } @@ -565,6 +568,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv } return null; } + + @Override + public boolean hasFragmentFor(int position) { + return mediaPreviewFragment != null; + } } private static void anchorMarginsToBottomInsets(@NonNull View viewToAnchor) { @@ -703,6 +711,11 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv return null; } + @Override + public boolean hasFragmentFor(int position) { + return mediaFragments.containsKey(position); + } + private int getCursorPosition(int position) { if (leftIsRecent) return position; else return cursor.getCount() - 1 - position; @@ -737,5 +750,6 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv MediaItem getMediaItemFor(int position); void pause(int position); @Nullable View getPlaybackControls(int position); + boolean hasFragmentFor(int position); } } diff --git a/src/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java b/src/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java index b5d4682e3a..64ef2a9ce7 100644 --- a/src/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java +++ b/src/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java @@ -83,6 +83,10 @@ public class MediaPreviewViewModel extends ViewModel { rail.indexOf(activeMedia))); } + public void resubmitPreviewData() { + previewData.postValue(previewData.getValue()); + } + private int getCursorPosition(int position) { if (cursor == null) { return 0;