Register DisplayFoldListener only for Android 10+

This listener does not exist on Android < 10, and it makes scrcpy fail.
This commit is contained in:
Romain Vimont 2023-06-22 00:49:11 +02:00
parent d046678f85
commit c0f3c080b6
2 changed files with 20 additions and 16 deletions

View file

@ -99,25 +99,27 @@ public final class Device {
} }
}, displayId); }, displayId);
ServiceManager.getWindowManager().registerDisplayFoldListener(new IDisplayFoldListener.Stub() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
@Override ServiceManager.getWindowManager().registerDisplayFoldListener(new IDisplayFoldListener.Stub() {
public void onDisplayFoldChanged(int displayId, boolean folded) { @Override
synchronized (Device.this) { public void onDisplayFoldChanged(int displayId, boolean folded) {
DisplayInfo displayInfo = ServiceManager.getDisplayManager().getDisplayInfo(displayId); synchronized (Device.this) {
if (displayInfo == null) { DisplayInfo displayInfo = ServiceManager.getDisplayManager().getDisplayInfo(displayId);
Ln.e("Display " + displayId + " not found\n" + LogUtils.buildDisplayListMessage()); if (displayInfo == null) {
return; Ln.e("Display " + displayId + " not found\n" + LogUtils.buildDisplayListMessage());
} return;
}
screenInfo = ScreenInfo.computeScreenInfo(displayInfo.getRotation(), displayInfo.getSize(), options.getCrop(), screenInfo = ScreenInfo.computeScreenInfo(displayInfo.getRotation(), displayInfo.getSize(), options.getCrop(),
options.getMaxSize(), options.getLockVideoOrientation()); options.getMaxSize(), options.getLockVideoOrientation());
// notify // notify
if (foldListener != null) { if (foldListener != null) {
foldListener.onFoldChanged(displayId, folded); foldListener.onFoldChanged(displayId, folded);
}
} }
} }
} });
}); }
if (options.getControl() && options.getClipboardAutosync()) { if (options.getControl() && options.getClipboardAutosync()) {
// If control and autosync are enabled, synchronize Android clipboard to the computer automatically // If control and autosync are enabled, synchronize Android clipboard to the computer automatically

View file

@ -2,6 +2,7 @@ package com.genymobile.scrcpy.wrappers;
import com.genymobile.scrcpy.Ln; import com.genymobile.scrcpy.Ln;
import android.annotation.TargetApi;
import android.os.IInterface; import android.os.IInterface;
import android.view.IRotationWatcher; import android.view.IRotationWatcher;
import android.view.IDisplayFoldListener; import android.view.IDisplayFoldListener;
@ -110,6 +111,7 @@ public final class WindowManager {
} }
} }
@TargetApi(29)
public void registerDisplayFoldListener(IDisplayFoldListener foldListener) { public void registerDisplayFoldListener(IDisplayFoldListener foldListener) {
try { try {
Class<?> cls = manager.getClass(); Class<?> cls = manager.getClass();