OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.vr_shell; | 5 package org.chromium.chrome.browser.vr_shell; |
6 | 6 |
7 import android.app.Activity; | 7 import android.app.Activity; |
8 import android.app.ActivityManager; | 8 import android.app.ActivityManager; |
9 import android.app.PendingIntent; | 9 import android.app.PendingIntent; |
10 import android.content.BroadcastReceiver; | 10 import android.content.BroadcastReceiver; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 private @interface EnterVRResult {} | 71 private @interface EnterVRResult {} |
72 | 72 |
73 private static final int VR_NOT_AVAILABLE = 0; | 73 private static final int VR_NOT_AVAILABLE = 0; |
74 private static final int VR_CARDBOARD = 1; | 74 private static final int VR_CARDBOARD = 1; |
75 private static final int VR_DAYDREAM = 2; // Supports both Cardboard and Day
dream viewer. | 75 private static final int VR_DAYDREAM = 2; // Supports both Cardboard and Day
dream viewer. |
76 | 76 |
77 @Retention(RetentionPolicy.SOURCE) | 77 @Retention(RetentionPolicy.SOURCE) |
78 @IntDef({VR_NOT_AVAILABLE, VR_CARDBOARD, VR_DAYDREAM}) | 78 @IntDef({VR_NOT_AVAILABLE, VR_CARDBOARD, VR_DAYDREAM}) |
79 private @interface VrSupportLevel {} | 79 private @interface VrSupportLevel {} |
80 | 80 |
| 81 private static final String DAYDREAM_VR_EXTRA = "android.intent.extra.VR_LAU
NCH"; |
| 82 |
81 // Linter and formatter disagree on how the line below should be formatted. | 83 // Linter and formatter disagree on how the line below should be formatted. |
82 /* package */ | 84 /* package */ |
83 static final String VR_ENTRY_RESULT_ACTION = | 85 static final String VR_ENTRY_RESULT_ACTION = |
84 "org.chromium.chrome.browser.vr_shell.VrEntryResult"; | 86 "org.chromium.chrome.browser.vr_shell.VrEntryResult"; |
85 | 87 |
86 private static final long REENTER_VR_TIMEOUT_MS = 1000; | 88 private static final long REENTER_VR_TIMEOUT_MS = 1000; |
87 | 89 |
88 private static final int VR_SYSTEM_UI_FLAGS = View.SYSTEM_UI_FLAG_LAYOUT_STA
BLE | 90 private static final int VR_SYSTEM_UI_FLAGS = View.SYSTEM_UI_FLAG_LAYOUT_STA
BLE |
89 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_L
AYOUT_FULLSCREEN | 91 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_L
AYOUT_FULLSCREEN |
90 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCRE
EN | 92 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCRE
EN |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 public static void maybeUnregisterVrEntryHook(ChromeActivity activity) { | 252 public static void maybeUnregisterVrEntryHook(ChromeActivity activity) { |
251 if (sInstance != null) return; // Will be handled in onPause. | 253 if (sInstance != null) return; // Will be handled in onPause. |
252 if (!activitySupportsVrBrowsing(activity)) return; | 254 if (!activitySupportsVrBrowsing(activity)) return; |
253 VrClassesWrapper wrapper = getVrClassesWrapper(); | 255 VrClassesWrapper wrapper = getVrClassesWrapper(); |
254 if (wrapper == null) return; | 256 if (wrapper == null) return; |
255 VrDaydreamApi api = wrapper.createVrDaydreamApi(activity); | 257 VrDaydreamApi api = wrapper.createVrDaydreamApi(activity); |
256 if (api == null) return; | 258 if (api == null) return; |
257 unregisterDaydreamIntent(api); | 259 unregisterDaydreamIntent(api); |
258 } | 260 } |
259 | 261 |
| 262 /** |
| 263 * Whether or not the intent is a Daydream VR Intent. |
| 264 */ |
| 265 public static boolean isDaydreamVrIntent(Intent intent) { |
| 266 return intent.getBooleanExtra(DAYDREAM_VR_EXTRA, false); |
| 267 } |
| 268 |
260 @CalledByNative | 269 @CalledByNative |
261 private static VrShellDelegate getInstance() { | 270 private static VrShellDelegate getInstance() { |
262 Activity activity = ApplicationStatus.getLastTrackedFocusedActivity(); | 271 Activity activity = ApplicationStatus.getLastTrackedFocusedActivity(); |
263 if (!(activity instanceof ChromeActivity)) return null; | 272 if (!(activity instanceof ChromeActivity)) return null; |
264 return getInstance((ChromeActivity) activity); | 273 return getInstance((ChromeActivity) activity); |
265 } | 274 } |
266 | 275 |
267 private static VrShellDelegate getInstance(ChromeActivity activity) { | 276 private static VrShellDelegate getInstance(ChromeActivity activity) { |
268 if (!LibraryLoader.isInitialized()) return null; | 277 if (!LibraryLoader.isInitialized()) return null; |
269 if (activity == null || !activitySupportsPresentation(activity)) return
null; | 278 if (activity == null || !activitySupportsPresentation(activity)) return
null; |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 } | 691 } |
683 | 692 |
684 @CalledByNative | 693 @CalledByNative |
685 private void setListeningForWebVrActivate(boolean listening) { | 694 private void setListeningForWebVrActivate(boolean listening) { |
686 // Non-Daydream devices may not have the concept of display activate. So
disable | 695 // Non-Daydream devices may not have the concept of display activate. So
disable |
687 // mListeningForWebVrActivate for them. | 696 // mListeningForWebVrActivate for them. |
688 if (mVrSupportLevel != VR_DAYDREAM) return; | 697 if (mVrSupportLevel != VR_DAYDREAM) return; |
689 mListeningForWebVrActivate = listening; | 698 mListeningForWebVrActivate = listening; |
690 if (listening) { | 699 if (listening) { |
691 registerDaydreamIntent(mVrDaydreamApi, mActivity); | 700 registerDaydreamIntent(mVrDaydreamApi, mActivity); |
| 701 if (mActivity.shouldAutoPresent()) { |
| 702 // Dispatch a vrdisplayactivate event to trigger WebVR page call
ing requestPresent. |
| 703 // This should start WebVR presentation. |
| 704 nativeDisplayActivate(mNativeVrShellDelegate); |
| 705 } |
692 } else { | 706 } else { |
693 unregisterDaydreamIntent(mVrDaydreamApi); | 707 unregisterDaydreamIntent(mVrDaydreamApi); |
694 } | 708 } |
695 } | 709 } |
696 | 710 |
697 /** | 711 /** |
698 * Exits VR Shell, performing all necessary cleanup. | 712 * Exits VR Shell, performing all necessary cleanup. |
699 */ | 713 */ |
700 /* package */ void shutdownVr(boolean isPausing, boolean showTransition) { | 714 /* package */ void shutdownVr(boolean isPausing, boolean showTransition) { |
701 if (!mInVr) return; | 715 if (!mInVr) return; |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 private native long nativeInit(); | 885 private native long nativeInit(); |
872 private static native void nativeOnLibraryAvailable(); | 886 private static native void nativeOnLibraryAvailable(); |
873 private native void nativeSetPresentResult(long nativeVrShellDelegate, boole
an result); | 887 private native void nativeSetPresentResult(long nativeVrShellDelegate, boole
an result); |
874 private native void nativeDisplayActivate(long nativeVrShellDelegate); | 888 private native void nativeDisplayActivate(long nativeVrShellDelegate); |
875 private native void nativeUpdateVSyncInterval(long nativeVrShellDelegate, lo
ng timebaseNanos, | 889 private native void nativeUpdateVSyncInterval(long nativeVrShellDelegate, lo
ng timebaseNanos, |
876 double intervalSeconds); | 890 double intervalSeconds); |
877 private native void nativeOnPause(long nativeVrShellDelegate); | 891 private native void nativeOnPause(long nativeVrShellDelegate); |
878 private native void nativeOnResume(long nativeVrShellDelegate); | 892 private native void nativeOnResume(long nativeVrShellDelegate); |
879 private native void nativeDestroy(long nativeVrShellDelegate); | 893 private native void nativeDestroy(long nativeVrShellDelegate); |
880 } | 894 } |
OLD | NEW |