diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java index 6b2c6d43..d6cb93a9 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java @@ -411,14 +411,15 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { return ImageLoadingHelper.decodeBlurHash(this.avatar.getContext(), blurhash); } - private void loadImage(MediaPreviewImageView imageView, + private void loadImage(View wrapper, + MediaPreviewImageView imageView, @Nullable String previewUrl, @Nullable MetaData meta, @Nullable String blurhash) { Drawable placeholder = blurhash != null ? decodeBlurHash(blurhash) : mediaPreviewUnloaded; - ViewKt.doOnLayout(imageView, view -> { + ViewKt.doOnLayout(wrapper, view -> { if (TextUtils.isEmpty(previewUrl)) { imageView.removeFocalPoint(); @@ -433,7 +434,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { if (focus != null) { // If there is a focal point for this attachment: imageView.setFocalPoint(focus); - Glide.with(imageView) + Glide.with(imageView.getContext()) .load(previewUrl) .placeholder(placeholder) .centerInside() @@ -460,19 +461,21 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { mediaPreview.setVisibility(View.VISIBLE); mediaPreview.setAspectRatios(AttachmentHelper.aspectRatios(attachments)); - mediaPreview.forEachIndexed((i, imageView) -> { + mediaPreview.forEachIndexed((i, wrapper, imageView, descriptionIndicator) -> { Attachment attachment = attachments.get(i); String previewUrl = attachment.getPreviewUrl(); String description = attachment.getDescription(); + boolean hasDescription = !TextUtils.isEmpty(description); - if (TextUtils.isEmpty(description)) { - imageView.setContentDescription(imageView.getContext() - .getString(R.string.action_view_media)); - } else { + if (hasDescription) { imageView.setContentDescription(description); + } else { + imageView.setContentDescription(imageView.getContext().getString(R.string.action_view_media)); } + descriptionIndicator.setVisibility(hasDescription ? View.VISIBLE : View.GONE); loadImage( + wrapper, imageView, showingContent ? previewUrl : null, attachment.getMeta(), @@ -502,6 +505,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { } v.setVisibility(View.GONE); sensitiveMediaWarning.setVisibility(View.VISIBLE); + descriptionIndicator.setVisibility(View.GONE); }); sensitiveMediaWarning.setOnClickListener(v -> { if (getBindingAdapterPosition() != RecyclerView.NO_POSITION) { @@ -509,6 +513,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { } v.setVisibility(View.GONE); sensitiveMediaShow.setVisibility(View.VISIBLE); + descriptionIndicator.setVisibility(hasDescription ? View.VISIBLE : View.GONE); }); return null; diff --git a/app/src/main/java/com/keylesspalace/tusky/view/MediaPreviewLayout.kt b/app/src/main/java/com/keylesspalace/tusky/view/MediaPreviewLayout.kt index af5c9330..9680345f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/view/MediaPreviewLayout.kt +++ b/app/src/main/java/com/keylesspalace/tusky/view/MediaPreviewLayout.kt @@ -2,9 +2,11 @@ package com.keylesspalace.tusky.view import android.content.Context import android.util.AttributeSet +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.TextView import com.keylesspalace.tusky.R import kotlin.math.roundToInt @@ -26,7 +28,9 @@ class MediaPreviewLayout(context: Context, attrs: AttributeSet? = null) : attachImageViews() } - private val imageViewCache = Array(4) { MediaPreviewImageView(context) } + private val imageViewCache = Array(4) { + LayoutInflater.from(context).inflate(R.layout.item_image_preview_overlay, this, false) + } private var measuredOrientation = LinearLayout.VERTICAL @@ -180,9 +184,15 @@ class MediaPreviewLayout(context: Context, attrs: AttributeSet? = null) : } } - inline fun forEachIndexed(action: (Int, MediaPreviewImageView) -> Unit) { + inline fun forEachIndexed(action: (Int, View, MediaPreviewImageView, TextView) -> Unit) { for (index in 0 until childCount) { - action(index, getChildAt(index) as MediaPreviewImageView) + val wrapper = getChildAt(index) + action( + index, + wrapper, + wrapper.findViewById(R.id.preview_image_view) as MediaPreviewImageView, + wrapper.findViewById(R.id.preview_media_description_indicator) as TextView + ) } } } diff --git a/app/src/main/res/drawable/media_warning_bg.xml b/app/src/main/res/drawable/media_warning_bg.xml index 93ff4e07..c1628a62 100644 --- a/app/src/main/res/drawable/media_warning_bg.xml +++ b/app/src/main/res/drawable/media_warning_bg.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/item_image_preview_overlay.xml b/app/src/main/res/layout/item_image_preview_overlay.xml new file mode 100644 index 00000000..88cbc2a8 --- /dev/null +++ b/app/src/main/res/layout/item_image_preview_overlay.xml @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/src/main/res/layout/item_media_preview.xml b/app/src/main/res/layout/item_media_preview.xml index 34a0376c..1fec78f6 100644 --- a/app/src/main/res/layout/item_media_preview.xml +++ b/app/src/main/res/layout/item_media_preview.xml @@ -20,7 +20,7 @@ android:contentDescription="@null" android:padding="@dimen/status_sensitive_media_button_padding" android:visibility="gone" - app:layout_constraintLeft_toLeftOf="@+id/status_media_preview_container" + app:layout_constraintStart_toStartOf="@+id/status_media_preview_container" app:layout_constraintTop_toTopOf="@+id/status_media_preview_container" app:srcCompat="@drawable/ic_eye_24dp" app:tint="@color/white" /> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ca08b47f..bfe543c3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -40,6 +40,7 @@ %s teilte Heikle Inhalte Medien versteckt + ALT Zum Anzeigen tippen Zeige mehr Zeige weniger diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0794e4d..6fcc16b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,6 +60,7 @@ %s boosted Sensitive content Media hidden + ALT Click to view Show More Show Less