diff --git a/android/apps/questInterface/src/main/cpp/native.cpp b/android/apps/questInterface/src/main/cpp/native.cpp index 02b585203d..5a4b1ee4ad 100644 --- a/android/apps/questInterface/src/main/cpp/native.cpp +++ b/android/apps/questInterface/src/main/cpp/native.cpp @@ -43,76 +43,31 @@ extern "C" { initOculusPlatform(env, obj); } -QAndroidJniObject __interfaceActivity; - JNIEXPORT void JNICALL - Java_io_highfidelity_questInterface_QuestActivity_nativeOnCreate(JNIEnv *env, jobject obj) { + Java_io_highfidelity_questInterface_QuestActivity_questNativeOnCreate(JNIEnv *env, jobject obj) { initOculusPlatform(env, obj); - __interfaceActivity = QAndroidJniObject(obj); + if(qApp) { QThread *thr = qApp->thread(); + AndroidHelper::instance().moveToThread(thr); + } + else{ + __android_log_print(ANDROID_LOG_ERROR,"QQQ_", "APP is not valid"); } - - AndroidHelper::instance().moveToThread(thr); - - - qRegisterMetaType("QAndroidJniObject"); - - JavaVM* jvm; - env->GetJavaVM(&jvm); - - QObject::connect(&AndroidHelper::instance(), &AndroidHelper::androidActivityRequested, [jvm](const QString& a, const bool backToScene, QMap args) { - JNIEnv* myNewEnv; - JavaVMAttachArgs jvmArgs; - jvmArgs.version = JNI_VERSION_1_6; // choose your JNI version - jvmArgs.name = NULL; // you might want to give the java thread a name - jvmArgs.group = NULL; // you might want to assign the java thread to a ThreadGroup - - int attachedHere = 0; // know if detaching at the end is necessary - jint res = jvm->GetEnv((void**)&myNewEnv, JNI_VERSION_1_6); // checks if current env needs attaching or it is already attached - if (JNI_OK != res) { - qDebug() << "[JCRASH] GetEnv env not attached yet, attaching now.."; - res = jvm->AttachCurrentThread(reinterpret_cast(&myNewEnv), &jvmArgs); - if (JNI_OK != res) { - qDebug() << "[JCRASH] Failed to AttachCurrentThread, ErrorCode = " << res; - return; - } else { - attachedHere = 1; - } - } - - QAndroidJniObject string = QAndroidJniObject::fromString(a); - jboolean jBackToScene = (jboolean) backToScene; - jclass hashMapClass = myNewEnv->FindClass("java/util/HashMap"); - jmethodID mapClassConstructor = myNewEnv->GetMethodID(hashMapClass, "", "()V"); - jobject hashmap = myNewEnv->NewObject(hashMapClass, mapClassConstructor); - jmethodID mapClassPut = myNewEnv->GetMethodID(hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - QMap::iterator i; - for (i = args.begin(); i != args.end(); ++i) { - QAndroidJniObject jKey = QAndroidJniObject::fromString(i.key()); - QAndroidJniObject jValue = QAndroidJniObject::fromString(i.value()); - myNewEnv->CallObjectMethod(hashmap, mapClassPut, jKey.object(), jValue.object()); - } - __interfaceActivity.callMethod("openAndroidActivity", "(Ljava/lang/String;ZLjava/util/HashMap;)V", string.object(), jBackToScene, hashmap); - if (attachedHere) { - jvm->DetachCurrentThread(); - } - }); - } JNIEXPORT void JNICALL - Java_io_highfidelity_questInterface_QuestActivity_nativeOnDestroy(JNIEnv *env, jobject obj) { + Java_io_highfidelity_questInterface_QuestActivity_questNativeOnDestroy(JNIEnv *env, jobject obj) { } JNIEXPORT void JNICALL - Java_io_highfidelity_questInterface_QuestActivity_nativeOnPause(JNIEnv *env, jobject obj) { + Java_io_highfidelity_questInterface_QuestActivity_questNativeOnPause(JNIEnv *env, jobject obj) { AndroidHelper::instance().notifyEnterBackground(); } JNIEXPORT void JNICALL - Java_io_highfidelity_questInterface_QuestActivity_nativeOnResume(JNIEnv *env, jobject obj) { + Java_io_highfidelity_questInterface_QuestActivity_questNativeOnResume(JNIEnv *env, jobject obj) { AndroidHelper::instance().notifyEnterForeground(); } diff --git a/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/QuestActivity.java b/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/QuestActivity.java index a7aa93dbb9..a482e98a24 100644 --- a/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/QuestActivity.java +++ b/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/QuestActivity.java @@ -19,38 +19,37 @@ import io.highfidelity.oculus.OculusMobileActivity; import io.highfidelity.utils.HifiUtils; public class QuestActivity extends OculusMobileActivity { - private native void nativeOnCreate(); - private native void nativeOnDestroy(); - private native void nativeOnPause(); - private native void nativeOnResume(); - + private native void questNativeOnCreate(); + private native void questNativeOnDestroy(); + private native void questNativeOnPause(); + private native void questNativeOnResume(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath()); - nativeOnCreate(); + questNativeOnCreate(); } @Override protected void onPause() { super.onPause(); - nativeOnPause(); + questNativeOnPause(); } @Override protected void onResume() { super.onResume(); - nativeOnResume(); + questNativeOnResume(); } @Override protected void onDestroy() { super.onDestroy(); - nativeOnDestroy(); + questNativeOnDestroy(); } } diff --git a/android/libraries/oculus/src/main/java/io/highfidelity/oculus/OculusMobileActivity.java b/android/libraries/oculus/src/main/java/io/highfidelity/oculus/OculusMobileActivity.java index b06f850afc..0a39e3abf0 100644 --- a/android/libraries/oculus/src/main/java/io/highfidelity/oculus/OculusMobileActivity.java +++ b/android/libraries/oculus/src/main/java/io/highfidelity/oculus/OculusMobileActivity.java @@ -36,29 +36,19 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca private SurfaceView mView; private SurfaceHolder mSurfaceHolder; - public static void launch(Activity activity) { - if (activity != null) { - activity.runOnUiThread(()->{ - activity.startActivity(new Intent(activity, OculusMobileActivity.class)); - }); - } - } - @Override public void onCreate(Bundle savedInstanceState) { Log.w(TAG, "QQQ onCreate"); super.onCreate(savedInstanceState); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - // Create a native surface for VR rendering (Qt GL surfaces are not suitable // because of the lack of fine control over the surface callbacks) mView = new SurfaceView(this); - setContentView(mView); mView.getHolder().addCallback(this); - + setContentView(mView); // Forward the create message to the JNI code nativeOnCreate(); + } @Override diff --git a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivityLoader.java index 5258c0fb88..e3066a3bd9 100644 --- a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivityLoader.java +++ b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivityLoader.java @@ -79,7 +79,6 @@ public class QtActivityLoader { private static final String EXTRACT_STYLE_MINIMAL_KEY = "extract.android.style.option"; private static final int BUFFER_SIZE = 1024; - public boolean Created=false; String APPLICATION_PARAMETERS = null; // use this variable to pass any parameters to your application, String ENVIRONMENT_VARIABLES = "QT_USE_ANDROID_NATIVE_DIALOGS=1"; String[] QT_ANDROID_THEMES = null; @@ -498,8 +497,6 @@ public class QtActivityLoader { } startApp(); - - Created=true; } } }