NDK methods to get SurfaceControl/Transction from java

Test: ASurfaceControlTest#testSurfaceControl_fromSurfaceControl
      and ASurfaceControlTest#testSurfaceTransaction_fromTransaction
Change-Id: Ic15bfaae22b50f70c1c82c8945c09b749654a00f
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp
index 42f4406..9e4d726 100644
--- a/native/android/surface_control.cpp
+++ b/native/android/surface_control.cpp
@@ -17,6 +17,8 @@
 #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
 #include <android/native_window.h>
 #include <android/surface_control.h>
+#include <android/surface_control_jni.h>
+#include <android_runtime/android_view_SurfaceControl.h>
 #include <configstore/Utils.h>
 #include <gui/HdrMetadata.h>
 #include <gui/ISurfaceComposer.h>
@@ -28,6 +30,8 @@
 #include <ui/DynamicDisplayInfo.h>
 #include <utils/Timers.h>
 
+#include <utility>
+
 using namespace android::hardware::configstore;
 using namespace android::hardware::configstore::V1_0;
 using namespace android;
@@ -134,6 +138,11 @@
     SurfaceControl_release(surfaceControl);
 }
 
+ASurfaceControl* ASurfaceControl_fromSurfaceControl(JNIEnv* env, jobject surfaceControlObj) {
+    return reinterpret_cast<ASurfaceControl*>(
+            android_view_SurfaceControl_getNativeSurfaceControl(env, surfaceControlObj));
+}
+
 struct ASurfaceControlStats {
     std::variant<int64_t, sp<Fence>> acquireTimeOrFence;
     sp<Fence> previousReleaseFence;
@@ -190,6 +199,11 @@
     delete transaction;
 }
 
+ASurfaceTransaction* ASurfaceTransaction_fromTransaction(JNIEnv* env, jobject transactionObj) {
+    return reinterpret_cast<ASurfaceTransaction*>(
+            android_view_SurfaceTransaction_getNativeSurfaceTransaction(env, transactionObj));
+}
+
 void ASurfaceTransaction_apply(ASurfaceTransaction* aSurfaceTransaction) {
     CHECK_NOT_NULL(aSurfaceTransaction);