From f0c4bc30c67dba03c4bfe9aefbb6219f7967c3a0 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 27 Apr 2018 20:02:11 -0700 Subject: [PATCH] Add SemanticService.tooltip method for Android tooltips (#16978) --- .../flutter/lib/src/material/tooltip.dart | 1 + .../lib/src/semantics/semantics_event.dart | 19 +++++++++++++++++++ .../lib/src/semantics/semantics_service.dart | 10 +++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart index 85edc3a5cb..42d875bb01 100644 --- a/packages/flutter/lib/src/material/tooltip.dart +++ b/packages/flutter/lib/src/material/tooltip.dart @@ -147,6 +147,7 @@ class _TooltipState extends State with SingleTickerProviderStateMixin { _entry = new OverlayEntry(builder: (BuildContext context) => overlay); Overlay.of(context, debugRequiredFor: widget).insert(_entry); GestureBinding.instance.pointerRouter.addGlobalRoute(_handlePointerEvent); + SemanticsService.tooltip(widget.message); _controller.forward(); return true; } diff --git a/packages/flutter/lib/src/semantics/semantics_event.dart b/packages/flutter/lib/src/semantics/semantics_event.dart index 61d999905a..139e876142 100644 --- a/packages/flutter/lib/src/semantics/semantics_event.dart +++ b/packages/flutter/lib/src/semantics/semantics_event.dart @@ -88,3 +88,22 @@ class AnnounceSemanticsEvent extends SemanticsEvent { }; } } + +/// An event for a semantic announcement of a tooltip. +/// +/// This is only used by Android to announce tooltip values. +class TooltipSemanticsEvent extends SemanticsEvent { + + /// Constructs an event that triggers a tooltip announcement by the platform. + const TooltipSemanticsEvent(this.message) : super('tooltip'); + + /// The text content of the tooltip. + final String message; + + @override + Map getDataMap() { + return { + 'message': message, + }; + } +} diff --git a/packages/flutter/lib/src/semantics/semantics_service.dart b/packages/flutter/lib/src/semantics/semantics_service.dart index 4ed5700017..ebd40dac7f 100644 --- a/packages/flutter/lib/src/semantics/semantics_service.dart +++ b/packages/flutter/lib/src/semantics/semantics_service.dart @@ -7,7 +7,7 @@ import 'dart:ui' show TextDirection; import 'package:flutter/services.dart' show SystemChannels; -import 'semantics_event.dart' show AnnounceSemanticsEvent; +import 'semantics_event.dart' show AnnounceSemanticsEvent, TooltipSemanticsEvent; /// Allows access to the platform's accessibility services. @@ -31,4 +31,12 @@ class SemanticsService { final AnnounceSemanticsEvent event = new AnnounceSemanticsEvent(message, textDirection); await SystemChannels.accessibility.send(event.toMap()); } + + /// Sends a semantic announcement of a tooltip. + /// + /// This is only used by Android. + static Future tooltip(String message) async { + final TooltipSemanticsEvent event = new TooltipSemanticsEvent(message); + await SystemChannels.accessibility.send(event.toMap()); + } }