From 19c0b53c8e6900432d435717d434f1874c6c91c9 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 27 Jul 2019 22:47:59 +0100 Subject: [PATCH] Update to work with latest OVR release Adds permission request logic on start-up --- .gitignore | 7 ++ Projects/Android/Android.iml | 59 +++++++++------ Projects/Android/AndroidManifest.xml | 9 +-- Projects/Android/build.gradle | 12 ++- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../jni/src/Lambda1VR/L1VR_SurfaceView.c | 4 +- Projects/Projects.iml | 12 +-- VrSamples-Lambda1VR.iml | 12 +-- .../drbeef/lambda1vr/GLES3JNIActivity.java | 75 +++++++++++++++++++ 9 files changed, 149 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index d7dd98f..06d8551 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,10 @@ Projects/Android/jni/src/gl4es/spec/xml/gles-2.0.xml Projects/Android/.idea/vcs.xml Projects/Android/jni/src/gl4es/spec/xml/glx.xml Projects/Android/.idea/runConfigurations.xml +Projects/Android/.gradle/4.6/fileHashes/fileHashes.lock +Projects/Android/Android.iml +Projects/Android/.gradle/vcsWorkingDirs/gc.properties +Projects/Android/.idea/libraries/Gradle__com_android_support_support_annotations_24_2_0_jar.xml +Projects/Android/.idea/libraries/Gradle__com_android_support_support_compat_24_2_0_aar.xml +Projects/Android/.idea/encodings.xml +Projects/Android/.idea/libraries/Gradle__com_android_support_support_core_utils_24_2_0_aar.xml diff --git a/Projects/Android/Android.iml b/Projects/Android/Android.iml index b8c2bb6..5c134cb 100644 --- a/Projects/Android/Android.iml +++ b/Projects/Android/Android.iml @@ -8,7 +8,7 @@ - @@ -21,14 +21,15 @@ - - - + + + @@ -55,14 +56,12 @@ - - @@ -98,14 +97,6 @@ - - - - - - - - @@ -114,33 +105,53 @@ + + + + + + + + + - + + + + + - + + + - - + + + + - + + + + - + @@ -156,8 +167,10 @@ - + - + + + \ No newline at end of file diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index fab0c56..1d2c48a 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,14 +1,13 @@ - - + android:versionCode="4" + android:versionName="1.0.1" android:installLocation="auto" > - + diff --git a/Projects/Android/build.gradle b/Projects/Android/build.gradle index 35670b2..cde4018 100644 --- a/Projects/Android/build.gradle +++ b/Projects/Android/build.gradle @@ -22,7 +22,9 @@ android { ndkBuild { abiFilters 'armeabi-v7a' } - } + } + minSdkVersion 24 + targetSdkVersion 26 } sourceSets { @@ -33,9 +35,17 @@ android { assets.srcDirs = ['../../assets'] } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } + compileSdkVersion = 24 + buildToolsVersion = '29.0.1' } dependencies { + implementation "com.android.support:support-compat:24.2.0" + implementation "com.android.support:support-core-utils:24.2.0" } repositories { diff --git a/Projects/Android/gradle/wrapper/gradle-wrapper.properties b/Projects/Android/gradle/wrapper/gradle-wrapper.properties index 8a1cc64..ef7382d 100644 --- a/Projects/Android/gradle/wrapper/gradle-wrapper.properties +++ b/Projects/Android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Sep 27 22:37:56 BST 2018 +#Fri Jul 26 21:17:15 BST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c index 8d069a2..ff4d1dc 100644 --- a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c +++ b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c @@ -1153,14 +1153,14 @@ static void ovrApp_HandleInput( ovrApp * app ) ovrTracking remoteTracking; ovrInputStateTrackedRemote trackedRemoteState; trackedRemoteState.Header.ControllerType = ovrControllerType_TrackedRemote; - result = vrapi_GetCurrentInputState(app->Ovr, i, &trackedRemoteState.Header); + result = vrapi_GetCurrentInputState(app->Ovr, cap.DeviceID, &trackedRemoteState.Header); if (result == ovrSuccess) { ovrInputTrackedRemoteCapabilities remoteCapabilities; remoteCapabilities.Header = cap; result = vrapi_GetInputDeviceCapabilities(app->Ovr, &remoteCapabilities.Header); - result = vrapi_GetInputTrackingState(app->Ovr, i, app->DisplayTime, + result = vrapi_GetInputTrackingState(app->Ovr, cap.DeviceID, app->DisplayTime, &remoteTracking); if (remoteCapabilities.ControllerCapabilities & ovrControllerCaps_RightHand) { diff --git a/Projects/Projects.iml b/Projects/Projects.iml index ef75c36..4a04956 100644 --- a/Projects/Projects.iml +++ b/Projects/Projects.iml @@ -1,19 +1,19 @@ - - - - + + + + - + diff --git a/VrSamples-Lambda1VR.iml b/VrSamples-Lambda1VR.iml index 2745e63..e7d3c0e 100644 --- a/VrSamples-Lambda1VR.iml +++ b/VrSamples-Lambda1VR.iml @@ -1,19 +1,19 @@ - - - - + + + + - + diff --git a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java index 55d20ca..5bdc029 100644 --- a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java +++ b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java @@ -11,11 +11,15 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; +import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; @@ -35,6 +39,10 @@ import static android.system.Os.setenv; private static final String TAG = "Lambda1VR"; + private int permissionCount = 0; + private static final int READ_EXTERNAL_STORAGE_PERMISSION_ID = 1; + private static final int WRITE_EXTERNAL_STORAGE_PERMISSION_ID = 2; + String commandLineParams; private SurfaceView mView; @@ -60,6 +68,73 @@ import static android.system.Os.setenv; params.screenBrightness = 1.0f; getWindow().setAttributes( params ); + + + checkPermissionsAndInitialize(); + } + + /** Initializes the Activity only if the permission has been granted. */ + private void checkPermissionsAndInitialize() { + // Boilerplate for checking runtime permissions in Android. + if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED){ + ActivityCompat.requestPermissions( + GLES3JNIActivity.this, + new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, + WRITE_EXTERNAL_STORAGE_PERMISSION_ID); + } + else + { + permissionCount++; + } + + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) + { + ActivityCompat.requestPermissions( + GLES3JNIActivity.this, + new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, + READ_EXTERNAL_STORAGE_PERMISSION_ID); + } + else + { + permissionCount++; + } + + if (permissionCount == 2) { + // Permissions have already been granted. + create(); + } + } + + /** Handles the user accepting the permission. */ + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) { + if (requestCode == READ_EXTERNAL_STORAGE_PERMISSION_ID) { + if (results.length > 0 && results[0] == PackageManager.PERMISSION_GRANTED) { + permissionCount++; + } + else + { + System.exit(0); + } + } + + if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_ID) { + if (results.length > 0 && results[0] == PackageManager.PERMISSION_GRANTED) { + permissionCount++; + } + else + { + System.exit(0); + } + } + + checkPermissionsAndInitialize(); + } + + public void create() + { copy_asset(getFilesDir().getPath(), "extras.pak", false); copy_asset("/sdcard/xash/valve/", "config.cfg", false); // Copy in case user has deleted their config copy_asset("/sdcard/xash/", "commandline.txt", false); // Copy in case user has deleted their config