From 6fc673fc3632d876ba8c45b119d0be6bdf8067c0 Mon Sep 17 00:00:00 2001 From: ash2moon Date: Tue, 8 Apr 2025 08:02:08 -0700 Subject: [PATCH] add check for announcement support per platform (#166099) Helps unblock https://github.com/flutter/flutter/pull/165531 and is part of https://github.com/flutter/flutter/issues/165510 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --- .../flutter/lib/src/semantics/semantics_service.dart | 12 ++++++++++++ .../test/semantics/semantics_service_test.dart | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/semantics/semantics_service.dart b/packages/flutter/lib/src/semantics/semantics_service.dart index b78864f0d5..7086ee5716 100644 --- a/packages/flutter/lib/src/semantics/semantics_service.dart +++ b/packages/flutter/lib/src/semantics/semantics_service.dart @@ -7,6 +7,7 @@ library; import 'dart:ui' show TextDirection; +import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart' show SystemChannels; import 'semantics_event.dart' show AnnounceSemanticsEvent, Assertiveness, TooltipSemanticsEvent; @@ -33,6 +34,9 @@ abstract final class SemanticsService { /// Currently, this is only supported by the web engine and has no effect on /// other platforms. The default mode is [Assertiveness.polite]. /// + /// Not all platforms support announcements. Check to see if + /// [isAnnounceSupported] before calling this method. + /// /// ### Android /// Android has [deprecated announcement events][1] due to its disruptive /// behavior with TalkBack forcing it to clear its speech queue and speak the @@ -62,4 +66,12 @@ abstract final class SemanticsService { final TooltipSemanticsEvent event = TooltipSemanticsEvent(message); await SystemChannels.accessibility.send(event.toMap()); } + + /// Checks if announce is supported on the given platform. + /// + /// On Android the announce method is deprecated, therefore will return false. + /// On other platforms, this will return true. + static bool isAnnounceSupported() { + return defaultTargetPlatform != TargetPlatform.android; + } } diff --git a/packages/flutter/test/semantics/semantics_service_test.dart b/packages/flutter/test/semantics/semantics_service_test.dart index f741f316e5..59c8fab6ad 100644 --- a/packages/flutter/test/semantics/semantics_service_test.dart +++ b/packages/flutter/test/semantics/semantics_service_test.dart @@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart'; import 'package:flutter/semantics.dart'; -import 'package:flutter/services.dart' show SystemChannels; +import 'package:flutter/services.dart' show SystemChannels, TargetPlatform; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -44,4 +45,12 @@ void main() { ]), ); }); + + for (final TargetPlatform platform in TargetPlatform.values) { + test('Announce not supported on Android. (platform=$platform)', () { + debugDefaultTargetPlatformOverride = platform; + expect(SemanticsService.isAnnounceSupported(), platform != TargetPlatform.android); + debugDefaultTargetPlatformOverride = null; + }); + } }