From 46e74506703bb1982741865f5034d65098f14592 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Wed, 20 May 2020 17:18:02 -0700 Subject: [PATCH] Camera: Query default display size from display manager The current Android API will trigger strict mode violations in case a context not bound to any particular display tries to connect to the window manager service. To avoid such violations query the default display size directly from the display manager. Bug: 157167435 Test: Camera CTS Change-Id: Icad19ec0227b4945da9e6fcacaec916c5799877f --- .../hardware/camera2/CameraManager.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index e81c649796a01..800e5f3568813 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -34,6 +34,7 @@ import android.hardware.camera2.legacy.LegacyMetadataMapper; import android.hardware.camera2.params.SessionConfiguration; import android.hardware.camera2.utils.CameraIdAndSessionConfiguration; import android.hardware.camera2.utils.ConcurrentCameraIdCombination; +import android.hardware.display.DisplayManager; import android.os.Binder; import android.os.DeadObjectException; import android.os.Handler; @@ -47,7 +48,6 @@ import android.util.ArraySet; import android.util.Log; import android.util.Size; import android.view.Display; -import android.view.WindowManager; import java.util.ArrayList; import java.util.Arrays; @@ -334,19 +334,22 @@ public final class CameraManager { Size ret = new Size(0, 0); try { - WindowManager windowManager = - (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - Display display = windowManager.getDefaultDisplay(); + DisplayManager displayManager = + (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE); + Display display = displayManager.getDisplay(Display.DEFAULT_DISPLAY); + if (display != null) { + int width = display.getWidth(); + int height = display.getHeight(); - int width = display.getWidth(); - int height = display.getHeight(); + if (height > width) { + height = width; + width = display.getHeight(); + } - if (height > width) { - height = width; - width = display.getHeight(); + ret = new Size(width, height); + } else { + Log.e(TAG, "Invalid default display!"); } - - ret = new Size(width, height); } catch (Exception e) { Log.e(TAG, "getDisplaySize Failed. " + e.toString()); }