Initial Commit
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user