Close media preview upon remote delete.

This commit is contained in:
Nicholas
2023-09-19 15:59:00 -04:00
committed by Alex Hart
parent 3920c85ab7
commit 268091b10e

View File

@@ -47,9 +47,11 @@ import org.thoughtcrime.securesms.components.ViewBinderDelegate
import org.thoughtcrime.securesms.components.mention.MentionAnnotation import org.thoughtcrime.securesms.components.mention.MentionAnnotation
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs
import org.thoughtcrime.securesms.database.DatabaseObserver
import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.database.MediaTable
import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.databinding.FragmentMediaPreviewV2Binding import org.thoughtcrime.securesms.databinding.FragmentMediaPreviewV2Binding
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.mediapreview.caption.ExpandingCaptionView import org.thoughtcrime.securesms.mediapreview.caption.ExpandingCaptionView
import org.thoughtcrime.securesms.mediapreview.mediarail.CenterDecoration import org.thoughtcrime.securesms.mediapreview.mediarail.CenterDecoration
import org.thoughtcrime.securesms.mediapreview.mediarail.MediaRailAdapter import org.thoughtcrime.securesms.mediapreview.mediarail.MediaRailAdapter
@@ -89,6 +91,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
private lateinit var fullscreenHelper: FullscreenHelper private lateinit var fullscreenHelper: FullscreenHelper
private var individualItemWidth: Int = 0 private var individualItemWidth: Int = 0
private var dbChangeObserver: DatabaseObserver.Observer? = null
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
@@ -131,7 +134,12 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
} }
viewModel.initialize(args.showThread, args.allMediaInRail, args.leftIsRecent) viewModel.initialize(args.showThread, args.allMediaInRail, args.leftIsRecent)
val sorting = MediaTable.Sorting.deserialize(args.sorting.ordinal) val sorting = MediaTable.Sorting.deserialize(args.sorting.ordinal)
viewModel.fetchAttachments(requireContext(), PartAuthority.requireAttachmentId(args.initialMediaUri), args.threadId, sorting) val startingAttachmentId = PartAuthority.requireAttachmentId(args.initialMediaUri)
val threadId = args.threadId
viewModel.fetchAttachments(requireContext(), startingAttachmentId, threadId, sorting)
val dbObserver = DatabaseObserver.Observer { viewModel.fetchAttachments(requireContext(), startingAttachmentId, threadId, sorting, true) }
ApplicationDependencies.getDatabaseObserver().registerAttachmentObserver(dbObserver)
this.dbChangeObserver = dbObserver
} }
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
@@ -485,6 +493,15 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
} }
} }
override fun onDestroy() {
super.onDestroy()
val observer = dbChangeObserver
if (observer != null) {
ApplicationDependencies.getDatabaseObserver().unregisterObserver(observer)
dbChangeObserver = null
}
}
override fun unableToPlayMedia() { override fun unableToPlayMedia() {
Toast.makeText(requireContext(), R.string.MediaPreviewActivity_unable_to_play_media, Toast.LENGTH_LONG).show() Toast.makeText(requireContext(), R.string.MediaPreviewActivity_unable_to_play_media, Toast.LENGTH_LONG).show()
requireActivity().finish() requireActivity().finish()
@@ -596,7 +613,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
}.show() }.show()
} }
fun canRemotelyDelete(attachment: DatabaseAttachment): Boolean { private fun canRemotelyDelete(attachment: DatabaseAttachment): Boolean {
val mmsId = attachment.mmsId val mmsId = attachment.mmsId
val attachmentCount = SignalDatabase.attachments.getAttachmentsForMessage(mmsId).size val attachmentCount = SignalDatabase.attachments.getAttachmentsForMessage(mmsId).size
return attachmentCount <= 1 && MessageConstraintsUtil.isValidRemoteDeleteSend(listOf(SignalDatabase.messages.getMessageRecord(mmsId)), System.currentTimeMillis()) return attachmentCount <= 1 && MessageConstraintsUtil.isValidRemoteDeleteSend(listOf(SignalDatabase.messages.getMessageRecord(mmsId)), System.currentTimeMillis())