diff --git a/settings.gradle b/settings.gradle index 891daf3ba..6d889cad9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,3 +5,4 @@ rootProject.name = 'monado' include ':src:xrt:auxiliary:android' include ':src:xrt:ipc_android' +include ':src:xrt:targets:openxr_android' diff --git a/src/xrt/targets/openxr_android/build.gradle b/src/xrt/targets/openxr_android/build.gradle new file mode 100644 index 000000000..0b51935e9 --- /dev/null +++ b/src/xrt/targets/openxr_android/build.gradle @@ -0,0 +1,66 @@ +// Copyright 2020, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion project.sharedTargetSdk + buildToolsVersion '30.0.2' + + ndkVersion "${ndk_version}" + + defaultConfig { + applicationId 'org.freedesktop.monado.openxr_runtime' + minSdkVersion project.sharedMinSdk + targetSdkVersion project.sharedTargetSdk + versionCode 1 + versionName '1.0' + externalNativeBuild { + cmake { + arguments "-DEIGEN3_INCLUDE_DIR=${project.eigenIncludeDir}", "-DANDROID_PLATFORM=26", "-DANDROID_STL=c++_shared", "-DANDROID_ARM_NEON=TRUE" + } + } + } + + buildTypes { + release { + minifyEnabled false + // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + externalNativeBuild { + cmake { + path "../../../../CMakeLists.txt" + } + } + + flavorDimensions 'deployment' + productFlavors { + inProcess { + dimension 'deployment' + applicationIdSuffix '.in_process' + externalNativeBuild.cmake.arguments += "-DXRT_FEATURE_SERVICE=OFF" + externalNativeBuild.cmake.targets "openxr_monado" + } + outOfProcess { + dimension 'deployment' + applicationIdSuffix '.out_of_process' + externalNativeBuild.cmake.arguments += "-DXRT_FEATURE_SERVICE=ON" + externalNativeBuild.cmake.targets "openxr_monado", "monado-service" + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + outOfProcessImplementation project(':src:xrt:ipc_android') + implementation project(':src:xrt:auxiliary:android') + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' +} diff --git a/src/xrt/targets/openxr_android/src/main/AndroidManifest.xml b/src/xrt/targets/openxr_android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..07cc7006e --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/AndroidManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/MainActivity.java b/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/MainActivity.java new file mode 100644 index 000000000..4f212fcd5 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/MainActivity.java @@ -0,0 +1,22 @@ +// Copyright 2020, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +/*! + * @file + * @brief Simple main activity for Android. + * @author Ryan Pavlik + */ + +package org.freedesktop.monado.openxr_runtime; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/OpenXRListener.kt b/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/OpenXRListener.kt new file mode 100644 index 000000000..f48057041 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/java/org/freedesktop/monado/openxr_runtime/OpenXRListener.kt @@ -0,0 +1,32 @@ +// Copyright 2020, Collabora, Ltd. +// SPDX-License-Identifier: BSL-1.0 +/*! + * @file + * @brief Implementation of VrListenerService. + * @author Ryan Pavlik + */ + +package org.freedesktop.monado.openxr_runtime + +import android.content.ComponentName +import android.service.vr.VrListenerService +import android.util.Log +import android.widget.Toast + +class OpenXRListener : VrListenerService() { + // Would like to override + // void onCurrentVrActivityChanged( + // ComponentName component, boolean running2dInVr, int pid) + // as recommended, but not possible? + override fun onCurrentVrActivityChanged(component: ComponentName?) { + if (component == null) { + Toast.makeText(this, "Now in VR for 2D", Toast.LENGTH_SHORT).show() + Log.i("OpenXRListener", "Got VR mode for 2D") + + } else { + Toast.makeText(this, "Now in VR for $component", Toast.LENGTH_SHORT).show() + Log.i("OpenXRListener", "Got VR mode for component: $component") + } + + } +} diff --git a/src/xrt/targets/openxr_android/src/main/res/drawable/ic_monado_logo.xml b/src/xrt/targets/openxr_android/src/main/res/drawable/ic_monado_logo.xml new file mode 100644 index 000000000..1b4b099b3 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/res/drawable/ic_monado_logo.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/src/xrt/targets/openxr_android/src/main/res/layout/activity_main.xml b/src/xrt/targets/openxr_android/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..76d165db0 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/res/layout/activity_main.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/xrt/targets/openxr_android/src/main/res/values/colors.xml b/src/xrt/targets/openxr_android/src/main/res/values/colors.xml new file mode 100644 index 000000000..7274b4740 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + + #6200EE + #3700B3 + #03DAC5 + diff --git a/src/xrt/targets/openxr_android/src/main/res/values/strings.xml b/src/xrt/targets/openxr_android/src/main/res/values/strings.xml new file mode 100644 index 000000000..9bc548093 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/res/values/strings.xml @@ -0,0 +1,9 @@ + + + FD.O Monado + An XR Runtime, powered by Monado + NOTICE text goes here + diff --git a/src/xrt/targets/openxr_android/src/main/res/values/styles.xml b/src/xrt/targets/openxr_android/src/main/res/values/styles.xml new file mode 100644 index 000000000..c05d9a8a6 --- /dev/null +++ b/src/xrt/targets/openxr_android/src/main/res/values/styles.xml @@ -0,0 +1,15 @@ + + + + + + +