1- using UnityEngine ;
1+ using DCL . Interface ;
2+ using Newtonsoft . Json ;
23using SocialFeaturesAnalytics ;
3- using System . Collections . Generic ;
44using System ;
5- using Newtonsoft . Json ;
5+ using System . Collections . Generic ;
6+ using UnityEngine ;
67
78namespace DCL
89{
910 public class DCLVoiceChatController : MonoBehaviour
1011 {
1112 [ Header ( "InputActions" ) ]
1213 public InputAction_Hold voiceChatAction ;
13- public InputAction_Trigger voiceChatToggleAction ;
1414
1515 private InputAction_Hold . Started voiceChatStartedDelegate ;
1616 private InputAction_Hold . Finished voiceChatFinishedDelegate ;
17- private InputAction_Trigger . Triggered voiceChatToggleDelegate ;
1817
1918 private bool firstTimeVoiceRecorded = true ;
2019 private ISocialAnalytics socialAnalytics ;
2120 private UserProfileWebInterfaceBridge userProfileWebInterfaceBridge ;
2221 private double voiceMessageStartTime = 0 ;
23- private bool isVoiceChatToggledOn = false ;
22+
23+ private bool isRecording ;
2424
2525 void Awake ( )
2626 {
2727 userProfileWebInterfaceBridge = new UserProfileWebInterfaceBridge ( ) ;
2828
2929 voiceChatStartedDelegate = ( action ) => DataStore . i . voiceChat . isRecording . Set ( new KeyValuePair < bool , bool > ( true , true ) ) ;
3030 voiceChatFinishedDelegate = ( action ) => DataStore . i . voiceChat . isRecording . Set ( new KeyValuePair < bool , bool > ( false , true ) ) ;
31- voiceChatToggleDelegate = ( action ) => ToggleVoiceChatRecording ( ) ;
3231 voiceChatAction . OnStarted += voiceChatStartedDelegate ;
3332 voiceChatAction . OnFinished += voiceChatFinishedDelegate ;
34- voiceChatToggleAction . OnTriggered += voiceChatToggleDelegate ;
3533
3634 KernelConfig . i . EnsureConfigInitialized ( ) . Then ( config => EnableVoiceChat ( config . comms . voiceChatEnabled ) ) ;
3735 KernelConfig . i . OnChange += OnKernelConfigChanged ;
3836 DataStore . i . voiceChat . isRecording . OnChange += IsVoiceChatRecordingChanged ;
3937 }
4038
39+
40+ private void OnApplicationFocus ( bool hasFocus )
41+ {
42+ if ( ! hasFocus )
43+ {
44+ StopRecording ( true ) ;
45+ DataStore . i . voiceChat . isRecording . Set ( new KeyValuePair < bool , bool > ( false , true ) ) ;
46+ }
47+ }
48+
4149 void OnDestroy ( )
4250 {
4351 voiceChatAction . OnStarted -= voiceChatStartedDelegate ;
@@ -61,50 +69,38 @@ private void IsVoiceChatRecordingChanged(KeyValuePair<bool, bool> current, KeyVa
6169 if ( ! DataStore . i . voiceChat . isJoinedToVoiceChat . Get ( ) )
6270 return ;
6371
64- CreateSocialAnalyticsIfNeeded ( ) ;
65-
6672 if ( current . Key )
67- {
68- if ( ! isVoiceChatToggledOn )
69- {
70- Interface . WebInterface . SendSetVoiceChatRecording ( true ) ;
71- SendFirstTimeMetricIfNeeded ( ) ;
72- voiceMessageStartTime = Time . realtimeSinceStartup ;
73- }
74- }
73+ StartRecording ( ) ;
7574 else
76- {
77- Interface . WebInterface . SendSetVoiceChatRecording ( false ) ;
75+ StopRecording ( current . Value ) ;
76+ }
7877
79- socialAnalytics . SendVoiceMessage (
80- Time . realtimeSinceStartup - voiceMessageStartTime ,
81- ( current . Value || isVoiceChatToggledOn ) ? VoiceMessageSource . Shortcut : VoiceMessageSource . Button ,
82- userProfileWebInterfaceBridge . GetOwn ( ) . userId ) ;
78+ private void StartRecording ( )
79+ {
80+ if ( isRecording ) return ;
8381
84- isVoiceChatToggledOn = false ;
85- }
82+ WebInterface . SendSetVoiceChatRecording ( true ) ;
83+
84+ CreateSocialAnalyticsIfNeeded ( ) ;
85+ SendFirstTimeMetricIfNeeded ( ) ;
86+ voiceMessageStartTime = Time . realtimeSinceStartup ;
87+
88+ isRecording = true ;
8689 }
8790
88- private void ToggleVoiceChatRecording ( )
91+ private void StopRecording ( bool usedShortcut )
8992 {
90- if ( ! DataStore . i . voiceChat . isJoinedToVoiceChat . Get ( ) )
91- return ;
93+ if ( ! isRecording ) return ;
9294
93- Interface . WebInterface . ToggleVoiceChatRecording ( ) ;
94- isVoiceChatToggledOn = ! isVoiceChatToggledOn ;
95+ WebInterface . SendSetVoiceChatRecording ( false ) ;
9596
96- if ( isVoiceChatToggledOn )
97- {
98- SendFirstTimeMetricIfNeeded ( ) ;
99- voiceMessageStartTime = Time . realtimeSinceStartup ;
100- }
101- else
102- {
103- socialAnalytics . SendVoiceMessage (
104- Time . realtimeSinceStartup - voiceMessageStartTime ,
105- VoiceMessageSource . Shortcut ,
106- userProfileWebInterfaceBridge . GetOwn ( ) . userId ) ;
107- }
97+ CreateSocialAnalyticsIfNeeded ( ) ;
98+ socialAnalytics . SendVoiceMessage (
99+ Time . realtimeSinceStartup - voiceMessageStartTime ,
100+ usedShortcut ? VoiceMessageSource . Shortcut : VoiceMessageSource . Button ,
101+ userProfileWebInterfaceBridge . GetOwn ( ) . userId ) ;
102+
103+ isRecording = false ;
108104 }
109105
110106 private void CreateSocialAnalyticsIfNeeded ( )
@@ -121,7 +117,6 @@ private void SendFirstTimeMetricIfNeeded()
121117 {
122118 if ( firstTimeVoiceRecorded )
123119 {
124- CreateSocialAnalyticsIfNeeded ( ) ;
125120 socialAnalytics . SendVoiceMessageStartedByFirstTime ( ) ;
126121 firstTimeVoiceRecorded = false ;
127122 }
@@ -133,4 +128,4 @@ public class VoiceChatStatusPayload
133128 {
134129 public bool isConnected ;
135130 }
136- }
131+ }
0 commit comments