The M400 and M4000 feature interaction methods which differ significantly from traditional touchscreen Android devices, and it is particularly important to keep these considerations in mind when designing the User Interface of an application intended to run on this device.

Existing applications which heavily leverage touchscreen interactions do not translate well to this device. This is due to touchscreen UI’s leveraging taps for input based on specific screen coordinates, which is not possible with the available interaction methods.


Voice commands are the ideal method of interacting with the device under many circumstances, as they will allow users to quickly control the device and provide input without requiring them to physically interact with the device, thus interrupting their workflow.

The device includes a Speech Recognition engine. Refer to the Speech SDK section for additional details on the engine and the speech vocabulary it supports.

Applications can leverage alternate recognition engines by including them within the application itself.

Navigation Buttons

The three navigation buttons on the device include both short and long-press functionality.

The buttons generate KeyEvents which can be intercepted and handled explicitly in your application, or can be left to the system to handle. Reference Android KeyEvent documentation for details.

Short presses on the buttons will perform the following functions:

  • Foremost Button – Move focus to the right within a UI or move down if no focusable objects are available to the right. Returns the KEYCODE_DPAD_RIGHT KeyEvent.

  • Middle Button – Move focus to the left within a UI or move up if no focusable objects are available to the left. Returns the KEYCODE_DPAD_LEFT KeyEvent.

  • Rearmost Button – Will select the current UI element which has focus. Returns the KEYCODE_DPAD_CENTER KeyEvent.

Long presses on the buttons will perform the following functions:

  • Foremost Button – Brings up a context menu for the current area of the UI, allowing users to access additional functions without crowding the UI. (KEYCODE_MENU)

  • Middle Button – Returns to the Home screen. Returns KEYCODE_HOME.

  • Rearmost Button – Moves back one step in the UI. Returns KEYCODE_BACK.


The M400 and M4000 feature a two-axis touchpad to that can detect a wide variety of user gestures.

The touchpad is implemented as a trackball device, and methods such as dispatchTrackballEvent() and onTrackballEvent() can be used to capture and process the raw touchpad events.

As a fallback, if you do not handle the trackball events in your application, there are predefined single, double, and triple-finger gestures that generate key presses. These keys can be captured with standard Android methods. Refer Android KeyEvent documentation for details.

One finger

  • Swipe back to front: KEYCODE_DPAD_RIGHT

  • Swipe front to back: KEYCODE_DPAD_LEFT

  • Swipe bottom to top: KEYCODE_DPAD_UP

  • Swipe top to bottom: KEYCODE_DPAD_DOWN



Two fingers

  • Swipe back to front: KEYCODE_FORWARD_DEL

  • Swipe front to back: KEYCODE_DEL

  • Swipe bottom to top: KEYCODE_VOLUME_UP

  • Swipe top to bottom: KEYCODE_VOLUME_DOWN

  • Swipe top to bottom and hold: KEYCODE_VOLUME_MUTE



Three fingers


  • Hold: KEY_F12

Touchpad Mouse

With the release of version 2.1.0 of the M400 and M4000 OS, users can now configure their touchpad to act as a virtual mouse.

Enable this by selecting "Mouse" mode in Settings > System > Language & input > Touchpad.


  • Swipe with one finger to move the cursor.

  • Tap with one finger to click the screen at the cursor.

  • Swipe with two fingers to scroll the view.

  • Tap with two fingers to go back.

Did this answer your question?