From 569c37cec159a67593b01c52aaa4cb92d1826bab Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Tue, 29 Oct 2024 00:41:02 +0100 Subject: [PATCH] Disable display power for virtual displays If displayId == Device.DISPLAY_ID_NONE, then the display is virtual: its power mode cannot be changed. PR #5418 --- server/src/main/java/com/genymobile/scrcpy/CleanUp.java | 8 +++----- .../java/com/genymobile/scrcpy/control/Controller.java | 4 +++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/CleanUp.java b/server/src/main/java/com/genymobile/scrcpy/CleanUp.java index 7fbb6cc6..f561a10f 100644 --- a/server/src/main/java/com/genymobile/scrcpy/CleanUp.java +++ b/server/src/main/java/com/genymobile/scrcpy/CleanUp.java @@ -137,12 +137,10 @@ public final class CleanUp { } } - if (Device.isScreenOn()) { + if (Device.isScreenOn() && displayId != Device.DISPLAY_ID_NONE) { if (powerOffScreen) { - if (displayId != Device.DISPLAY_ID_NONE) { - Ln.i("Power off screen"); - Device.powerOffScreen(displayId); - } + Ln.i("Power off screen"); + Device.powerOffScreen(displayId); } else if (restoreDisplayPower) { Ln.i("Restoring display power"); Device.setDisplayPower(true); diff --git a/server/src/main/java/com/genymobile/scrcpy/control/Controller.java b/server/src/main/java/com/genymobile/scrcpy/control/Controller.java index 81da1800..fbe0691e 100644 --- a/server/src/main/java/com/genymobile/scrcpy/control/Controller.java +++ b/server/src/main/java/com/genymobile/scrcpy/control/Controller.java @@ -271,7 +271,7 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener { setClipboard(msg.getText(), msg.getPaste(), msg.getSequence()); break; case ControlMessage.TYPE_SET_DISPLAY_POWER: - if (supportsInputEvents) { + if (supportsInputEvents && displayId != Device.DISPLAY_ID_NONE) { boolean on = msg.getOn(); boolean setDisplayPowerOk = Device.setDisplayPower(on); if (setDisplayPowerOk) { @@ -311,6 +311,7 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener { private boolean injectKeycode(int action, int keycode, int repeat, int metaState) { if (keepDisplayPowerOff && action == KeyEvent.ACTION_UP && (keycode == KeyEvent.KEYCODE_POWER || keycode == KeyEvent.KEYCODE_WAKEUP)) { + assert displayId != Device.DISPLAY_ID_NONE; scheduleDisplayPowerOff(); } return injectKeyEvent(action, keycode, repeat, metaState, Device.INJECT_MODE_ASYNC); @@ -510,6 +511,7 @@ public class Controller implements AsyncProcessor, VirtualDisplayListener { } if (keepDisplayPowerOff) { + assert displayId != Device.DISPLAY_ID_NONE; scheduleDisplayPowerOff(); } return pressReleaseKeycode(KeyEvent.KEYCODE_POWER, Device.INJECT_MODE_ASYNC);