Skip to content

Commit 585c99e

Browse files
committed
Added slide gesture to select send button menu items.
1 parent e4f5882 commit 585c99e

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

‎TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3523,6 +3523,7 @@ public void setAlpha(float alpha) {
35233523
sendMessage();
35243524
});
35253525
sendButton.setOnLongClickListener(this::onSendLongClick);
3526+
sendButton.setOnTouchListener(this::onSendButtonSlide);
35263527
if (AndroidUtilities.isAccessibilityScreenReaderEnabled()) {
35273528
sendButtonContainer.setOnLongClickListener(this::onSendLongClick);
35283529
}
@@ -3558,6 +3559,7 @@ public void setAlpha(float alpha) {
35583559
delegate.onUpdateSlowModeButton(slowModeButton, true, slowModeButton.getText());
35593560
}
35603561
});
3562+
slowModeButton.setOnTouchListener(this::onSendButtonSlide);
35613563
slowModeButton.setOnLongClickListener(v -> {
35623564
if (messageEditText == null || messageEditText.length() <= 0) {
35633565
return false;
@@ -4780,11 +4782,72 @@ public boolean hasOverlappingRendering() {
47804782
return false;
47814783
}
47824784

4785+
private ItemOptions messageSendPreviewOptions;
4786+
private final ArrayList<View> sendMenuItems = new ArrayList<>();
4787+
private View sendMenuItemUnderFinger;
4788+
4789+
private void collectSendMenuItems() {
4790+
sendMenuItems.clear();
4791+
if (messageSendPreview != null && messageSendPreview.isShowing() && messageSendPreviewOptions != null) {
4792+
for (int i = 0; i < messageSendPreviewOptions.getItemsCount(); i++) {
4793+
sendMenuItems.add(messageSendPreviewOptions.getItemAt(i));
4794+
}
4795+
} else if (sendPopupWindow != null && sendPopupWindow.isShowing() && sendPopupLayout != null) {
4796+
for (int i = 0; i < sendPopupLayout.getItemsCount(); i++) {
4797+
sendMenuItems.add(sendPopupLayout.getItemAt(i));
4798+
}
4799+
}
4800+
}
4801+
4802+
private boolean onSendButtonSlide(View view, MotionEvent event) {
4803+
final int action = event.getActionMasked();
4804+
collectSendMenuItems();
4805+
if (action == MotionEvent.ACTION_MOVE) {
4806+
sendMenuItemUnderFinger = null;
4807+
for (int i = 0; i < sendMenuItems.size(); i++) {
4808+
final View item = sendMenuItems.get(i);
4809+
if (item == null || !item.isClickable() || item.getVisibility() != VISIBLE) {
4810+
continue;
4811+
}
4812+
item.getLocationOnScreen(location);
4813+
final float x = event.getRawX() - location[0];
4814+
final float y = event.getRawY() - location[1];
4815+
final boolean hovered = x >= 0 && y >= 0 && x < item.getWidth() && y < item.getHeight();
4816+
if (hovered) {
4817+
item.drawableHotspotChanged(x, y);
4818+
sendMenuItemUnderFinger = item;
4819+
}
4820+
item.setPressed(hovered);
4821+
item.setSelected(hovered);
4822+
}
4823+
return false;
4824+
}
4825+
final View item = sendMenuItemUnderFinger;
4826+
sendMenuItemUnderFinger = null;
4827+
if (item == null) {
4828+
return false;
4829+
}
4830+
item.setPressed(false);
4831+
item.setSelected(false);
4832+
if (action != MotionEvent.ACTION_UP || !sendMenuItems.contains(item)) {
4833+
return false;
4834+
}
4835+
final MotionEvent cancel = MotionEvent.obtain(event);
4836+
cancel.setAction(MotionEvent.ACTION_CANCEL);
4837+
view.onTouchEvent(cancel);
4838+
cancel.recycle();
4839+
item.performClick();
4840+
return true;
4841+
}
4842+
47834843
private ActionBarMenuSubItem actionScheduleButton;
47844844
private boolean onSendLongClick(View view) {
47854845
if (isInScheduleMode() || parentFragment != null && parentFragment.getChatMode() == ChatActivity.MODE_QUICK_REPLIES || animatorEphemeralMessageVisibility.getValue()) {
47864846
return false;
47874847
}
4848+
if (view.getParent() != null) {
4849+
view.getParent().requestDisallowInterceptTouchEvent(true);
4850+
}
47884851

47894852
if (isStories || (messageEditText == null || TextUtils.isEmpty(messageEditText.getText())) && parentFragment != null && parentFragment.messagePreviewParams != null && parentFragment.messagePreviewParams.forwardMessages != null && parentFragment.messagePreviewParams.forwardMessages.messages != null && !parentFragment.messagePreviewParams.forwardMessages.messages.isEmpty()) {
47904853

@@ -4930,6 +4993,7 @@ protected void onEffectChange(long effectId) {
49304993
};
49314994
messageSendPreview.setOnDismissListener(di -> {
49324995
messageSendPreview = null;
4996+
messageSendPreviewOptions = null;
49334997
});
49344998

49354999
final boolean containsSendMessage = audioToSendMessageObject != null || messageEditText != null && !TextUtils.isEmpty(messageEditText.getText());
@@ -5069,6 +5133,7 @@ protected void onEffectChange(long effectId) {
50695133
}
50705134

50715135
ItemOptions options = ItemOptions.makeOptions(this, resourcesProvider, sendButton);
5136+
messageSendPreviewOptions = options;
50725137

50735138
final boolean self = parentFragment != null && UserObject.isUserSelf(parentFragment.getCurrentUser());
50745139
boolean scheduleButtonValue = parentFragment != null && parentFragment.canScheduleMessage();

0 commit comments

Comments
 (0)