Merge "Drop the hardware buffer" into rvc-dev
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 23cbdcd..a712956 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -2400,6 +2400,10 @@
/**
* Gets the {@link HardwareBuffer} representing a memory buffer of the screenshot.
+ * <p>
+ * <strong>Note:</strong> The application should call {@link HardwareBuffer#close()} when
+ * the buffer is no longer needed to free the underlying resources.
+ * </p>
*
* @return the hardware buffer
*/
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index b905a39..4052942 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -1023,18 +1023,21 @@
displaySize.x, displaySize.y, false,
rotation);
final GraphicBuffer graphicBuffer = screenshotBuffer.getGraphicBuffer();
- final HardwareBuffer hardwareBuffer =
- HardwareBuffer.createFromGraphicBuffer(graphicBuffer);
- final ParcelableColorSpace colorSpace =
- new ParcelableColorSpace(screenshotBuffer.getColorSpace());
+ try (HardwareBuffer hardwareBuffer =
+ HardwareBuffer.createFromGraphicBuffer(graphicBuffer)) {
+ final ParcelableColorSpace colorSpace =
+ new ParcelableColorSpace(screenshotBuffer.getColorSpace());
- // Send back the result.
- final Bundle payload = new Bundle();
- payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER,
- hardwareBuffer);
- payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace);
- payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP, SystemClock.uptimeMillis());
- callback.sendResult(payload);
+ // Send back the result.
+ final Bundle payload = new Bundle();
+ payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER,
+ hardwareBuffer);
+ payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace);
+ payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP,
+ SystemClock.uptimeMillis());
+ callback.sendResult(payload);
+ hardwareBuffer.close();
+ }
}, null).recycleOnUse());
} finally {
Binder.restoreCallingIdentity(identity);