From d714016ffc252f9fd3370ea10db52b4ce615ca25 Mon Sep 17 00:00:00 2001 From: caizhixing Date: Fri, 30 Oct 2026 07:37:05 -0700 Subject: [PATCH] fix: Crash in multi-window on API 26-29 (#7453) getMultiWindowDisplaySize() calls WindowManager.getCurrentWindowMetrics(), added in API 30, without a version check. Lawnchair runs down to minSdk 26, so building the multi-window device profile (Launcher#initDeviceProfile and the fallback RecentsActivity) throws NoSuchMethodError on Android 8-10 devices in split-screen. Derive the bounds from the default display size below R. Co-authored-by: caizhixing <17589399+caizhixing03@user.noreply.gitee.com> --- src/com/android/launcher3/BaseActivity.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index c0db5ca7b5..db21aedfd0 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -28,11 +28,13 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.res.Configuration; +import android.graphics.Point; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; import android.view.ActionMode; +import android.view.Display; import android.view.View; import android.window.OnBackInvokedDispatcher; @@ -530,7 +532,14 @@ public abstract class BaseActivity extends Activity implements ActivityContext, } protected WindowBounds getMultiWindowDisplaySize() { - return WindowBounds.fromWindowMetrics(getWindowManager().getCurrentWindowMetrics()); + if (Utilities.ATLEAST_R) { + return WindowBounds.fromWindowMetrics(getWindowManager().getCurrentWindowMetrics()); + } else { + Display display = getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + return new WindowBounds(size.x, size.y, size.x, size.y, -1); + } } @Override