Skip to content

Commit 9b2c2e1

Browse files
authored
Adds check to detect Android pointer type as touch (#4940)
* add additonal check to detect virtual event * fix logical operator * add unit test * remove console log and update unit test * remove extra spacing, fix test * remove only from test * fix teset
1 parent dc61485 commit 9b2c2e1

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

packages/@react-aria/interactions/test/usePress.test.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,65 @@ describe('usePress', function () {
591591
]);
592592
});
593593

594+
it('should not ignore virtual pointer events on android ', function () {
595+
let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android');
596+
597+
let events = [];
598+
let addEvent = (e) => events.push(e);
599+
let res = render(
600+
<Example
601+
onPressStart={addEvent}
602+
onPressEnd={addEvent}
603+
onPress={addEvent}
604+
onPressUp={addEvent} />
605+
);
606+
607+
let el = res.getByText('test');
608+
fireEvent(el, pointerEvent('pointerdown', {pointerId: 1, pointerType: 'mouse', width: 0, height: 0}));
609+
fireEvent(el, pointerEvent('pointerup', {pointerId: 1, pointerType: 'mouse', width: 0, height: 0, clientX: 0, clientY: 0}));
610+
611+
expect(events).toEqual([
612+
{
613+
type: 'pressstart',
614+
target: el,
615+
pointerType: 'mouse',
616+
ctrlKey: false,
617+
metaKey: false,
618+
shiftKey: false,
619+
altKey: false
620+
},
621+
{
622+
type: 'pressup',
623+
target: el,
624+
pointerType: 'mouse',
625+
ctrlKey: false,
626+
metaKey: false,
627+
shiftKey: false,
628+
altKey: false
629+
},
630+
{
631+
type: 'pressend',
632+
target: el,
633+
pointerType: 'mouse',
634+
ctrlKey: false,
635+
metaKey: false,
636+
shiftKey: false,
637+
altKey: false
638+
},
639+
{
640+
type: 'press',
641+
target: el,
642+
pointerType: 'mouse',
643+
ctrlKey: false,
644+
metaKey: false,
645+
shiftKey: false,
646+
altKey: false
647+
}
648+
]);
649+
650+
uaMock.mockRestore();
651+
});
652+
594653
it('should detect Android TalkBack double tap', function () {
595654
let events = [];
596655
let addEvent = (e) => events.push(e);

packages/@react-aria/utils/src/isVirtualEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export function isVirtualPointerEvent(event: PointerEvent) {
4747
// instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush
4848
// Talkback double tap from Windows Firefox touch screen press
4949
return (
50-
(event.width === 0 && event.height === 0) ||
50+
(!isAndroid() && event.width === 0 && event.height === 0) ||
5151
(event.width === 1 &&
5252
event.height === 1 &&
5353
event.pressure === 0 &&

0 commit comments

Comments
 (0)