Skip to content
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

[BUG] TouchBehavior cancel animation even though it is just short tap #2063

Open
2 tasks done
albilaga opened this issue Jul 26, 2024 · 14 comments · May be fixed by #2101
Open
2 tasks done

[BUG] TouchBehavior cancel animation even though it is just short tap #2063

albilaga opened this issue Jul 26, 2024 · 14 comments · May be fixed by #2101
Labels
area/behaviors Issue/Discussion/PR that has to do with Behaviors bug Something isn't working unverified

Comments

@albilaga
Copy link

albilaga commented Jul 26, 2024

Is there an existing issue for this?

  • I have searched the existing issues

Did you read the "Reporting a bug" section on Contributing file?

Current Behavior

Touch behavior when set DefaultAnimationDuration and user just tap the element, it will just abort the animation and throw TaskCanceledException even though the animation is not finished. I am not sure if this is expected behavior. Because from user perspective if I just tap it, it should show and finish the animation within the duration of DefaultAnimationDuration. Here it is in current implementation even though I increase the DefaultAnimationDuration to be 500

CleanShot.2024-07-26.at.15.49.25.mp4

And here is the stacktrace

System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at CommunityToolkit.Maui.Behaviors.GestureManager.SetScale(TouchBehavior sender, TouchState touchState, HoverState hoverState, TimeSpan duration, Easing easing, CancellationToken token) in /Users/albilaga/Documents/Personal/CommunityToolkit.Maui/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/Touch/GestureManager.shared.cs:line 475
   at CommunityToolkit.Maui.Behaviors.GestureManager.RunAnimationTask(TouchBehavior sender, TouchState touchState, HoverState hoverState, CancellationToken token, Nullable`1 durationMultiplier) in /Users/albilaga/Documents/Personal/CommunityToolkit.Maui/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/Touch/GestureManager.shared.cs:line 799
   at CommunityToolkit.Maui.Behaviors.GestureManager.ChangeStateAsync(TouchBehavior sender, Boolean animated, CancellationToken token) in /Users/albilaga/Documents/Personal/CommunityToolkit.Maui/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/Touch/GestureManager.shared.cs:line 118
   at CommunityToolkit.Maui.Behaviors.TouchBehavior.ForceUpdateState(CancellationToken token, Boolean animated) in /Users/albilaga/Documents/Personal/CommunityToolkit.Maui/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/Touch/TouchBehavior.methods.shared.cs:line 65
System.Threading.Tasks.TaskCanceledException: A task was canceled.

Expected Behavior

TouchBehavior should finish the animation in DefaultAnimationDuration and not just directly abort the animation. It should be doing something like this.

CleanShot.2024-07-26.at.15.54.48.mp4

Steps To Reproduce

  1. Open and run the project in here https://github.com/albilaga/CommunityToolkit.Maui/tree/bugfix/wait_animation
  2. Open the side menu -> Behaviors -> TouchBehavior
  3. Scroll to the most bottom of view and tap the Lorem Ipsum view. It will just directly cancel the animation after we tap it

Link to public reproduction project repository

https://github.com/albilaga/CommunityToolkit.Maui/tree/bugfix/wait_animation

Environment

- .NET MAUI CommunityToolkit: 9.0.2
- OS: MacOS Sonoma 14.5
- .NET MAUI: 8.0.60

Anything else?

For now the workaround I have as seen in this commit 033416b is I just waiting with Task.Delay(DefaultAnimationDuration if touch status is completed. This is still not handling if user tap the view more than once in duration of DefaultAnimationDuration so that's why I am not publishing the PR in here. And I am also not sure if this bug is intended or not. Help is appreciated also. Thank you

@albilaga albilaga added bug Something isn't working unverified labels Jul 26, 2024
@bijington
Copy link
Contributor

Hi, thanks for the report. To confirm the issue is that when you tap on the control the completion state change is somehow cancelling the animation before it has finished?

I understand your change doesn't solve all use cases but would you be willing to open it as a PR to make it easy to see what has changed and then we can work from there to see how we might solve it?

@albilaga
Copy link
Author

albilaga commented Aug 5, 2024

Hi @bijington I saw the PR template and the bug should be verified to create PR https://github.com/CommunityToolkit/Maui/blob/main/.github/PULL_REQUEST_TEMPLATE.md ?

For the issue. Yes so basically when we tap, the animation will be cancelled directly and it will throw TaskCanceledException in debug console. This makes the animation not finished. This is fine if user long press this, as the state not changed until user release the gesture

@albilaga albilaga linked a pull request Aug 8, 2024 that will close this issue
6 tasks
@albilaga
Copy link
Author

albilaga commented Aug 8, 2024

@bijington just created PR in here #2101

@bijington
Copy link
Contributor

I am no expert in the TouchBehavior or the old TouchEffect so I would like to call on the opinions of @Axemasta, @jfversluis and anyone else that may have an opinion. Currently the animation shows for the duration of the touch, if you watch my attached video below there is a very short touch followed by a longer touch.

Simulator.Screen.Recording.-.iPhone.15.-.2024-08-09.at.12.28.45.mp4

Is this the expected behavior or would we expect the full animation to complete? I am wondering whether the current behavior is expected and if a developer wanted to invoke the full animation we either make that an option somehow (if it isn't already) or guide them to using the AnimationBehavior.

What does everyone think?

@osaleem303
Copy link

I'm also facing issues with Touch Effect on Mac Catalyst, once I have TaskCanceledException thrown, rest of UI becomes non-interactive, Buttons, Sliders stops working.

@Axemasta
Copy link
Contributor

@bijington I think this is something that might have been broken during the pr review of the effect. It used to play the full animation even after lifting from a click (something I'd expect personally).

The task cancelled exception is really just noise, but it does happen a lot especially if you are relying on this control so I probably need to go back to a commit that was working on my end and see what's changed, then pr it back in.

I'm not aware of any crashes or issues with non responsiveness on mac catalyst, @osaleem303 can you provide a reproduction?

@osaleem303
Copy link

@bijington I think this is something that might have been broken during the pr review of the effect. It used to play the full animation even after lifting from a click (something I'd expect personally).

The task cancelled exception is really just noise, but it does happen a lot especially if you are relying on this control so I probably need to go back to a commit that was working on my end and see what's changed, then pr it back in.

I'm not aware of any crashes or issues with non responsiveness on mac catalyst, @osaleem303 can you provide a reproduction?

Hi @Axemasta I've reproduced issue on following repo
https://github.com/osaleem303/TouchEffectDemo

and also attached a screen recording on reproducing of that issue.
Let me know if you need any further info on that.

@vhugogarcia vhugogarcia added the area/behaviors Issue/Discussion/PR that has to do with Behaviors label Aug 16, 2024
@DennisWelu
Copy link

FWIW I am getting an unhandled exception with the exact same stack trace shown in the original report - while resizing the window frame running on Windows. Not sure how the touch behavior is getting triggered by the resize but that's the stack trace I'm seeing in the exception. And even though the unhandled exception is "handled" the app becomes useless at that point.

@Hackmodford
Copy link

My logs are littered with these.

System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at CommunityToolkit.Maui.Behaviors.GestureManager.SetScale(TouchBehavior sender, TouchState touchState, HoverState hoverState, TimeSpan duration, Easing easing, CancellationToken token)
   at CommunityToolkit.Maui.Behaviors.GestureManager.RunAnimationTask(TouchBehavior sender, TouchState touchState, HoverState hoverState, CancellationToken token, Nullable`1 durationMultiplier)
   at CommunityToolkit.Maui.Behaviors.GestureManager.ChangeStateAsync(TouchBehavior sender, Boolean animated, CancellationToken token)
   at CommunityToolkit.Maui.Behaviors.TouchBehavior.ForceUpdateState(CancellationToken token, Boolean animated)

@Axemasta
Copy link
Contributor

I've found the commit that introduced this issue, I'll try reverting the changes and see if they stop this issue. It looks like the animation also started messing up around this commit, the earlier commits dont throw this exception and always play the full animation (which is to be expected imo).

@Hackmodford
Copy link

I've found the commit that introduced this issue, I'll try reverting the changes and see if they stop this issue. It looks like the animation also started messing up around this commit, the earlier commits dont throw this exception and always play the full animation (which is to be expected imo).

I don’t know if I agree. I think it makes sense for the animation to be cancelled prematurely if the user is quick. We just don’t need the error in the logs.

@Axemasta
Copy link
Contributor

I don’t know if I agree. I think it makes sense for the animation to be cancelled prematurely if the user is quick. We just don’t need the error in the logs.

I probably worded this badly. The animations in the shipped version are what I would consider broken, there is some glitches and pop in especially of colors. I believe the reason why is that the animations are actually getting cancelled whereas before they were fire and forget.

Before
beforeanim-ezgif com-video-to-gif-converter

After (Live)
afteranim-ezgif com-video-to-gif-converter

You can see in the 2nd gif there is some strange black pop in, its caused by the animation cancelling. I'll be submitting a PR reverting those changes and we can see what the maintainers think. It wasn't a feature of the Xamarin version and it would squash this issue which is annoying for many people (including myself)

@Axemasta
Copy link
Contributor

DennisWelu

Can you provide a repro or some example xaml demoing the unresponsiveness? I am able to see the messages when resizing, but I haven't been able to get the app to go unresponive on windows using the mct sample app. If you can provide a repro I can push a fix 😊

@DennisWelu
Copy link

@Axemasta [One week later] I "think" I remember where in the app was current when I was triggering that problem with a resize....but today I'm not seeing it happen. :-) BUT...2 days after that post I updated from 9.0.1 to 9.0.3 and so maybe that's the difference....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/behaviors Issue/Discussion/PR that has to do with Behaviors bug Something isn't working unverified
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants