From 867c6d2786d6e8df059309f207b9dff2e4b7c46e Mon Sep 17 00:00:00 2001 From: sallyyuen Date: Wed, 15 Apr 2020 13:46:39 -0700 Subject: [PATCH] Support sending KEYCODE_HEADSETHOOK KeyEvent from an a11y service Add a private global action to be made public in S. A service can trigger the event by calling performGlobalAction(10) in R. Note: Currently 10 is being used by SystemActions for the Accessibility shortcut. Update ag/10921262 to avoid a conflict. Bug: 154038741 Test: Tested with modified TalkBack and Youtube play/pause Change-Id: I3ca5d25948bfb3eb8520030484cb466ec7188784 --- .../android/accessibilityservice/AccessibilityService.java | 7 +++++++ .../server/accessibility/SystemActionPerformer.java | 3 +++ 2 files changed, 10 insertions(+) diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index 67334f554df76..18e5c3d2d7cc9 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -494,6 +494,13 @@ public abstract class AccessibilityService extends Service { */ public static final int GLOBAL_ACTION_TAKE_SCREENSHOT = 9; + /** + * Action to send the KEYCODE_HEADSETHOOK KeyEvent, which is used to answer/hang up calls and + * play/stop media + * @hide + */ + public static final int GLOBAL_ACTION_KEYCODE_HEADSETHOOK = 10; + private static final String LOG_TAG = "AccessibilityService"; /** diff --git a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java index ef8d524bee25a..ffae770de54e7 100644 --- a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java +++ b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java @@ -301,6 +301,9 @@ public class SystemActionPerformer { return lockScreen(); case AccessibilityService.GLOBAL_ACTION_TAKE_SCREENSHOT: return takeScreenshot(); + case AccessibilityService.GLOBAL_ACTION_KEYCODE_HEADSETHOOK : + sendDownAndUpKeyEvents(KeyEvent.KEYCODE_HEADSETHOOK); + return true; default: return false; }