From 2e66b1dad6c255fc24b37327352558cb816d4c96 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 25 Mar 2025 16:55:55 +0100 Subject: [PATCH] Fix issue #1152 - Add a pinned Trending timeline (can be hidden in Manage Timelines) --- .../mastodon/helper/PinnedTimelineHelper.java | 52 +++++++++++++++---- .../mastodon/ui/drawer/ReorderTabAdapter.java | 4 ++ .../mastodon/drawable/baseline_moving_24.xml | 5 ++ 3 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawables/mastodon/drawable/baseline_moving_24.xml diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java index 13bae9f0..8551f48f 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java @@ -183,15 +183,18 @@ public class PinnedTimelineHelper { } } } - if (extraFeatures) { - try { - Pinned pinnedAll = new Pinned(activity).getAllPinned(Helper.getCurrentAccount(activity)); - if (pinnedAll == null) { - pinnedAll = new Pinned(); - pinnedAll.user_id = currentUserID; - pinnedAll.instance = currentInstance; - pinnedAll.pinnedTimelines = new ArrayList<>(); - } + + //Create other default timelines + try { + Pinned pinnedAll = new Pinned(activity).getAllPinned(Helper.getCurrentAccount(activity)); + if (pinnedAll == null) { + pinnedAll = new Pinned(); + pinnedAll.user_id = currentUserID; + pinnedAll.instance = currentInstance; + pinnedAll.pinnedTimelines = new ArrayList<>(); + } + if (extraFeatures) { + //Bubble timeline boolean createDefaultBubbleAtTop = true; for (PinnedTimeline pinnedTimeline : pinnedAll.pinnedTimelines) { if (pinnedTimeline.type == Timeline.TimeLineEnum.BUBBLE) { @@ -211,11 +214,34 @@ public class PinnedTimelineHelper { new Pinned(activity).insertPinned(pinned); } } - } catch (DBException e) { - e.printStackTrace(); } + //Trend timeline + boolean createDefaultTrendAtTop = true; + for (PinnedTimeline pinnedTimeline : pinnedAll.pinnedTimelines) { + if (pinnedTimeline.type == Timeline.TimeLineEnum.TREND_MESSAGE) { + createDefaultTrendAtTop = false; + break; + } + } + if (createDefaultTrendAtTop) { + PinnedTimeline pinnedTimelineBubble = new PinnedTimeline(); + pinnedTimelineBubble.type = Timeline.TimeLineEnum.TREND_MESSAGE; + pinnedTimelineBubble.position = pinnedAll.pinnedTimelines != null ? pinnedAll.pinnedTimelines.size() : 0; + pinned.pinnedTimelines.add(pinnedTimelineBubble); + 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(); } + + + sortPositionAsc(pinnedTimelines); //Check if changes occurred, if mastodonLists is null it does need, because it is the first call to draw pinned boolean needRedraw = mastodonLists == null; @@ -413,6 +439,9 @@ public class PinnedTimelineHelper { case BUBBLE: tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.ic_baseline_bubble_chart_24); break; + case TREND_MESSAGE: + tabCustomDefaultViewBinding.icon.setImageResource(R.drawable.baseline_moving_24); + break; } tab.setCustomView(tabCustomDefaultViewBinding.getRoot()); } @@ -535,6 +564,7 @@ public class PinnedTimelineHelper { break; case HOME: case LOCAL: + case TREND_MESSAGE: case PUBLIC: defaultClick(activity, pinnedTimelineVisibleList.get(position).type, v, activityMainBinding, finalI); break; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderTabAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderTabAdapter.java index a7058e1e..902494b7 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderTabAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderTabAdapter.java @@ -150,6 +150,10 @@ public class ReorderTabAdapter extends RecyclerView.Adapter + + + +