1
This repository has been archived on 2025-03-15. You can view files and clone it, but cannot push or open issues or pull requests.

114 lines
3.7 KiB
C#
Raw Normal View History

2025-03-15 20:02:21 +01:00
// Copyright 2017 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using UnityEngine;
using UnityEngine.VR;
using System;
using System.Runtime.InteropServices;
// Accessor to DaydreamApi.java.
public class GvrDaydreamApi : IDisposable {
private const string METHOD_CREATE = "create";
private const string METHOD_LAUNCH_VR_HOMESCREEN = "launchVrHomescreen";
private const string METHOD_RUN_ON_UI_THREAD = "runOnUiThread";
private const string PACKAGE_DAYDREAM_API = "com.google.vr.ndk.base.DaydreamApi";
private static GvrDaydreamApi m_instance;
#if !UNITY_EDITOR && UNITY_ANDROID
private AndroidJavaObject m_daydreamApiObject;
private AndroidJavaClass m_daydreamApiClass = new AndroidJavaClass(PACKAGE_DAYDREAM_API);
#endif // !UNITY_EDITOR && UNITY_ANDROID
#if UNITY_ANDROID
public static AndroidJavaObject JavaInstance {
get {
#if UNITY_EDITOR || !UNITY_HAS_GOOGLEVR
return null;
#else
if (m_instance == null || m_instance.m_daydreamApiObject == null) {
Debug.Log("GvrDaydreamApi not instantiated, please call CreateDaydreamApi() first");
return null;
}
return m_instance.m_daydreamApiObject;
#endif // UNITY_EDITOR || !UNITY_HAS_GOOGLEVR
}
}
#endif // UNITY_ANDROID
public static bool IsCreated {
get {
#if UNITY_EDITOR || !UNITY_HAS_GOOGLEVR || !UNITY_ANDROID
return (m_instance != null);
#else
return (m_instance != null) && (m_instance.m_daydreamApiObject != null);
#endif // UNITY_EDITOR || !UNITY_HAS_GOOGLEVR || !UNITY_ANDROID
}
}
/// @cond
/// The caller is responsible for ensuring that Dispose is called when
/// the Activity is suspended.
public void Dispose() {
m_instance = null;
}
/// #endcond
/// Instantiates a GvrDayreamApi.
public static void Create() {
if (m_instance == null) {
m_instance = new GvrDaydreamApi();
}
#if !UNITY_EDITOR && UNITY_HAS_GOOGLEVR && UNITY_ANDROID
if (m_instance.m_daydreamApiObject != null) {
return;
}
if (m_instance.m_daydreamApiClass == null) {
Debug.LogErrorFormat("Failed to get DaydreamApi class, {0}", PACKAGE_DAYDREAM_API);
return;
}
AndroidJavaObject activity = GvrActivityHelper.GetActivity();
if (activity == null) {
return;
}
AndroidJavaObject context = GvrActivityHelper.GetApplicationContext(activity);
if (context == null) {
return;
}
activity.Call(METHOD_RUN_ON_UI_THREAD, new AndroidJavaRunnable(() => {
m_instance.m_daydreamApiObject =
m_instance.m_daydreamApiClass.CallStatic<AndroidJavaObject>(METHOD_CREATE, context);
if (m_instance.m_daydreamApiObject == null) {
Debug.LogError("DaydreamApi.Create failed to instantiate object");
}
})
);
#endif // !UNITY_EDITOR && UNITY_HAS_GOOGLEVR && UNITY_ANDROID
}
/// Launches VrHome from a VR scene.
public static void LaunchVrHome() {
#if !UNITY_EDITOR && UNITY_HAS_GOOGLEVR && UNITY_ANDROID
if (m_instance == null || m_instance.m_daydreamApiObject == null) {
return;
}
m_instance.m_daydreamApiObject.Call(METHOD_LAUNCH_VR_HOMESCREEN);
#endif // !UNITY_EDITOR && UNITY_HAS_GOOGLEVR && UNITY_ANDROID
}
}