From b2380758dc053f5f9b550670f5235a90173074d4 Mon Sep 17 00:00:00 2001 From: haanhvu Date: Thu, 6 Feb 2025 15:40:12 +0700 Subject: [PATCH] Disable headlock when in VR videos VR videos are meant for users to be immersed in the whole space around them. Because headlock locks users in the front of them, it needs to be disabled in VR videos. If users enabled headlock before entering VR videos, we disable it when VR videos show and reenable it when they are exited. Fixes Igalia#1698 --- .../shared/com/igalia/wolvic/VRBrowserActivity.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java b/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java index 32a7e864d0..9bfc20c8f6 100644 --- a/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java +++ b/app/src/common/shared/com/igalia/wolvic/VRBrowserActivity.java @@ -136,6 +136,8 @@ public class VRBrowserActivity extends PlatformActivity implements WidgetManager public static final String EXTRA_LAUNCH_IMMERSIVE_PARENT_XPATH = "launch_immersive_parent_xpath"; public static final String EXTRA_LAUNCH_IMMERSIVE_ELEMENT_XPATH = "launch_immersive_element_xpath"; + private boolean shouldRestoreHeadLockOnVRVideoExit; + private BroadcastReceiver mCrashReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -2022,12 +2024,20 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permi @Override public void showVRVideo(final int aWindowHandle, final @VideoProjectionMenuWidget.VideoProjectionFlags int aVideoProjection) { + if (mSettings.isHeadLockEnabled()) { + mSettings.setHeadLockEnabled(false); + shouldRestoreHeadLockOnVRVideoExit = true; + } queueRunnable(() -> showVRVideoNative(aWindowHandle, aVideoProjection)); } @Override public void hideVRVideo() { queueRunnable(this::hideVRVideoNative); + + if (shouldRestoreHeadLockOnVRVideoExit) { + mSettings.setHeadLockEnabled(true); + } } @Override