diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 52dae26e3..d02aa7828 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -260,6 +260,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Stack; import java.util.concurrent.CountDownLatch; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -660,6 +661,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private int startFromVideoMessageId; private boolean needSelectFromMessageId; private int returnToMessageId; + private final Stack returnToMessageIdsStack = new Stack<>(); private int returnToLoadIndex; private int createUnreadMessageAfterId; private boolean createUnreadMessageAfterIdLoading; @@ -6041,7 +6043,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not textSelectionHelper.cancelTextSelectionRunnable(); if (createUnreadMessageAfterId != 0) { scrollToMessageId(createUnreadMessageAfterId, 0, false, returnToLoadIndex, true, 0); - } else if (returnToMessageId > 0) { + } else if (returnToMessageId > 0 || (NekomuraConfig.rememberAllBackMessages.Bool() && !returnToMessageIdsStack.empty())) { + returnToMessageId = returnToMessageIdsStack.pop(); scrollToMessageId(returnToMessageId, 0, true, returnToLoadIndex, true, 0); } else { scrollToLastMessage(false); @@ -6051,6 +6054,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } }); + if (NekomuraConfig.rememberAllBackMessages.Bool()) { + pagedownButton.setOnLongClickListener(view -> { + returnToMessageId = 0; + returnToMessageIdsStack.clear(); + scrollToLastMessage(true); + return true; + }); + } mentiondownButton = new FrameLayout(context); mentiondownButton.setVisibility(View.INVISIBLE); @@ -12262,6 +12273,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } returnToMessageId = fromMessageId; + if (NekomuraConfig.rememberAllBackMessages.Bool() && fromMessageId > 0) + returnToMessageIdsStack.push(returnToMessageId); returnToLoadIndex = loadIndex; needSelectFromMessageId = select; } @@ -12325,6 +12338,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } else { returnToMessageId = 0; + returnToMessageIdsStack.clear(); newUnreadMessageCount = 0; if (pagedownButton.getTag() != null) { pagedownButton.setTag(null); @@ -12386,6 +12400,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } else { returnToMessageId = 0; + returnToMessageIdsStack.clear(); if (mentiondownButton.getTag() != null) { mentiondownButton.setTag(null); if (mentiondownButtonAnimation != null) { diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java index e36fc15af..af2f34866 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoChatSettingsActivity.java @@ -100,6 +100,7 @@ public class NekoChatSettingsActivity extends BaseFragment implements Notificati showMessageMenuAlert(); })); private final AbstractCell repeatConfirmRow = cellGroup.appendCell(new NekomuraTGTextCheck(NekomuraConfig.repeatConfirm)); + private final AbstractCell rememberAllBackMessagesRow = cellGroup.appendCell(new NekomuraTGTextCheck(NekomuraConfig.rememberAllBackMessages)); private final AbstractCell divider1 = cellGroup.appendCell(new NekomuraTGDivider()); private final AbstractCell header2 = cellGroup.appendCell(new NekomuraTGHeader(LocaleController.getString("AutoDownload"))); private final AbstractCell win32Row = cellGroup.appendCell(new NekomuraTGTextCheck(NekomuraConfig.disableAutoDownloadingWin32Executable)); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nkmr/NekomuraConfig.java b/TMessagesProj/src/main/java/tw/nekomimi/nkmr/NekomuraConfig.java index f98ac3eff..f5b5d79bc 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nkmr/NekomuraConfig.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nkmr/NekomuraConfig.java @@ -163,6 +163,7 @@ public class NekomuraConfig { public static ConfigItem disableChoosingSticker = addConfig("disableChoosingSticker", configTypeBool, false); public static ConfigItem hideGroupSticker = addConfig("hideGroupSticker", configTypeBool, false); public static ConfigItem hideSponsoredMessage = addConfig("hideSponsoredMessage", configTypeBool, false); + public static ConfigItem rememberAllBackMessages = addConfig("rememberAllBackMessages", configTypeBool, false); public static ConfigItem disableAutoDownloadingWin32Executable = addConfig("Win32ExecutableFiles", configTypeBool, true); public static ConfigItem disableAutoDownloadingArchive = addConfig("ArchiveFiles", configTypeBool, true); diff --git a/TMessagesProj/src/main/res/values/strings_nekox.xml b/TMessagesProj/src/main/res/values/strings_nekox.xml index 4214ae21d..e7445d4e2 100644 --- a/TMessagesProj/src/main/res/values/strings_nekox.xml +++ b/TMessagesProj/src/main/res/values/strings_nekox.xml @@ -261,4 +261,5 @@ Telegram Default\nAvatar as background\nBig avatar as background Hide sponsored messages + Remember all clicked replies \ No newline at end of file