< Summary

Class:DCL.DCLVoiceChatController
Assembly:VoiceChatController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/VoiceChat/DCLVoiceChatController.cs
Covered lines:18
Uncovered lines:34
Coverable lines:52
Total lines:136
Line coverage:34.6% (18 of 52)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
DCLVoiceChatController()0%110100%
Awake()0%330100%
OnDestroy()0%110100%
OnKernelConfigChanged(...)0%2100%
EnableVoiceChat(...)0%110100%
VoiceChatStatus(...)0%2100%
IsVoiceChatRecordingChanged(...)0%56700%
ToggleVoiceChatRecording()0%12300%
CreateSocialAnalyticsIfNeeded()0%6200%
SendFirstTimeMetricIfNeeded()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/VoiceChat/DCLVoiceChatController.cs

#LineLine coverage
 1using UnityEngine;
 2using SocialFeaturesAnalytics;
 3using System.Collections.Generic;
 4using System;
 5using Newtonsoft.Json;
 6
 7namespace DCL
 8{
 9    public class DCLVoiceChatController : MonoBehaviour
 10    {
 11        [Header("InputActions")]
 12        public InputAction_Hold voiceChatAction;
 13        public InputAction_Trigger voiceChatToggleAction;
 14
 15        private InputAction_Hold.Started voiceChatStartedDelegate;
 16        private InputAction_Hold.Finished voiceChatFinishedDelegate;
 17        private InputAction_Trigger.Triggered voiceChatToggleDelegate;
 18
 42319        private bool firstTimeVoiceRecorded = true;
 20        private ISocialAnalytics socialAnalytics;
 21        private UserProfileWebInterfaceBridge userProfileWebInterfaceBridge;
 22        private double voiceMessageStartTime = 0;
 23        private bool isVoiceChatToggledOn = false;
 24
 25        void Awake()
 26        {
 40527            userProfileWebInterfaceBridge = new UserProfileWebInterfaceBridge();
 28
 40529            voiceChatStartedDelegate = (action) => DataStore.i.voiceChat.isRecording.Set(new KeyValuePair<bool, bool>(tr
 40530            voiceChatFinishedDelegate = (action) => DataStore.i.voiceChat.isRecording.Set(new KeyValuePair<bool, bool>(f
 40531            voiceChatToggleDelegate = (action) => ToggleVoiceChatRecording();
 40532            voiceChatAction.OnStarted += voiceChatStartedDelegate;
 40533            voiceChatAction.OnFinished += voiceChatFinishedDelegate;
 40534            voiceChatToggleAction.OnTriggered += voiceChatToggleDelegate;
 35
 81036            KernelConfig.i.EnsureConfigInitialized().Then(config => EnableVoiceChat(config.comms.voiceChatEnabled));
 40537            KernelConfig.i.OnChange += OnKernelConfigChanged;
 40538            DataStore.i.voiceChat.isRecording.OnChange += IsVoiceChatRecordingChanged;
 40539        }
 40
 41        void OnDestroy()
 42        {
 40543            voiceChatAction.OnStarted -= voiceChatStartedDelegate;
 40544            voiceChatAction.OnFinished -= voiceChatFinishedDelegate;
 40545            KernelConfig.i.OnChange -= OnKernelConfigChanged;
 40546            DataStore.i.voiceChat.isRecording.OnChange -= IsVoiceChatRecordingChanged;
 40547        }
 48
 049        void OnKernelConfigChanged(KernelConfigModel current, KernelConfigModel previous) { EnableVoiceChat(current.comm
 50
 81051        void EnableVoiceChat(bool enable) { CommonScriptableObjects.voiceChatDisabled.Set(!enable); }
 52
 53        public void VoiceChatStatus(string voiceChatStatusPayload)
 54        {
 055            VoiceChatStatusPayload voiceChatStatus = JsonConvert.DeserializeObject<VoiceChatStatusPayload>(voiceChatStat
 056            DataStore.i.voiceChat.isJoinedToVoiceChat.Set(voiceChatStatus.isConnected);
 057        }
 58
 59        private void IsVoiceChatRecordingChanged(KeyValuePair<bool, bool> current, KeyValuePair<bool, bool> previous)
 60        {
 061            if (!DataStore.i.voiceChat.isJoinedToVoiceChat.Get())
 062                return;
 63
 064            CreateSocialAnalyticsIfNeeded();
 65
 066            if (current.Key)
 67            {
 068                if (!isVoiceChatToggledOn)
 69                {
 070                    Interface.WebInterface.SendSetVoiceChatRecording(true);
 071                    SendFirstTimeMetricIfNeeded();
 072                    voiceMessageStartTime = Time.realtimeSinceStartup;
 73                }
 74            }
 75            else
 76            {
 077                Interface.WebInterface.SendSetVoiceChatRecording(false);
 78
 079                socialAnalytics.SendVoiceMessage(
 80                    Time.realtimeSinceStartup - voiceMessageStartTime,
 81                    (current.Value || isVoiceChatToggledOn) ? VoiceMessageSource.Shortcut : VoiceMessageSource.Button,
 82                    userProfileWebInterfaceBridge.GetOwn().userId);
 83
 084                isVoiceChatToggledOn = false;
 85            }
 086        }
 87
 88        private void ToggleVoiceChatRecording()
 89        {
 090            if (!DataStore.i.voiceChat.isJoinedToVoiceChat.Get())
 091                return;
 92
 093            Interface.WebInterface.ToggleVoiceChatRecording();
 094            isVoiceChatToggledOn = !isVoiceChatToggledOn;
 95
 096            if (isVoiceChatToggledOn)
 97            {
 098                SendFirstTimeMetricIfNeeded();
 099                voiceMessageStartTime = Time.realtimeSinceStartup;
 100            }
 101            else
 102            {
 0103                socialAnalytics.SendVoiceMessage(
 104                    Time.realtimeSinceStartup - voiceMessageStartTime,
 105                    VoiceMessageSource.Shortcut,
 106                    userProfileWebInterfaceBridge.GetOwn().userId);
 107            }
 0108        }
 109
 110        private void CreateSocialAnalyticsIfNeeded()
 111        {
 0112            if (socialAnalytics != null)
 0113                return;
 114
 0115            socialAnalytics = new SocialAnalytics(
 116                Environment.i.platform.serviceProviders.analytics,
 117                userProfileWebInterfaceBridge);
 0118        }
 119
 120        private void SendFirstTimeMetricIfNeeded()
 121        {
 0122            if (firstTimeVoiceRecorded)
 123            {
 0124                CreateSocialAnalyticsIfNeeded();
 0125                socialAnalytics.SendVoiceMessageStartedByFirstTime();
 0126                firstTimeVoiceRecorded = false;
 127            }
 0128        }
 129    }
 130
 131    [Serializable]
 132    public class VoiceChatStatusPayload
 133    {
 134        public bool isConnected;
 135    }
 136}