< Summary

Class:DCLServices.ScreencaptureCamera.Service.ScreencaptureCameraExternalDependencies
Assembly:ScreencaptureCamera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/ScreencaptureCamera/Service/ScreencaptureCameraService.cs
Covered lines:8
Uncovered lines:0
Coverable lines:8
Total lines:126
Line coverage:100% (8 of 8)
Covered branches:0
Total branches:0
Covered methods:1
Total methods:1
Method coverage:100% (1 of 1)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ScreencaptureCameraExternalDependencies(...)0%110100%

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
 28        private bool featureIsEnabled => featureFlags.Get().IsFeatureEnabled("camera_reel");
 29        private bool isGuest => userProfileBridge.GetOwn().isGuest;
 30
 31        private readonly CancellationTokenSource cts;
 32
 33        public ScreencaptureCameraService(IAddressableResourceProvider resourceProvider, BaseVariable<FeatureFlag> featu
 34        {
 35            this.resourceProvider = resourceProvider;
 36            this.featureFlags = featureFlags;
 37            this.player = player;
 38            this.userProfileBridge = userProfileBridge;
 39            this.externalDependencies = externalDependencies;
 40
 41            cts = new CancellationTokenSource();
 42        }
 43
 44        public void Initialize()
 45        {
 46            InitializeInternalAsync(cts.Token).Forget();
 47        }
 48
 49        public void Dispose()
 50        {
 51            cts.Cancel();
 52            cts.Dispose();
 53
 54            externalDependencies.AllUIHidden.OnChange -= ToggleMainButtonVisibility;
 55
 56            if(cameraBehaviour != null)
 57                Object.Destroy(cameraBehaviour);
 58
 59            if(enableCameraButtonCanvas != null)
 60                Object.Destroy(enableCameraButtonCanvas.gameObject);
 61        }
 62
 63        private async UniTask InitializeInternalAsync(CancellationToken cancellationToken)
 64        {
 65            await UniTask.WaitUntil(() => featureFlags.Get().IsInitialized, cancellationToken: cancellationToken);
 66            if (!featureIsEnabled) return;
 67
 68            await UniTask.WaitUntil(() => player.ownPlayer.Get() != null && !string.IsNullOrEmpty(player.ownPlayer.Get()
 69            if (isGuest) return;
 70
 71            await InitializeCameraBehaviour(cancellationToken);
 72            await InitializeMainHUDButton(cancellationToken);
 73        }
 74
 75        private async Task InitializeCameraBehaviour(CancellationToken cancellationToken)
 76        {
 77            cameraBehaviour = await resourceProvider.Instantiate<ScreencaptureCameraBehaviour>(CONTROLLER_PATH, cancella
 78
 79            cameraBehaviour.Player = player;
 80
 81            cameraBehaviour.SetExternalDependencies(externalDependencies.AllUIHidden,
 82                externalDependencies.CameraModeInputLocked, externalDependencies.CameraLeftMouseButtonCursorLock, extern
 83                externalDependencies.FeatureKeyTriggersBlocked, externalDependencies.UserMovementKeysBlocked, externalDe
 84        }
 85
 86        private async Task InitializeMainHUDButton(CancellationToken cancellationToken)
 87        {
 88            enableCameraButtonCanvas = await resourceProvider.Instantiate<Canvas>(MAIN_BUTTON_PATH, cancellationToken: c
 89
 90            enableCameraButtonCanvas.GetComponentInChildren<Button>().onClick.AddListener(EnableScreenshotCameraFromButt
 91            externalDependencies.AllUIHidden.OnChange += ToggleMainButtonVisibility;
 92        }
 93
 94        public void EnableScreencaptureCamera(string source) =>
 95            cameraBehaviour.ToggleScreenshotCamera(source);
 96
 97        private void EnableScreenshotCameraFromButton() =>
 98            cameraBehaviour.ToggleScreenshotCamera("Button");
 99
 100        private void ToggleMainButtonVisibility(bool isHidden, bool _) =>
 101            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        {
 425117            AllUIHidden = allUIHidden;
 425118            CameraModeInputLocked = cameraModeInputLocked;
 425119            CameraLeftMouseButtonCursorLock = cameraLeftMouseButtonCursorLock;
 425120            CameraBlocked = cameraBlocked;
 425121            FeatureKeyTriggersBlocked = featureKeyTriggersBlocked;
 425122            UserMovementKeysBlocked = userMovementKeysBlocked;
 425123            IsScreenshotCameraActive = isScreenshotCameraActive;
 425124        }
 125    }
 126}