160 lines
5.5 KiB
C#
160 lines
5.5 KiB
C#
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
* All rights reserved.
|
|
*
|
|
* Licensed under the Oculus SDK License Agreement (the "License");
|
|
* you may not use the Oculus SDK except in compliance with the License,
|
|
* which is provided at the time of installation or download, or which
|
|
* otherwise accompanies this software in either electronic or hard copy form.
|
|
*
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://developer.oculus.com/licenses/oculussdk/
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, the Oculus SDK
|
|
* 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 System.Globalization;
|
|
using UnityEditor;
|
|
using UnityEngine.UIElements;
|
|
|
|
internal class OVRProjectSetupSettingsProvider : SettingsProvider
|
|
{
|
|
public enum Origins
|
|
{
|
|
Settings,
|
|
Menu,
|
|
Icon,
|
|
Console
|
|
}
|
|
|
|
public enum Interaction
|
|
{
|
|
None,
|
|
WentToDocumentation,
|
|
WentToSource,
|
|
Fixed,
|
|
Ignored
|
|
}
|
|
|
|
[MenuItem("Oculus/Tools/Project Setup Tool", false, 1)]
|
|
static void OpenProjectSetupTool()
|
|
{
|
|
OpenSettingsWindow(Origins.Menu);
|
|
}
|
|
|
|
public const string SettingsName = "Oculus";
|
|
public static readonly string SettingsPath = $"Project/{SettingsName}";
|
|
|
|
private OVRProjectSetupDrawer _ovrProjectSetupDrawer;
|
|
private OVRProjectSetupDrawer OvrProjectSetupDrawer => _ovrProjectSetupDrawer ??= new OVRProjectSetupDrawer();
|
|
private static Origins? _lastOrigin = null;
|
|
private static Interaction _lastInteraction = Interaction.None;
|
|
private static bool _activated = false;
|
|
|
|
public static double OpenTimestamp { get; set; }
|
|
public static double TimeSpent => EditorApplication.timeSinceStartup - OpenTimestamp;
|
|
public static OVRTelemetryMarker? InteractionFlowEvent { get; set; }
|
|
|
|
[SettingsProvider]
|
|
public static SettingsProvider CreateProjectValidationSettingsProvider()
|
|
{
|
|
return new OVRProjectSetupSettingsProvider(SettingsPath, SettingsScope.Project);
|
|
}
|
|
|
|
internal static void SetNewInteraction(Interaction interaction)
|
|
{
|
|
if (interaction > _lastInteraction)
|
|
{
|
|
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Interact);
|
|
_lastInteraction = interaction;
|
|
}
|
|
}
|
|
|
|
internal static void ResetInteraction()
|
|
{
|
|
InteractionFlowEvent = null;
|
|
_lastInteraction = Interaction.None;
|
|
_lastOrigin = null;
|
|
_activated = false;
|
|
OpenTimestamp = 0.0;
|
|
}
|
|
|
|
private OVRProjectSetupSettingsProvider(string path,
|
|
SettingsScope scopes)
|
|
: base(path, scopes)
|
|
{
|
|
}
|
|
|
|
public override void OnActivate(string searchContext, VisualElement rootElement)
|
|
{
|
|
if (!_activated)
|
|
{
|
|
OpenTimestamp = EditorApplication.timeSinceStartup;
|
|
_activated = true;
|
|
_lastOrigin = _lastOrigin ?? Origins.Settings;
|
|
|
|
OVRTelemetry.Start(OVRProjectSetupTelemetryEvent.EventTypes.Open)
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.BuildTargetGroup,
|
|
EditorUserBuildSettings.selectedBuildTargetGroup.ToString())
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString())
|
|
.Send();
|
|
|
|
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Open)
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString());
|
|
}
|
|
}
|
|
|
|
public override void OnDeactivate()
|
|
{
|
|
if (TimeSpent < 0.1)
|
|
{
|
|
// Ignore the entire interaction as it was too short to be meaningful
|
|
return;
|
|
}
|
|
|
|
if (_activated)
|
|
{
|
|
OVRTelemetry.Start(OVRProjectSetupTelemetryEvent.EventTypes.Close)
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.BuildTargetGroup,
|
|
EditorUserBuildSettings.selectedBuildTargetGroup.ToString())
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString())
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.TimeSpent,
|
|
TimeSpent.ToString(CultureInfo.InvariantCulture))
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Interaction, _lastInteraction.ToString())
|
|
.Send();
|
|
|
|
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Close)
|
|
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Interaction, _lastInteraction.ToString())
|
|
.Send();
|
|
|
|
ResetInteraction();
|
|
}
|
|
}
|
|
|
|
|
|
public override void OnTitleBarGUI()
|
|
{
|
|
base.OnTitleBarGUI();
|
|
OvrProjectSetupDrawer.OnTitleBarGUI();
|
|
}
|
|
|
|
public override void OnGUI(string searchContext)
|
|
{
|
|
base.OnGUI(searchContext);
|
|
OvrProjectSetupDrawer.OnGUI();
|
|
}
|
|
|
|
public static void OpenSettingsWindow(Origins origin)
|
|
{
|
|
_lastOrigin = origin;
|
|
var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
|
|
EditorUserBuildSettings.selectedBuildTargetGroup = buildTargetGroup;
|
|
SettingsService.OpenProjectSettings(SettingsPath);
|
|
}
|
|
}
|