diff --git a/README.md b/README.md index 0824d1d61a..30683de94e 100644 --- a/README.md +++ b/README.md @@ -157,8 +157,8 @@ Restart Wolvic XR and close and re-open the WebIDE page. - When using the native debugger you can ignore the first SIGSEGV: address access protected stop in GV thread. It's not a crash; you can click *Resume* to continue debugging. - On some platforms such as Oculus Go the native debugger stops on each input event. You can set this LLDB post-attach command in Android Studio to fix the problem: `pro hand -p true -s false SIGILL` -- You can use `adb shell am start -a android.intent.action.VIEW -d "https://aframe.io" com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity` to load a URL from the command line -- You can use `adb shell am start -a android.intent.action.VIEW -n com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity -e homepage "https://example.com"` to override the homepage +- You can use `adb shell am start -a android.intent.action.VIEW -d "https://aframe.io" com.igalia.wolvic/com.igalia.wolvic.VersionCheckActivity` to load a URL from the command line +- You can use `adb shell am start -a android.intent.action.VIEW -n com.igalia.wolvic/com.igalia.wolvic.VersionCheckActivity -e homepage "https://example.com"` to override the homepage - You can use `adb shell setprop debug.oculus.enableVideoCapture 1` to record a video on the Oculus Go. Remember to run `adb shell setprop debug.oculus.enableVideoCapture 0` to stop recording the video. - You can also record videos on the Oculus Go by exiting to the system library, and from the Oculus tray menu (toggle with the Oculus button on the controller): **`Sharing > Record Video`** - You can set `disableCrashRestart=true` in the gradle `user.properties` to disable app relaunch on crash. diff --git a/app/src/aosp/AndroidManifest.xml b/app/src/aosp/AndroidManifest.xml index 26b9f92ac5..6f7497f80e 100644 --- a/app/src/aosp/AndroidManifest.xml +++ b/app/src/aosp/AndroidManifest.xml @@ -15,12 +15,10 @@ - + - - - + diff --git a/app/src/common/shared/com/igalia/wolvic/VersionCheckActivity.java b/app/src/common/shared/com/igalia/wolvic/VersionCheckActivity.java new file mode 100644 index 0000000000..e9f881934f --- /dev/null +++ b/app/src/common/shared/com/igalia/wolvic/VersionCheckActivity.java @@ -0,0 +1,91 @@ +package com.igalia.wolvic; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +import com.igalia.wolvic.utils.SystemUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Properties; + +public class VersionCheckActivity extends Activity { + private static final String META_OS_VERSION = "ro.vros.build.version"; + private static final int MIN_META_OS_VERSION_WITH_KHR_LOADER = 62; + static final String LOGTAG = SystemUtils.createLogtag(VersionCheckActivity.class); + private int minSupportedVersion = 0; + private boolean browserActivityStarted = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (isOSVersionCompatible()) { + Intent receivedIntent = getIntent(); + Bundle extras = receivedIntent.getExtras(); + + // Start VRBrowserActivity if OS version is compatible + Intent intent = new Intent(this, VRBrowserActivity.class); + if (extras != null) + intent.putExtras(extras); + + startActivity(intent); + browserActivityStarted = true; + finish(); + } else { + // Show dialog if OS version is incompatible + showIncompatibleOSDialog(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (!browserActivityStarted) + System.exit(0); + } + + private static String getSystemProperty(String key) { + String value = null; + try { + Process process = Runtime.getRuntime().exec("getprop " + key); + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + value = reader.readLine(); + reader.close(); + process.waitFor(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + return value; + } + + private boolean isOSVersionCompatible() { + if (BuildConfig.FLAVOR_platform.equals("oculusvr")) { + minSupportedVersion = MIN_META_OS_VERSION_WITH_KHR_LOADER; + String osVersion = getSystemProperty(META_OS_VERSION); + Log.i(LOGTAG, "Checking that OS version is at least " + minSupportedVersion + " (found " + osVersion + ")"); + try { + if (osVersion == null || Integer.parseInt(osVersion) < MIN_META_OS_VERSION_WITH_KHR_LOADER) + return false; + } catch (NumberFormatException e) { + Log.e(LOGTAG, "Failed to parse OS version: " + osVersion); + return false; + } + } + return true; + } + + private void showIncompatibleOSDialog() { + new AlertDialog.Builder(this) + .setTitle(R.string.incompatible_os_version_title) + .setMessage(getString(R.string.incompatible_os_version_message, minSupportedVersion)) + .setOnDismissListener((dialog) -> finish()) + .setPositiveButton("OK", (dialog, which) -> dialog.dismiss()) + .setIcon(android.R.drawable.ic_dialog_alert) + .show(); + } +} \ No newline at end of file diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index 791926c3d7..9ff63c5f61 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -4,7 +4,6 @@ - diff --git a/app/src/hvr/AndroidManifest.xml b/app/src/hvr/AndroidManifest.xml index 7307a8be26..c825b6f82f 100644 --- a/app/src/hvr/AndroidManifest.xml +++ b/app/src/hvr/AndroidManifest.xml @@ -35,11 +35,9 @@ + android:label="@string/app_name"> - - + diff --git a/app/src/lynx/AndroidManifest.xml b/app/src/lynx/AndroidManifest.xml index f4d27c75be..f2a00a7be1 100644 --- a/app/src/lynx/AndroidManifest.xml +++ b/app/src/lynx/AndroidManifest.xml @@ -17,11 +17,10 @@ - + - - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 328dd3157e..947a9bab9f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,15 +30,24 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/FxR.Dark"> + + + + + + + + - @@ -47,7 +56,6 @@ - Eye Tracking Permissions Enabling eye tracking for browsing the web poses significant privacy risks. This technology captures where and how long a user looks at specific parts of a webpage, revealing intimate details about their interests and emotional reactions. Advertisers and third parties can exploit this data for intrusive marketing and profiling. Moreover, eye movement patterns could infer sensitive information such as medical conditions, cognitive states, or personal habits. Therefore, it is crucial to consider the privacy implications before granting access to eye tracking information to webpages. + + Incompatible OS Version + Your OS version is not supported. This version of Wolvic requires at least version %1$d + diff --git a/app/src/noapi/AndroidManifest.xml b/app/src/noapi/AndroidManifest.xml index 7c779f08cd..15c5c09ea5 100644 --- a/app/src/noapi/AndroidManifest.xml +++ b/app/src/noapi/AndroidManifest.xml @@ -1,10 +1,11 @@ - - + diff --git a/app/src/oculusvr/java/com/igalia/wolvic/PlatformActivity.java b/app/src/oculusvr/java/com/igalia/wolvic/PlatformActivity.java index aa05481dbc..ae08a36562 100644 --- a/app/src/oculusvr/java/com/igalia/wolvic/PlatformActivity.java +++ b/app/src/oculusvr/java/com/igalia/wolvic/PlatformActivity.java @@ -55,7 +55,6 @@ protected Intent getStoreIntent() { @Override protected void onCreate(Bundle savedInstanceState) { - Log.e(LOGTAG,"in onCreate"); super.onCreate(savedInstanceState); //getWindow().takeInputQueue(null); // Keep the screen on diff --git a/app/src/oculusvrArmRelease/AndroidManifest.xml b/app/src/oculusvrArmRelease/AndroidManifest.xml index 3cabf59956..d2c3990de8 100644 --- a/app/src/oculusvrArmRelease/AndroidManifest.xml +++ b/app/src/oculusvrArmRelease/AndroidManifest.xml @@ -51,12 +51,10 @@ android:windowSoftInputMode="stateAlwaysHidden" android:resizeableActivity="false" android:supportsPictureInPicture="false" - tools:replace="android:launchMode, android:configChanges" - android:exported="true"> + tools:replace="android:launchMode, android:configChanges"> - diff --git a/app/src/picoxr/AndroidManifest.xml b/app/src/picoxr/AndroidManifest.xml index a097533215..b7408a5607 100644 --- a/app/src/picoxr/AndroidManifest.xml +++ b/app/src/picoxr/AndroidManifest.xml @@ -8,12 +8,8 @@ - + - - - - diff --git a/app/src/spaces/AndroidManifest.xml b/app/src/spaces/AndroidManifest.xml index 84f1e42e23..5e14797094 100644 --- a/app/src/spaces/AndroidManifest.xml +++ b/app/src/spaces/AndroidManifest.xml @@ -39,16 +39,12 @@ + android:name=".VRBrowserActivity"> - - - - + diff --git a/app/src/visionglass/AndroidManifest.xml b/app/src/visionglass/AndroidManifest.xml index 87be391b75..15d935e0c0 100644 --- a/app/src/visionglass/AndroidManifest.xml +++ b/app/src/visionglass/AndroidManifest.xml @@ -6,12 +6,9 @@ android:required="false" /> - + - +