diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c5d126736d..e038be4f0a 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -79,6 +79,16 @@ elseif(HVR) ${CMAKE_SOURCE_DIR}/src/hvr/cpp/native-lib.cpp ${CMAKE_SOURCE_DIR}/src/main/cpp/BrowserEGLContext.cpp ) +elseif(AOSP) +target_sources( + native-lib + PUBLIC + ${CMAKE_SOURCE_DIR}/src/main/cpp/native-lib.cpp + ${CMAKE_SOURCE_DIR}/src/main/cpp/BrowserEGLContext.cpp +) +find_package(game-activity REQUIRED CONFIG) +target_link_libraries(native-lib PRIVATE game-activity::game-activity_static) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u Java_com_google_androidgamesdk_GameActivity_initializeNativeCode") else() target_sources( native-lib diff --git a/app/build.gradle b/app/build.gradle index fb8671d973..2e614fead2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -716,6 +716,9 @@ dependencies { implementation 'net.lingala.zip4j:zip4j:2.11.5' implementation 'org.apache.commons:commons-math3:3.6.1' + // AOSP + aospImplementation 'androidx.games:games-activity:3.0.5' + // HVR hvrImplementation fileTree(dir: "${project.rootDir}/third_party/hvr", include: ['*.jar']) hvrImplementation 'com.huawei.agconnect:agconnect-core-harmony:1.1.0.300' @@ -728,7 +731,7 @@ dependencies { // Snapdragon Spaces spacesImplementation fileTree(dir: "${project.rootDir}/third_party/spaces", include: ['*.aar']) - // Vission Glass + // Vision Glass visionglassImplementation fileTree(dir: "${project.rootDir}/third_party/aliceimu/", include: ['*.aar']) visionglassImplementation fileTree(dir: "${project.rootDir}/third_party/hvr", include: ['*.jar']) visionglassImplementation 'com.huawei.agconnect:agconnect-core-harmony:1.1.0.300' diff --git a/app/src/aosp/java/com/igalia/wolvic/PlatformActivity.java b/app/src/aosp/java/com/igalia/wolvic/PlatformActivity.java index 863c706a2c..52ebdc4ddb 100644 --- a/app/src/aosp/java/com/igalia/wolvic/PlatformActivity.java +++ b/app/src/aosp/java/com/igalia/wolvic/PlatformActivity.java @@ -5,13 +5,13 @@ package com.igalia.wolvic; -import android.app.NativeActivity; import android.content.Intent; import android.view.KeyEvent; +import com.google.androidgamesdk.GameActivity; import com.igalia.wolvic.ui.widgets.WidgetManagerDelegate; -public class PlatformActivity extends NativeActivity { +public class PlatformActivity extends GameActivity { public static boolean filterPermission(final String aPermission) { // Dummy implementation. @@ -41,14 +41,14 @@ protected String getEyeTrackingPermissionString() { } @Override - public void onBackPressed() { - queueRunnable(new Runnable() { - @Override - public void run() { - platformExit(); - } - }); + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + // GameActivity does not invoke onBackPressed() on KEYCODE_BACK + onBackPressed(); + } + return super.onKeyUp(keyCode, event); } + protected native void queueRunnable(Runnable aRunnable); protected native boolean platformExit(); } diff --git a/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java b/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java index 37e993a4f9..3e312c2192 100644 --- a/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java +++ b/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java @@ -1241,7 +1241,7 @@ void handleBack() { return; } dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); - dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); + dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); }); } diff --git a/app/src/main/cpp/BrowserEGLContext.cpp b/app/src/main/cpp/BrowserEGLContext.cpp index 27a09aa638..78391560e5 100644 --- a/app/src/main/cpp/BrowserEGLContext.cpp +++ b/app/src/main/cpp/BrowserEGLContext.cpp @@ -8,8 +8,12 @@ #include #ifndef HVR +#if (AOSP) +#include +#else #include #endif +#endif namespace crow { diff --git a/app/src/main/cpp/native-lib.cpp b/app/src/main/cpp/native-lib.cpp index 7cda8eace1..6d18bd0502 100644 --- a/app/src/main/cpp/native-lib.cpp +++ b/app/src/main/cpp/native-lib.cpp @@ -11,7 +11,11 @@ #include "vrb/Logger.h" #include "vrb/GLError.h" #include "BrowserEGLContext.h" +#if (AOSP) +#include +#else #include +#endif #include #include #if defined(OPENXR) @@ -142,13 +146,19 @@ android_main(android_app *aAppState) { sAppContext->mQueue->AttachToThread(); +#if (AOSP) + jobject activity = aAppState->activity->javaGameActivity; +#else + jobject activity = aAppState->activity->clazz; +#endif + // Create Browser context - crow::VRBrowser::InitializeJava(jniEnv, aAppState->activity->clazz); + crow::VRBrowser::InitializeJava(jniEnv, activity); // Create device delegate sAppContext->mJavaContext.env = jniEnv; sAppContext->mJavaContext.vm = aAppState->activity->vm; - sAppContext->mJavaContext.activity = aAppState->activity->clazz; + sAppContext->mJavaContext.activity = activity; #if defined(OCULUSVR) && defined(STORE_BUILD) if (!ovr_IsPlatformInitialized()) { @@ -171,8 +181,8 @@ android_main(android_app *aAppState) { BrowserWorld::Instance().RegisterDeviceDelegate(sAppContext->mDevice); // Initialize java - auto assetManager = GetAssetManager(jniEnv, aAppState->activity->clazz); - BrowserWorld::Instance().InitializeJava(jniEnv, aAppState->activity->clazz, assetManager); + auto assetManager = GetAssetManager(jniEnv, activity); + BrowserWorld::Instance().InitializeJava(jniEnv, activity, assetManager); jniEnv->DeleteLocalRef(assetManager); auto MaybeInitGLAndEnterVR = [aAppState]() { @@ -208,7 +218,11 @@ android_main(android_app *aAppState) { // We need to call ProcessEvents to make sure we receive the event. sAppContext->mDevice->ProcessEvents(); if (sAppContext->mDevice->ShouldExitRenderLoop()) { +#if (AOSP) + GameActivity_finish(aAppState->activity); +#else ANativeActivity_finish(aAppState->activity); +#endif continue; } #endif