Make BlogAdapter final and don't pass in a FragmentManager

This commit is contained in:
Torsten Grote
2021-01-11 16:46:10 -03:00
parent ab1ed0ff5a
commit b678de7529
8 changed files with 41 additions and 32 deletions

View File

@@ -14,6 +14,7 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -76,7 +77,13 @@ abstract class BasePostFragment extends BaseFragment {
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
getContext().startActivity(i); getContext().startActivity(i);
} }
}, getFragmentManager());
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
});
return view; return view;
} }

View File

@@ -29,6 +29,7 @@ import org.briarproject.briar.android.sharing.BlogSharingStatusActivity;
import org.briarproject.briar.android.sharing.ShareBlogActivity; import org.briarproject.briar.android.sharing.ShareBlogActivity;
import org.briarproject.briar.android.util.BriarSnackbarBuilder; import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.blog.BlogPostHeader; import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.Collection; import java.util.Collection;
@@ -69,7 +70,7 @@ public class BlogFragment extends BaseFragment
private Parcelable layoutManagerState; private Parcelable layoutManagerState;
private GroupId groupId; private GroupId groupId;
private BlogPostAdapter adapter; private final BlogPostAdapter adapter = new BlogPostAdapter(this);
private LayoutManager layoutManager; private LayoutManager layoutManager;
private BriarRecyclerView list; private BriarRecyclerView list;
private MenuItem writeButton, deleteButton; private MenuItem writeButton, deleteButton;
@@ -104,7 +105,6 @@ public class BlogFragment extends BaseFragment
View v = inflater.inflate(R.layout.fragment_blog, container, false); View v = inflater.inflate(R.layout.fragment_blog, container, false);
adapter = new BlogPostAdapter(this, getParentFragmentManager());
list = v.findViewById(R.id.postList); list = v.findViewById(R.id.postList);
layoutManager = new LinearLayoutManager(getActivity()); layoutManager = new LinearLayoutManager(getActivity());
list.setLayoutManager(layoutManager); list.setLayoutManager(layoutManager);
@@ -256,6 +256,12 @@ public class BlogFragment extends BaseFragment
getContext().startActivity(i); getContext().startActivity(i);
} }
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
private void loadBlogPosts(boolean reload) { private void loadBlogPosts(boolean reload) {
blogController.loadBlogPosts( blogController.loadBlogPosts(
new UiResultExceptionHandler<List<BlogPostItem>, new UiResultExceptionHandler<List<BlogPostItem>,

View File

@@ -8,8 +8,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.ListAdapter;
@@ -18,11 +16,8 @@ import androidx.recyclerview.widget.ListAdapter;
class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> { class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
private final OnBlogPostClickListener listener; private final OnBlogPostClickListener listener;
@Nullable
private final FragmentManager fragmentManager;
BlogPostAdapter(OnBlogPostClickListener listener, BlogPostAdapter(OnBlogPostClickListener listener) {
@Nullable FragmentManager fragmentManager) {
super(new DiffUtil.ItemCallback<BlogPostItem>() { super(new DiffUtil.ItemCallback<BlogPostItem>() {
@Override @Override
public boolean areItemsTheSame(BlogPostItem a, BlogPostItem b) { public boolean areItemsTheSame(BlogPostItem a, BlogPostItem b) {
@@ -35,7 +30,6 @@ class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
} }
}); });
this.listener = listener; this.listener = listener;
this.fragmentManager = fragmentManager;
} }
@Override @Override
@@ -43,7 +37,7 @@ class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
int viewType) { int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate( View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_item_blog_post, parent, false); R.layout.list_item_blog_post, parent, false);
return new BlogPostViewHolder(v, false, listener, fragmentManager); return new BlogPostViewHolder(v, false, listener);
} }
@Override @Override

View File

@@ -20,7 +20,6 @@ import javax.annotation.Nullable;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.UiThread; import androidx.annotation.UiThread;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import static android.view.View.GONE; import static android.view.View.GONE;
@@ -47,16 +46,12 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
@NonNull @NonNull
private final OnBlogPostClickListener listener; private final OnBlogPostClickListener listener;
@Nullable
private final FragmentManager fragmentManager;
BlogPostViewHolder(View v, boolean fullText, BlogPostViewHolder(View v, boolean fullText,
@NonNull OnBlogPostClickListener listener, @NonNull OnBlogPostClickListener listener) {
@Nullable FragmentManager fragmentManager) {
super(v); super(v);
this.fullText = fullText; this.fullText = fullText;
this.listener = listener; this.listener = listener;
this.fragmentManager = fragmentManager;
ctx = v.getContext(); ctx = v.getContext();
layout = v.findViewById(R.id.postLayout); layout = v.findViewById(R.id.postLayout);
@@ -67,10 +62,6 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
commentContainer = v.findViewById(R.id.commentContainer); commentContainer = v.findViewById(R.id.commentContainer);
} }
void setVisibility(int visibility) {
layout.setVisibility(visibility);
}
void hideReblogButton() { void hideReblogButton() {
reblogButton.setVisibility(GONE); reblogButton.setVisibility(GONE);
} }
@@ -114,7 +105,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
if (fullText) { if (fullText) {
text.setText(postText); text.setText(postText);
text.setTextIsSelectable(true); text.setTextIsSelectable(true);
makeLinksClickable(text, fragmentManager); makeLinksClickable(text, listener::onLinkClick);
} else { } else {
text.setTextIsSelectable(false); text.setTextIsSelectable(false);
if (postText.length() > TEASER_LENGTH) if (postText.length() > TEASER_LENGTH)

View File

@@ -17,6 +17,7 @@ import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.util.BriarSnackbarBuilder; import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.blog.Blog;
import java.util.List; import java.util.List;
@@ -44,7 +45,7 @@ public class FeedFragment extends BaseFragment
ViewModelProvider.Factory viewModelFactory; ViewModelProvider.Factory viewModelFactory;
private FeedViewModel viewModel; private FeedViewModel viewModel;
private BlogPostAdapter adapter; private final BlogPostAdapter adapter = new BlogPostAdapter(this);
private LinearLayoutManager layoutManager; private LinearLayoutManager layoutManager;
private BriarRecyclerView list; private BriarRecyclerView list;
@Nullable @Nullable
@@ -79,8 +80,6 @@ public class FeedFragment extends BaseFragment
View v = inflater.inflate(R.layout.fragment_blog, container, false); View v = inflater.inflate(R.layout.fragment_blog, container, false);
adapter = new BlogPostAdapter(this, getParentFragmentManager());
layoutManager = new LinearLayoutManager(getActivity()); layoutManager = new LinearLayoutManager(getActivity());
list = v.findViewById(R.id.postList); list = v.findViewById(R.id.postList);
list.setLayoutManager(layoutManager); list.setLayoutManager(layoutManager);
@@ -185,6 +184,12 @@ public class FeedFragment extends BaseFragment
requireContext().startActivity(i); requireContext().startActivity(i);
} }
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
@Override @Override
public String getUniqueTag() { public String getUniqueTag() {
return TAG; return TAG;

View File

@@ -5,4 +5,6 @@ interface OnBlogPostClickListener {
void onBlogPostClick(BlogPostItem post); void onBlogPostClick(BlogPostItem post);
void onAuthorClick(BlogPostItem post); void onAuthorClick(BlogPostItem post);
void onLinkClick(String url);
} }

View File

@@ -17,6 +17,7 @@ import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.view.TextInputView; import org.briarproject.briar.android.view.TextInputView;
import org.briarproject.briar.android.view.TextSendController; import org.briarproject.briar.android.view.TextSendController;
import org.briarproject.briar.android.view.TextSendController.SendListener; import org.briarproject.briar.android.view.TextSendController.SendListener;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.attachment.AttachmentHeader; import org.briarproject.briar.api.attachment.AttachmentHeader;
import java.util.List; import java.util.List;
@@ -151,7 +152,13 @@ public class ReblogFragment extends BaseFragment implements SendListener {
public void onAuthorClick(BlogPostItem post) { public void onAuthorClick(BlogPostItem post) {
// probably don't want to allow author clicks here // 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); input = v.findViewById(R.id.inputText);
} }
} }

View File

@@ -34,7 +34,6 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.reporting.FeedbackActivity; import org.briarproject.briar.android.reporting.FeedbackActivity;
import org.briarproject.briar.android.view.ArticleMovementMethod; import org.briarproject.briar.android.view.ArticleMovementMethod;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import java.util.Locale; import java.util.Locale;
@@ -49,8 +48,8 @@ import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.hardware.fingerprint.FingerprintManagerCompat; import androidx.core.hardware.fingerprint.FingerprintManagerCompat;
import androidx.core.text.HtmlCompat; import androidx.core.text.HtmlCompat;
import androidx.core.util.Consumer;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
@@ -198,8 +197,7 @@ public class UiUtils {
} }
public static void makeLinksClickable(TextView v, public static void makeLinksClickable(TextView v,
@Nullable FragmentManager fm) { Consumer<String> onLinkClicked) {
if (fm == null) return;
SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText()); SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText());
URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class); URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class);
for (URLSpan span : spans) { for (URLSpan span : spans) {
@@ -210,8 +208,7 @@ public class UiUtils {
ClickableSpan cSpan = new ClickableSpan() { ClickableSpan cSpan = new ClickableSpan() {
@Override @Override
public void onClick(View v2) { public void onClick(View v2) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url); onLinkClicked.accept(url);
f.show(fm, f.getUniqueTag());
} }
}; };
ssb.setSpan(cSpan, start, end, 0); ssb.setSpan(cSpan, start, end, 0);