diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 6c6cfe0624..dda5a9d0f4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -9979,11 +9979,8 @@ public void updateLeftBottomButton(boolean noForwards) { updateLeftBottomButton(ChatsHelper.getLeftButtonAction(this, noForwards)); } - private boolean isSelectableBetweenMessage(MessageObject message, int begin, int end) { + private boolean isSelectableBetweenMessage(MessageObject message) { int msgId = message.getId(); - if (msgId <= begin || msgId >= end) { - return false; - } int index = message.getDialogId() == dialog_id ? 0 : 1; if (selectedMessagesIds[index].indexOfKey(msgId) >= 0) { return false; @@ -9999,15 +9996,31 @@ private boolean isSelectableBetweenMessage(MessageObject message, int begin, int return type >= MESSAGE_TYPE_MEDIA && type != MESSAGE_TYPE_SEND_ERROR_TEXT; } + private boolean hasSelectedMessagesRange() { + return selectedMessagesIds[0].size() + selectedMessagesIds[1].size() >= 2; + } + + private boolean isMessageSelectedForBetween(MessageObject message) { + int index = message.getDialogId() == dialog_id ? 0 : 1; + return selectedMessagesIds[index].indexOfKey(message.getId()) >= 0; + } + public boolean canSelectBetweenMessages() { - int[] bounds = ChatsHelper.getSelectBetweenBounds(selectedMessagesIds); - if (bounds == null) { + if (!hasSelectedMessagesRange()) { return false; } - int begin = bounds[0]; - int end = bounds[1]; + int minPos = Integer.MAX_VALUE, maxPos = Integer.MIN_VALUE; for (int i = 0; i < messages.size(); i++) { - if (isSelectableBetweenMessage(messages.get(i), begin, end)) { + if (isMessageSelectedForBetween(messages.get(i))) { + if (i < minPos) minPos = i; + if (i > maxPos) maxPos = i; + } + } + if (minPos == Integer.MAX_VALUE || maxPos - minPos <= 1) { + return false; + } + for (int i = minPos + 1; i < maxPos; i++) { + if (isSelectableBetweenMessage(messages.get(i))) { return true; } } @@ -10015,28 +10028,28 @@ public boolean canSelectBetweenMessages() { } public void performSelectBetweenMessages() { - int[] bounds = ChatsHelper.getSelectBetweenBounds(selectedMessagesIds); - if (bounds == null) { + if (!hasSelectedMessagesRange()) { return; } - int begin = bounds[0]; - int end = bounds[1]; + int minPos = Integer.MAX_VALUE, maxPos = Integer.MIN_VALUE; for (int i = 0; i < messages.size(); i++) { + if (isMessageSelectedForBetween(messages.get(i))) { + if (i < minPos) minPos = i; + if (i > maxPos) maxPos = i; + } + } + if (minPos == Integer.MAX_VALUE || maxPos - minPos <= 1) { + return; + } + for (int i = minPos + 1; i < maxPos; i++) { MessageObject message = messages.get(i); - if (!isSelectableBetweenMessage(message, begin, end)) { + if (!isSelectableBetweenMessage(message)) { continue; } if (selectedMessagesIds[0].size() + selectedMessagesIds[1].size() >= 100) { - if (message.getId() != begin) { - for (int x = 0; x < messages.size(); x++) { - MessageObject msg = messages.get(x); - if (msg.getId() == begin) { - addToSelectedMessages(msg, false, false); - addToSelectedMessages(message, true); - break; - } - } - } + MessageObject beginMsg = messages.get(minPos); + addToSelectedMessages(beginMsg, false, false); + addToSelectedMessages(message, true); break; } addToSelectedMessages(message, true); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ChatsHelper.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ChatsHelper.java index 67cbf4b0a6..0164d24e9f 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ChatsHelper.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/helpers/ChatsHelper.java @@ -448,29 +448,4 @@ public int loadServerUserName(long userId, int classGuid, Utilities.Callback2[] selectedMessagesIds) { - int min = Integer.MAX_VALUE; - int max = Integer.MIN_VALUE; - int count = 0; - - for (int a = 1; a >= 0; a--) { - int size = selectedMessagesIds[a].size(); - if (size > 0) { - int first = selectedMessagesIds[a].keyAt(0); - int last = selectedMessagesIds[a].keyAt(size - 1); - if (first < min) min = first; - if (last > max) max = last; - count += size; - } - } - - if (count < 2) { - return null; - } - if (min == max || (long) max - min <= 1) { - return null; - } - return new int[]{min, max}; - } }