Allow ATV Keychord to turn on/off talkback

Bug: 74307653
Test: manual - tested on elfin

1) Pair emote app to Android TV
2) use keychord (Dpad_down + back) to trigger on/off talkback

(currently, emote app is the only remote that can pair with ATV and
send/trigger 2 keyevents simultaneously to actually trigger the keychord)

---

Talkback was consuming keyevents between interceptKeyEventBeforeQueueing
and interceptKeyEventBeforeDispatching, so if we move the logic that
schedules the toggling of the accessibility feature to the
"...BeforeQueueing" method we can turn off talkback appropriately.

The original CL was located here: ag/4466951. This CL will be CPed back
to pi-tv-dev.

Change-Id: I2c4e532c09d57a1a3cf093cfb7e3d5557f6b9929
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 3e0429f..05a5dd7 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -3543,8 +3543,6 @@
             return 0;
         } else if (mHasFeatureLeanback && interceptBugreportGestureTv(keyCode, down)) {
             return -1;
-        } else if (mHasFeatureLeanback && interceptAccessibilityGestureTv(keyCode, down)) {
-            return -1;
         } else if (keyCode == KeyEvent.KEYCODE_ALL_APPS) {
             if (!down) {
                 mHandler.removeMessages(MSG_HANDLE_ALL_APPS);
@@ -6037,6 +6035,22 @@
             }
         }
 
+        // Intercept the Accessibility keychord for TV (DPAD_DOWN + Back) before the keyevent is
+        // processed through interceptKeyEventBeforeDispatch since Talkback may consume this event
+        // before it has a chance to reach that method.
+        if (mHasFeatureLeanback) {
+            switch (keyCode) {
+                case KeyEvent.KEYCODE_DPAD_DOWN:
+                case KeyEvent.KEYCODE_BACK: {
+                    boolean handled = interceptAccessibilityGestureTv(keyCode, down);
+                    if (handled) {
+                        result &= ~ACTION_PASS_TO_USER;
+                    }
+                    break;
+                }
+            }
+        }
+
         if (useHapticFeedback) {
             performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false,
                     "Virtual Key - Press");