Show optimized media in the all media view.

This commit is contained in:
Greyson Parrelli
2026-03-31 12:16:37 -04:00
committed by Alex Hart
parent 36f7c60a99
commit f37f67c6c0
4 changed files with 26 additions and 13 deletions

View File

@@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.annotation.UiThread;
import androidx.appcompat.widget.AppCompatImageView;
import com.google.android.material.color.MaterialColors;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
@@ -347,6 +348,7 @@ public class ThumbnailView extends FrameLayout {
transferControlViewStub.setVisibility(View.GONE);
playOverlay.setVisibility(View.GONE);
setBackgroundColor(Color.TRANSPARENT);
requestManager.clear(blurHash);
blurHash.setImageDrawable(null);
@@ -488,6 +490,12 @@ public class ThumbnailView extends FrameLayout {
image.setImageDrawable(null);
}
if (slide.getTransferState() == AttachmentTable.TRANSFER_RESTORE_OFFLOADED && slide.getDisplayUri() == null) {
setBackgroundColor(MaterialColors.getColor(this, com.google.android.material.R.attr.colorSurfaceVariant, Color.GRAY));
} else {
setBackgroundColor(Color.TRANSPARENT);
}
if (!resultHandled) {
result.set(false);
}

View File

@@ -718,7 +718,9 @@ class ConversationSettingsFragment :
mediaRecords = state.sharedMedia,
mediaIds = state.sharedMediaIds,
onMediaRecordClick = { view, mediaRecord, isLtr ->
if (mediaRecord.attachment?.transferState != AttachmentTable.TRANSFER_PROGRESS_DONE) {
if (mediaRecord.attachment?.transferState != AttachmentTable.TRANSFER_PROGRESS_DONE &&
mediaRecord.attachment?.transferState != AttachmentTable.TRANSFER_RESTORE_OFFLOADED
) {
Toast.makeText(context, R.string.ConversationSettingsFragment__this_media_is_not_sent_yet, Toast.LENGTH_LONG).show()
return@Model
}

View File

@@ -109,8 +109,8 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
private val GALLERY_MEDIA_QUERY_INCLUDING_TEMP_VIDEOS = String.format(
BASE_MEDIA_QUERY,
"""
(${AttachmentTable.DATA_FILE} IS NOT NULL OR (${AttachmentTable.CONTENT_TYPE} LIKE 'video/%' AND ${AttachmentTable.REMOTE_INCREMENTAL_DIGEST} IS NOT NULL) OR (${AttachmentTable.THUMBNAIL_FILE} IS NOT NULL)) AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'image/svg%' AND
(${AttachmentTable.DATA_FILE} IS NOT NULL OR (${AttachmentTable.CONTENT_TYPE} LIKE 'video/%' AND ${AttachmentTable.REMOTE_INCREMENTAL_DIGEST} IS NOT NULL) OR ${AttachmentTable.THUMBNAIL_FILE} IS NOT NULL OR ${AttachmentTable.TRANSFER_STATE} = ${AttachmentTable.TRANSFER_RESTORE_OFFLOADED}) AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'image/svg%' AND
(${AttachmentTable.CONTENT_TYPE} LIKE 'image/%' OR ${AttachmentTable.CONTENT_TYPE} LIKE 'video/%') AND
${MessageTable.LINK_PREVIEWS} IS NULL AND
${MessageTable.SCHEDULED_DATE} < 0
@@ -120,7 +120,7 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
private val AUDIO_MEDIA_QUERY = String.format(
BASE_MEDIA_QUERY,
"""
${AttachmentTable.DATA_FILE} IS NOT NULL AND
(${AttachmentTable.DATA_FILE} IS NOT NULL OR ${AttachmentTable.TRANSFER_STATE} = ${AttachmentTable.TRANSFER_RESTORE_OFFLOADED}) AND
${AttachmentTable.CONTENT_TYPE} LIKE 'audio/%' AND
${MessageTable.SCHEDULED_DATE} < 0
"""
@@ -129,7 +129,7 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
private val ALL_MEDIA_QUERY = String.format(
BASE_MEDIA_QUERY,
"""
${AttachmentTable.DATA_FILE} IS NOT NULL AND
(${AttachmentTable.DATA_FILE} IS NOT NULL OR ${AttachmentTable.TRANSFER_STATE} = ${AttachmentTable.TRANSFER_RESTORE_OFFLOADED}) AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'text/x-signal-plain' AND
${MessageTable.LINK_PREVIEWS} IS NULL AND
${MessageTable.SCHEDULED_DATE} < 0
@@ -203,13 +203,13 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
private val DOCUMENT_MEDIA_QUERY = String.format(
BASE_MEDIA_QUERY,
"""
${AttachmentTable.DATA_FILE} IS NOT NULL AND
(${AttachmentTable.DATA_FILE} IS NOT NULL OR ${AttachmentTable.TRANSFER_STATE} = ${AttachmentTable.TRANSFER_RESTORE_OFFLOADED}) AND
(
${AttachmentTable.CONTENT_TYPE} LIKE 'image/svg%' OR
${AttachmentTable.CONTENT_TYPE} LIKE 'image/svg%' OR
(
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'image/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'video/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'audio/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'image/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'video/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'audio/%' AND
${AttachmentTable.CONTENT_TYPE} NOT LIKE 'text/x-signal-plain' AND
${MessageTable.SCHEDULED_DATE} < 0
)
@@ -232,9 +232,6 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD
}
private fun applyIndexHint(query: String, threadId: Long, sorting: Sorting): String {
if (threadId == ALL_THREADS.toLong() && sorting == Sorting.Largest) {
return query.replace("__INDEX_HINT__", "INDEXED BY attachment_media_overview_size")
}
return query.replace("__INDEX_HINT__", "")
}
}

View File

@@ -58,6 +58,7 @@ import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.signal.core.util.Util;
@@ -584,6 +585,11 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
audioItemListener.unregisterPlaybackStateObserver(audioView.getPlaybackStateObserver());
audioView.setAudio((AudioSlide) slide, new AudioViewCallbacksAdapter(audioItemListener, mmsId), true, true);
audioView.setDownloadClickListener((v, s) -> {
if (s.asAttachment() instanceof DatabaseAttachment) {
AttachmentDownloadJob.downloadAttachmentIfNeeded((DatabaseAttachment) s.asAttachment());
}
});
audioItemListener.registerPlaybackStateObserver(audioView.getPlaybackStateObserver());
audioView.setOnClickListener(view -> itemClickListener.onMediaClicked(audioView, mediaRecord));