diff options
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 7 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 11 |
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", |