< Summary

Class:DCLPlugins.ECS6.HidePortableExperiencesUiFeatureToggle.HidePortableExperiencesUiController
Assembly:ECS6Plugin.HidePortableExperiencesUiFeatureToggle
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS6/HidePortableExperiencesUiFeatureToggle/HidePortableExperiencesUiController.cs
Covered lines:37
Uncovered lines:4
Coverable lines:41
Total lines:97
Line coverage:90.2% (37 of 41)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:7
Method coverage:85.7% (6 of 7)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
HidePortableExperiencesUiController(...)0%110100%
Dispose()0%110100%
OnSceneUiVisibilitySet(...)0%12300%
OnSceneUiVisibilityAdded(...)0%7.127086.67%
OnPortableExperienceAdded(...)0%4.254075%
GetCurrentScene()0%110100%
DisableUiVisibilityOnNextFrame()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS6/HidePortableExperiencesUiFeatureToggle/HidePortableExperiencesUiController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Components;
 4using DCL.Controllers;
 5using DCL.Models;
 6using DCL.Tasks;
 7using System;
 8using System.Collections.Generic;
 9using System.Threading;
 10
 11namespace DCLPlugins.ECS6.HidePortableExperiencesUiFeatureToggle
 12{
 13    public class HidePortableExperiencesUiController : IDisposable
 14    {
 15        private readonly IWorldState worldState;
 16        private readonly BaseDictionary<int, bool> isSceneUiEnabled;
 17        private readonly BaseHashSet<string> portableExperiencesIds;
 418        private CancellationTokenSource disableUiCancellationToken = new ();
 19
 420        public HidePortableExperiencesUiController(
 21            IWorldState worldState,
 22            BaseDictionary<int, bool> isSceneUiEnabled,
 23            BaseHashSet<string> portableExperiencesIds)
 24        {
 425            this.worldState = worldState;
 426            this.isSceneUiEnabled = isSceneUiEnabled;
 427            this.portableExperiencesIds = portableExperiencesIds;
 28
 429            isSceneUiEnabled.OnAdded += OnSceneUiVisibilityAdded;
 430            isSceneUiEnabled.OnSet += OnSceneUiVisibilitySet;
 431            portableExperiencesIds.OnAdded += OnPortableExperienceAdded;
 432        }
 33
 34        public void Dispose()
 35        {
 436            isSceneUiEnabled.OnAdded -= OnSceneUiVisibilityAdded;
 437            isSceneUiEnabled.OnSet -= OnSceneUiVisibilitySet;
 438            portableExperiencesIds.OnAdded -= OnPortableExperienceAdded;
 39
 440            disableUiCancellationToken.SafeCancelAndDispose();
 441        }
 42
 43        private void OnSceneUiVisibilitySet(IEnumerable<KeyValuePair<int, bool>> scenesVisibility)
 44        {
 045            foreach ((int sceneNumber, bool visible) in scenesVisibility)
 046                OnSceneUiVisibilityAdded(sceneNumber, visible);
 047        }
 48
 49        private void OnSceneUiVisibilityAdded(int sceneNumber, bool visible)
 50        {
 551            IParcelScene currentScene = GetCurrentScene();
 52
 553            if (currentScene != null)
 54            {
 555                if (visible
 56                    && currentScene.sceneData.scenePortableExperienceFeatureToggles == ScenePortableExperienceFeatureTog
 57                {
 158                    disableUiCancellationToken = disableUiCancellationToken.SafeRestart();
 159                    DisableUiVisibilityOnNextFrame(sceneNumber, disableUiCancellationToken.Token).Forget();
 160                    return;
 61                }
 62            }
 63
 464            IParcelScene pxScene = worldState.GetScene(sceneNumber);
 465            if (pxScene == null) return;
 466            if (!pxScene.isPortableExperience) return;
 67
 468            UIScreenSpace sceneUIComponent = pxScene.componentsManagerLegacy.GetSceneSharedComponent<UIScreenSpace>();
 69
 470            if (sceneUIComponent != null)
 471                sceneUIComponent.canvas.enabled = visible;
 472        }
 73
 74        private void OnPortableExperienceAdded(string pxId)
 75        {
 176            IParcelScene currentScene = GetCurrentScene();
 77
 178            if (currentScene != null
 79                && currentScene.sceneData.scenePortableExperienceFeatureToggles != ScenePortableExperienceFeatureToggles
 080                return;
 81
 182            IParcelScene pxScene = worldState.GetPortableExperienceScene(pxId);
 183            if (pxScene == null) return;
 84
 185            isSceneUiEnabled.AddOrSet(pxScene.sceneData.sceneNumber, false);
 186        }
 87
 88        private IParcelScene GetCurrentScene() =>
 689            worldState.GetScene(worldState.GetCurrentSceneNumber());
 90
 91        private async UniTaskVoid DisableUiVisibilityOnNextFrame(int sceneNumber, CancellationToken cancellationToken)
 92        {
 393            await UniTask.NextFrame(cancellationToken: cancellationToken);
 194            isSceneUiEnabled.AddOrSet(sceneNumber, false);
 195        }
 96    }
 97}