diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index a228ad1db..59333cd89 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -126,6 +126,7 @@ public class ConversationItem extends BaseConversationItem private Stub vcardViewStub; private Stub callViewStub; private @Nullable EventListener eventListener; + private @Nullable LinkAccessibilityDelegate linkAccessibilityDelegate; private int measureCalls; @@ -432,7 +433,10 @@ public class ConversationItem extends BaseConversationItem // Set accessibility delegate for TalkBack to expose links as custom actions if (Util.isTouchExplorationEnabled(context) && batchSelected.isEmpty()) { - bodyText.setAccessibilityDelegate(new LinkAccessibilityDelegate(context)); + if (linkAccessibilityDelegate == null) { + linkAccessibilityDelegate = new LinkAccessibilityDelegate(context); + } + bodyText.setAccessibilityDelegate(linkAccessibilityDelegate); } else { bodyText.setAccessibilityDelegate(null); } diff --git a/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java b/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java index 2a6d135a3..ec6a5f655 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LinkAccessibilityDelegate.java @@ -20,7 +20,10 @@ import java.util.Map; */ public class LinkAccessibilityDelegate extends View.AccessibilityDelegate { - // Base ID for custom link actions (using a high number to avoid conflicts) + // Base ID for custom link actions. Using a high number (0x00FF0000, which is 16,711,680 in decimal) + // to avoid conflicts with Android's standard accessibility action IDs, which are typically small integers + // (e.g., ACTION_CLICK = 16, ACTION_LONG_CLICK = 32, etc.) or specific bit flags. + // This range is safe for custom actions as per Android accessibility guidelines. private static final int LINK_ACTION_BASE_ID = 0x00FF0000; // Map to store span references for each action ID