-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Android] Fix single taps #16561
[Android] Fix single taps #16561
Conversation
Add tests for multiple quick taps
d1ed421
to
40ba446
Compare
#if ANDROID | ||
// Adjust the results for display density, so they make sense to the | ||
// Appium test consuming this. | ||
var x = this.Handler.MauiContext.Context.ToPixels(pos.Value.X); | ||
var y = this.Handler.MauiContext.Context.ToPixels(pos.Value.Y); | ||
pos = new(x, y); | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is scary. Is Android not scaling the coordinates like the other platforms? Do we have an issue to track this or is it by design?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Appium layer doesn't know anything about our SDK's point->pixel conversions (why would it?). So when we're asking it to retrieve the Rect
for a particular element and then to tap at specific points on that element, it's doing all of that work in native points. The cross-platform tap events are in device-independent units. So we have to do that conversion somewhere. It's easier to do that on the app side, because the app already knows the display density and how to convert the values.
At the moment, we don't have any other UI tests which require this sort of point-to-point comparison. If we start to need more tests like that in the future, we could introduce an automatic conversion mechanism for the Appium Rect
structure which determines the remote device's display density at startup. But that's not top of my list right now for the one test which has this issue.
@@ -45,6 +45,18 @@ | |||
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#FFFFFF" BaseSize="168,208" /> | |||
</ItemGroup> | |||
|
|||
<ItemGroup> | |||
<Compile Update="Issues\Issues16561.xaml.cs"> | |||
<DependentUpon>Issues16561.xaml</DependentUpon> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revert changes on this file.
Otherwise looks like it works super!
/azp run MAUI-UITests |
No pipelines are associated with this pull request. |
Description of Change
Single taps using a TapGestureRecognizer on Android don't work correctly if the user taps too quickly; the logic for double taps kicks in, and the handling for differentiating single and double taps uses wrong motion event for the second single tap.
These changes fix the issue and use the UP action from the second tap as the event for the second single tap recognized by the TapGestureRecognizer.
These changes also modify the Appium driver interface to allow access to the driver from the tests, so that multiple actions can be queued up.