Skip to content

Conversation

@Renzo-Olivares
Copy link
Contributor

@Renzo-Olivares Renzo-Olivares commented May 30, 2024

This change enables double tap / triple tap support in SelectionArea for mobile platforms:
Android / Fuchsia:

  • On native, these platforms allow for double tap / double tap + drag to select word-by-word.
  • On web using touch, these platforms only support double tap to select word.
  • On web and native using a mouse, these platforms support double click / double click + drag to select word-by-word, and triple click / triple click + drag to select paragraph-by-paragraph.

iOS:

  • On native, these platforms allow for double tap / double tap + drag to select word-by-word.
  • On web using touch, these platforms do not support double tap/triple tap gestures.
  • On web using touch, these platforms allow support double tap + drag gestures.
  • On web and native using a mouse, these platforms support double click / double click + drag to select word-by-word, and triple click / triple click + drag to select paragraph-by-paragraph.

Part of: #129583

Pre-launch Checklist

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [Tree Hygiene] wiki page, which explains my responsibilities.
  • I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
  • I signed the [CLA].
  • I listed at least one issue that this PR fixes in the description above.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is [test-exempt].
  • I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
  • All existing and new tests are passing.

@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label May 30, 2024
@Renzo-Olivares Renzo-Olivares marked this pull request as ready for review May 30, 2024 20:16
@Renzo-Olivares Renzo-Olivares requested a review from chunhtai May 30, 2024 20:17
}
// From observation, these platforms reset their tap count to 0 when
// the number of consecutive taps exceeds the max consecutive tap supported.
// For example on Debian Linux with GTK, when going past a triple click,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but linux is not in this switch case, it is fuchsia instead.

case TargetPlatform.android:
case TargetPlatform.fuchsia:
case TargetPlatform.iOS:
_gestureRecognizers[TapAndHorizontalDragGestureRecognizer] = GestureRecognizerFactoryWithHandlers<TapAndHorizontalDragGestureRecognizer>(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add some comment on why we use tap and horizontal drag here? also is fuchsia meant to be here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Within TextSelectionGestureDetector we default to grouping fuchsia with Android if the behavior is unknown.

Copy link
Contributor Author

@Renzo-Olivares Renzo-Olivares Jun 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reverted to using TapAndPanGestureRecognizer like desktop for now. The reason I was using TapAndHorizontalDragGestureRecognizer is because of the recognizer usage in TextField, but I don't think the same assumptions are valid here.

renderSelectionSpy.events.clear();

await gesture.moveTo(const Offset(200.0, 100.0));
await gesture.moveTo(const Offset(100.0, 200.0));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why this change?

Copy link
Contributor Author

@Renzo-Olivares Renzo-Olivares Jun 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was because I was using TapAndHorizontalDragGestureRecognizer so I needed a horizontal move to win the arena, but I have since changed it to TapAndPan so this change is reverted.

await gesture.up();
},
variant: TargetPlatformVariant.mobile(),
skip: kIsWeb, // [intended] Double tap / double tap + drag gestures are not fully enabled on the web for mobile platforms.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are they not enabled? are they going to be enabled in the future?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the behavior I observed on native platforms (TextView on Android and UITextView on iOS), and while testing on different websites on the web. I'm not against enabling them, what do you think?

I will enable double tap + drag on iOS since that looks like it works on the web, but from my observations a regular double tap does nothing (sometimes zooms in page).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh I see, In that case I will probably rephrase this to say something like

web does not support double tap + drag gestures.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good, will do that.

Copy link
Contributor

@chunhtai chunhtai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Renzo-Olivares Renzo-Olivares added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 21, 2024
@auto-submit auto-submit bot merged commit 20459dd into flutter:master Jun 21, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 21, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 22, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 22, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 23, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 23, 2024
hello-coder-xu added a commit to hello-coder-xu/flutter that referenced this pull request Jun 24, 2024
* master: (213 commits)
  Fix: Memory leak in UndoHistory widget because it never de-registered itself as global UndoManager client (Resolves flutter#148291) (flutter#150661)
  [CupertinoActionSheet] Fix the layout (part 1) (flutter#149636)
  Remove discontinued `device_info` and `connectivity` plugins from `flutter_gallery`, roll pub packages (flutter#150585)
  [a11y] Update semantics in bottom_navigation_bar.dart (flutter#150576)
  Roll Flutter Engine from dda82d905f37 to 33415c6ee7c2 (7 revisions) (flutter#150637)
  Reland 4: [CupertinoActionSheet] Match colors to native (flutter#150442)
  Enable SelectionArea double tap/triple tap gesture support for mobile platforms (flutter#149295)
  made SelectionArea alignment consistent between web and other platform (flutter#150037)
  Fix link hook typo (flutter#150194)
  Stop looking for .packages when analyzing (flutter#150349)
  Update flutter.dev links from misc packages to more permanent destinations (flutter#150532)
  Roll Flutter Engine from dd37cefd4a94 to dda82d905f37 (9 revisions) (flutter#150582)
  Update Material token to the latest 4.1.0 (flutter#150382)
  Let the lockfile script generate lockfiles for kotlin gradle files as well (flutter#150471)
  Make popup menu hardcoded padding configurable (flutter#150506)
  [flutter_tools] un-hide the --dds flag (flutter#150280)
  [material/menu_anchor.dart] Remove _MenuAnchorState from parent when disposed. (flutter#149586)
  Add test for inherited_notifier.0.dart (flutter#150344)
  [CLI tool] in `flutter test`, consider `--flavor` when validating the cached asset bundle (flutter#150461)
  Test InputDecoration API examples (flutter#148560)
  ...
hello-coder-xu added a commit to hello-coder-xu/flutter that referenced this pull request Jun 24, 2024
…ileTheme

* master: (88 commits)
  Fix: Memory leak in UndoHistory widget because it never de-registered itself as global UndoManager client (Resolves flutter#148291) (flutter#150661)
  [CupertinoActionSheet] Fix the layout (part 1) (flutter#149636)
  Remove discontinued `device_info` and `connectivity` plugins from `flutter_gallery`, roll pub packages (flutter#150585)
  [a11y] Update semantics in bottom_navigation_bar.dart (flutter#150576)
  Roll Flutter Engine from dda82d905f37 to 33415c6ee7c2 (7 revisions) (flutter#150637)
  Reland 4: [CupertinoActionSheet] Match colors to native (flutter#150442)
  Enable SelectionArea double tap/triple tap gesture support for mobile platforms (flutter#149295)
  made SelectionArea alignment consistent between web and other platform (flutter#150037)
  Fix link hook typo (flutter#150194)
  Stop looking for .packages when analyzing (flutter#150349)
  Update flutter.dev links from misc packages to more permanent destinations (flutter#150532)
  Roll Flutter Engine from dd37cefd4a94 to dda82d905f37 (9 revisions) (flutter#150582)
  Update Material token to the latest 4.1.0 (flutter#150382)
  Let the lockfile script generate lockfiles for kotlin gradle files as well (flutter#150471)
  Make popup menu hardcoded padding configurable (flutter#150506)
  [flutter_tools] un-hide the --dds flag (flutter#150280)
  [material/menu_anchor.dart] Remove _MenuAnchorState from parent when disposed. (flutter#149586)
  Add test for inherited_notifier.0.dart (flutter#150344)
  [CLI tool] in `flutter test`, consider `--flavor` when validating the cached asset bundle (flutter#150461)
  Test InputDecoration API examples (flutter#148560)
  ...
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 24, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 24, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 25, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 25, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jun 25, 2024
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Jun 25, 2024
Roll Flutter from 6c06abb to e726eb4 (51 revisions)

flutter/flutter@6c06abb...e726eb4

2024-06-25 [email protected] Roll Packages from 711b4ac to 03f5f6d (21 revisions) (flutter/flutter#150779)
2024-06-25 [email protected] Roll Flutter Engine from afa7ce19bca8 to fbd92055f3a6 (1 revision) (flutter/flutter#150777)
2024-06-25 [email protected] Reland Add tests for form_text_field.1.dart (#150481) (#150696) (flutter/flutter#150750)
2024-06-25 [email protected] Add an example for CupertinoPopupSurface (flutter/flutter#150357)
2024-06-25 [email protected] [flutter_tools/dap] Handle app.stop errors when launching/attaching (flutter/flutter#149734)
2024-06-25 [email protected] Roll Flutter Engine from be7db94196fe to afa7ce19bca8 (18 revisions) (flutter/flutter#150762)
2024-06-25 [email protected] Remove dubious comment (flutter/flutter#150608)
2024-06-25 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Manual engine roll to 6884e83 (#150733)" (flutter/flutter#150746)
2024-06-25 [email protected] Manual engine roll to 6884e83 (flutter/flutter#150733)
2024-06-24 [email protected] Linkify 'see also' sections (flutter/flutter#150734)
2024-06-24 [email protected] Roll pub packages (flutter/flutter#150712)
2024-06-24 [email protected] Update flutter.dev links from framework to more permanent destinations (flutter/flutter#150531)
2024-06-24 [email protected] Manual engine roll to be7db94196fe (flutter/flutter#150714)
2024-06-24 [email protected] allow adb to set canfail then use canFail=true for clearing logs (flutter/flutter#150517)
2024-06-24 [email protected] Update android_device.dart to have clearLogs not print to standard error (flutter/flutter#150197)
2024-06-24 [email protected] Update issue link in analysis_options.yaml (flutter/flutter#150395)
2024-06-24 [email protected] Fix a number of broken doc comment references (flutter/flutter#150540)
2024-06-24 [email protected] Fix flaky sliver tree test (flutter/flutter#150707)
2024-06-24 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Add tests for form_text_field.1.dart (#150481)" (flutter/flutter#150696)
2024-06-24 [email protected] Add tests for form_text_field.1.dart (flutter/flutter#150481)
2024-06-22 [email protected] Fix: Memory leak in UndoHistory widget because it never de-registered itself as global UndoManager client (Resolves #148291) (flutter/flutter#150661)
2024-06-22 [email protected] [CupertinoActionSheet] Fix the layout (part 1) (flutter/flutter#149636)
2024-06-21 [email protected] Remove discontinued `device_info` and `connectivity` plugins from `flutter_gallery`, roll pub packages (flutter/flutter#150585)
2024-06-21 [email protected] [a11y] Update semantics in bottom_navigation_bar.dart (flutter/flutter#150576)
2024-06-21 [email protected] Roll Flutter Engine from dda82d905f37 to 33415c6ee7c2 (7 revisions) (flutter/flutter#150637)
2024-06-21 [email protected] Reland 4: [CupertinoActionSheet] Match colors to native (flutter/flutter#150442)
2024-06-21 [email protected] Enable SelectionArea double tap/triple tap gesture support for mobile platforms (flutter/flutter#149295)
2024-06-21 [email protected] made SelectionArea alignment consistent between web and other platform (flutter/flutter#150037)
2024-06-21 [email protected] Fix link hook typo (flutter/flutter#150194)
2024-06-21 [email protected] Stop looking for .packages when analyzing (flutter/flutter#150349)
2024-06-20 [email protected] Update flutter.dev links from misc packages to more permanent destinations (flutter/flutter#150532)
2024-06-20 [email protected] Roll Flutter Engine from dd37cefd4a94 to dda82d905f37 (9 revisions) (flutter/flutter#150582)
2024-06-20 [email protected] Update Material token to the latest 4.1.0 (flutter/flutter#150382)
2024-06-20 [email protected] Let the lockfile script generate lockfiles for kotlin gradle files as well (flutter/flutter#150471)
2024-06-20 [email protected] Make popup menu hardcoded padding configurable (flutter/flutter#150506)
2024-06-20 [email protected] [flutter_tools] un-hide the --dds flag (flutter/flutter#150280)
2024-06-20 [email protected] [material/menu_anchor.dart] Remove _MenuAnchorState from parent when disposed. (flutter/flutter#149586)
2024-06-20 [email protected] Add test for inherited_notifier.0.dart (flutter/flutter#150344)
2024-06-20 [email protected] [CLI tool] in `flutter test`, consider `--flavor` when validating the cached asset bundle (flutter/flutter#150461)
2024-06-20 [email protected] Test InputDecoration API examples (flutter/flutter#148560)
2024-06-20 [email protected] Clean leaky tests. (flutter/flutter#150335)
2024-06-20 [email protected] Roll Flutter Engine from f9c497f178d3 to dd37cefd4a94 (2 revisions) (flutter/flutter#150537)
2024-06-20 [email protected] Roll Flutter Engine from a31279381b40 to f9c497f178d3 (9 revisions) (flutter/flutter#150528)
2024-06-19 [email protected] Add tests for about_list_tile.0.dart (flutter/flutter#150181)
2024-06-19 [email protected] Roll Flutter Engine from 0ad18fe4c0b5 to a31279381b40 (7 revisions) (flutter/flutter#150473)
2024-06-18 [email protected] Revert "[a11y] Add semantics: button to bottom navigation bar items and dropdown menu items" (flutter/flutter#150445)
...
sigurdm pushed a commit to sigurdm/flutter that referenced this pull request Jun 26, 2024
… platforms (flutter#149295)

This change enables double tap / triple tap support in SelectionArea for mobile platforms:
Android / Fuchsia: 
- On native, these platforms allow for double tap / double tap + drag to select word-by-word.
- On web using touch, these platforms only support double tap to select word.
- On web and native using a mouse, these platforms support double click / double click + drag to select word-by-word, and triple click / triple click + drag to select paragraph-by-paragraph.

iOS:
- On native, these platforms allow for double tap / double tap + drag to select word-by-word.
- On web using touch, these platforms do not support double tap/triple tap gestures.
- On web using touch, these platforms allow support double tap + drag gestures.
- On web and native using a mouse, these platforms support double click / double click + drag to select word-by-word, and triple click / triple click + drag to select paragraph-by-paragraph.

Part of: flutter#129583
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants