add media indicator for spoiler

closes sk22#598
This commit is contained in:
sk 2023-09-05 00:18:47 +02:00
parent 5065c7e7e2
commit 2aba90f353
4 changed files with 35 additions and 15 deletions

View File

@ -6,9 +6,9 @@ import android.graphics.drawable.LayerDrawable;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
@ -29,11 +29,13 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
private final CharSequence parsedTitle; private final CharSequence parsedTitle;
private final CustomEmojiHelper emojiHelper; private final CustomEmojiHelper emojiHelper;
private final Type type; private final Type type;
private final int attachmentCount;
public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){ public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){
super(parentID, parentFragment); super(parentID, parentFragment);
this.status=statusForContent; this.status=statusForContent;
this.type=type; this.type=type;
this.attachmentCount=statusForContent.mediaAttachments.size();
if(TextUtils.isEmpty(title)){ if(TextUtils.isEmpty(title)){
parsedTitle=HtmlParser.parseCustomEmoji(statusForContent.spoilerText, statusForContent.emojis); parsedTitle=HtmlParser.parseCustomEmoji(statusForContent.spoilerText, statusForContent.emojis);
emojiHelper=new CustomEmojiHelper(); emojiHelper=new CustomEmojiHelper();
@ -62,12 +64,14 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<SpoilerStatusDisplayItem> implements ImageLoaderViewHolder{ public static class Holder extends StatusDisplayItem.Holder<SpoilerStatusDisplayItem> implements ImageLoaderViewHolder{
private final TextView title, action; private final TextView title, action;
private final View button; private final View button;
private final ImageView mediaIcon;
public Holder(Context context, ViewGroup parent, Type type){ public Holder(Context context, ViewGroup parent, Type type){
super(context, R.layout.display_item_spoiler, parent); super(context, R.layout.display_item_spoiler, parent);
title=findViewById(R.id.spoiler_title); title=findViewById(R.id.spoiler_title);
action=findViewById(R.id.spoiler_action); action=findViewById(R.id.spoiler_action);
button=findViewById(R.id.spoiler_button); button=findViewById(R.id.spoiler_button);
mediaIcon=findViewById(R.id.media_icon);
button.setOutlineProvider(OutlineProviders.roundedRect(8)); button.setOutlineProvider(OutlineProviders.roundedRect(8));
button.setClipToOutline(true); button.setClipToOutline(true);
@ -94,6 +98,10 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
itemView.getPaddingRight(), itemView.getPaddingRight(),
item.inset ? itemView.getPaddingTop() : 0 item.inset ? itemView.getPaddingTop() : 0
); );
mediaIcon.setVisibility(item.attachmentCount > 0 ? View.VISIBLE : View.GONE);
mediaIcon.setImageResource(item.attachmentCount > 1
? R.drawable.ic_fluent_image_multiple_24_regular
: R.drawable.ic_fluent_image_24_regular);
} }
@Override @Override

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M13.748 8.996c0.69 0 1.248-0.559 1.248-1.248 0-0.69-0.559-1.248-1.248-1.248-0.69 0-1.248 0.559-1.248 1.248 0 0.69 0.559 1.248 1.248 1.248zM6.25 3C4.455 3 3 4.455 3 6.25v9c0 1.795 1.455 3.25 3.25 3.25h9c1.795 0 3.25-1.455 3.25-3.25v-9C18.5 4.455 17.045 3 15.25 3h-9zM4.5 6.25c0-0.966 0.784-1.75 1.75-1.75h9C16.216 4.5 17 5.284 17 6.25v9c0 0.231-0.045 0.452-0.126 0.654l-4.587-4.291c-0.865-0.81-2.21-0.81-3.075 0l-4.586 4.29C4.545 15.701 4.5 15.481 4.5 15.25v-9zm6.762 6.458l4.505 4.214C15.604 16.972 15.43 17 15.25 17h-9c-0.18 0-0.354-0.027-0.518-0.078l4.505-4.214c0.289-0.27 0.737-0.27 1.025 0zM8.75 21c-1.15 0-2.162-0.598-2.74-1.5h9.74c2.071 0 3.75-1.679 3.75-3.75V6.011C20.402 6.59 21 7.6 21 8.751v7C21 18.65 18.65 21 15.75 21h-7z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -8,7 +8,7 @@
android:paddingTop="16dp" android:paddingTop="16dp"
android:paddingRight="16dp"> android:paddingRight="16dp">
<LinearLayout <RelativeLayout
android:id="@+id/spoiler_button" android:id="@+id/spoiler_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -18,12 +18,27 @@
android:paddingTop="8dp" android:paddingTop="8dp"
android:paddingRight="12dp" android:paddingRight="12dp"
android:paddingBottom="8dp"> android:paddingBottom="8dp">
<ImageView
android:id="@+id/media_icon"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginHorizontal="8dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:scaleType="center"
android:contentDescription="@string/sk_post_contains_media"
android:src="@drawable/ic_fluent_image_24_regular"
android:tint="?colorM3OnSecondaryContainer" />
<TextView <TextView
android:id="@+id/spoiler_title" android:id="@+id/spoiler_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_toStartOf="@id/media_icon"
android:textAppearance="@style/m3_body_large" android:textAppearance="@style/m3_body_large"
android:textColor="?colorM3OnSecondaryContainer" android:textColor="?colorM3OnSecondaryContainer"
tools:text="Spoilery stuff"/> tools:text="Spoilery stuff"/>
@ -32,21 +47,14 @@
android:id="@+id/spoiler_action" android:id="@+id/spoiler_action"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="20dp" android:layout_height="20dp"
android:layout_below="@id/spoiler_title"
android:layout_toStartOf="@id/media_icon"
android:textAppearance="@style/m3_label_large" android:textAppearance="@style/m3_label_large"
android:singleLine="true" android:singleLine="true"
android:gravity="center_vertical" android:gravity="center_vertical"
android:textColor="?colorM3Primary" android:textColor="?colorM3Primary"
tools:text="Re-hide"/> tools:text="Re-hide"/>
</LinearLayout> </RelativeLayout>
<ImageView </FrameLayout>
android:id="@+id/media_icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:background="?android:actionBarItemBackground"
android:scaleType="center"
android:src="@drawable/ic_fluent_image_24_regular"
android:tint="?android:textColorSecondary" />
</LinearLayout>

View File

@ -384,4 +384,5 @@
<item quantity="one">post</item> <item quantity="one">post</item>
<item quantity="other">posts</item> <item quantity="other">posts</item>
</plurals> </plurals>
<string name="sk_post_contains_media">Post contains media</string>
</resources> </resources>