From 046005bf1feb602dd8b751fd336357c3db2c8f1f Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 17 Jul 2019 09:51:09 -0700 Subject: [PATCH] Add multi-line flag to semantics (flutter/engine#9850) --- engine/src/flutter/lib/ui/semantics.dart | 14 ++++++++++++++ .../src/flutter/lib/ui/semantics/semantics_node.h | 2 ++ .../io/flutter/view/AccessibilityBridge.java | 2 ++ 3 files changed, 18 insertions(+) diff --git a/engine/src/flutter/lib/ui/semantics.dart b/engine/src/flutter/lib/ui/semantics.dart index f6f4e2afed5..451b453391a 100644 --- a/engine/src/flutter/lib/ui/semantics.dart +++ b/engine/src/flutter/lib/ui/semantics.dart @@ -288,6 +288,7 @@ class SemanticsFlag { static const int _kHasToggledStateIndex = 1 << 16; static const int _kIsToggledIndex = 1 << 17; static const int _kHasImplicitScrollingIndex = 1 << 18; + static const int _kIsMultilineIndex = 1 << 19; static const int _kIsReadOnlyIndex = 1 << 20; const SemanticsFlag._(this.index); @@ -386,6 +387,13 @@ class SemanticsFlag { /// is a password or contains other sensitive information. static const SemanticsFlag isObscured = SemanticsFlag._(_kIsObscuredIndex); + /// Whether the value of the semantics node is coming from a multi-line text + /// field. + /// + /// This is used for text fields to distinguish single-line text fields from + /// multi-line ones. + static const SemanticsFlag isMultiline = SemanticsFlag._(_kIsMultilineIndex); + /// Whether the semantics node is the root of a subtree for which a route name /// should be announced. /// @@ -512,6 +520,10 @@ class SemanticsFlag { _kHasToggledStateIndex: hasToggledState, _kIsToggledIndex: isToggled, _kHasImplicitScrollingIndex: hasImplicitScrolling, + // TODO(mdebbar): Uncomment after both these PRs are landed: + // - https://github.com/flutter/engine/pull/9850 + // - https://github.com/flutter/flutter/pull/36297 + // _kIsMultilineIndex: isMultiline, _kIsReadOnlyIndex: isReadOnly, }; @@ -556,6 +568,8 @@ class SemanticsFlag { return 'SemanticsFlag.isToggled'; case _kHasImplicitScrollingIndex: return 'SemanticsFlag.hasImplicitScrolling'; + case _kIsMultilineIndex: + return 'SemanticsFlag.isMultiline'; case _kIsReadOnlyIndex: return 'SemanticsFlag.isReadOnly'; } diff --git a/engine/src/flutter/lib/ui/semantics/semantics_node.h b/engine/src/flutter/lib/ui/semantics/semantics_node.h index 62f1b8b3211..81f98f1417b 100644 --- a/engine/src/flutter/lib/ui/semantics/semantics_node.h +++ b/engine/src/flutter/lib/ui/semantics/semantics_node.h @@ -69,6 +69,8 @@ enum class SemanticsFlags : int32_t { kHasToggledState = 1 << 16, kIsToggled = 1 << 17, kHasImplicitScrolling = 1 << 18, + // The Dart API defines the following flag but it isn't used in iOS. + // kIsMultiline = 1 << 19, kIsReadOnly = 1 << 20, }; diff --git a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 3030b7f3665..8b138ad9ce8 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -1614,6 +1614,8 @@ public class AccessibilityBridge extends AccessibilityNodeProvider { HAS_TOGGLED_STATE(1 << 16), IS_TOGGLED(1 << 17), HAS_IMPLICIT_SCROLLING(1 << 18), + // The Dart API defines the following flag but it isn't used in Android. + // IS_MULTILINE(1 << 19); IS_READ_ONLY(1 << 20); final int value;