< Summary

Class:DCL.PortableExperiencesToggle.PortableExperiencesToggleController
Assembly:DCL.Plugins.PortableExperiencesTogglePlugin
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/PortableExperiencesTogglePlugin/PortableExperiencesToggleController.cs
Covered lines:48
Uncovered lines:1
Coverable lines:49
Total lines:109
Line coverage:97.9% (48 of 49)
Covered branches:0
Total branches:0
Covered methods:7
Total methods:7
Method coverage:100% (7 of 7)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PortableExperiencesToggleController(...)0%110100%
Dispose()0%110100%
OnCurrentSceneChanged(...)0%12.1812089.29%
HideUiOfAllPortableExperiences()0%440100%
DisableAllPortableExperiences()0%110100%
RestoreAllPortableExperiences()0%110100%
RestorePortableExperiencesUiVisibility()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/PortableExperiencesTogglePlugin/PortableExperiencesToggleController.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.Models;
 3using System;
 4using System.Collections.Generic;
 5
 6namespace DCL.PortableExperiencesToggle
 7{
 8    public class PortableExperiencesToggleController : IDisposable
 9    {
 10        private readonly IntVariable currentSceneVariable;
 11        private readonly IWorldState worldState;
 12        private readonly IPortableExperiencesBridge portableExperiencesBridge;
 13        private readonly BaseHashSet<string> portableExperiencesIds;
 14        private readonly BaseDictionary<string, (string name, string description, string icon)> disabledPortableExperien
 15        private readonly BaseDictionary<int, bool> isSceneUiEnabled;
 516        private readonly List<string> idsBuffer = new ();
 517        private readonly List<string> originalDisabledPortableExperiences = new ();
 518        private readonly Dictionary<int, (int, bool)> originalPxUiVisibility = new ();
 19
 20        private ScenePortableExperienceFeatureToggles lastToggle = ScenePortableExperienceFeatureToggles.Enable;
 21
 522        public PortableExperiencesToggleController(IntVariable currentSceneVariable,
 23            IWorldState worldState,
 24            IPortableExperiencesBridge portableExperiencesBridge,
 25            BaseHashSet<string> portableExperiencesIds,
 26            BaseDictionary<string, (string name, string description, string icon)> disabledPortableExperiences,
 27            BaseDictionary<int, bool> isSceneUiEnabled)
 28        {
 529            this.currentSceneVariable = currentSceneVariable;
 530            this.worldState = worldState;
 531            this.portableExperiencesBridge = portableExperiencesBridge;
 532            this.portableExperiencesIds = portableExperiencesIds;
 533            this.disabledPortableExperiences = disabledPortableExperiences;
 534            this.isSceneUiEnabled = isSceneUiEnabled;
 35
 536            currentSceneVariable.OnChange += OnCurrentSceneChanged;
 537        }
 38
 39        public void Dispose()
 40        {
 541            currentSceneVariable.OnChange -= OnCurrentSceneChanged;
 542        }
 43
 44        private void OnCurrentSceneChanged(int current, int previous)
 45        {
 746            IParcelScene scene = worldState.GetScene(current);
 747            if (scene == null) return;
 48
 749            ScenePortableExperienceFeatureToggles pxToggle = scene.sceneData.scenePortableExperienceFeatureToggles;
 50
 751            if (pxToggle == ScenePortableExperienceFeatureToggles.Disable)
 52            {
 253                originalDisabledPortableExperiences.Clear();
 254                originalDisabledPortableExperiences.AddRange(disabledPortableExperiences.GetKeys());
 255                DisableAllPortableExperiences();
 56            }
 557            else if (pxToggle == ScenePortableExperienceFeatureToggles.HideUi)
 58            {
 259                originalPxUiVisibility.Clear();
 60
 1261                foreach (string pxId in portableExperiencesIds.Get())
 62                {
 463                    IParcelScene pxScene = worldState.GetPortableExperienceScene(pxId);
 464                    if (pxScene == null) continue;
 465                    originalPxUiVisibility[pxScene.sceneData.sceneNumber] = (pxScene.sceneData.sceneNumber, true);
 66                }
 67
 468                foreach ((int sceneNumber, bool visible) in isSceneUiEnabled)
 069                    originalPxUiVisibility[sceneNumber] = (sceneNumber, visible);
 70
 271                HideUiOfAllPortableExperiences();
 72            }
 373            else if (pxToggle == ScenePortableExperienceFeatureToggles.Enable)
 74            {
 375                if (lastToggle == ScenePortableExperienceFeatureToggles.Disable)
 176                    RestoreAllPortableExperiences();
 277                else if (lastToggle == ScenePortableExperienceFeatureToggles.HideUi)
 178                    RestorePortableExperiencesUiVisibility();
 79            }
 80
 781            lastToggle = pxToggle;
 782        }
 83
 84        private void HideUiOfAllPortableExperiences()
 85        {
 1286            foreach (string pxId in portableExperiencesIds.Get())
 87            {
 488                IParcelScene pxScene = worldState.GetPortableExperienceScene(pxId);
 489                if (pxScene == null) continue;
 90
 491                isSceneUiEnabled.AddOrSet(pxScene.sceneData.sceneNumber, false);
 92            }
 293        }
 94
 95        private void DisableAllPortableExperiences()
 96        {
 297            idsBuffer.Clear();
 298            idsBuffer.AddRange(disabledPortableExperiences.GetKeys());
 299            idsBuffer.AddRange(portableExperiencesIds.Get());
 2100            portableExperiencesBridge.SetDisabledPortableExperiences(idsBuffer);
 2101        }
 102
 103        private void RestoreAllPortableExperiences() =>
 1104            portableExperiencesBridge.SetDisabledPortableExperiences(originalDisabledPortableExperiences);
 105
 106        private void RestorePortableExperiencesUiVisibility() =>
 1107            isSceneUiEnabled.Set(originalPxUiVisibility.Values);
 108    }
 109}