Loading core/java/android/view/Display.java +8 −6 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public final class Display { private final DisplayManagerGlobal mGlobal; private final int mDisplayId; private final int mLayerStack; private final int mFlags; private final int mType; private final DisplayAddress mAddress; private final int mOwnerUid; private final String mOwnerPackageName; private final Resources mResources; Loading Loading @@ -501,10 +499,8 @@ public final class Display { mIsValid = true; // Cache properties that cannot change as long as the display is valid. mLayerStack = displayInfo.layerStack; mFlags = displayInfo.flags; mType = displayInfo.type; mAddress = displayInfo.address; mOwnerUid = displayInfo.ownerUid; mOwnerPackageName = displayInfo.ownerPackageName; } Loading Loading @@ -579,7 +575,10 @@ public final class Display { * @hide */ public int getLayerStack() { return mLayerStack; synchronized (this) { updateDisplayInfoLocked(); return mDisplayInfo.layerStack; } } /** Loading Loading @@ -623,7 +622,10 @@ public final class Display { * @hide */ public DisplayAddress getAddress() { return mAddress; synchronized (this) { updateDisplayInfoLocked(); return mDisplayInfo.address; } } /** Loading packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +32 −18 Original line number Diff line number Diff line Loading @@ -55,13 +55,13 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; import android.util.Pair; import android.view.Display; import android.view.DisplayAddress; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading Loading @@ -177,13 +177,13 @@ public class ScreenshotController { private final WindowManager mWindowManager; private final WindowManager.LayoutParams mWindowLayoutParams; private final DisplayMetrics mDisplayMetrics; private final AccessibilityManager mAccessibilityManager; private final MediaActionSound mCameraSound; private final ScrollCaptureClient mScrollCaptureClient; private final DeviceConfigProxy mConfigProxy; private final PhoneWindow mWindow; private final View mDecorView; private final DisplayManager mDisplayManager; private final Binder mWindowToken; private ScreenshotView mScreenshotView; Loading Loading @@ -239,9 +239,8 @@ public class ScreenshotController { mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; final DisplayManager dm = requireNonNull(context.getSystemService(DisplayManager.class)); final Display display = dm.getDisplay(DEFAULT_DISPLAY); final Context displayContext = context.createDisplayContext(display); mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class)); final Context displayContext = context.createDisplayContext(getDefaultDisplay()); mContext = (WindowContext) displayContext.createWindowContext(TYPE_SCREENSHOT, null); mWindowManager = mContext.getSystemService(WindowManager.class); Loading Loading @@ -277,9 +276,6 @@ public class ScreenshotController { reloadAssets(); mDisplayMetrics = new DisplayMetrics(); display.getRealMetrics(mDisplayMetrics); // Setup the Camera shutter sound mCameraSound = new MediaActionSound(); mCameraSound.load(MediaActionSound.SHUTTER_CLICK); Loading @@ -288,9 +284,11 @@ public class ScreenshotController { void takeScreenshotFullscreen(Consumer<Uri> finisher, Runnable onComplete) { mOnCompleteRunnable = onComplete; DisplayMetrics displayMetrics = new DisplayMetrics(); getDefaultDisplay().getRealMetrics(displayMetrics); takeScreenshotInternal( finisher, new Rect(0, 0, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels)); new Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels)); } void handleImageAsScreenshot(Bitmap screenshot, Rect screenshotScreenBounds, Loading Loading @@ -440,7 +438,18 @@ public class ScreenshotController { Rect screenRect = new Rect(crop); int width = crop.width(); int height = crop.height(); final IBinder displayToken = SurfaceControl.getInternalDisplayToken(); Bitmap screenshot = null; final Display display = getDefaultDisplay(); final DisplayAddress address = display.getAddress(); if (!(address instanceof DisplayAddress.Physical)) { Log.e(TAG, "Skipping Screenshot - Default display does not have a physical address: " + display); } else { final DisplayAddress.Physical physicalAddress = (DisplayAddress.Physical) address; final IBinder displayToken = SurfaceControl.getPhysicalDisplayToken( physicalAddress.getPhysicalDisplayId()); final SurfaceControl.DisplayCaptureArgs captureArgs = new SurfaceControl.DisplayCaptureArgs.Builder(displayToken) .setSourceCrop(crop) Loading @@ -448,7 +457,8 @@ public class ScreenshotController { .build(); final SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer = SurfaceControl.captureDisplay(captureArgs); Bitmap screenshot = screenshotBuffer == null ? null : screenshotBuffer.asBitmap(); screenshot = screenshotBuffer == null ? null : screenshotBuffer.asBitmap(); } if (screenshot == null) { Log.e(TAG, "takeScreenshotInternal: Screenshot bitmap was null"); Loading Loading @@ -753,6 +763,10 @@ public class ScreenshotController { } } private Display getDefaultDisplay() { return mDisplayManager.getDisplay(DEFAULT_DISPLAY); } /** Does the aspect ratio of the bitmap with insets removed match the bounds. */ private static boolean aspectRatiosMatch(Bitmap bitmap, Insets bitmapInsets, Rect screenBounds) { Loading Loading
core/java/android/view/Display.java +8 −6 Original line number Diff line number Diff line Loading @@ -79,10 +79,8 @@ public final class Display { private final DisplayManagerGlobal mGlobal; private final int mDisplayId; private final int mLayerStack; private final int mFlags; private final int mType; private final DisplayAddress mAddress; private final int mOwnerUid; private final String mOwnerPackageName; private final Resources mResources; Loading Loading @@ -501,10 +499,8 @@ public final class Display { mIsValid = true; // Cache properties that cannot change as long as the display is valid. mLayerStack = displayInfo.layerStack; mFlags = displayInfo.flags; mType = displayInfo.type; mAddress = displayInfo.address; mOwnerUid = displayInfo.ownerUid; mOwnerPackageName = displayInfo.ownerPackageName; } Loading Loading @@ -579,7 +575,10 @@ public final class Display { * @hide */ public int getLayerStack() { return mLayerStack; synchronized (this) { updateDisplayInfoLocked(); return mDisplayInfo.layerStack; } } /** Loading Loading @@ -623,7 +622,10 @@ public final class Display { * @hide */ public DisplayAddress getAddress() { return mAddress; synchronized (this) { updateDisplayInfoLocked(); return mDisplayInfo.address; } } /** Loading
packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +32 −18 Original line number Diff line number Diff line Loading @@ -55,13 +55,13 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; import android.util.Pair; import android.view.Display; import android.view.DisplayAddress; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading Loading @@ -177,13 +177,13 @@ public class ScreenshotController { private final WindowManager mWindowManager; private final WindowManager.LayoutParams mWindowLayoutParams; private final DisplayMetrics mDisplayMetrics; private final AccessibilityManager mAccessibilityManager; private final MediaActionSound mCameraSound; private final ScrollCaptureClient mScrollCaptureClient; private final DeviceConfigProxy mConfigProxy; private final PhoneWindow mWindow; private final View mDecorView; private final DisplayManager mDisplayManager; private final Binder mWindowToken; private ScreenshotView mScreenshotView; Loading Loading @@ -239,9 +239,8 @@ public class ScreenshotController { mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; final DisplayManager dm = requireNonNull(context.getSystemService(DisplayManager.class)); final Display display = dm.getDisplay(DEFAULT_DISPLAY); final Context displayContext = context.createDisplayContext(display); mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class)); final Context displayContext = context.createDisplayContext(getDefaultDisplay()); mContext = (WindowContext) displayContext.createWindowContext(TYPE_SCREENSHOT, null); mWindowManager = mContext.getSystemService(WindowManager.class); Loading Loading @@ -277,9 +276,6 @@ public class ScreenshotController { reloadAssets(); mDisplayMetrics = new DisplayMetrics(); display.getRealMetrics(mDisplayMetrics); // Setup the Camera shutter sound mCameraSound = new MediaActionSound(); mCameraSound.load(MediaActionSound.SHUTTER_CLICK); Loading @@ -288,9 +284,11 @@ public class ScreenshotController { void takeScreenshotFullscreen(Consumer<Uri> finisher, Runnable onComplete) { mOnCompleteRunnable = onComplete; DisplayMetrics displayMetrics = new DisplayMetrics(); getDefaultDisplay().getRealMetrics(displayMetrics); takeScreenshotInternal( finisher, new Rect(0, 0, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels)); new Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels)); } void handleImageAsScreenshot(Bitmap screenshot, Rect screenshotScreenBounds, Loading Loading @@ -440,7 +438,18 @@ public class ScreenshotController { Rect screenRect = new Rect(crop); int width = crop.width(); int height = crop.height(); final IBinder displayToken = SurfaceControl.getInternalDisplayToken(); Bitmap screenshot = null; final Display display = getDefaultDisplay(); final DisplayAddress address = display.getAddress(); if (!(address instanceof DisplayAddress.Physical)) { Log.e(TAG, "Skipping Screenshot - Default display does not have a physical address: " + display); } else { final DisplayAddress.Physical physicalAddress = (DisplayAddress.Physical) address; final IBinder displayToken = SurfaceControl.getPhysicalDisplayToken( physicalAddress.getPhysicalDisplayId()); final SurfaceControl.DisplayCaptureArgs captureArgs = new SurfaceControl.DisplayCaptureArgs.Builder(displayToken) .setSourceCrop(crop) Loading @@ -448,7 +457,8 @@ public class ScreenshotController { .build(); final SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer = SurfaceControl.captureDisplay(captureArgs); Bitmap screenshot = screenshotBuffer == null ? null : screenshotBuffer.asBitmap(); screenshot = screenshotBuffer == null ? null : screenshotBuffer.asBitmap(); } if (screenshot == null) { Log.e(TAG, "takeScreenshotInternal: Screenshot bitmap was null"); Loading Loading @@ -753,6 +763,10 @@ public class ScreenshotController { } } private Display getDefaultDisplay() { return mDisplayManager.getDisplay(DEFAULT_DISPLAY); } /** Does the aspect ratio of the bitmap with insets removed match the bounds. */ private static boolean aspectRatiosMatch(Bitmap bitmap, Insets bitmapInsets, Rect screenBounds) { Loading