| Id | UnannouncedDynamicUpdates |
| Summary | Dynamic changes are not communicated, causing users to miss context changes |
| Severity | Warning |
| Category | Assistive Technologies / Dynamic Feedback |
| Affects | Kotlin and Java files |
| Implementation | Partially covered by Android Lint - Custom lint rule for notifyX(), setText(), setVisibility() patterns without announceForAccessibility() or live regions |
UI state changes (selection, expansion, completion, etc.) and dynamic
content updates lack proper accessibility communication through
announceForAccessibility(),
accessibilityLiveRegion,
sendAccessibilityEvent(), Activity.setTitle(),
ViewCompat.setAccessibilityPaneTitle(),
View.onInitializeAccessibilityNodeInfo(), or other standard
accessibility APIs.
Prevents assistive technology users from receiving immediate feedback about state changes or content updates they've triggered, forcing them to manually explore the interface to determine if their actions were successful, significantly impacting task efficiency and user confidence.
class ShoppingCartActivity : AppCompatActivity() {
private lateinit var cartItems: RecyclerView
private lateinit var adapter: CartAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
cartItems = RecyclerView(this)
adapter = CartAdapter()
cartItems.adapter = adapter
setContentView(cartItems)
}
private fun addItemToCart(item: Item) {
cartItems.add(item)
adapter.notifyItemInserted(cartItems.size - 1)
// Missing: announceForAccessibility("${item.name} added to cart")
// TalkBack users don't know the action succeeded
}
}