From e8d3458a7b7697b28864b054c618c2b08f22f9de Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 23:14:55 +0000 Subject: [PATCH] Add clarifying comments for accessibility implementation - Explain why accessibility delegate is not set during batch selection - Explain why map is cleared and rebuilt on each accessibility update - Improves code maintainability and readability Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com> --- .../java/org/thoughtcrime/securesms/ConversationItem.java | 5 ++++- .../securesms/util/LinkAccessibilityDelegate.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index 59333cd89..d36f3bcc5 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -431,7 +431,10 @@ public class ConversationItem extends BaseConversationItem bodyText.setText(spannable); bodyText.setVisibility(View.VISIBLE); - // Set accessibility delegate for TalkBack to expose links as custom actions + // Set accessibility delegate for TalkBack to expose links as custom actions. + // Note: During batch selection mode (batchSelected.isEmpty() == false), links are not + // linkified (see line 427-428), so there's no need to set the accessibility delegate. + // This also ensures that accessibility focus doesn't interfere with batch selection UI. if (Util.isTouchExplorationEnabled(context) && batchSelected.isEmpty()) { if (linkAccessibilityDelegate == null) { linkAccessibilityDelegate = new LinkAccessibilityDelegate(context); diff --git a/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java b/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java index ec6a5f655..849f10ba5 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java @@ -53,7 +53,10 @@ public class LinkAccessibilityDelegate extends View.AccessibilityDelegate { Spanned spanned = (Spanned) text; LongClickCopySpan[] spans = spanned.getSpans(0, spanned.length(), LongClickCopySpan.class); - // Clear previous mappings + // Clear and rebuild mappings each time. This is necessary because: + // 1. TextView content may have changed since the last call + // 2. The same delegate instance may be reused for different text content + // 3. This method is called infrequently enough that performance is not a concern actionSpanMap.clear(); // Add a custom action for each link