From d980d35d6fc2f5aaa5744102f545d292ab871920 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Mon, 19 May 2025 09:55:39 -0300 Subject: [PATCH] refactor(CustomLocalTimelineFragment.java): add back the custom local timelines fragment --- .../CustomLocalTimelineFragment.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/fragments/CustomLocalTimelineFragment.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/CustomLocalTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/CustomLocalTimelineFragment.java new file mode 100644 index 000000000..d42dd459d --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/CustomLocalTimelineFragment.java @@ -0,0 +1,100 @@ +package org.joinmastodon.android.fragments; + +import android.app.Activity; +import android.net.Uri; +import android.view.Menu; +import android.view.MenuInflater; + +import org.joinmastodon.android.R; +import org.joinmastodon.android.api.requests.timelines.GetPublicTimeline; +import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.model.FilterContext; +import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.model.TimelineDefinition; +import org.joinmastodon.android.ui.utils.UiUtils; +import org.joinmastodon.android.utils.ProvidesAssistContent; + +// MOSHIDON FIXME: readd the google pixel links goodness +//import org.joinmastodon.android.utils.ProvidesAssistContent; + +import java.util.List; + +import me.grishka.appkit.api.SimpleCallback; + +public class CustomLocalTimelineFragment extends PinnableStatusListFragment implements ProvidesAssistContent.ProvidesWebUri{ + // private String name; + private String domain; + + private String maxID; + @Override + protected boolean wantsComposeButton() { + return false; + } + + @Override + public void onAttach(Activity activity){ + super.onAttach(activity); + domain=getArguments().getString("domain"); + updateTitle(domain); + + setHasOptionsMenu(true); + } + + private void updateTitle(String domain) { + this.domain = domain; + setTitle(this.domain); + } + + @Override + protected void doLoadData(int offset, int count){ + currentRequest=new GetPublicTimeline(true, false, refreshing ? null : maxID, null, count, null, getLocalPrefs().timelineReplyVisibility) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(List result){ + if(!result.isEmpty()) + maxID=result.get(result.size()-1).id; + if (getActivity() == null) return; + AccountSessionManager.get(accountID).filterStatuses(result, FilterContext.PUBLIC); + result.stream().forEach(status -> { + status.account.acct += "@"+domain; + status.mentions.forEach(mention -> mention.id = null); + status.isRemote = true; + }); + + onDataLoaded(result, !result.isEmpty()); + } + }) + .execNoAuth(domain); + } + + @Override + protected void onShown(){ + super.onShown(); + if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading) + loadData(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.custom_local_timelines, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + protected FilterContext getFilterContext() { + return FilterContext.PUBLIC; + } + + @Override + public Uri getWebUri(Uri.Builder base) { + return new Uri.Builder() + .scheme("https") + .authority(domain) + .build(); + } + + @Override + protected TimelineDefinition makeTimelineDefinition() { + return TimelineDefinition.ofCustomLocalTimeline(domain); + } +}