Skip to content

jqssun/android-display-extend

Repository files navigation

Display Manager for Android

Stars GitHub license build release

Extend is an all-purpose Android display manager for any connected physical or virtual display. It can be used standalone or alongside Mirror. It builds on top of Android desktop experience features, and allows you to place any application on any display and drive it with a built-in multi-touch virtual touchpad, an on-screen keyboard, a physical touchscreen, or any external input device connected to Android.

Combined with any supported launcher, it is a full open-source replacement for Samsung DeX, Motorola Smart Connect Mobile Desktop (formerly Ready For), and Honor Easy Projection, with additional features on top.

Get it on Google Play Get it on F-Droid Get it on GitHub

demo.mp4

Usage

Using without Shizuku is possible but outside the scope of support. For full feature compatibility, Shizuku is required: enable it in any supported mode (wireless debugging, USB debugging, or root) and grant access to this application. See Shizuku documentation for details.

Using with Mirror

Extend manages physical and virtual displays while Mirror creates them. External displays are picked up automatically through built-in DisplayManager API. For screens that Android cannot reach natively, Mirror registers virtual displays in the same way so DisplayManager recognizes them without any extra integration.

Compatibility

Features

  • Launch any application on any external display in full screen
  • Fully customizable resolution, scaling, DPI, and rotation for any display
  • Reset any per-display configuration back to system defaults
  • Built-in on-screen touchpad and keyboard for controlling any display
  • Touchpad control with support for multi-touch, rotation, and digitizer-only mode
  • Per-device routing from any external input device to any display
  • Back and Home navigation for content running on external displays
  • Turn off the built-in screen while keeping external displays active
  • Managed virtual display mode with customizable on-screen keyboard routing and window behavior, for legacy Android versions
Feature Shizuku Accessibility Min. API
Change resolution R N 26
Change DPI R N 26
Change rotation R N 26
Change mode (FPS) R N 26
Bind input device R N 26 (base)
29 (external device detection)
Managed virtual display O N 26 (base)
33 (TRUSTED or OWN_DISPLAY_GROUP)
34 (DEVICE_DISPLAY_GROUP)
On-screen keyboard routing R N 30 (DisplayImePolicyCompat)
On-screen touchpad overlay R R 26 (TYPE_ACCESSIBILITY_OVERLAY)
30 (getWindowsOnAllDisplays)
Floating button O F 26 (TYPE_APPLICATION_OVERLAY and SYSTEM_ALERT_WINDOW)
Built-in screen off R N 26 (SurfaceControl.setDisplayPowerMode)
35 (IDisplayManager.requestDisplayPower)
Physical-key routing R N 26
Display hotplug monitor I N 26
Input hotplug monitor I N 26
Legend
R Required
O Optional
F Fallback
I Inherited
N Unused

Implementation

This application calls Android's built-in IWindowManager, IDisplayManager, and IInputManager services directly. Per-display configuration is applied with setForcedDisplaySize, setForcedDisplayDensityForUser, freezeDisplayRotation, setDisplayImePolicy, etc. Input routing goes through the IInputManager bridge to associate input devices with any specified display.

flowchart LR
    Extend["Extend (via Shizuku)"]
    WM["IWindowManager<br/>IDisplayManager<br/>IInputManager"]
    Displays["All connected displays<br/><small>(physical + virtual)</small>"]
    Extend --> WM --> Displays
Loading

Check out the CI for help on how to create reproducible builds.

Credits

  • Braden Farmer for the use of IWindowManager APIs in SecondScreen
  • Tao Wen for the use of IDisplayManager APIs in connect-screen
  • Genymobile for the use of SurfaceControl APIs in scrcpy

About

An all-purpose Android display manager for any connected physical or virtual display

Resources

License

Stars

92 stars

Watchers

2 watching

Forks

Packages

 
 
 

Contributors