Skip to content

Commit 6e18a51

Browse files
japananimetimeshikaatuxclaude
committed
Add forum view style persistence
Cherry-picked from logopek/reX: e6d439d - Save user's preferred forum view (tabs vs topics list) - Respect saved preference when opening forums - Store preference per chat in TdlibSettingsManager Co-Authored-By: shikaatux <logopek@github.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 97c95d4 commit 6e18a51

4 files changed

Lines changed: 32 additions & 1 deletion

File tree

app/src/main/java/org/thunderdog/challegram/telegram/TdlibSettingsManager.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public class TdlibSettingsManager implements CleanupStartupDelegate {
6969

7070
private static final String DISMISS_MESSAGE_PREFIX = "dismiss_pinned_";
7171
private static final String DISMISS_REQUESTS_PREFIX = "dismiss_requests_";
72+
private static final String FORUM_VIEW_PREFERENCE_PREFIX = "forum_view_";
7273

7374
private static final String NOTIFICATION_GROUP_DATA_PREFIX = "notification_gdata_";
7475
private static final String NOTIFICATION_DATA_PREFIX = "notification_data_";
@@ -175,6 +176,7 @@ public void onPerformUserCleanup () {
175176
Settings.instance().removeScrollPositions(accountId, editor);
176177
String dismissPrefix = key(DISMISS_MESSAGE_PREFIX, accountId);
177178
String dismissReqPrefix = key(DISMISS_REQUESTS_PREFIX, accountId);
179+
String forumViewPrefix = key(FORUM_VIEW_PREFERENCE_PREFIX, accountId);
178180
String notificationGroupDataPrefix = key(NOTIFICATION_GROUP_DATA_PREFIX, accountId);
179181
String notificationDataPrefix = key(NOTIFICATION_DATA_PREFIX, accountId);
180182
String conversionPrefix = key(CONVERSION_PREFIX, accountId);
@@ -183,6 +185,7 @@ public void onPerformUserCleanup () {
183185
Settings.instance().removeByAnyPrefix(new String[] {
184186
dismissPrefix,
185187
dismissReqPrefix,
188+
forumViewPrefix,
186189
notificationGroupDataPrefix,
187190
notificationDataPrefix,
188191
conversionPrefix,
@@ -288,6 +291,23 @@ public boolean isRequestsDismissed (long chatId, TdApi.ChatJoinRequestsInfo pend
288291
return pendingInfo == null || Arrays.equals(Settings.instance().getLongArray(key(DISMISS_REQUESTS_PREFIX, tdlib.id()) + chatId), pendingInfo.userIds);
289292
}
290293

294+
// Forum view preference: true = tabs, false = topics list
295+
// This is used when forum has hasForumTabs enabled to remember user's choice
296+
public static final int FORUM_VIEW_TABS = 1;
297+
public static final int FORUM_VIEW_TOPICS = 2;
298+
299+
public void setForumViewPreference (long chatId, int viewPreference) {
300+
Settings.instance().putInt(key(FORUM_VIEW_PREFERENCE_PREFIX, tdlib.id()) + chatId, viewPreference);
301+
}
302+
303+
public int getForumViewPreference (long chatId) {
304+
return Settings.instance().getInt(key(FORUM_VIEW_PREFERENCE_PREFIX, tdlib.id()) + chatId, 0);
305+
}
306+
307+
public boolean hasForumViewPreference (long chatId) {
308+
return getForumViewPreference(chatId) != 0;
309+
}
310+
291311
public boolean forcePlainModeInChannels () {
292312
if (_forcePlainModeInChannels == null)
293313
_forcePlainModeInChannels = Settings.instance().getBoolean(key(PLAIN_CHANNEL_KEY, tdlib.id()), true);

app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2136,7 +2136,12 @@ public void openChat (final TdlibDelegate context, final @NonNull TdApi.Chat cha
21362136
// Users can use "View as chat" option to switch to unified view (sets viewAsTopics to false)
21372137
if (chat.viewAsTopics || hasForumTabs) {
21382138
ViewController<?> forumController;
2139-
if (hasForumTabs) {
2139+
// Check user's saved preference for forum view (tabs vs topics list)
2140+
int viewPreference = tdlib.settings().getForumViewPreference(chat.id);
2141+
boolean preferTabs = hasForumTabs && viewPreference != TdlibSettingsManager.FORUM_VIEW_TOPICS;
2142+
boolean preferTopics = !hasForumTabs || viewPreference == TdlibSettingsManager.FORUM_VIEW_TOPICS;
2143+
2144+
if (preferTabs) {
21402145
ForumTopicTabsController tabsController = new ForumTopicTabsController(context.context(), context.tdlib());
21412146
tabsController.setArguments(new ForumTopicTabsController.Arguments(chat));
21422147
forumController = tabsController;

app/src/main/java/org/thunderdog/challegram/ui/ForumTopicTabsController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import tgx.td.ChatId;
3737
import org.thunderdog.challegram.telegram.Tdlib;
3838
import org.thunderdog.challegram.telegram.TdlibCache;
39+
import org.thunderdog.challegram.telegram.TdlibSettingsManager;
3940
import org.thunderdog.challegram.telegram.TdlibUi;
4041
import org.thunderdog.challegram.tool.Screen;
4142
import org.thunderdog.challegram.tool.UI;
@@ -420,6 +421,8 @@ public void onMoreItemPressed (int id) {
420421
profileController.setArguments(new ProfileController.Args(chat, null, false));
421422
navigateTo(profileController);
422423
} else if (id == R.id.btn_viewAsTopics) {
424+
// Save preference for topics list view
425+
tdlib.settings().setForumViewPreference(chatId, TdlibSettingsManager.FORUM_VIEW_TOPICS);
423426
// Switch to topics list view (ForumTopicsController)
424427
ForumTopicsController listController = new ForumTopicsController(context, tdlib);
425428
listController.setArguments(new ForumTopicsController.Arguments(chat));

app/src/main/java/org/thunderdog/challegram/ui/ForumTopicsController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.thunderdog.challegram.telegram.MessageListener;
4343
import org.thunderdog.challegram.telegram.Tdlib;
4444
import org.thunderdog.challegram.telegram.TdlibCache;
45+
import org.thunderdog.challegram.telegram.TdlibSettingsManager;
4546
import org.thunderdog.challegram.telegram.TdlibUi;
4647
import org.thunderdog.challegram.theme.ColorId;
4748
import org.thunderdog.challegram.tool.Screen;
@@ -697,6 +698,8 @@ public void destroy () {
697698
@Override
698699
public void onMoreItemPressed (int id) {
699700
if (id == R.id.btn_viewAsTabs) {
701+
// Save preference for tabs view
702+
tdlib.settings().setForumViewPreference(chatId, TdlibSettingsManager.FORUM_VIEW_TABS);
700703
// Switch to tabs view (ForumTopicTabsController)
701704
ForumTopicTabsController tabsController = new ForumTopicTabsController(context, tdlib);
702705
tabsController.setArguments(new ForumTopicTabsController.Arguments(chat));

0 commit comments

Comments
 (0)