diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 974bba48f..d06515d3f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -526,13 +526,7 @@ public abstract class BaseStatusListFragment exten protected void revealFiltered(Status status, String itemID){ status.filterRevealed=true; - TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class); - if(text!=null) - adapter.notifyItemChanged(text.getAbsoluteAdapterPosition()-getMainAdapterOffset()); - HeaderStatusDisplayItem.Holder header=findHolderOfType(itemID, HeaderStatusDisplayItem.Holder.class); - if(header!=null) - header.rebind(); - updateImagesSpoilerState(status, itemID); + } @@ -567,10 +561,7 @@ public abstract class BaseStatusListFragment exten public void onGapClick(GapStatusDisplayItem.Holder item){} public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){ -// Status status = warningItem.getItem().status; -// String itemID = warningItem.getItemID(); - warningItem.itemView.setVisibility(View.GONE); -// adapter.notifyItemChanged(); + adapter.notifyItemChanged(warningItem.getAbsoluteAdapterPosition()); } public String getAccountID(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index f1faa0cff..da9f3393e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -58,7 +58,7 @@ public class Status extends BaseModel implements DisplayItemsParent{ public boolean bookmarked; public boolean pinned; - public boolean filterRevealed = false; + public boolean filterRevealed; public transient boolean spoilerRevealed; public transient boolean hasGapAfter; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index f959e7ba4..be07d3244 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -145,6 +145,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ private Relationship relationship; private APIRequest currentRelationshipRequest; + ViewGroup.LayoutParams params; + private static final ViewOutlineProvider roundCornersOutline=new ViewOutlineProvider(){ @Override public void getOutline(View view, Outline outline){ @@ -278,8 +280,24 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ return true; }); UiUtils.enablePopupMenuIcons(activity, optionsMenu); + +// if(!item.status.filterRevealed){ +// this.itemView.setVisibility(View.GONE); +// params = this.itemView.getLayoutParams(); +// params.height = 0; +// params.width = 0; +// this.itemView.setLayoutParams(params); +// } } +// public void setFilteredShown(){ +// this.itemView.setVisibility(View.VISIBLE); +// params = this.itemView.getLayoutParams(); +// params.height = 0; +// params.width = 0; +// this.itemView.setLayoutParams(params); +// } + private void populateAccountsMenu(Menu menu) { List sessions=AccountSessionManager.getInstance().getLoggedInAccounts(); sessions.stream().filter(s -> !s.getID().equals(item.accountID)).forEach(s -> { 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 d265e14a2..6f8c067de 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 @@ -100,11 +100,8 @@ public abstract class StatusDisplayItem{ List filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList()); StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters); - if(!filterPredicate.testWithWarning(status)){ - if(!status.filterRevealed){ - items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, status)); - } - } + + statusForContent.filterRevealed = filterPredicate.testWithWarning(status); if(status.reblog!=null){ boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account); @@ -141,9 +138,9 @@ public abstract class StatusDisplayItem{ HeaderStatusDisplayItem header; items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus)); - if(!TextUtils.isEmpty(statusForContent.content)) + if(!TextUtils.isEmpty(statusForContent.content)){ items.add(new TextStatusDisplayItem(parentID, HtmlParser.parse(statusForContent.content, statusForContent.emojis, statusForContent.mentions, statusForContent.tags, accountID), fragment, statusForContent, disableTranslate)); - else + } else header.needBottomPadding=true; List imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); if(!imageAttachments.isEmpty()){ @@ -175,8 +172,9 @@ public abstract class StatusDisplayItem{ } if(addFooter){ items.add(new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID)); - if(status.hasGapAfter && !(fragment instanceof ThreadFragment)) + if(status.hasGapAfter && !(fragment instanceof ThreadFragment)){ items.add(new GapStatusDisplayItem(parentID, fragment)); + } } int i=1; @@ -185,6 +183,10 @@ public abstract class StatusDisplayItem{ item.index=i++; } + if(!statusForContent.filterRevealed){ + items.add(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent)); + } + return items; } 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 0f5e6d0bc..52f6459b1 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 @@ -6,6 +6,8 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.model.Status; @@ -41,11 +43,16 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(WarningFilteredStatusDisplayItem item){ - text.setVisibility(item.loading ? View.GONE : View.VISIBLE); + } @Override public void onClick(){ + this.itemView.setVisibility(View.GONE); + ViewGroup.LayoutParams params = this.itemView.getLayoutParams(); + params.height = 0; + params.width = 0; + this.itemView.setLayoutParams(params); item.parentFragment.onWarningClick(this); } } diff --git a/mastodon/src/main/res/layout/place_holder_display_item.xml b/mastodon/src/main/res/layout/place_holder_display_item.xml new file mode 100644 index 000000000..280bccc57 --- /dev/null +++ b/mastodon/src/main/res/layout/place_holder_display_item.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file