From 4bac1cbc06f1775611bde30f5a9f6a6577e24a16 Mon Sep 17 00:00:00 2001 From: Grishka Date: Thu, 7 Apr 2022 18:33:39 +0300 Subject: [PATCH] Make text selectable in thread view --- .../fragments/BaseStatusListFragment.java | 4 ++++ .../android/fragments/ThreadFragment.java | 20 +++++++++++++++++++ .../ui/displayitems/StatusDisplayItem.java | 7 ++++++- .../displayitems/TextStatusDisplayItem.java | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) 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 d6e76a911..1b810c922 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -543,6 +543,10 @@ public abstract class BaseStatusListFragment exten } + public boolean isItemEnabled(String id){ + return true; + } + @Override public void onApplyWindowInsets(WindowInsets insets){ if(Build.VERSION.SDK_INT>=29 && insets.getTappableElementInsets().bottom==0 && wantsOverlaySystemNavigation()){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java index 3739309ae..777751a1d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java @@ -15,11 +15,14 @@ import org.joinmastodon.android.events.StatusDeletedEvent; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.StatusContext; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; +import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.UiUtils; import org.parceler.Parcels; import java.util.Collections; +import java.util.List; import me.grishka.appkit.api.SimpleCallback; @@ -38,6 +41,18 @@ public class ThreadFragment extends StatusListFragment{ setTitle(HtmlParser.parseCustomEmoji(getString(R.string.post_from_user, mainStatus.account.displayName), mainStatus.account.emojis)); } + @Override + protected List buildDisplayItems(Status s){ + List items=super.buildDisplayItems(s); + if(s==mainStatus){ + for(StatusDisplayItem item:items){ + if(item instanceof TextStatusDisplayItem) + ((TextStatusDisplayItem) item).textSelectable=true; + } + } + return items; + } + @Override protected void doLoadData(int offset, int count){ currentRequest=new GetStatusContext(mainStatus.id) @@ -105,4 +120,9 @@ public class ThreadFragment extends StatusListFragment{ onAppendItems(Collections.singletonList(ev.status)); } } + + @Override + public boolean isItemEnabled(String id){ + return !id.equals(mainStatus.id); + } } 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 effe79162..f591d7c93 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 @@ -145,7 +145,7 @@ public abstract class StatusDisplayItem{ HASHTAG } - public static abstract class Holder extends BindableViewHolder implements UsableRecyclerView.Clickable{ + public static abstract class Holder extends BindableViewHolder implements UsableRecyclerView.DisableableClickable{ public Holder(View itemView){ super(itemView); } @@ -162,5 +162,10 @@ public abstract class StatusDisplayItem{ public void onClick(){ item.parentFragment.onItemClick(item.parentID); } + + @Override + public boolean isEnabled(){ + return item.parentFragment.isItemEnabled(item.parentID); + } } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index 2568362c6..8621e36c3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -21,6 +21,7 @@ import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; public class TextStatusDisplayItem extends StatusDisplayItem{ private CharSequence text; private CustomEmojiHelper emojiHelper=new CustomEmojiHelper(); + public boolean textSelectable; public final Status status; public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status){ @@ -61,6 +62,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ @Override public void onBind(TextStatusDisplayItem item){ text.setText(item.text); + text.setTextIsSelectable(item.textSelectable); text.setInvalidateOnEveryFrame(false); if(!TextUtils.isEmpty(item.status.spoilerText)){ spoilerTitle.setText(item.status.spoilerText);