diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java index 880f2ef62..c0d2f99cd 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/AltTextFilter.java @@ -1,6 +1,8 @@ package org.joinmastodon.android.model; import org.joinmastodon.android.GlobalUserPreferences; +import org.joinmastodon.android.MastodonApp; +import org.joinmastodon.android.R; import org.jsoup.internal.StringUtil; import java.util.EnumSet; @@ -8,9 +10,10 @@ import java.util.EnumSet; public class AltTextFilter extends LegacyFilter { public AltTextFilter(FilterAction filterAction, EnumSet filterContexts) { - this.filterAction = filterAction; - isRemote = false; - context = filterContexts; + this.filterAction=filterAction; + this.title=MastodonApp.context.getString(R.string.sk_no_alt_text); + this.isRemote=false; + this.context=filterContexts; } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index b2aaa4639..a2c824fdc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -396,6 +396,8 @@ public abstract class StatusDisplayItem{ List nonGapItems=gap!=null ? items.subList(0, items.size()-1) : items; WarningFilteredStatusDisplayItem warning=applyingFilter==null ? null : new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, nonGapItems, applyingFilter); + if(warning!=null) + warning.inset=inset; return applyingFilter==null ? items : new ArrayList<>(gap!=null ? List.of(warning, gap) : Collections.singletonList(warning) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java index 37b9d5ec2..97899833a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java @@ -8,14 +8,12 @@ import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.BaseStatusListFragment; -import org.joinmastodon.android.model.AltTextFilter; -import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.LegacyFilter; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.OutlineProviders; import java.util.List; -// Mind the gap! public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public boolean loading; public List filteredItems; @@ -24,8 +22,8 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, List filteredItems, LegacyFilter applyingFilter){ super(parentID, parentFragment); this.status=status; - this.filteredItems = filteredItems; - this.applyingFilter = applyingFilter; + this.filteredItems=filteredItems; + this.applyingFilter=applyingFilter; } @Override @@ -33,31 +31,34 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ return Type.WARNING; } - public static class Holder extends StatusDisplayItem.Holder{ - public final View warningWrap; - public final Button showBtn; - public final TextView text; - public List filteredItems; + public static class Holder extends StatusDisplayItem.Holder{ + public final View warningWrap; + public final Button showBtn; + public final TextView text; + public List filteredItems; - public Holder(Context context, ViewGroup parent){ - super(context, R.layout.display_item_warning, parent); - warningWrap=findViewById(R.id.warning_wrap); - showBtn=findViewById(R.id.reveal_btn); - showBtn.setOnClickListener(i -> item.parentFragment.onWarningClick(this)); - itemView.setOnClickListener(v->item.parentFragment.onWarningClick(this)); - text=findViewById(R.id.text); - } - - @Override - public void onBind(WarningFilteredStatusDisplayItem item) { - filteredItems = item.filteredItems; - String title = item.applyingFilter instanceof AltTextFilter ? item.parentFragment.getString(R.string.sk_no_alt_text) : item.applyingFilter.title; - text.setText(item.parentFragment.getString(R.string.sk_filtered, title)); + public Holder(Context context, ViewGroup parent){ + super(context, R.layout.display_item_warning, parent); + warningWrap=findViewById(R.id.warning_wrap); + showBtn=findViewById(R.id.reveal_btn); + showBtn.setOnClickListener(i->item.parentFragment.onWarningClick(this)); + itemView.setOnClickListener(v->item.parentFragment.onWarningClick(this)); + text=findViewById(R.id.text); } - @Override - public void onClick(){ + @Override + public void onBind(WarningFilteredStatusDisplayItem item){ + filteredItems=item.filteredItems; + String title=item.applyingFilter.title; + text.setText(item.parentFragment.getString(R.string.sk_filtered, title)); - } - } + if(item.inset){ + itemView.setClipToOutline(true); + itemView.setOutlineProvider(OutlineProviders.roundedRect(12)); + } + } + + @Override + public void onClick(){} + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/InsetStatusItemDecoration.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/InsetStatusItemDecoration.java index cb4a2b08e..b6e893d43 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/InsetStatusItemDecoration.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/InsetStatusItemDecoration.java @@ -11,6 +11,7 @@ import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.LinkCardStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.MediaGridStatusDisplayItem; +import org.joinmastodon.android.ui.displayitems.WarningFilteredStatusDisplayItem; import java.util.List; @@ -42,13 +43,16 @@ public class InsetStatusItemDecoration extends RecyclerView.ItemDecoration{ boolean inset=(holder instanceof StatusDisplayItem.Holder sdi) && sdi.getItem().inset; if(inset){ if(rect.isEmpty()){ - if(holder instanceof MediaGridStatusDisplayItem.Holder || holder instanceof LinkCardStatusDisplayItem.Holder){ - rect.set(child.getX(), i == 0 && pos > 0 && displayItems.get(pos - 1).inset ? V.dp(-10) : child.getY(), child.getX() + child.getWidth(), child.getY() + child.getHeight() + V.dp(4)); + if(holder instanceof MediaGridStatusDisplayItem.Holder || holder instanceof LinkCardStatusDisplayItem.Holder || holder instanceof WarningFilteredStatusDisplayItem.Holder){ + float topInset=i == 0 && pos > 0 && displayItems.get(pos - 1).inset ? V.dp(-10) : child.getY(); + if(holder instanceof WarningFilteredStatusDisplayItem.Holder) + topInset-=V.dp(4); + rect.set(child.getX(), topInset, child.getX() + child.getWidth(), child.getY() + child.getHeight() + V.dp(4)); }else { rect.set(child.getX(), i == 0 && pos > 0 && displayItems.get(pos - 1).inset ? V.dp(-10) : child.getY(), child.getX() + child.getWidth(), child.getY() + child.getHeight()); } }else{ - if(holder instanceof MediaGridStatusDisplayItem.Holder || holder instanceof LinkCardStatusDisplayItem.Holder){ + if(holder instanceof MediaGridStatusDisplayItem.Holder || holder instanceof LinkCardStatusDisplayItem.Holder || holder instanceof WarningFilteredStatusDisplayItem.Holder){ rect.bottom=Math.max(rect.bottom, child.getY()+child.getHeight()) + V.dp(4); }else { rect.bottom=Math.max(rect.bottom, child.getY()+child.getHeight()); diff --git a/mastodon/src/main/res/layout/display_item_warning.xml b/mastodon/src/main/res/layout/display_item_warning.xml index 458fb9abf..4bec2a7c7 100644 --- a/mastodon/src/main/res/layout/display_item_warning.xml +++ b/mastodon/src/main/res/layout/display_item_warning.xml @@ -29,8 +29,7 @@ android:layout_weight="1" android:singleLine="true" android:ellipsize="end" - android:visibility="visible" - /> + android:visibility="visible"/> \ No newline at end of file