
Announces UI messages to native screen readers using JNA, offering CompositionLocal helpers and Swing integration, supports assertive/polite priorities and returns success status.
A JVM-only helper that provides a Compose Desktop equivalent of
LocalAccessibilityManager.announceForAccessibility() using JNA.
accessibility: core API with JNA, no Compose dependency.accessibilitycompose: Compose-only helpers (CompositionLocal).demo-compose: Compose Desktop demo using the CompositionLocal.demo-swing: Swing demo without Compose.dependencies {
// Swing / core API
implementation("io.github.kdroidfilter:accessibility-jvm:<version>")
// Compose helpers
implementation("io.github.kdroidfilter:accessibility-compose-jvm:<version>")
}import io.github.kdroidfilter.accessibility.AnnouncementPriority
import io.github.kdroidfilter.accessibility.DesktopAccessibilityManager
DesktopAccessibilityManager.announceForAccessibility(
"Error: Your changes could not be saved.",
AnnouncementPriority.ASSERTIVE,
)In Compose, use the accessibilitycompose module and the CompositionLocal:
import io.github.kdroidfilter.accessibility.compose.LocalDesktopAccessibilityManager
val accessibility = LocalDesktopAccessibilityManager.current
accessibility.announceForAccessibility("Error: Invalid email address.")In Swing (no Compose dependency):
import io.github.kdroidfilter.accessibility.AnnouncementPriority
import io.github.kdroidfilter.accessibility.DesktopAccessibilityManager
DesktopAccessibilityManager.announceForAccessibility(
"Saved successfully.",
AnnouncementPriority.POLITE,
)./gradlew :demo-compose:run
./gradlew :demo-swing:run
NSAccessibilityPostNotificationWithUserInfo with
NSAccessibilityAnnouncementRequestedNotification.The API returns true when a native announcement request was successfully
submitted. It returns false if the platform doesn't support the request or
if the native call fails.
allowDesktopAccessibilityManagerLogging to see library logs.AnnouncementPriority.ASSERTIVE is for urgent messages (errors, blockers).
It may interrupt or flush current speech output on supported screen readers.AnnouncementPriority.POLITE is for non-urgent updates. It should be queued
or spoken after the current speech finishes, when supported.macOS (VoiceOver) π:
Windows (NVDA/JAWS) πͺ:
A JVM-only helper that provides a Compose Desktop equivalent of
LocalAccessibilityManager.announceForAccessibility() using JNA.
accessibility: core API with JNA, no Compose dependency.accessibilitycompose: Compose-only helpers (CompositionLocal).demo-compose: Compose Desktop demo using the CompositionLocal.demo-swing: Swing demo without Compose.dependencies {
// Swing / core API
implementation("io.github.kdroidfilter:accessibility-jvm:<version>")
// Compose helpers
implementation("io.github.kdroidfilter:accessibility-compose-jvm:<version>")
}import io.github.kdroidfilter.accessibility.AnnouncementPriority
import io.github.kdroidfilter.accessibility.DesktopAccessibilityManager
DesktopAccessibilityManager.announceForAccessibility(
"Error: Your changes could not be saved.",
AnnouncementPriority.ASSERTIVE,
)In Compose, use the accessibilitycompose module and the CompositionLocal:
import io.github.kdroidfilter.accessibility.compose.LocalDesktopAccessibilityManager
val accessibility = LocalDesktopAccessibilityManager.current
accessibility.announceForAccessibility("Error: Invalid email address.")In Swing (no Compose dependency):
import io.github.kdroidfilter.accessibility.AnnouncementPriority
import io.github.kdroidfilter.accessibility.DesktopAccessibilityManager
DesktopAccessibilityManager.announceForAccessibility(
"Saved successfully.",
AnnouncementPriority.POLITE,
)./gradlew :demo-compose:run
./gradlew :demo-swing:run
NSAccessibilityPostNotificationWithUserInfo with
NSAccessibilityAnnouncementRequestedNotification.The API returns true when a native announcement request was successfully
submitted. It returns false if the platform doesn't support the request or
if the native call fails.
allowDesktopAccessibilityManagerLogging to see library logs.AnnouncementPriority.ASSERTIVE is for urgent messages (errors, blockers).
It may interrupt or flush current speech output on supported screen readers.AnnouncementPriority.POLITE is for non-urgent updates. It should be queued
or spoken after the current speech finishes, when supported.macOS (VoiceOver) π:
Windows (NVDA/JAWS) πͺ: