diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java index 01d40619e..d09f63a5f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java @@ -14,6 +14,7 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; import org.briarproject.briar.android.fragment.BaseFragment; +import org.briarproject.briar.android.widget.LinkDialogFragment; import java.util.logging.Logger; @@ -76,7 +77,13 @@ abstract class BasePostFragment extends BaseFragment { i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); getContext().startActivity(i); } - }, getFragmentManager()); + + @Override + public void onLinkClick(String url) { + LinkDialogFragment f = LinkDialogFragment.newInstance(url); + f.show(getParentFragmentManager(), f.getUniqueTag()); + } + }); return view; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java index 34c9034a3..a6ead22c1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java @@ -29,6 +29,7 @@ import org.briarproject.briar.android.sharing.BlogSharingStatusActivity; import org.briarproject.briar.android.sharing.ShareBlogActivity; import org.briarproject.briar.android.util.BriarSnackbarBuilder; import org.briarproject.briar.android.view.BriarRecyclerView; +import org.briarproject.briar.android.widget.LinkDialogFragment; import org.briarproject.briar.api.blog.BlogPostHeader; import java.util.Collection; @@ -69,7 +70,7 @@ public class BlogFragment extends BaseFragment private Parcelable layoutManagerState; private GroupId groupId; - private BlogPostAdapter adapter; + private final BlogPostAdapter adapter = new BlogPostAdapter(this); private LayoutManager layoutManager; private BriarRecyclerView list; private MenuItem writeButton, deleteButton; @@ -104,7 +105,6 @@ public class BlogFragment extends BaseFragment View v = inflater.inflate(R.layout.fragment_blog, container, false); - adapter = new BlogPostAdapter(this, getParentFragmentManager()); list = v.findViewById(R.id.postList); layoutManager = new LinearLayoutManager(getActivity()); list.setLayoutManager(layoutManager); @@ -256,6 +256,12 @@ public class BlogFragment extends BaseFragment getContext().startActivity(i); } + @Override + public void onLinkClick(String url) { + LinkDialogFragment f = LinkDialogFragment.newInstance(url); + f.show(getParentFragmentManager(), f.getUniqueTag()); + } + private void loadBlogPosts(boolean reload) { blogController.loadBlogPosts( new UiResultExceptionHandler, diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java index 53a8b301f..00d051e39 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java @@ -8,8 +8,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; @@ -18,11 +16,8 @@ import androidx.recyclerview.widget.ListAdapter; class BlogPostAdapter extends ListAdapter { private final OnBlogPostClickListener listener; - @Nullable - private final FragmentManager fragmentManager; - BlogPostAdapter(OnBlogPostClickListener listener, - @Nullable FragmentManager fragmentManager) { + BlogPostAdapter(OnBlogPostClickListener listener) { super(new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(BlogPostItem a, BlogPostItem b) { @@ -35,7 +30,6 @@ class BlogPostAdapter extends ListAdapter { } }); this.listener = listener; - this.fragmentManager = fragmentManager; } @Override @@ -43,7 +37,7 @@ class BlogPostAdapter extends ListAdapter { int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate( R.layout.list_item_blog_post, parent, false); - return new BlogPostViewHolder(v, false, listener, fragmentManager); + return new BlogPostViewHolder(v, false, listener); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java index e10af04b9..ad4debe92 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java @@ -20,7 +20,6 @@ import javax.annotation.Nullable; import androidx.annotation.NonNull; import androidx.annotation.UiThread; import androidx.core.view.ViewCompat; -import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.RecyclerView; import static android.view.View.GONE; @@ -47,16 +46,12 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { @NonNull private final OnBlogPostClickListener listener; - @Nullable - private final FragmentManager fragmentManager; BlogPostViewHolder(View v, boolean fullText, - @NonNull OnBlogPostClickListener listener, - @Nullable FragmentManager fragmentManager) { + @NonNull OnBlogPostClickListener listener) { super(v); this.fullText = fullText; this.listener = listener; - this.fragmentManager = fragmentManager; ctx = v.getContext(); layout = v.findViewById(R.id.postLayout); @@ -67,10 +62,6 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { commentContainer = v.findViewById(R.id.commentContainer); } - void setVisibility(int visibility) { - layout.setVisibility(visibility); - } - void hideReblogButton() { reblogButton.setVisibility(GONE); } @@ -114,7 +105,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { if (fullText) { text.setText(postText); text.setTextIsSelectable(true); - makeLinksClickable(text, fragmentManager); + makeLinksClickable(text, listener::onLinkClick); } else { text.setTextIsSelectable(false); if (postText.length() > TEASER_LENGTH) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java index 97cca5ca6..c876ca849 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java @@ -17,6 +17,7 @@ import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.util.BriarSnackbarBuilder; import org.briarproject.briar.android.view.BriarRecyclerView; +import org.briarproject.briar.android.widget.LinkDialogFragment; import org.briarproject.briar.api.blog.Blog; import java.util.List; @@ -44,7 +45,7 @@ public class FeedFragment extends BaseFragment ViewModelProvider.Factory viewModelFactory; private FeedViewModel viewModel; - private BlogPostAdapter adapter; + private final BlogPostAdapter adapter = new BlogPostAdapter(this); private LinearLayoutManager layoutManager; private BriarRecyclerView list; @Nullable @@ -79,8 +80,6 @@ public class FeedFragment extends BaseFragment View v = inflater.inflate(R.layout.fragment_blog, container, false); - adapter = new BlogPostAdapter(this, getParentFragmentManager()); - layoutManager = new LinearLayoutManager(getActivity()); list = v.findViewById(R.id.postList); list.setLayoutManager(layoutManager); @@ -185,6 +184,12 @@ public class FeedFragment extends BaseFragment requireContext().startActivity(i); } + @Override + public void onLinkClick(String url) { + LinkDialogFragment f = LinkDialogFragment.newInstance(url); + f.show(getParentFragmentManager(), f.getUniqueTag()); + } + @Override public String getUniqueTag() { return TAG; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java index 9920e4775..8e3d332e6 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java @@ -5,4 +5,6 @@ interface OnBlogPostClickListener { void onBlogPostClick(BlogPostItem post); void onAuthorClick(BlogPostItem post); + + void onLinkClick(String url); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java index a4aecd098..f3746d7f7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java @@ -17,6 +17,7 @@ import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.view.TextInputView; import org.briarproject.briar.android.view.TextSendController; import org.briarproject.briar.android.view.TextSendController.SendListener; +import org.briarproject.briar.android.widget.LinkDialogFragment; import org.briarproject.briar.api.attachment.AttachmentHeader; import java.util.List; @@ -151,7 +152,13 @@ public class ReblogFragment extends BaseFragment implements SendListener { public void onAuthorClick(BlogPostItem post) { // probably don't want to allow author clicks here } - }, getParentFragmentManager()); + + @Override + public void onLinkClick(String url) { + LinkDialogFragment f = LinkDialogFragment.newInstance(url); + f.show(getParentFragmentManager(), f.getUniqueTag()); + } + }); input = v.findViewById(R.id.inputText); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index 5cb811502..50459bb78 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -34,7 +34,6 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.reporting.FeedbackActivity; import org.briarproject.briar.android.view.ArticleMovementMethod; -import org.briarproject.briar.android.widget.LinkDialogFragment; import java.util.Locale; @@ -49,8 +48,8 @@ import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.core.hardware.fingerprint.FingerprintManagerCompat; import androidx.core.text.HtmlCompat; +import androidx.core.util.Consumer; import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; @@ -198,8 +197,7 @@ public class UiUtils { } public static void makeLinksClickable(TextView v, - @Nullable FragmentManager fm) { - if (fm == null) return; + Consumer onLinkClicked) { SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText()); URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class); for (URLSpan span : spans) { @@ -210,8 +208,7 @@ public class UiUtils { ClickableSpan cSpan = new ClickableSpan() { @Override public void onClick(View v2) { - LinkDialogFragment f = LinkDialogFragment.newInstance(url); - f.show(fm, f.getUniqueTag()); + onLinkClicked.accept(url); } }; ssb.setSpan(cSpan, start, end, 0);