Commit d4c2b6da authored by Thomas's avatar Thomas
Browse files

- Fix #1248 add Trending Links to pinnable timelines and remote instances

parent 052d01cb
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -199,6 +199,8 @@ public class ReorderTimelinesActivity extends BaseBarActivity implements OnStart
                    url = "https://" + instanceName + "/api/v1/timelines/public?local=true";
                } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.mastodon_trending_instance) {
                    url = "https://" + instanceName + "/api/v1/trends/statuses";
                } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.mastodon_trending_link_instance) {
                    url = "https://" + instanceName + "/api/v1/trends/links";
                } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.peertube_instance) {
                    url = "https://" + instanceName + "/api/v1/videos/";
                } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.pixelfed_instance) {
@@ -253,6 +255,8 @@ public class ReorderTimelinesActivity extends BaseBarActivity implements OnStart
                                        instanceType = RemoteInstance.InstanceType.MASTODON;
                                    } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.mastodon_trending_instance) {
                                        instanceType = RemoteInstance.InstanceType.MASTODON_TRENDING;
                                    } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.mastodon_trending_link_instance) {
                                        instanceType = RemoteInstance.InstanceType.MASTODON_TRENDING_LINK;
                                    } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.peertube_instance) {
                                        instanceType = RemoteInstance.InstanceType.PEERTUBE;
                                    } else if (popupSearchInstanceBinding.setAttachmentGroup.getCheckedRadioButtonId() == R.id.pixelfed_instance) {
+2 −0
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ public class RemoteInstance implements Serializable {
        MASTODON("MASTODON"),
        @SerializedName("MASTODON_TRENDING")
        MASTODON_TRENDING("MASTODON_TRENDING"),
        @SerializedName("MASTODON_TRENDING_LINK")
        MASTODON_TRENDING_LINK("MASTODON_TRENDING_LINK"),
        @SerializedName("PIXELFED")
        PIXELFED("PIXELFED"),
        @SerializedName("PEERTUBE")
+31 −0
Original line number Diff line number Diff line
@@ -242,6 +242,26 @@ public class PinnedTimelineHelper {
                    new Pinned(activity).insertPinned(pinned);
                }
            }
            //Trend link timeline
            boolean createDefaultTrendLinkAtTop = true;
            for (PinnedTimeline pinnedTimeline : pinnedAll.pinnedTimelines) {
                if (pinnedTimeline.type == Timeline.TimeLineEnum.TREND_LINK) {
                    createDefaultTrendLinkAtTop = false;
                    break;
                }
            }
            if (createDefaultTrendLinkAtTop) {
                PinnedTimeline pinnedTimelineTrendLink = new PinnedTimeline();
                pinnedTimelineTrendLink.type = Timeline.TimeLineEnum.TREND_LINK;
                pinnedTimelineTrendLink.position = pinnedAll.pinnedTimelines != null ? pinnedAll.pinnedTimelines.size() : 0;
                pinned.pinnedTimelines.add(pinnedTimelineTrendLink);
                boolean exist = new Pinned(activity).pinnedExist(pinned);
                if (exist) {
                    new Pinned(activity).updatePinned(pinned);
                } else {
                    new Pinned(activity).insertPinned(pinned);
                }
            }
        } catch (DBException e) {
            e.printStackTrace();
        }
@@ -416,6 +436,9 @@ public class PinnedTimelineHelper {
                                case MASTODON_TRENDING:
                                    tabCustomViewBinding.icon.setImageResource(R.drawable.ic_baseline_trending_up_24);
                                    break;
                                case MASTODON_TRENDING_LINK:
                                    tabCustomViewBinding.icon.setImageResource(R.drawable.ic_full_link);
                                    break;
                                case LEMMY:
                                    tabCustomViewBinding.icon.setImageResource(R.drawable.lemmy);
                                    break;
@@ -468,6 +491,10 @@ public class PinnedTimelineHelper {
                            tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.baseline_moving_24);
                            tab.setContentDescription(R.string.trending);
                            break;
                        case TREND_LINK:
                            tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_full_link);
                            tab.setContentDescription(R.string.links);
                            break;
                    }
                    tab.setCustomView(tabCustomDefaultViewBinding.getRoot());
                }
@@ -518,6 +545,9 @@ public class PinnedTimelineHelper {
                            case MASTODON_TRENDING:
                                item.setIcon(R.drawable.ic_baseline_trending_up_24);
                                break;
                            case MASTODON_TRENDING_LINK:
                                item.setIcon(R.drawable.ic_full_link);
                                break;
                            case PEERTUBE:
                                item.setIcon(R.drawable.peertube_icon);
                                break;
@@ -597,6 +627,7 @@ public class PinnedTimelineHelper {
                    case HOME:
                    case LOCAL:
                    case TREND_MESSAGE:
                    case TREND_LINK:
                    case PUBLIC:
                        defaultClick(activity, pinnedTimelineVisibleList.get(position).type, v, activityMainBinding, finalI);
                        break;
+7 −0
Original line number Diff line number Diff line
@@ -92,6 +92,9 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                    case MASTODON_TRENDING:
                        holder.binding.icon.setImageResource(R.drawable.ic_baseline_trending_up_24);
                        break;
                    case MASTODON_TRENDING_LINK:
                        holder.binding.icon.setImageResource(R.drawable.ic_full_link);
                        break;
                    case PIXELFED:
                        holder.binding.icon.setImageResource(R.drawable.pixelfed);
                        break;
@@ -165,6 +168,10 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                holder.binding.icon.setImageResource(R.drawable.baseline_moving_24);
                holder.binding.text.setText(R.string.trending);
                break;
            case TREND_LINK:
                holder.binding.icon.setImageResource(R.drawable.ic_full_link);
                holder.binding.text.setText(R.string.links);
                break;
        }


+13 −1
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ import app.fedilab.android.R;
import app.fedilab.android.databinding.FragmentPaginationBinding;
import app.fedilab.android.mastodon.activities.SearchResultTabActivity;
import app.fedilab.android.mastodon.client.entities.api.Link;
import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline;
import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.MastodonHelper;
import app.fedilab.android.mastodon.ui.drawer.LinkAdapter;
import app.fedilab.android.mastodon.viewmodel.mastodon.TimelinesVM;
@@ -50,6 +52,7 @@ public class FragmentMastodonLink extends Fragment {
    private Integer offset;
    private boolean flagLoading;
    private List<Link> linkList;
    private String remoteInstance;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
@@ -70,6 +73,13 @@ public class FragmentMastodonLink extends Fragment {
        flagLoading = false;
        binding.swipeContainer.setRefreshing(false);
        binding.swipeContainer.setEnabled(false);
        Bundle args = getArguments();
        if (args != null) {
            PinnedTimeline pinnedTimeline = (PinnedTimeline) args.getSerializable(Helper.ARG_REMOTE_INSTANCE);
            if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) {
                remoteInstance = pinnedTimeline.remoteInstance.host;
            }
        }
        router();
    }

@@ -78,7 +88,9 @@ public class FragmentMastodonLink extends Fragment {
     */
    private void router() {
        TimelinesVM timelinesVM = new ViewModelProvider(FragmentMastodonLink.this).get(TimelinesVM.class);
        timelinesVM.getLinksTrends(BaseMainActivity.currentToken, BaseMainActivity.currentInstance, offset, MastodonHelper.SEARCH_PER_CALL)
        String token = remoteInstance != null ? null : BaseMainActivity.currentToken;
        String instance = remoteInstance != null ? remoteInstance : BaseMainActivity.currentInstance;
        timelinesVM.getLinksTrends(token, instance, offset, MastodonHelper.SEARCH_PER_CALL)
                .observe(getViewLifecycleOwner(), links -> {
                    if (links != null && offset == 0) {
                        initializeLinkCommonView(links);
Loading