The Accessibility Menu is an accessibility service that presents a large on-screen menu to control your Android device. This service can be enabled from the Accessibility page in the Settings app. You can control gestures, hardware buttons, navigation, and more. From the menu, you can:

  • Take screenshots
  • Lock your screen
  • Open the device's voice assistant
  • Open Quick Settings and Notifications
  • Turn volume up or down
  • Turn brightness up or down

The UI consists of a ViewPager populated by multiple pages of shortcut buttons. In the settings for the menu, there is an option to display the buttons in a 3x3 grid per page, or a 2x2 grid with larger buttons.

Upon activation, most buttons will close the menu while performing their function. The exception to this are buttons that adjust a value, like volume or brightness, where the user is likely to want to press the button multiple times. In addition, touching other parts of the screen or locking the phone through other means should dismiss the menu.

A majority of the shortcuts correspond directly to an existing accessibility service global action (see AccessibilityService#performGlobalAction() constants) that is performed when pressed. Shortcuts that navigate to a different menu, such as Quick Settings, use an intent to do so. Shortcuts that adjust brightness or volume interface directly with DisplayManager & AudioManager respectively.

To add a new shortcut:

  1. Add a value for the new shortcut to the ShortcutId enum in A11yMenuShortcut.
  2. Put an entry for the enum value into the sShortcutResource HashMap in A11yMenuShortcut. This will require resources for a drawable icon, a color for the icon, the displayed name of the shortcut and the desired text-to-speech output.
  3. Add the enum value to the SHORTCUT_LIST_DEFAULT & LARGE_SHORTCUT_LIST_DEFAULT arrays in A11yMenuOverlayLayout.
  4. For functionality, add a code block to the if-else chain in AccessibilityMenuService.handleClick(), detailing the effect of the shortcut. If you don't want the shortcut to close the menu, include a return statement at the end of the code block.