Added jni and SurfaceControl methods for native reparentChild

Added the Java methods to invoke the reparentChild method that
was added in the native code.

Test: Builds and runs

Change-Id: I25a783bbc820340a5346521a5783e50ada8c6828
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 1a2968f..91932dd 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -105,6 +105,8 @@
             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 @@
         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 db9b52e..33f1c7d 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -736,6 +736,15 @@
     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 @@
             (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",