diff --git a/android/apps/interface/src/main/java/io/highfidelity/hifiinterface/MainActivity.java b/android/apps/interface/src/main/java/io/highfidelity/hifiinterface/MainActivity.java index e5ea0f998d..239dc96523 100644 --- a/android/apps/interface/src/main/java/io/highfidelity/hifiinterface/MainActivity.java +++ b/android/apps/interface/src/main/java/io/highfidelity/hifiinterface/MainActivity.java @@ -1,3 +1,4 @@ + package io.highfidelity.hifiinterface; import android.app.Activity; diff --git a/android/apps/questInterface/src/main/cpp/native.cpp b/android/apps/questInterface/src/main/cpp/native.cpp index 5a4b1ee4ad..047ec2007c 100644 --- a/android/apps/questInterface/src/main/cpp/native.cpp +++ b/android/apps/questInterface/src/main/cpp/native.cpp @@ -42,21 +42,31 @@ extern "C" { Java_io_highfidelity_questInterface_QuestActivity_nativeInitOculusPlatform(JNIEnv *env, jobject obj){ initOculusPlatform(env, obj); } - +QAndroidJniObject __interfaceActivity; JNIEXPORT void JNICALL Java_io_highfidelity_questInterface_QuestActivity_questNativeOnCreate(JNIEnv *env, jobject obj) { + __android_log_print(ANDROID_LOG_WARN, "QQQ","questNativeOnCreate called"); initOculusPlatform(env, obj); + __interfaceActivity = QAndroidJniObject (obj); + QObject::connect(&AndroidHelper::instance(), &AndroidHelper::qtAppLoadComplete, []() { - if(qApp) { - QThread *thr = qApp->thread(); - AndroidHelper::instance().moveToThread(thr); - } - else{ - __android_log_print(ANDROID_LOG_ERROR,"QQQ_", "APP is not valid"); - } + QObject::connect(&AndroidHelper::instance(), &AndroidHelper::qtAppLoadComplete, []() { + __interfaceActivity.callMethod("onAppLoadedComplete", "()V"); + + QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::qtAppLoadComplete, nullptr, + nullptr); + }); + + QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::qtAppLoadComplete, + nullptr, nullptr); + }); } +JNIEXPORT void Java_io_highfidelity_questInterface_QuestActivity_questOnAppAfterLoad(JNIEnv* env, jobject obj) { + AndroidHelper::instance().moveToThread(qApp->thread()); +} + JNIEXPORT void JNICALL Java_io_highfidelity_questInterface_QuestActivity_questNativeOnDestroy(JNIEnv *env, jobject obj) { } diff --git a/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/PermissionsChecker.java b/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/PermissionsChecker.java index 7d8ce383dc..10a0faf9cc 100644 --- a/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/PermissionsChecker.java +++ b/android/apps/questInterface/src/main/java/io/highfidelity/questInterface/PermissionsChecker.java @@ -6,6 +6,8 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import io.highfidelity.utils.HifiUtils; + public class PermissionsChecker extends Activity { private static final int REQUEST_PERMISSIONS = 20; private static final String TAG = PermissionsChecker.class.getName(); @@ -44,6 +46,7 @@ public class PermissionsChecker extends Activity { } private void launchActivityWithPermissions() { + HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath()); startActivity(new Intent(this, QuestActivity.class)); } 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 a482e98a24..6c8072498b 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 @@ -13,6 +13,7 @@ package io.highfidelity.questInterface; import android.content.Intent; import android.os.Bundle; +import android.util.Log; import android.view.WindowManager; import io.highfidelity.oculus.OculusMobileActivity; @@ -23,15 +24,20 @@ public class QuestActivity extends OculusMobileActivity { private native void questNativeOnDestroy(); private native void questNativeOnPause(); private native void questNativeOnResume(); - + private native void questOnAppAfterLoad(); + String TAG = OculusMobileActivity.class.getSimpleName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath()); questNativeOnCreate(); } + public void onAppLoadedComplete() { + Log.w(TAG, "QQQ Load Completed"); + runOnUiThread(() -> { + questOnAppAfterLoad(); + }); + } @Override protected void onPause() { 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 0a39e3abf0..a14057e57f 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 @@ -44,11 +44,11 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca // 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); + mView.getHolder().addCallback(this); setContentView(mView); - // Forward the create message to the JNI code nativeOnCreate(); - + // Forward the create message to the JNI code } @Override diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d9eae20752..62c65ee940 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2428,6 +2428,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground); AndroidHelper::instance().notifyLoadComplete(); #endif + AndroidHelper::instance().notifyLoadComplete(); pauseUntilLoginDetermined(); }