From 7088b1a30231bcce1548334cb703347a9ae4609c Mon Sep 17 00:00:00 2001 From: Nicholas Date: Fri, 14 Oct 2022 15:31:16 -0400 Subject: [PATCH] Fix last media preview V2 UI glitches. --- .../securesms/database/MediaDatabase.java | 13 ++++++++ .../mediapreview/MediaPreviewV2Activity.kt | 7 +++++ .../mediapreview/MediaPreviewV2Fragment.kt | 30 ++++++++++--------- .../mediapreview/MediaPreviewV2State.kt | 3 +- .../mediapreview/MediaPreviewV2ViewModel.kt | 24 +++++++++++---- 5 files changed, 57 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java index 53be5f8c4b..b7487b5632 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java @@ -261,6 +261,19 @@ public class MediaDatabase extends Database { public boolean isRelatedToFileSize() { return this == Largest; } + + public static @NonNull Sorting deserialize(int code) { + switch (code) { + case 0: + return Newest; + case 1: + return Oldest; + case 2: + return Largest; + default: + throw new IllegalArgumentException("Unknown code: " + code); + } + } } public final static class StorageBreakdown { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt index 3c7640a18d..2e1b311045 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -1,9 +1,11 @@ package org.thoughtcrime.securesms.mediapreview import android.content.Context +import android.os.Build import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate +import androidx.core.content.ContextCompat import androidx.fragment.app.commit import org.thoughtcrime.securesms.R @@ -17,6 +19,11 @@ class MediaPreviewV2Activity : AppCompatActivity(R.layout.activity_mediapreview_ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setTheme(R.style.TextSecure_MediaPreview) + if (Build.VERSION.SDK_INT >= 21) { + val systemBarColor = ContextCompat.getColor(this, R.color.media_preview_bar_background) + window.statusBarColor = systemBarColor + window.navigationBarColor = systemBarColor + } if (savedInstanceState == null) { val bundle = Bundle() val args = MediaIntentFactory.requireArguments(intent.extras!!) 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 a68bd68220..f2c413e51a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -79,6 +79,22 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } + private fun initializeViewModel(args: MediaIntentFactory.MediaPreviewArgs) { + if (!MediaUtil.isImageType(args.initialMediaType) && !MediaUtil.isVideoType(args.initialMediaType)) { + Log.w(TAG, "Unsupported media type sent to MediaPreviewV2Fragment, finishing.") + Snackbar.make(binding.root, R.string.MediaPreviewActivity_unssuported_media_type, Snackbar.LENGTH_LONG) + .setAction(R.string.MediaPreviewActivity_dismiss_due_to_error) { + requireActivity().finish() + }.show() + } + + viewModel.setShowThread(args.showThread) + viewModel.setAlwaysShowAlbumRail(args.allMediaInRail) + viewModel.setLeftIsRecent(args.leftIsRecent) + val sorting = MediaDatabase.Sorting.deserialize(args.sorting) + viewModel.fetchAttachments(PartAuthority.requireAttachmentId(args.initialMediaUri), args.threadId, sorting) + } + private fun initializeToolbar(toolbar: MaterialToolbar, args: MediaIntentFactory.MediaPreviewArgs) { toolbar.setNavigationOnClickListener { requireActivity().onBackPressed() @@ -132,20 +148,6 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med fullscreenHelper.showAndHideWithSystemUI(requireActivity().window, binding.toolbarLayout, binding.mediaPreviewDetailsContainer) } - private fun initializeViewModel(args: MediaIntentFactory.MediaPreviewArgs) { - if (!MediaUtil.isImageType(args.initialMediaType) && !MediaUtil.isVideoType(args.initialMediaType)) { - Log.w(TAG, "Unsupported media type sent to MediaPreviewV2Fragment, finishing.") - Snackbar.make(binding.root, R.string.MediaPreviewActivity_unssuported_media_type, Snackbar.LENGTH_LONG) - .setAction(R.string.MediaPreviewActivity_dismiss_due_to_error) { - requireActivity().finish() - }.show() - } - viewModel.setShowThread(args.showThread) - viewModel.setAlwaysShowAlbumRail(args.allMediaInRail) - val sorting = MediaDatabase.Sorting.values()[args.sorting] - viewModel.fetchAttachments(PartAuthority.requireAttachmentId(args.initialMediaUri), args.threadId, sorting) - } - private fun bindCurrentState(currentState: MediaPreviewV2State) { if (currentState.position == -1 && currentState.mediaRecords.isEmpty()) { onMediaNotAvailable() diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt index 94056eabf7..e7c5e850ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt @@ -7,7 +7,8 @@ data class MediaPreviewV2State( val loadState: LoadState = LoadState.INIT, val position: Int = 0, val showThread: Boolean = false, - val allMediaInAlbumRail: Boolean = false + val allMediaInAlbumRail: Boolean = false, + val leftIsRecent: Boolean = false ) { enum class LoadState { INIT, READY, LOADED } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt index 970464cea1..b5ae55fc78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt @@ -27,11 +27,19 @@ class MediaPreviewV2ViewModel : ViewModel() { fun fetchAttachments(startingAttachmentId: AttachmentId, threadId: Long, sorting: MediaDatabase.Sorting) { disposables += store.update(repository.getAttachments(startingAttachmentId, threadId, sorting)) { result: MediaPreviewRepository.Result, oldState: MediaPreviewV2State -> - oldState.copy( - position = result.initialPosition, - mediaRecords = result.records, - loadState = MediaPreviewV2State.LoadState.READY, - ) + if (oldState.leftIsRecent) { + oldState.copy( + position = result.initialPosition, + mediaRecords = result.records, + loadState = MediaPreviewV2State.LoadState.READY, + ) + } else { + oldState.copy( + position = result.records.size - result.initialPosition - 1, + mediaRecords = result.records.reversed(), + loadState = MediaPreviewV2State.LoadState.READY, + ) + } } } @@ -47,6 +55,12 @@ class MediaPreviewV2ViewModel : ViewModel() { } } + fun setLeftIsRecent(value: Boolean) { + store.update { oldState -> + oldState.copy(leftIsRecent = value) + } + } + fun setCurrentPage(position: Int) { store.update { oldState -> oldState.copy(position = position, loadState = MediaPreviewV2State.LoadState.LOADED)