From 8d522d9ce71a79312e07ea1f4c9d944936ceaa60 Mon Sep 17 00:00:00 2001 From: amer cerkic Date: Thu, 14 Feb 2019 14:48:56 -0800 Subject: [PATCH 1/4] fixed issues with pause/resume and start/stop. still issues with input after resume --- android/apps/questInterface/build.gradle | 2 + .../questInterface/src/main/cpp/native.cpp | 5 +-- android/libraries/oculus/build.gradle | 2 + .../oculus/OculusMobileActivity.java | 41 +++++++++---------- .../qt5/android/bindings/QtActivity.java | 9 +++- .../animation/src/AnimInverseKinematics.cpp | 5 --- libraries/oculusMobile/src/ovr/VrHandler.cpp | 10 +++-- libraries/render-utils/src/Model.cpp | 2 +- libraries/shared/src/ShapeInfo.cpp | 5 ++- 9 files changed, 42 insertions(+), 39 deletions(-) diff --git a/android/apps/questInterface/build.gradle b/android/apps/questInterface/build.gradle index cbf575d7b0..b1800fe33a 100644 --- a/android/apps/questInterface/build.gradle +++ b/android/apps/questInterface/build.gradle @@ -92,7 +92,9 @@ android { variant.mergeResources.dependsOn(task) if (Os.isFamily(Os.FAMILY_UNIX)) { // FIXME + def uploadDumpSymsTask = rootProject.getTasksByName("uploadBreakpadDumpSyms${variant.name.capitalize()}", false).first() + def runDumpSymsTask = rootProject.getTasksByName("runBreakpadDumpSyms${variant.name.capitalize()}", false).first() def renameHifiACTask = rootProject.getTasksByName("renameHifiACTask${variant.name.capitalize()}", false).first() runDumpSymsTask.dependsOn(task) diff --git a/android/apps/questInterface/src/main/cpp/native.cpp b/android/apps/questInterface/src/main/cpp/native.cpp index f27bff8228..3c1563c93d 100644 --- a/android/apps/questInterface/src/main/cpp/native.cpp +++ b/android/apps/questInterface/src/main/cpp/native.cpp @@ -62,6 +62,7 @@ extern "C" { initOculusPlatform(env, obj); } QAndroidJniObject __interfaceActivity; + JNIEXPORT void JNICALL Java_io_highfidelity_oculus_OculusMobileActivity_questNativeOnCreate(JNIEnv *env, jobject obj) { __android_log_print(ANDROID_LOG_INFO, "QQQ", __FUNCTION__); @@ -85,10 +86,6 @@ JNIEXPORT void Java_io_highfidelity_oculus_OculusMobileActivity_questOnAppAfterL AndroidHelper::instance().moveToThread(qApp->thread()); } - JNIEXPORT void JNICALL - Java_io_highfidelity_oculus_OculusMobileActivity_questNativeOnDestroy(JNIEnv *env, jobject obj) { - } - JNIEXPORT void JNICALL Java_io_highfidelity_oculus_OculusMobileActivity_questNativeOnPause(JNIEnv *env, jobject obj) { AndroidHelper::instance().notifyEnterBackground(); diff --git a/android/libraries/oculus/build.gradle b/android/libraries/oculus/build.gradle index 776c0c1e48..bc8f8d1c45 100644 --- a/android/libraries/oculus/build.gradle +++ b/android/libraries/oculus/build.gradle @@ -18,4 +18,6 @@ android { dependencies { compile project(path: ':qt') + implementation fileTree(include: ['*.jar'], dir: '../../libraries/qt/libs') + implementation project(':qt') } 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 637600b34b..48d16072d7 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 @@ -20,6 +20,7 @@ import android.view.WindowManager; import android.widget.LinearLayout; +import org.qtproject.qt5.android.QtNative; import org.qtproject.qt5.android.bindings.QtActivity; import io.highfidelity.utils.HifiUtils; @@ -35,11 +36,9 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca private native void nativeOnCreate(); private native static void nativeOnResume(); private native static void nativeOnPause(); - private native static void nativeOnDestroy(); private native static void nativeOnSurfaceChanged(Surface s); private native void questNativeOnCreate(); - private native void questNativeOnDestroy(); private native void questNativeOnPause(); private native void questNativeOnResume(); private native void questOnAppAfterLoad(); @@ -48,10 +47,7 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca private SurfaceView mView; private SurfaceHolder mSurfaceHolder; - boolean isLoading =false; - public void onCreate(Bundle savedInstanceState) { - isLoading=true; super.onCreate(savedInstanceState); HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath()); @@ -65,14 +61,10 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca nativeOnCreate(); questNativeOnCreate(); } - public void onAppLoadedComplete() { Log.w(TAG, "QQQ Load Completed"); - isLoading=false; - - //isLoading=false; runOnUiThread(() -> { - setContentView(mView); setContentView(mView); + setContentView(mView); questOnAppAfterLoad(); }); } @@ -80,23 +72,22 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca @Override protected void onDestroy() { Log.w(TAG, "QQQ onDestroy"); - super.onDestroy(); - if (mSurfaceHolder != null) { - nativeOnSurfaceChanged(null); - } - nativeOnDestroy(); - questNativeOnDestroy(); + nativeOnSurfaceChanged(null); + + Log.w(TAG, "QQQ onDestroy -- SUPER onDestroy"); + super.onDestroy(); } @Override protected void onResume() { Log.w(TAG, "QQQ onResume"); super.onResume(); + //Reconnect the global reference back to handler + nativeOnCreate(); questNativeOnResume(); nativeOnResume(); - } @Override @@ -104,16 +95,21 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca Log.w(TAG, "QQQ onPause"); super.onPause(); - if (!isLoading) { - questNativeOnPause(); - nativeOnPause(); - } + questNativeOnPause(); + nativeOnPause(); + } + + @Override + protected void onStop(){ + super.onStop(); + Log.w(TAG, "QQQ Onstop called"); } @Override protected void onRestart(){ super.onRestart(); - nativeOnCreate(); + Log.w(TAG, "QQQ onRestart called ****"); + questOnAppAfterLoad(); } @Override @@ -135,5 +131,6 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca Log.w(TAG, "QQQ surfaceDestroyed ***************************************************"); nativeOnSurfaceChanged(null); mSurfaceHolder = null; + } } \ No newline at end of file diff --git a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java index 02597956e4..11e8ca8e08 100644 --- a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java @@ -364,7 +364,10 @@ public class QtActivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); - QtApplication.invokeDelegate(); + + QtNative.terminateQt(); + QtNative.setActivity(null,null); + System.exit(0); } //--------------------------------------------------------------------------- @@ -506,7 +509,9 @@ public class QtActivity extends Activity { super.onPause(); // GC: this trick allow us to show a splash activity until Qt app finishes // loading - QtApplication.invokeDelegate(); + + +// QtApplication.invokeDelegate(); } //--------------------------------------------------------------------------- diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index a1809f3438..9a55b66a39 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -865,11 +865,6 @@ const AnimPoseVec& AnimInverseKinematics::evaluate(const AnimVariantMap& animVar //virtual const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) { -#ifdef Q_OS_ANDROID - // disable IK on android - return underPoses; -#endif - // allows solutionSource to be overridden by an animVar auto solutionSource = animVars.lookup(_solutionSourceVar, (int)_solutionSource); diff --git a/libraries/oculusMobile/src/ovr/VrHandler.cpp b/libraries/oculusMobile/src/ovr/VrHandler.cpp index c6329c62a6..99338f94d4 100644 --- a/libraries/oculusMobile/src/ovr/VrHandler.cpp +++ b/libraries/oculusMobile/src/ovr/VrHandler.cpp @@ -70,6 +70,12 @@ struct VrSurface : public TaskQueue { } void setResumed(bool newResumed) { + + if(oculusActivity) + __android_log_write(ANDROID_LOG_WARN, "QQQ", "Set Resumed VRHANDLER ::: OCULUS ACTIVITY IN NOT NULL"); + else + __android_log_write(ANDROID_LOG_WARN, "QQQ", "Set Resumed VRHANDLER ::: OCULUS ACTIVITY is null"); + this->resumed = newResumed; submitRenderThreadTask([this](VrHandler* handler){ updateVrMode(); }); } @@ -334,10 +340,6 @@ JNIEXPORT void JNICALL Java_io_highfidelity_oculus_OculusMobileActivity_nativeOn SURFACE.onCreate(env, obj); } -JNIEXPORT void JNICALL Java_io_highfidelity_oculus_OculusMobileActivity_nativeOnDestroy(JNIEnv*, jclass) { - __android_log_write(ANDROID_LOG_WARN, "QQQ_JNI", __FUNCTION__); -} - JNIEXPORT void JNICALL Java_io_highfidelity_oculus_OculusMobileActivity_nativeOnResume(JNIEnv*, jclass) { __android_log_write(ANDROID_LOG_WARN, "QQQ_JNI", __FUNCTION__); SURFACE.setResumed(true); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index da8dceb176..63e6df1a61 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -137,7 +137,7 @@ const float SCALE_CHANGE_EPSILON = 0.0000001f; void Model::setScaleInternal(const glm::vec3& scale) { if (glm::distance(_scale, scale) > SCALE_CHANGE_EPSILON) { _scale = scale; - assert(_scale.x != 0.0f && scale.y != 0.0f && scale.z != 0.0f); + // assert(_scale.x != 0.0f && scale.y != 0.0f && scale.z != 0.0f); simulate(0.0f, true); } } diff --git a/libraries/shared/src/ShapeInfo.cpp b/libraries/shared/src/ShapeInfo.cpp index 564d79bfda..745004ab9c 100644 --- a/libraries/shared/src/ShapeInfo.cpp +++ b/libraries/shared/src/ShapeInfo.cpp @@ -152,7 +152,10 @@ void ShapeInfo::setSphere(float radius) { void ShapeInfo::setMultiSphere(const std::vector& centers, const std::vector& radiuses) { _url = ""; _type = SHAPE_TYPE_MULTISPHERE; - assert(centers.size() == radiuses.size() && centers.size() > 0); + if(centers.size() == radiuses.size()) + return; + + // assert(centers.size() == radiuses.size() && centers.size() > 0); for (size_t i = 0; i < centers.size(); i++) { SphereData sphere = SphereData(centers[i], radiuses[i]); _sphereCollection.push_back(sphere); From 72200618d90f2e8c04f248bcf98999bf5c56f73c Mon Sep 17 00:00:00 2001 From: amer cerkic Date: Thu, 14 Feb 2019 16:38:15 -0800 Subject: [PATCH 2/4] cleanup of my debugging items --- android/apps/questInterface/build.gradle | 2 -- android/libraries/oculus/build.gradle | 2 -- .../java/org/qtproject/qt5/android/bindings/QtActivity.java | 2 -- libraries/oculusMobile/src/ovr/VrHandler.cpp | 6 ------ libraries/render-utils/src/Model.cpp | 2 +- 5 files changed, 1 insertion(+), 13 deletions(-) diff --git a/android/apps/questInterface/build.gradle b/android/apps/questInterface/build.gradle index b1800fe33a..cbf575d7b0 100644 --- a/android/apps/questInterface/build.gradle +++ b/android/apps/questInterface/build.gradle @@ -92,9 +92,7 @@ android { variant.mergeResources.dependsOn(task) if (Os.isFamily(Os.FAMILY_UNIX)) { // FIXME - def uploadDumpSymsTask = rootProject.getTasksByName("uploadBreakpadDumpSyms${variant.name.capitalize()}", false).first() - def runDumpSymsTask = rootProject.getTasksByName("runBreakpadDumpSyms${variant.name.capitalize()}", false).first() def renameHifiACTask = rootProject.getTasksByName("renameHifiACTask${variant.name.capitalize()}", false).first() runDumpSymsTask.dependsOn(task) diff --git a/android/libraries/oculus/build.gradle b/android/libraries/oculus/build.gradle index bc8f8d1c45..776c0c1e48 100644 --- a/android/libraries/oculus/build.gradle +++ b/android/libraries/oculus/build.gradle @@ -18,6 +18,4 @@ android { dependencies { compile project(path: ':qt') - implementation fileTree(include: ['*.jar'], dir: '../../libraries/qt/libs') - implementation project(':qt') } diff --git a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java index 11e8ca8e08..a5bc9f31f8 100644 --- a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java @@ -509,8 +509,6 @@ public class QtActivity extends Activity { super.onPause(); // GC: this trick allow us to show a splash activity until Qt app finishes // loading - - // QtApplication.invokeDelegate(); } //--------------------------------------------------------------------------- diff --git a/libraries/oculusMobile/src/ovr/VrHandler.cpp b/libraries/oculusMobile/src/ovr/VrHandler.cpp index f12b69d894..b3b1416785 100644 --- a/libraries/oculusMobile/src/ovr/VrHandler.cpp +++ b/libraries/oculusMobile/src/ovr/VrHandler.cpp @@ -51,12 +51,6 @@ struct VrSurface : public TaskQueue { } void setResumed(bool newResumed) { - - if(oculusActivity) - __android_log_write(ANDROID_LOG_WARN, "QQQ", "Set Resumed VRHANDLER ::: OCULUS ACTIVITY IN NOT NULL"); - else - __android_log_write(ANDROID_LOG_WARN, "QQQ", "Set Resumed VRHANDLER ::: OCULUS ACTIVITY is null"); - this->resumed = newResumed; submitRenderThreadTask([this](VrHandler* handler){ updateVrMode(); }); } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 1d7e3fb234..260e25009e 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -137,7 +137,7 @@ const float SCALE_CHANGE_EPSILON = 0.0000001f; void Model::setScaleInternal(const glm::vec3& scale) { if (glm::distance(_scale, scale) > SCALE_CHANGE_EPSILON) { _scale = scale; - // assert(_scale.x != 0.0f && scale.y != 0.0f && scale.z != 0.0f); + assert(_scale.x != 0.0f && scale.y != 0.0f && scale.z != 0.0f); simulate(0.0f, true); } } From 165ec3feca1908ad2fe61ca013141fed41539171 Mon Sep 17 00:00:00 2001 From: amer cerkic Date: Thu, 14 Feb 2019 16:41:28 -0800 Subject: [PATCH 3/4] removing unused reference no longer reachable --- .../main/java/io/highfidelity/oculus/OculusMobileActivity.java | 3 --- 1 file changed, 3 deletions(-) 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 48d16072d7..eda656ed30 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 @@ -19,10 +19,7 @@ import android.view.SurfaceView; import android.view.WindowManager; import android.widget.LinearLayout; - -import org.qtproject.qt5.android.QtNative; import org.qtproject.qt5.android.bindings.QtActivity; - import io.highfidelity.utils.HifiUtils; /** From 272b941b17a1a588644e80f9e7478b06ec5e1e84 Mon Sep 17 00:00:00 2001 From: amer cerkic Date: Thu, 14 Feb 2019 17:14:28 -0800 Subject: [PATCH 4/4] removed an obselete variable --- .../java/io/highfidelity/frameplayer/QuestQtActivity.java | 1 - .../java/io/highfidelity/oculus/OculusMobileActivity.java | 6 ------ .../java/org/qtproject/qt5/android/bindings/QtActivity.java | 4 +++- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/android/apps/questFramePlayer/src/main/java/io/highfidelity/frameplayer/QuestQtActivity.java b/android/apps/questFramePlayer/src/main/java/io/highfidelity/frameplayer/QuestQtActivity.java index d498e27547..6fed737266 100644 --- a/android/apps/questFramePlayer/src/main/java/io/highfidelity/frameplayer/QuestQtActivity.java +++ b/android/apps/questFramePlayer/src/main/java/io/highfidelity/frameplayer/QuestQtActivity.java @@ -36,7 +36,6 @@ public class QuestQtActivity extends QtActivity { public void launchOculusActivity() { Log.w("QQQ_Qt", "QuestQtActivity::launchOculusActivity"); runOnUiThread(()->{ - keepInterfaceRunning = true; launchedQuestMode = true; moveTaskToBack(true); startActivity(new Intent(this, QuestRenderActivity.class)); 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 eda656ed30..cc71ba53a8 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 @@ -7,17 +7,11 @@ // package io.highfidelity.oculus; -import android.app.Activity; -import android.content.Intent; import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; -import android.view.WindowManager; -import android.widget.LinearLayout; import org.qtproject.qt5.android.bindings.QtActivity; import io.highfidelity.utils.HifiUtils; diff --git a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java index a5bc9f31f8..46f2af46e7 100644 --- a/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/android/libraries/qt/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java @@ -509,7 +509,9 @@ public class QtActivity extends Activity { super.onPause(); // GC: this trick allow us to show a splash activity until Qt app finishes // loading -// QtApplication.invokeDelegate(); + //QtApplication.invokeDelegate(); + + //TODO(Amer): looking into why this messes up pause. } //---------------------------------------------------------------------------