/// <summary>
        /// Draw the GUI
        /// </summary>
        public override void OnInspectorGUI()
        {
            if (service == null)
            {
                var hook = target as ServiceDisplayHook;
                if (hook != null)
                {
                    serviceName = hook.gameObject.name;
                    if (MixedRealityToolkit.IsInitialized)
                    {
                        service = MixedRealityServiceRegistry.GetAllServices()
                                  .FirstOrDefault(p => p.Name == serviceName);
                    }
                }
            }

            if (service != null)
            {
                DrawInspectorGUI(service, service.GetType().FullName);
            }
            else
            {
                DrawHeader($"No service with name {serviceName} found");
            }
        }
Example #2
0
        public void TestGetAllServicesAscendingOrderAfterRemoval()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            ITestExtensionService3 service3 = new TestExtensionService3("Service3", 10, null);

            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService3>(service3);

            ITestExtensionService1 service1 = new TestExtensionService1("Service1", 20, null);

            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService1>(service1);

            ITestExtensionService2 service2 = new TestExtensionService2("Service2", 30, null);

            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService2>(service2);

            MixedRealityToolkit.Instance.UnregisterService <ITestExtensionService2>();

            // The order should be service3, service1 because:
            // service3 priority = 10
            // service1 priority = 20
            CollectionAssert.AreEqual(
                new List <IMixedRealityService>()
            {
                service3, service1
            },
                MixedRealityServiceRegistry.GetAllServices());
        }
        public IEnumerator VerifyServiceCount()
        {
            MixedRealityToolkitConfigurationProfile profile1 = LoadTestProfile(BoundaryOnlyProfilePath);

            yield return(null);

            // Initialize the test case with profile 1
            InitializeTest(profile1);

            // Get count of registered services
            IReadOnlyList <IMixedRealityService> services = MixedRealityServiceRegistry.GetAllServices();
            int count1 = services.Count;

            yield return(null);

            // Switch to profile 2
            MixedRealityToolkitConfigurationProfile profile2 = LoadTestProfile(DefaultHoloLens2ProfilePath);

            ChangeProfile(profile2);
            yield return(null);

            // Get count of registered services
            services = MixedRealityServiceRegistry.GetAllServices();
            int count2 = services.Count;

            // We specifically selected the test profiles to ensure that they load a different number of services.
            Assert.IsTrue(count1 != count2);
        }
        public void Test01_CreateMixedRealityInputSystem()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            // Create a Input System Profiles
            var inputSystemProfile = ScriptableObject.CreateInstance <MixedRealityInputSystemProfile>();

            inputSystemProfile.FocusProviderType               = typeof(FocusProvider);
            inputSystemProfile.RaycastProviderType             = typeof(DefaultRaycastProvider);
            inputSystemProfile.InputActionsProfile             = ScriptableObject.CreateInstance <MixedRealityInputActionsProfile>();
            inputSystemProfile.InputActionRulesProfile         = ScriptableObject.CreateInstance <MixedRealityInputActionRulesProfile>();
            inputSystemProfile.PointerProfile                  = ScriptableObject.CreateInstance <MixedRealityPointerProfile>();
            inputSystemProfile.PointerProfile.GazeProviderType = typeof(GazeProvider);
            inputSystemProfile.GesturesProfile                 = ScriptableObject.CreateInstance <MixedRealityGesturesProfile>();
            inputSystemProfile.SpeechCommandsProfile           = ScriptableObject.CreateInstance <MixedRealitySpeechCommandsProfile>();
            inputSystemProfile.ControllerVisualizationProfile  = ScriptableObject.CreateInstance <MixedRealityControllerVisualizationProfile>();
            inputSystemProfile.ControllerMappingProfile        = ScriptableObject.CreateInstance <MixedRealityControllerMappingProfile>();

            MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = inputSystemProfile;

            // Add Input System
            bool didRegister = MixedRealityToolkit.Instance.RegisterService <IMixedRealityInputSystem>(new MixedRealityInputSystem(MixedRealityToolkit.Instance, MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile));

            // Tests
            Assert.IsTrue(didRegister);
            Assert.AreEqual(1, MixedRealityServiceRegistry.GetAllServices().Count);
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <IMixedRealityInputSystem>());
        }
        public void CreateInputSystem()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();
            MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = CreateDefaultInputSystemProfile();

            // Add Input System
            bool didRegister = MixedRealityToolkit.Instance.RegisterService <IMixedRealityInputSystem>(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile));

            // Tests
            Assert.IsTrue(didRegister);
            Assert.AreEqual(1, MixedRealityServiceRegistry.GetAllServices().Count);
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <IMixedRealityInputSystem>());
        }
Example #6
0
        public void TestRegisterMixedRealityExtensionService()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            // Register ITestExtensionService1
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService1>(new TestExtensionService1("Test ExtensionService 1", 10, null));

            // Retrieve ITestExtensionService1
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <IMixedRealityExtensionService>());
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <ITestExtensionService1>());
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <TestExtensionService1>());
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <BaseExtensionService>());
            Assert.AreEqual(1, MixedRealityServiceRegistry.GetAllServices().Count);
        }
        public void TestDataProviderRegistration()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();
            MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = AssetDatabase.LoadAssetAtPath <MixedRealityInputSystemProfile>(TestInputSystemProfilePath);

            var inputSystem = new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile);

            Assert.IsTrue(MixedRealityToolkit.Instance.RegisterService <IMixedRealityInputSystem>(inputSystem));

            // Since EditMode, we have to auto-enable MRTK input system ourselves
            MixedRealityToolkit.Instance.EnableAllServicesByType(typeof(IMixedRealityInputSystem));

            Assert.AreEqual(1, MixedRealityServiceRegistry.GetAllServices().Count);
            Assert.IsNotNull(MixedRealityToolkit.Instance.GetService <IMixedRealityInputSystem>());

            var dataProviderAccess = (inputSystem as IMixedRealityDataProviderAccess);

            Assert.IsNotNull(dataProviderAccess);

            var dataProvider = dataProviderAccess.GetDataProvider <TestInputDataProvider>();

            Assert.IsNotNull(dataProvider);
            Assert.IsTrue(dataProvider.IsInitialized);
            Assert.IsTrue(dataProvider.IsEnabled);

            inputSystem.Disable();
            Assert.IsFalse(dataProvider.IsEnabled);

            inputSystem.Enable();
            // We still have reference to old dataProvider, check still disabled
            Assert.IsFalse(dataProvider.IsEnabled);

            // dataProvider has been unregistered in Disable and new one created by Enable.
            dataProvider = dataProviderAccess.GetDataProvider <TestInputDataProvider>();
            Assert.IsNotNull(dataProvider);
            Assert.IsTrue(dataProvider.IsEnabled);

            inputSystem.Reset();
            LogAssert.Expect(LogType.Log, "TestDataProvider Reset");
            Assert.IsFalse(dataProvider.IsEnabled);

            // dataProvider has been unregistered and newly created in Reset
            dataProvider = dataProviderAccess.GetDataProvider <TestInputDataProvider>();
            Assert.IsNotNull(dataProvider);
            Assert.IsTrue(dataProvider.IsInitialized);
            Assert.IsTrue(dataProvider.IsEnabled);
        }
Example #8
0
        public void TestRegisterMixedRealityExtensionServices()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            // Add test ExtensionService
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService1>(new TestExtensionService1("Test ExtensionService 1", 10, null));
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService2>(new TestExtensionService2("Test ExtensionService 2", 10, null));

            // Retrieve all registered IMixedRealityExtensionServices
            var extensionServices = MixedRealityToolkit.Instance.GetServices <IMixedRealityExtensionService>();
            var serviceCount      = MixedRealityServiceRegistry.GetAllServices().Count;

            // Tests
            Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile);
            Assert.AreEqual(2, serviceCount);
            Assert.AreEqual(extensionServices.Count, serviceCount);
        }
Example #9
0
        public void TestUnregisterMixedRealityExtensionServicesByType()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            // Add test ExtensionService
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService1>(new TestExtensionService1("Test ExtensionService 1", 10, null));
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService2>(new TestExtensionService2("Test ExtensionService 2", 10, null));

            // Retrieve all registered IMixedRealityExtensionServices
            var extensionServices = MixedRealityToolkit.Instance.GetServices <IMixedRealityExtensionService>();
            var serviceCount      = MixedRealityServiceRegistry.GetAllServices().Count;

            // Tests
            Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile);
            Assert.AreEqual(2, serviceCount);
            Assert.AreEqual(extensionServices.Count, serviceCount);

            // Retrieve services
            var extensionService1 = MixedRealityToolkit.Instance.GetService <ITestExtensionService1>();
            var extensionService2 = MixedRealityToolkit.Instance.GetService <ITestExtensionService2>();

            // Validate
            Assert.IsNotNull(extensionService1);
            Assert.IsNotNull(extensionService2);

            var success1 = MixedRealityToolkit.Instance.UnregisterService <ITestExtensionService1>();
            var success2 = MixedRealityToolkit.Instance.UnregisterService <ITestExtensionService2>();

            // Validate non-existent service
            var isService1Registered = MixedRealityToolkit.Instance.IsServiceRegistered <ITestExtensionService1>();
            var isService2Registered = MixedRealityToolkit.Instance.IsServiceRegistered <ITestExtensionService2>();

            // Tests
            Assert.IsTrue(success1);
            Assert.IsTrue(success2);
            Assert.IsFalse(isService1Registered);
            Assert.IsFalse(isService2Registered);
            Assert.IsEmpty(MixedRealityServiceRegistry.GetAllServices());
        }
Example #10
0
        public void TestUnregisterMixedRealityExtensionServiceByType()
        {
            TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();

            // Register ITestExtensionService1
            MixedRealityToolkit.Instance.RegisterService <ITestExtensionService1>(new TestExtensionService1("Test ExtensionService 1", 10, null));

            // Retrieve ITestExtensionService1
            var extensionService1 = MixedRealityToolkit.Instance.GetService <ITestExtensionService1>();

            // Tests
            Assert.IsNotNull(extensionService1);
            Assert.AreEqual(1, MixedRealityServiceRegistry.GetAllServices().Count);

            var success = MixedRealityToolkit.Instance.UnregisterService <ITestExtensionService1>();

            // Validate non-existent service
            var isServiceRegistered = MixedRealityToolkit.Instance.IsServiceRegistered <ITestExtensionService1>();

            // Tests
            Assert.IsTrue(success);
            Assert.IsFalse(isServiceRegistered);
            Assert.IsEmpty(MixedRealityServiceRegistry.GetAllServices());
        }
Example #11
0
        private static HashSet <IMixedRealityService> GetAllServices()
        {
            HashSet <IMixedRealityService> serviceList = new HashSet <IMixedRealityService>(MixedRealityServiceRegistry.GetAllServices());

            // These are core systems that are likely out-of-box services and known to have register DataProviders
            // Search for any dataproviders that service facades can be created for
            var dataProviderManagers = new IMixedRealityService[] { CoreServices.InputSystem, CoreServices.SpatialAwarenessSystem };

            foreach (var system in dataProviderManagers)
            {
                var dataProviderAccess = system as IMixedRealityDataProviderAccess;
                if (dataProviderAccess != null)
                {
                    foreach (var dataProvider in dataProviderAccess.GetDataProviders())
                    {
                        serviceList.Add(dataProvider);
                    }
                }
            }

            return(serviceList);
        }
        private static void UpdateServiceFacades()
        {
            if (!MixedRealityToolkit.IsInitialized)
            {   // Nothing to do here.
                return;
            }

            if (EditorApplication.isCompiling)
            {   // Wait for compilation to complete before creating or destroying facades
                return;
            }

            if (Application.isPlaying && Time.frameCount == previousFrameCount)
            {   // Only update once per frame (SceneGUI + Update may result in multiple calls)
                return;
            }

            previousFrameCount = Time.frameCount;

            if (previousActiveInstance != null && MixedRealityToolkit.Instance != previousActiveInstance)
            {   // We've changed active instances. Destroy all children in the previous instance.
                DestroyAllChildren(previousActiveInstance);
            }

            if (MixedRealityToolkit.Instance.HasActiveProfile && !MixedRealityToolkit.Instance.ActiveProfile.UseServiceInspectors)
            {   // If we're not using inspectors, destroy them all now
                DestroyAllChildren(MixedRealityToolkit.Instance);
                return;
            }

            servicesToSort.Clear();
            servicesToSort.AddRange(MixedRealityServiceRegistry.GetAllServices());

            IMixedRealityInputSystem inputSystem;

            MixedRealityServiceRegistry.TryGetService(out inputSystem);
            if (inputSystem != null)
            {
                servicesToSort.AddRange((inputSystem as IMixedRealityDataProviderAccess).GetDataProviders());
            }

            servicesToSort.Sort(
                delegate(IMixedRealityService s1, IMixedRealityService s2)
            {
                string s1Name = s1.GetType().Name;
                string s2Name = s2.GetType().Name;

                if (s1Name == s2Name)
                {
                    return(s1.Priority.CompareTo(s2.Priority));
                }

                return(s1Name.CompareTo(s2Name));
            });

            for (int i = 0; i < servicesToSort.Count; i++)
            {
                CreateFacade(MixedRealityToolkit.Instance.transform, servicesToSort[i], i);
            }

            // Delete any stragglers
            childrenToDelete.Clear();
            for (int i = servicesToSort.Count; i < MixedRealityToolkit.Instance.transform.childCount; i++)
            {
                childrenToDelete.Add(MixedRealityToolkit.Instance.transform.GetChild(i));
            }

            foreach (Transform childToDelete in childrenToDelete)
            {
                if (Application.isPlaying)
                {
                    GameObject.Destroy(childToDelete.gameObject);
                }
                else
                {
                    GameObject.DestroyImmediate(childToDelete.gameObject);
                }
            }

            try
            {
                // Update all self-registered facades
                foreach (ServiceFacade facade in ServiceFacade.ActiveFacadeObjects)
                {
                    if (facade == null)
                    {
                        continue;
                    }

                    facade.CheckIfStillValid();
                }
            }
            catch (Exception)
            {
                Debug.LogWarning("Service Facades should remain parented under the MixedRealityToolkit instance.");
            }

            previousActiveInstance = MixedRealityToolkit.Instance;
        }