@@ -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