summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/SurfaceControl.java7
-rw-r--r--core/jni/android_view_SurfaceControl.cpp11
2 files changed, 18 insertions, 0 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 1a2968f6345f..91932dd40dd8 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -105,6 +105,8 @@ public class SurfaceControl {
long surfaceObject, long frame);
private static native void nativeReparentChildren(long nativeObject,
IBinder handle);
+ private static native void nativeReparentChild(long nativeObject,
+ IBinder parentHandle, IBinder childHandle);
private static native void nativeSeverChildren(long nativeObject);
private static native void nativeSetOverrideScalingMode(long nativeObject,
int scalingMode);
@@ -453,6 +455,11 @@ public class SurfaceControl {
nativeReparentChildren(mNativeObject, newParentHandle);
}
+ /** Re-parents a specific child layer to a new parent */
+ public void reparentChild(IBinder newParentHandle, IBinder childHandle) {
+ nativeReparentChild(mNativeObject, newParentHandle, childHandle);
+ }
+
public void detachChildren() {
nativeSeverChildren(mNativeObject);
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index db9b52e4fdbd..33f1c7d393af 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -736,6 +736,15 @@ static void nativeReparentChildren(JNIEnv* env, jclass clazz, jlong nativeObject
ctrl->reparentChildren(handle);
}
+static void nativeReparentChild(JNIEnv* env, jclass clazz, jlong nativeObject,
+ jobject newParentObject, jobject childObject) {
+ auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
+ sp<IBinder> parentHandle = ibinderForJavaObject(env, newParentObject);
+ sp<IBinder> childHandle = ibinderForJavaObject(env, childObject);
+
+ ctrl->reparentChild(parentHandle, childHandle);
+}
+
static void nativeSeverChildren(JNIEnv* env, jclass clazz, jlong nativeObject) {
auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
ctrl->detachChildren();
@@ -859,6 +868,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
(void*)nativeDeferTransactionUntilSurface },
{"nativeReparentChildren", "(JLandroid/os/IBinder;)V",
(void*)nativeReparentChildren } ,
+ {"nativeReparentChild", "(JLandroid/os/IBinder;Landroid/os/IBinder;)V",
+ (void*)nativeReparentChild },
{"nativeSeverChildren", "(J)V",
(void*)nativeSeverChildren } ,
{"nativeSetOverrideScalingMode", "(JI)V",