Merge "Added new arguments for screenshot request" into sc-dev

This commit is contained in:
Chavi Weingarten
2021-02-01 21:57:29 +00:00
committed by Android (Google) Code Review
2 changed files with 42 additions and 9 deletions

View File

@@ -750,18 +750,22 @@ public final class SurfaceControl implements Parcelable {
private abstract static class CaptureArgs { private abstract static class CaptureArgs {
private final int mPixelFormat; private final int mPixelFormat;
private final Rect mSourceCrop = new Rect(); private final Rect mSourceCrop = new Rect();
private final float mFrameScale; private final float mFrameScaleX;
private final float mFrameScaleY;
private final boolean mCaptureSecureLayers; private final boolean mCaptureSecureLayers;
private final boolean mAllowProtected; private final boolean mAllowProtected;
private final long mUid; private final long mUid;
private final boolean mGrayscale;
private CaptureArgs(Builder<? extends Builder<?>> builder) { private CaptureArgs(Builder<? extends Builder<?>> builder) {
mPixelFormat = builder.mPixelFormat; mPixelFormat = builder.mPixelFormat;
mSourceCrop.set(builder.mSourceCrop); mSourceCrop.set(builder.mSourceCrop);
mFrameScale = builder.mFrameScale; mFrameScaleX = builder.mFrameScaleX;
mFrameScaleY = builder.mFrameScaleY;
mCaptureSecureLayers = builder.mCaptureSecureLayers; mCaptureSecureLayers = builder.mCaptureSecureLayers;
mAllowProtected = builder.mAllowProtected; mAllowProtected = builder.mAllowProtected;
mUid = builder.mUid; mUid = builder.mUid;
mGrayscale = builder.mGrayscale;
} }
/** /**
@@ -772,10 +776,12 @@ public final class SurfaceControl implements Parcelable {
abstract static class Builder<T extends Builder<T>> { abstract static class Builder<T extends Builder<T>> {
private int mPixelFormat = PixelFormat.RGBA_8888; private int mPixelFormat = PixelFormat.RGBA_8888;
private final Rect mSourceCrop = new Rect(); private final Rect mSourceCrop = new Rect();
private float mFrameScale = 1; private float mFrameScaleX = 1;
private float mFrameScaleY = 1;
private boolean mCaptureSecureLayers; private boolean mCaptureSecureLayers;
private boolean mAllowProtected; private boolean mAllowProtected;
private long mUid = -1; private long mUid = -1;
private boolean mGrayscale;
/** /**
* The desired pixel format of the returned buffer. * The desired pixel format of the returned buffer.
@@ -798,7 +804,18 @@ public final class SurfaceControl implements Parcelable {
* The desired scale of the returned buffer. The raw screen will be scaled up/down. * The desired scale of the returned buffer. The raw screen will be scaled up/down.
*/ */
public T setFrameScale(float frameScale) { public T setFrameScale(float frameScale) {
mFrameScale = frameScale; mFrameScaleX = frameScale;
mFrameScaleY = frameScale;
return getThis();
}
/**
* The desired scale of the returned buffer, allowing separate values for x and y scale.
* The raw screen will be scaled up/down.
*/
public T setFrameScale(float frameScaleX, float frameScaleY) {
mFrameScaleX = frameScaleX;
mFrameScaleY = frameScaleY;
return getThis(); return getThis();
} }
@@ -833,6 +850,14 @@ public final class SurfaceControl implements Parcelable {
return getThis(); return getThis();
} }
/**
* Set whether the screenshot should use grayscale or not.
*/
public T setGrayscale(boolean grayscale) {
mGrayscale = grayscale;
return getThis();
}
/** /**
* Each sub class should return itself to allow the builder to chain properly * Each sub class should return itself to allow the builder to chain properly
*/ */
@@ -929,7 +954,7 @@ public final class SurfaceControl implements Parcelable {
/** /**
* The arguments class used to make layer capture requests. * The arguments class used to make layer capture requests.
* *
* @see #nativeCaptureLayers(LayerCaptureArgs) * @see #nativeCaptureLayers(LayerCaptureArgs, ScreenCaptureListener)
* @hide * @hide
*/ */
public static class LayerCaptureArgs extends CaptureArgs { public static class LayerCaptureArgs extends CaptureArgs {

View File

@@ -110,10 +110,12 @@ static struct {
static struct { static struct {
jfieldID pixelFormat; jfieldID pixelFormat;
jfieldID sourceCrop; jfieldID sourceCrop;
jfieldID frameScale; jfieldID frameScaleX;
jfieldID frameScaleY;
jfieldID captureSecureLayers; jfieldID captureSecureLayers;
jfieldID allowProtected; jfieldID allowProtected;
jfieldID uid; jfieldID uid;
jfieldID grayscale;
} gCaptureArgsClassInfo; } gCaptureArgsClassInfo;
static struct { static struct {
@@ -380,13 +382,17 @@ static void getCaptureArgs(JNIEnv* env, jobject captureArgsObject, CaptureArgs&
captureArgs.sourceCrop = captureArgs.sourceCrop =
rectFromObj(env, rectFromObj(env,
env->GetObjectField(captureArgsObject, gCaptureArgsClassInfo.sourceCrop)); env->GetObjectField(captureArgsObject, gCaptureArgsClassInfo.sourceCrop));
captureArgs.frameScale = captureArgs.frameScaleX =
env->GetFloatField(captureArgsObject, gCaptureArgsClassInfo.frameScale); env->GetFloatField(captureArgsObject, gCaptureArgsClassInfo.frameScaleX);
captureArgs.frameScaleY =
env->GetFloatField(captureArgsObject, gCaptureArgsClassInfo.frameScaleY);
captureArgs.captureSecureLayers = captureArgs.captureSecureLayers =
env->GetBooleanField(captureArgsObject, gCaptureArgsClassInfo.captureSecureLayers); env->GetBooleanField(captureArgsObject, gCaptureArgsClassInfo.captureSecureLayers);
captureArgs.allowProtected = captureArgs.allowProtected =
env->GetBooleanField(captureArgsObject, gCaptureArgsClassInfo.allowProtected); env->GetBooleanField(captureArgsObject, gCaptureArgsClassInfo.allowProtected);
captureArgs.uid = env->GetLongField(captureArgsObject, gCaptureArgsClassInfo.uid); captureArgs.uid = env->GetLongField(captureArgsObject, gCaptureArgsClassInfo.uid);
captureArgs.grayscale =
env->GetBooleanField(captureArgsObject, gCaptureArgsClassInfo.grayscale);
} }
static DisplayCaptureArgs displayCaptureArgsFromObject(JNIEnv* env, static DisplayCaptureArgs displayCaptureArgsFromObject(JNIEnv* env,
@@ -2032,12 +2038,14 @@ int register_android_view_SurfaceControl(JNIEnv* env)
gCaptureArgsClassInfo.pixelFormat = GetFieldIDOrDie(env, captureArgsClazz, "mPixelFormat", "I"); gCaptureArgsClassInfo.pixelFormat = GetFieldIDOrDie(env, captureArgsClazz, "mPixelFormat", "I");
gCaptureArgsClassInfo.sourceCrop = gCaptureArgsClassInfo.sourceCrop =
GetFieldIDOrDie(env, captureArgsClazz, "mSourceCrop", "Landroid/graphics/Rect;"); GetFieldIDOrDie(env, captureArgsClazz, "mSourceCrop", "Landroid/graphics/Rect;");
gCaptureArgsClassInfo.frameScale = GetFieldIDOrDie(env, captureArgsClazz, "mFrameScale", "F"); gCaptureArgsClassInfo.frameScaleX = GetFieldIDOrDie(env, captureArgsClazz, "mFrameScaleX", "F");
gCaptureArgsClassInfo.frameScaleY = GetFieldIDOrDie(env, captureArgsClazz, "mFrameScaleY", "F");
gCaptureArgsClassInfo.captureSecureLayers = gCaptureArgsClassInfo.captureSecureLayers =
GetFieldIDOrDie(env, captureArgsClazz, "mCaptureSecureLayers", "Z"); GetFieldIDOrDie(env, captureArgsClazz, "mCaptureSecureLayers", "Z");
gCaptureArgsClassInfo.allowProtected = gCaptureArgsClassInfo.allowProtected =
GetFieldIDOrDie(env, captureArgsClazz, "mAllowProtected", "Z"); GetFieldIDOrDie(env, captureArgsClazz, "mAllowProtected", "Z");
gCaptureArgsClassInfo.uid = GetFieldIDOrDie(env, captureArgsClazz, "mUid", "J"); gCaptureArgsClassInfo.uid = GetFieldIDOrDie(env, captureArgsClazz, "mUid", "J");
gCaptureArgsClassInfo.grayscale = GetFieldIDOrDie(env, captureArgsClazz, "mGrayscale", "Z");
jclass displayCaptureArgsClazz = jclass displayCaptureArgsClazz =
FindClassOrDie(env, "android/view/SurfaceControl$DisplayCaptureArgs"); FindClassOrDie(env, "android/view/SurfaceControl$DisplayCaptureArgs");