-
Notifications
You must be signed in to change notification settings - Fork 1.9k
[Android] Prevent Picker from Gaining Focus on Touch #29068
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] Prevent Picker from Gaining Focus on Touch #29068
Conversation
|
Making a note here that we need to validate keyboard interactions and TalkBack to make sure everything works as expected |
# Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt
c30679d to
eb3a4db
Compare
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
|
We should make sure to maintain this behavior |
| using UITest.Appium; | ||
| using UITest.Core; | ||
|
|
||
| #if TEST_FAILS_ON_ANDROID |
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.
We will probably want to add some extra code to make sure this test still passes
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.
Although I think firing Focus/Unfocus events based on dialog show/dismiss is questionable, I wired up mappers for Focus() and Unfocus() calls to ensure they still work.
|
Azure Pipelines successfully started running 3 pipeline(s). |
| { | ||
| } | ||
|
|
||
| protected override IMovementMethod? DefaultMovementMethod => null; |
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.
Can we comment the three places we are doing this with why we are doing this?
Indicate that according to the docs this MovementMethod is purely related to moving the cursor inside the box but since the text is readonly we remove it to avoid cursor related keyboard navigation?
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
* make picker not focisable # Conflicts: # src/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txt * Address review comments * set keylistner to null * Make sure Focus()/Unfocus() works * Address review comments * Remove IsFocused Checks
For more information about inflight process check https://github.com/dotnet/maui/wiki/Inflight-Branch-Process # .NET MAUI Release Notes - Inflight/Candidate Branch ## What's Changed ### MAUI Product Fixes * [iOS] CarouselView with CarouselViewHandler2 make app crash when Loop="False" and user scroll to the last position - fixes #26863 by @kubaflo in #26868 * Fixes Setting BackgroundColor to null does not actually changes BackgroundColor - fixes #22914 and #19576 by @jgonzalez-gft in #22917 * Fixed the picker title's color - fixes #16737 by @kubaflo in #23075 * [android] Fallback to default icons in SearchHandler by @aheubusch in #25067 * ScrollView's Background on iOS - fixes #24016 by @kubaflo in #25541 * [iOS] Enabled MultiTouch Support for Handling Multi-Touch Points in GraphicsView - fixes #29461 by @prakashKannanSf3972 in #29895 * Optimize converters for GridLength, ColumnDefinition, and RowDefinition - performance improvement by @emiller in #20048 * Add defensive IsAlive check to Android ViewExtensions.OnUnloaded - fixes #28051 by @jfversluis in #29934 * [Windows] Fixed runtime update issue for SearchBar PlaceholderColor and BackgroundColor - fixes #29962 by @Tamilarasan-Paranthaman in #29965 * Weak subscription to CanExecuteChange events - fixes #16124 by @sneumaier in #29837 * [iOS, Mac] Fix for downsized image retaining original dimensions in GraphicsView - fixes #30006 by @SyedAbdulAzeemSF4852 in #30007 * [Android] Prevent Picker from Gaining Focus on Touch - fixes #19739, #8546, #13503, #24862, #28121, #21704, #15394 by @bhavanesh2001 in #29068 * Fix CV1 GridItemsLayout centering single item AND Fix Empty view not resizing when bounds change - fixes #29595, #29634 by @albyrock87 in #29639 ### Testing * [Testing] Feature Matrix UITest Cases for Button by @TamilarasanSF4853 in #29803 * [Testing] Feature matrix UITest Cases for BoxView Control by @HarishKumarSF4517 in #29808 * [Testing] Enable HandlerDoesNotLeak for Button and ProgressBar by @bhavanesh2001 in #29896 * [Testing] Add Validation Test For Issue28051 On Android by @prakashKannanSf3972 in #30026 * [Testing] Fixed Test case failure in PR 30115 - [2025/06/23] Candidate by @HarishKumarSF4517 in #30136 ### Dependency Updates * Bump to 1.7.250606001 of WindowsAppSDK by @sneumaier in #29915 ### Housekeeping * [housekeeping] Update namespaces in HostApp and Shared tests projects by @bhavanesh2001 in #29904 * Update SetterSpecificity.cs Remove Extra Line From Bad Merge by @sneumaier in #29987 * Revert - Fixed the Label not sized correctly on Android by @Ahamed-Ali in #30023 * Revert "Fixes Setting BackgroundColor to null does not actually changes BackgroundColor #22914 (#22917)" by @mattleibow in #30031 * [create-pull-request] automated change by @github-actions[bot] in #30019 * [create-pull-request] automated change by @github-actions[bot] in #30043 * [create-pull-request] automated change by @github-actions[bot] in #30078 * Update Controls.TestCases.HostApp.csproj by @HarishKumarSF4517 in #30124 ## New Contributors * @albyrock87 made their first contribution in #29639 * @SyedAbdulAzeemSF4852 made their first contribution in #30007 * @emiller made their first contribution in #20048 * @jgonzalez-gft made their first contribution in #22917 * @aheubusch made their first contribution in #25067 **Full Changelog**: https://github.com/dotnet/maui/compare/main..inflight/candidate
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description of Change
This PR brings
Pickerbehavior on Android in line withDatePickerandTimePicker, in support of the enhancement described in #8945.Currently, the
Picker's platform control is focusable on touch, and a lot of custom logic has been implemented to make it work with this focus behavior. However, even with that logic, the platform control does not lose focus automatically when the dialog is dismissed — theFocusevent fires, but the correspondingUnfocusevent does not trigger when the dialog closes. This has led to some weird bugs.In contrast, both
DatePickerandTimePickerare not focusable on touch, so obviously, theirFocusedandUnfocusedevents do not fire.This PR makes
Pickerbehave the same way — by making it non-focusable on Touch, we avoid the current awkward focus lifecycle and ensure consistent behavior across all picker types, paving the way for future improvements with #8945.CC @PureWeen
Supersedes #25319
Related to #8946
Related to #6252
Issues Fixed
Fixes #19739
Fixes #8546
Fixes #13503
Fixes #24862
Fixes #28121
Fixes #21704
Fixes #15394