< Summary

Class:DCLServices.ScreencaptureCamera.Service.ScreencaptureCameraService
Assembly:ScreencaptureCamera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/ScreencaptureCamera/Service/ScreencaptureCameraService.cs
Covered lines:17
Uncovered lines:21
Coverable lines:38
Total lines:126
Line coverage:44.7% (17 of 38)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:11
Method coverage:36.3% (4 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ScreencaptureCameraService(...)0%110100%
Initialize()0%110100%
Dispose()0%3.143075%
InitializeInternalAsync()0%78.5711017.65%
InitializeCameraBehaviour()0%12300%
InitializeMainHUDButton()0%12300%
EnableScreencaptureCamera(...)0%2100%
EnableScreenshotCameraFromButton()0%2100%
ToggleMainButtonVisibility(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/ScreencaptureCamera/Service/ScreencaptureCameraService.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Providers;
 4using DCLFeatures.ScreencaptureCamera.CameraObject;
 5using System;
 6using System.Threading;
 7using System.Threading.Tasks;
 8using UnityEngine;
 9using UnityEngine.UI;
 10using Object = UnityEngine.Object;
 11
 12namespace DCLServices.ScreencaptureCamera.Service
 13{
 14    public class ScreencaptureCameraService : IScreencaptureCameraService
 15    {
 16        private const string CONTROLLER_PATH = "ScreencaptureCameraController";
 17        private const string MAIN_BUTTON_PATH = "ScreencaptureMainButton";
 18
 19        private readonly IAddressableResourceProvider resourceProvider;
 20        private readonly BaseVariable<FeatureFlag> featureFlags;
 21        private readonly DataStore_Player player;
 22        private readonly IUserProfileBridge userProfileBridge;
 23        private readonly ScreencaptureCameraExternalDependencies externalDependencies;
 24
 25        private ScreencaptureCameraBehaviour cameraBehaviour;
 26        private Canvas enableCameraButtonCanvas;
 27
 028        private bool featureIsEnabled => featureFlags.Get().IsFeatureEnabled("camera_reel");
 029        private bool isGuest => userProfileBridge.GetOwn().isGuest;
 30
 31        private readonly CancellationTokenSource cts;
 32
 42533        public ScreencaptureCameraService(IAddressableResourceProvider resourceProvider, BaseVariable<FeatureFlag> featu
 34        {
 42535            this.resourceProvider = resourceProvider;
 42536            this.featureFlags = featureFlags;
 42537            this.player = player;
 42538            this.userProfileBridge = userProfileBridge;
 42539            this.externalDependencies = externalDependencies;
 40
 42541            cts = new CancellationTokenSource();
 42542        }
 43
 44        public void Initialize()
 45        {
 42546            InitializeInternalAsync(cts.Token).Forget();
 42547        }
 48
 49        public void Dispose()
 50        {
 42551            cts.Cancel();
 42552            cts.Dispose();
 53
 42554            externalDependencies.AllUIHidden.OnChange -= ToggleMainButtonVisibility;
 55
 42556            if(cameraBehaviour != null)
 057                Object.Destroy(cameraBehaviour);
 58
 42559            if(enableCameraButtonCanvas != null)
 060                Object.Destroy(enableCameraButtonCanvas.gameObject);
 42561        }
 62
 63        private async UniTask InitializeInternalAsync(CancellationToken cancellationToken)
 64        {
 1316165            await UniTask.WaitUntil(() => featureFlags.Get().IsInitialized, cancellationToken: cancellationToken);
 066            if (!featureIsEnabled) return;
 67
 068            await UniTask.WaitUntil(() => player.ownPlayer.Get() != null && !string.IsNullOrEmpty(player.ownPlayer.Get()
 069            if (isGuest) return;
 70
 071            await InitializeCameraBehaviour(cancellationToken);
 072            await InitializeMainHUDButton(cancellationToken);
 073        }
 74
 75        private async Task InitializeCameraBehaviour(CancellationToken cancellationToken)
 76        {
 077            cameraBehaviour = await resourceProvider.Instantiate<ScreencaptureCameraBehaviour>(CONTROLLER_PATH, cancella
 78
 079            cameraBehaviour.Player = player;
 80
 081            cameraBehaviour.SetExternalDependencies(externalDependencies.AllUIHidden,
 82                externalDependencies.CameraModeInputLocked, externalDependencies.CameraLeftMouseButtonCursorLock, extern
 83                externalDependencies.FeatureKeyTriggersBlocked, externalDependencies.UserMovementKeysBlocked, externalDe
 084        }
 85
 86        private async Task InitializeMainHUDButton(CancellationToken cancellationToken)
 87        {
 088            enableCameraButtonCanvas = await resourceProvider.Instantiate<Canvas>(MAIN_BUTTON_PATH, cancellationToken: c
 89
 090            enableCameraButtonCanvas.GetComponentInChildren<Button>().onClick.AddListener(EnableScreenshotCameraFromButt
 091            externalDependencies.AllUIHidden.OnChange += ToggleMainButtonVisibility;
 092        }
 93
 94        public void EnableScreencaptureCamera(string source) =>
 095            cameraBehaviour.ToggleScreenshotCamera(source);
 96
 97        private void EnableScreenshotCameraFromButton() =>
 098            cameraBehaviour.ToggleScreenshotCamera("Button");
 99
 100        private void ToggleMainButtonVisibility(bool isHidden, bool _) =>
 0101            enableCameraButtonCanvas.enabled = !isHidden;
 102    }
 103
 104    public struct ScreencaptureCameraExternalDependencies
 105    {
 106        public readonly BooleanVariable AllUIHidden;
 107        public readonly BooleanVariable CameraModeInputLocked;
 108        public readonly BaseVariable<bool> CameraLeftMouseButtonCursorLock;
 109        public readonly BooleanVariable CameraBlocked;
 110        public readonly BooleanVariable FeatureKeyTriggersBlocked;
 111        public readonly BooleanVariable UserMovementKeysBlocked;
 112        public readonly BooleanVariable IsScreenshotCameraActive;
 113
 114        public ScreencaptureCameraExternalDependencies(BooleanVariable allUIHidden, BooleanVariable cameraModeInputLocke
 115            BooleanVariable userMovementKeysBlocked, BooleanVariable isScreenshotCameraActive)
 116        {
 117            AllUIHidden = allUIHidden;
 118            CameraModeInputLocked = cameraModeInputLocked;
 119            CameraLeftMouseButtonCursorLock = cameraLeftMouseButtonCursorLock;
 120            CameraBlocked = cameraBlocked;
 121            FeatureKeyTriggersBlocked = featureKeyTriggersBlocked;
 122            UserMovementKeysBlocked = userMovementKeysBlocked;
 123            IsScreenshotCameraActive = isScreenshotCameraActive;
 124        }
 125    }
 126}