Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 0dcaba4

Browse files
committed
Add support for Oculus App Linking
1 parent a52060c commit 0dcaba4

4 files changed

Lines changed: 34 additions & 4 deletions

File tree

app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,17 @@ private void handlePoorPerformance() {
10851085
});
10861086
}
10871087

1088+
@Keep
1089+
@SuppressWarnings("unused")
1090+
private void loadUri(String aURL) {
1091+
runOnUiThread(() -> {
1092+
Session session = SessionStore.get().getActiveSession();
1093+
if (session != null) {
1094+
session.loadUri(aURL);
1095+
}
1096+
});
1097+
}
1098+
10881099
private SurfaceTexture createSurfaceTexture() {
10891100
int[] ids = new int[1];
10901101
GLES20.glGenTextures(1, ids, 0);

app/src/main/cpp/VRBrowser.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ const char* kHaltActivity = "haltActivity";
5252
const char* kHaltActivitySignature = "(I)V";
5353
const char* kHandlePoorPerformance = "handlePoorPerformance";
5454
const char* kHandlePoorPerformanceSignature = "()V";
55+
const char* kLoadUri = "loadUri";
56+
const char* kLoadUriSignature = "(Ljava/lang/String;)V";
5557

5658
JNIEnv* sEnv = nullptr;
5759
jclass sBrowserClass = nullptr;
@@ -77,6 +79,7 @@ jmethodID sAreLayersEnabled = nullptr;
7779
jmethodID sSetDeviceType = nullptr;
7880
jmethodID sHaltActivity = nullptr;
7981
jmethodID sHandlePoorPerformance = nullptr;
82+
jmethodID sLoadUri = nullptr;
8083
}
8184

8285
namespace crow {
@@ -117,6 +120,7 @@ VRBrowser::InitializeJava(JNIEnv* aEnv, jobject aActivity) {
117120
sSetDeviceType = FindJNIMethodID(sEnv, sBrowserClass, kSetDeviceType, kSetDeviceTypeSignature);
118121
sHaltActivity = FindJNIMethodID(sEnv, sBrowserClass, kHaltActivity, kHaltActivitySignature);
119122
sHandlePoorPerformance = FindJNIMethodID(sEnv, sBrowserClass, kHandlePoorPerformance, kHandlePoorPerformanceSignature);
123+
sLoadUri = FindJNIMethodID(sEnv, sBrowserClass, kLoadUri, kLoadUriSignature);
120124
}
121125

122126
void
@@ -151,6 +155,7 @@ VRBrowser::ShutdownJava() {
151155
sAreLayersEnabled = nullptr;
152156
sSetDeviceType = nullptr;
153157
sHaltActivity = nullptr;
158+
sLoadUri = nullptr;
154159
sEnv = nullptr;
155160
}
156161

@@ -339,4 +344,13 @@ VRBrowser::HandlePoorPerformance() {
339344
CheckJNIException(sEnv, __FUNCTION__);
340345
}
341346

347+
void
348+
VRBrowser::LoadUri(const std::string& aURL) {
349+
if (!ValidateMethodID(sEnv, sActivity, sLoadUri, __FUNCTION__)) { return; }
350+
jstring uri = sEnv->NewStringUTF(aURL.c_str());
351+
sEnv->CallVoidMethod(sActivity, sLoadUri, uri);
352+
sEnv->DeleteLocalRef(uri);
353+
CheckJNIException(sEnv, __FUNCTION__);
354+
}
355+
342356
} // namespace crow

app/src/main/cpp/VRBrowser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ bool AreLayersEnabled();
3939
void SetDeviceType(const jint aType);
4040
void HaltActivity(const jint aReason);
4141
void HandlePoorPerformance();
42+
void LoadUri(const std::string& aURL);
4243
} // namespace VRBrowser;
4344

4445
} // namespace crow

app/src/oculusvr/cpp/DeviceDelegateOculusVR.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -777,10 +777,6 @@ DeviceDelegateOculusVR::SetCPULevel(const device::CPULevel aLevel) {
777777

778778
void
779779
DeviceDelegateOculusVR::ProcessEvents() {
780-
if (m.applicationEntitled) {
781-
return;
782-
}
783-
784780
ovrMessageHandle message;
785781
while ((message = ovr_PopMessage()) != nullptr) {
786782
switch (ovr_Message_GetType(message)) {
@@ -812,6 +808,14 @@ DeviceDelegateOculusVR::ProcessEvents() {
812808
m.applicationEntitled = true;
813809
}
814810
break;
811+
case ovrMessage_Notification_ApplicationLifecycle_LaunchIntentChanged: {
812+
auto details = ovr_ApplicationLifecycle_GetLaunchDetails();
813+
const char *msg = ovr_LaunchDetails_GetDeeplinkMessage(details);
814+
if (msg) {
815+
VRBrowser::LoadUri(msg);
816+
}
817+
break;
818+
}
815819
default:
816820
break;
817821
}

0 commit comments

Comments
 (0)