The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

a/android: Store a native pointer in the MonadoView.

+20 -11
+2 -1
src/xrt/auxiliary/android/android_custom_surface.cpp
··· 99 99 return nullptr; 100 100 } 101 101 102 - ret->monadoView = MonadoView::attachToActivity(ret->activity); 102 + ret->monadoView = 103 + MonadoView::attachToActivity(ret->activity, ret.get()); 103 104 104 105 return ret.release(); 105 106 } catch (std::exception const &e) {
+2 -2
src/xrt/auxiliary/android/org.freedesktop.monado.auxiliary.cpp
··· 16 16 : MetaBase(MonadoView::getTypeName(), clazz), 17 17 attachToActivity(classRef().getStaticMethod( 18 18 "attachToActivity", 19 - "(Landroid/app/Activity;)Lorg/freedesktop/monado/" 20 - "auxiliary/MonadoView;")), 19 + "(Landroid/app/Activity;J)Lorg/freedesktop/" 20 + "monado/auxiliary/MonadoView;")), 21 21 waitGetSurfaceHolder(classRef().getMethod( 22 22 "waitGetSurfaceHolder", "(I)Landroid/view/SurfaceHolder;")), 23 23 markAsDiscardedByNative(
+4 -3
src/xrt/auxiliary/android/org.freedesktop.monado.auxiliary.hpp
··· 47 47 * 48 48 * Java prototype: 49 49 * `public static org.freedesktop.monado.auxiliary.MonadoView 50 - * attachToActivity(android.app.Activity);` 50 + * attachToActivity(android.app.Activity, long);` 51 51 * 52 52 * JNI signature: 53 - * (Landroid/app/Activity;)Lorg/freedesktop/monado/auxiliary/MonadoView; 53 + * (Landroid/app/Activity;J)Lorg/freedesktop/monado/auxiliary/MonadoView; 54 54 * 55 55 */ 56 56 static MonadoView 57 - attachToActivity(android::app::Activity const &activity); 57 + attachToActivity(android::app::Activity const &activity, 58 + void *nativePointer); 58 59 59 60 /*! 60 61 * Wrapper for the waitGetSurfaceHolder method
+5 -2
src/xrt/auxiliary/android/org.freedesktop.monado.auxiliary.impl.hpp
··· 16 16 namespace wrap { 17 17 namespace org::freedesktop::monado::auxiliary { 18 18 inline MonadoView 19 - MonadoView::attachToActivity(android::app::Activity const &activity) 19 + MonadoView::attachToActivity(android::app::Activity const &activity, 20 + void *nativePointer) 20 21 { 21 22 return MonadoView(Meta::data().clazz().call<jni::Object>( 22 - Meta::data().attachToActivity, activity.object())); 23 + Meta::data().attachToActivity, activity.object(), 24 + static_cast<long long>( 25 + reinterpret_cast<intptr_t>(nativePointer)))); 23 26 } 24 27 25 28 inline android::view::SurfaceHolder
+7 -3
src/xrt/auxiliary/android/src/main/java/org/freedesktop/monado/auxiliary/MonadoView.java
··· 55 55 private SurfaceHolder currentSurfaceHolder = null; 56 56 /// Guarded by usedByNativeCodeSync 57 57 private boolean usedByNativeCode = false; 58 + /// Contains the pointer to the native android_custom_surface object. 59 + private long nativePointer = 0; 58 60 59 - private MonadoView(Activity activity) { 61 + private MonadoView(Activity activity, long nativePointer) { 60 62 super(activity); 61 63 this.activity = activity; 64 + this.nativePointer = nativePointer; 62 65 Method method; 63 66 try { 64 67 method = activity.getWindow().getDecorView().getClass().getMethod("setSystemUiVisibility", int.class); ··· 78 81 @NonNull 79 82 @Keep 80 83 @SuppressWarnings("deprecation") 81 - public static MonadoView attachToActivity(@NonNull final Activity activity) { 84 + public static MonadoView attachToActivity(@NonNull final Activity activity, long nativePointer) { 82 85 Log.i(TAG, "Starting to add a new surface!"); 83 86 84 - final MonadoView view = new MonadoView(activity); 87 + final MonadoView view = new MonadoView(activity, nativePointer); 85 88 86 89 activity.runOnUiThread(() -> { 87 90 Log.i(TAG, "Starting runOnUiThread"); ··· 152 155 Log.w(TAG, "This should not have happened: Discarding by native code, but not marked as used!"); 153 156 } 154 157 usedByNativeCode = false; 158 + nativePointer = 0; 155 159 usedByNativeCodeSync.notifyAll(); 156 160 } 157 161