From f5178f2240f5f8e24ab5c798db86f93fa027e936 Mon Sep 17 00:00:00 2001 From: Negar Date: Thu, 12 Jan 2023 15:04:37 -0800 Subject: [PATCH 1/5] Update branch with changes in main - Fix iOS safari keyboard issue when semantics is enabled --- .../lib/src/engine/semantics/text_field.dart | 200 ++++--- .../engine/semantics/text_field_test.dart | 559 ++++++++++++++---- 2 files changed, 583 insertions(+), 176 deletions(-) diff --git a/lib/web_ui/lib/src/engine/semantics/text_field.dart b/lib/web_ui/lib/src/engine/semantics/text_field.dart index 289248ea0c50f..30bb97fbb319f 100644 --- a/lib/web_ui/lib/src/engine/semantics/text_field.dart +++ b/lib/web_ui/lib/src/engine/semantics/text_field.dart @@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; import 'package:ui/ui.dart' as ui; import '../browser_detection.dart'; import '../dom.dart'; +import '../embedder.dart'; import '../platform_dispatcher.dart'; import '../safe_browser_api.dart'; import '../text_editing/text_editing.dart'; @@ -29,7 +31,8 @@ class SemanticsTextEditingStrategy extends DefaultTextEditingStrategy { /// Initializes the [SemanticsTextEditingStrategy] singleton. /// /// This method must be called prior to accessing [instance]. - static SemanticsTextEditingStrategy ensureInitialized(HybridTextEditing owner) { + static SemanticsTextEditingStrategy ensureInitialized( + HybridTextEditing owner) { if (_instance != null && instance.owner == owner) { return instance; } @@ -205,35 +208,59 @@ class SemanticsTextEditingStrategy extends DefaultTextEditingStrategy { /// This role is implemented via a content-editable HTML element. This role does /// not proactively switch modes depending on the current /// [EngineSemanticsOwner.gestureMode]. However, in Chrome on Android it ignores -/// browser gestures when in pointer mode. In Safari on iOS touch events are +/// browser gestures when in pointer mode. In Safari on iOS pointer events are /// used to detect text box invocation. This is because Safari issues touch /// events even when Voiceover is enabled. class TextField extends RoleManager { TextField(SemanticsObject semanticsObject) : super(Role.textField, semanticsObject) { - editableElement = - semanticsObject.hasFlag(ui.SemanticsFlag.isMultiline) - ? createDomHTMLTextAreaElement() - : createDomHTMLInputElement(); _setupDomElement(); } /// The element used for editing, e.g. ``, `