< Summary

Class:TaskbarHUDController
Assembly:TaskbarHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarHUDController.cs
Covered lines:183
Uncovered lines:279
Coverable lines:462
Total lines:833
Line coverage:39.6% (183 of 462)
Covered branches:0
Total branches:0
Covered methods:32
Total methods:65
Method coverage:49.2% (32 of 65)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TaskbarHUDController(...)0%110100%
CreateView()0%110100%
Initialize(...)0%22089.74%
OpenIntercom()0%2100%
HandleFriendsToggle(...)0%4.074083.33%
HandleEmotesToggle(...)0%30500%
ShowEmotes()0%12300%
HandleExperiencesToggle(...)0%12300%
HandleVoiceChatToggle(...)0%20400%
ShowExperiences()0%12300%
ToggleFriendsTrigger_OnTriggered(...)0%56700%
ToggleWorldChatTrigger_OnTriggered(...)0%56700%
CloseWindowTrigger_OnTriggered(...)0%42600%
HandleChatToggle(...)0%3.333066.67%
MouseCatcher_OnMouseUnlock()0%2100%
MouseCatcher_OnMouseLock()0%20400%
AddWorldChatWindow(...)0%8.518080%
ToggleOffChatIcon()0%110100%
OpenFriendsWindow()0%440100%
CloseFriendsWindow()0%20400%
OpenPrivateChat(...)0%12300%
OpenLastActiveChatWindow()0%20400%
CloseAnyChatWindow()0%2100%
OpenChannelChat(...)0%1101000%
OpenPublicChat(...)0%1321100%
OpenChatList()0%330100%
CloseChatList()0%6200%
OpenVoiceChatWindow()0%12300%
CloseVoiceChatWindow()0%30500%
AddPrivateChatWindow(...)0%98075%
AddPublicChatChannel(...)0%98075%
AddFriendsWindow(...)0%10.549073.33%
AddVoiceChatWindow(...)0%37.138023.08%
InitializeEmotesSelector(...)0%2.52050%
IsEmotesVisibleChanged(...)0%2100%
InitializeExperiencesViewer(...)0%3.462028.57%
InitializeNotificationPanel(...)0%3.462028.57%
InitializeTopNotificationPanel(...)0%3.192033.33%
OpenChat(...)0%30500%
<OpenChat()0%20400%
IsExperiencesViewerOpenChanged(...)0%6200%
NumOfLoadedExperiencesChanged(...)0%220100%
DisableFriendsWindow()0%2100%
Dispose()0%6.026091.67%
SetVisibility(...)0%110100%
GoBackFromChat()0%6200%
AddChatChannel(...)0%6.736072.73%
AddChannelSearch(...)0%3.013090%
AddChannelCreation(...)0%12300%
OpenChannelCreation()0%2100%
AddChannelLeaveConfirmation(...)0%6200%
OpenChannelLeaveConfirmation(...)0%2100%
OpenChannelSearch()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/TaskbarHUD/TaskbarHUDController.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Chat;
 4using DCL.Social.Chat;
 5using DCL.Interface;
 6using DCL.Social.Friends;
 7using Analytics;
 8using DCL.Social.Chat;
 9using System;
 10using System.Threading;
 11using TMPro;
 12using UnityEngine;
 13using UnityEngine.EventSystems;
 14
 15public class TaskbarHUDController : IHUD
 16{
 17    private const string INTERCOM_URL = "https://decentraland.org/help/";
 18
 19    private readonly IChatController chatController;
 20    private readonly IFriendsController friendsController;
 21
 22    [Serializable]
 23    public struct Configuration
 24    {
 25        public bool enableVoiceChat;
 26        public bool enableQuestPanel;
 27    }
 28
 29    public TaskbarHUDView view;
 30    public WorldChatWindowController worldChatWindowHud;
 31    public PrivateChatWindowController privateChatWindow;
 32    public PublicChatWindowController publicChatWindow;
 33    public ChatChannelHUDController channelChatWindow;
 34    public FriendsHUDController friendsHud;
 35    public VoiceChatWindowController voiceChatHud;
 36
 37    private IMouseCatcher mouseCatcher;
 38    private ISupportAnalytics analytics;
 39    private InputAction_Trigger toggleFriendsTrigger;
 40    private InputAction_Trigger closeWindowTrigger;
 41    private InputAction_Trigger toggleWorldChatTrigger;
 42    private Transform experiencesViewerTransform;
 43    private Transform notificationViewerTransform;
 44    private Transform topNotificationViewerTransform;
 45    private IHUD chatBackWindow;
 46    private SearchChannelsWindowController searchChannelsHud;
 47    private CreateChannelWindowController channelCreationWindow;
 48    private LeaveChannelConfirmationWindowController channelLeaveWindow;
 449    private CancellationTokenSource openPrivateChatCancellationToken = new ();
 50
 351    private bool isFriendsFeatureEnabled => DataStore.i.featureFlags.flags.Get().IsFeatureEnabled("friends_enabled");
 52
 53    public event Action OnAnyTaskbarButtonClicked;
 54
 055    public RectTransform socialTooltipReference => view.socialTooltipReference;
 56
 1257    internal BaseVariable<bool> isEmotesWheelInitialized => DataStore.i.emotesCustomization.isWheelInitialized;
 1158    internal BaseVariable<bool> isEmotesVisible => DataStore.i.HUDs.emotesVisible;
 059    internal BaseVariable<bool> emoteJustTriggeredFromShortcut => DataStore.i.HUDs.emoteJustTriggeredFromShortcut;
 1260    internal BaseVariable<Transform> isExperiencesViewerInitialized => DataStore.i.experiencesViewer.isInitialized;
 861    internal BaseVariable<Transform> notificationPanelTransform => DataStore.i.HUDs.notificationPanelTransform;
 862    internal BaseVariable<Transform> topNotificationPanelTransform => DataStore.i.HUDs.topNotificationPanelTransform;
 1563    internal BaseVariable<bool> isExperiencesViewerOpen => DataStore.i.experiencesViewer.isOpen;
 1264    internal BaseVariable<int> numOfLoadedExperiences => DataStore.i.experiencesViewer.numOfLoadedExperiences;
 565    internal BaseVariable<string> openChat => DataStore.i.HUDs.openChat;
 266    internal BaseVariable<bool> isPromoteChannelsToastVisible => DataStore.i.channels.isPromoteToastVisible;
 67
 468    public TaskbarHUDController(IChatController chatController, IFriendsController friendsController, ISupportAnalytics 
 69    {
 470        this.chatController = chatController;
 471        this.friendsController = friendsController;
 472        this.analytics = analytics;
 473    }
 74
 75    protected virtual TaskbarHUDView CreateView()
 76    {
 477        return TaskbarHUDView.Create();
 78    }
 79
 80    public void Initialize(IMouseCatcher mouseCatcher)
 81    {
 482        this.mouseCatcher = mouseCatcher;
 83
 484        view = CreateView();
 85
 486        if (mouseCatcher != null)
 87        {
 088            mouseCatcher.OnMouseLock -= MouseCatcher_OnMouseLock;
 089            mouseCatcher.OnMouseUnlock -= MouseCatcher_OnMouseUnlock;
 090            mouseCatcher.OnMouseLock += MouseCatcher_OnMouseLock;
 091            mouseCatcher.OnMouseUnlock += MouseCatcher_OnMouseUnlock;
 92        }
 93
 494        view.leftWindowContainerLayout.enabled = false;
 95
 496        view.OnChatToggle += HandleChatToggle;
 497        view.OnFriendsToggle += HandleFriendsToggle;
 498        view.OnEmotesToggle += HandleEmotesToggle;
 499        view.OnExperiencesToggle += HandleExperiencesToggle;
 4100        view.OnVoiceChatToggle += HandleVoiceChatToggle;
 4101        view.OnIntercomPressed += OpenIntercom;
 102
 4103        toggleFriendsTrigger = Resources.Load<InputAction_Trigger>("ToggleFriends");
 4104        toggleFriendsTrigger.OnTriggered -= ToggleFriendsTrigger_OnTriggered;
 4105        toggleFriendsTrigger.OnTriggered += ToggleFriendsTrigger_OnTriggered;
 106
 4107        closeWindowTrigger = Resources.Load<InputAction_Trigger>("CloseWindow");
 4108        closeWindowTrigger.OnTriggered -= CloseWindowTrigger_OnTriggered;
 4109        closeWindowTrigger.OnTriggered += CloseWindowTrigger_OnTriggered;
 110
 4111        toggleWorldChatTrigger = Resources.Load<InputAction_Trigger>("ToggleWorldChat");
 4112        toggleWorldChatTrigger.OnTriggered -= ToggleWorldChatTrigger_OnTriggered;
 4113        toggleWorldChatTrigger.OnTriggered += ToggleWorldChatTrigger_OnTriggered;
 114
 4115        isEmotesWheelInitialized.OnChange += InitializeEmotesSelector;
 4116        InitializeEmotesSelector(isEmotesWheelInitialized.Get(), false);
 4117        isEmotesVisible.OnChange += IsEmotesVisibleChanged;
 118
 4119        isExperiencesViewerOpen.OnChange += IsExperiencesViewerOpenChanged;
 120
 4121        view.leftWindowContainerAnimator.Show();
 122
 4123        CommonScriptableObjects.isTaskbarHUDInitialized.Set(true);
 124
 4125        isExperiencesViewerInitialized.OnChange += InitializeExperiencesViewer;
 4126        InitializeExperiencesViewer(isExperiencesViewerInitialized.Get(), null);
 127
 4128        notificationPanelTransform.OnChange += InitializeNotificationPanel;
 4129        InitializeNotificationPanel(notificationPanelTransform.Get(), null);
 130
 4131        topNotificationPanelTransform.OnChange += InitializeTopNotificationPanel;
 4132        InitializeTopNotificationPanel(topNotificationPanelTransform.Get(), null);
 133
 4134        numOfLoadedExperiences.OnChange += NumOfLoadedExperiencesChanged;
 4135        NumOfLoadedExperiencesChanged(numOfLoadedExperiences.Get(), 0);
 136
 4137        openChat.OnChange += OpenChat;
 4138    }
 139
 140    private void OpenIntercom()
 141    {
 0142        analytics.SendOpenSupport(OpenSupportSource.Taskbar);
 0143        WebInterface.OpenURL(INTERCOM_URL);
 0144    }
 145
 146    private void HandleFriendsToggle(bool show)
 147    {
 3148        if (show)
 2149            OpenFriendsWindow();
 150        else
 151        {
 1152            friendsHud?.SetVisibility(false);
 1153            ToggleOffChatIcon();
 154        }
 155
 3156        OnAnyTaskbarButtonClicked?.Invoke();
 0157    }
 158
 159    private void HandleEmotesToggle(bool show)
 160    {
 0161        if (show && emoteJustTriggeredFromShortcut.Get())
 162        {
 0163            emoteJustTriggeredFromShortcut.Set(false);
 0164            return;
 165        }
 166
 0167        if (show)
 168        {
 0169            ToggleOffChatIcon();
 0170            ShowEmotes();
 171        }
 172        else
 173        {
 0174            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Emotes);
 0175            isEmotesVisible.Set(false);
 0176            ToggleOffChatIcon();
 177        }
 178
 0179        OnAnyTaskbarButtonClicked?.Invoke();
 0180    }
 181
 182    private void ShowEmotes()
 183    {
 0184        worldChatWindowHud.SetVisibility(false);
 0185        privateChatWindow.SetVisibility(false);
 0186        channelChatWindow.SetVisibility(false);
 0187        friendsHud?.SetVisibility(false);
 0188        searchChannelsHud.SetVisibility(false);
 0189        isExperiencesViewerOpen.Set(false);
 0190        voiceChatHud?.SetVisibility(false);
 0191        isEmotesVisible.Set(true);
 0192        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Emotes);
 0193    }
 194
 195    private void HandleExperiencesToggle(bool show)
 196    {
 0197        if (show)
 0198            ShowExperiences();
 199        else
 200        {
 0201            isExperiencesViewerOpen.Set(false);
 0202            ToggleOffChatIcon();
 203        }
 204
 0205        OnAnyTaskbarButtonClicked?.Invoke();
 0206    }
 207
 208    private void HandleVoiceChatToggle(bool show)
 209    {
 0210        if (show)
 0211            OpenVoiceChatWindow();
 212        else
 0213            voiceChatHud?.SetVisibility(false);
 214
 0215        OnAnyTaskbarButtonClicked?.Invoke();
 0216    }
 217
 218    private void ShowExperiences()
 219    {
 0220        worldChatWindowHud.SetVisibility(false);
 0221        privateChatWindow.SetVisibility(false);
 0222        publicChatWindow.SetVisibility(false);
 0223        channelChatWindow.SetVisibility(false);
 0224        searchChannelsHud.SetVisibility(false);
 0225        friendsHud?.SetVisibility(false);
 0226        isEmotesVisible.Set(false);
 0227        voiceChatHud?.SetVisibility(false);
 0228        isExperiencesViewerOpen.Set(true);
 0229        isPromoteChannelsToastVisible.Set(false);
 0230    }
 231
 232    private void ToggleFriendsTrigger_OnTriggered(DCLAction_Trigger action)
 233    {
 0234        if (friendsHud == null) return;
 0235        if (!isFriendsFeatureEnabled) return;
 236
 0237        bool anyInputFieldIsSelected = EventSystem.current != null &&
 238                                       EventSystem.current.currentSelectedGameObject != null &&
 239                                       EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() !=
 240                                       null;
 241
 0242        if (anyInputFieldIsSelected) return;
 243
 0244        mouseCatcher.UnlockCursor();
 245
 0246        if (!friendsHud.View.IsActive())
 247        {
 0248            view.leftWindowContainerAnimator.Show();
 0249            OpenFriendsWindow();
 250        }
 251        else
 252        {
 0253            CloseFriendsWindow();
 0254            ToggleOffChatIcon();
 255        }
 0256    }
 257
 258    private void ToggleWorldChatTrigger_OnTriggered(DCLAction_Trigger action)
 259    {
 0260        bool anyInputFieldIsSelected = EventSystem.current != null &&
 261                                       EventSystem.current.currentSelectedGameObject != null &&
 262                                       EventSystem.current.currentSelectedGameObject.GetComponent<TMP_InputField>() !=
 263                                       null;
 264
 0265        if (anyInputFieldIsSelected) return;
 266
 0267        mouseCatcher.UnlockCursor();
 0268        chatBackWindow = worldChatWindowHud;
 269
 0270        if (!worldChatWindowHud.View.IsActive
 271            && !privateChatWindow.View.IsActive
 272            && !publicChatWindow.View.IsActive)
 0273            OpenLastActiveChatWindow();
 0274    }
 275
 276    private void CloseWindowTrigger_OnTriggered(DCLAction_Trigger action)
 277    {
 0278        if (mouseCatcher.IsLocked) return;
 279
 0280        if (publicChatWindow.View.IsActive ||
 281            channelChatWindow.View.IsActive ||
 282            privateChatWindow.View.IsActive)
 283        {
 0284            if (!DataStore.i.mentions.isMentionSuggestionVisible.Get())
 285            {
 0286                publicChatWindow.SetVisibility(false);
 0287                privateChatWindow.SetVisibility(false);
 0288                channelChatWindow.SetVisibility(false);
 0289                OpenChatList();
 290            }
 291        }
 292        else
 293        {
 0294            publicChatWindow.SetVisibility(false);
 0295            privateChatWindow.SetVisibility(false);
 0296            channelChatWindow.SetVisibility(false);
 0297            worldChatWindowHud.SetVisibility(false);
 0298            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 299        }
 300
 0301        CloseFriendsWindow();
 0302        CloseVoiceChatWindow();
 0303        isEmotesVisible.Set(false);
 0304        isExperiencesViewerOpen.Set(false);
 0305    }
 306
 307    private void HandleChatToggle(bool show)
 308    {
 1309        if (show)
 310        {
 1311            chatBackWindow = worldChatWindowHud;
 1312            OpenChatList();
 313        }
 0314        else { CloseAnyChatWindow(); }
 315
 1316        OnAnyTaskbarButtonClicked?.Invoke();
 0317    }
 318
 0319    private void MouseCatcher_OnMouseUnlock() { }
 320
 321    private void MouseCatcher_OnMouseLock()
 322    {
 0323        CloseFriendsWindow();
 0324        CloseChatList();
 0325        CloseVoiceChatWindow();
 0326        isExperiencesViewerOpen.Set(false);
 327
 0328        if (!privateChatWindow.View.IsActive
 329            && !publicChatWindow.View.IsActive
 330            && !channelChatWindow.View.IsActive)
 0331            ToggleOffChatIcon();
 0332    }
 333
 334    public void AddWorldChatWindow(WorldChatWindowController controller)
 335    {
 2336        if (controller?.View == null)
 337        {
 0338            Debug.LogWarning("AddChatWindow >>> World Chat Window doesn't exist yet!");
 0339            return;
 340        }
 341
 2342        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 343
 2344        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 2345        notificationViewerTransform?.SetAsLastSibling();
 2346        topNotificationViewerTransform?.SetAsFirstSibling();
 2347        experiencesViewerTransform?.SetAsLastSibling();
 348
 2349        worldChatWindowHud = controller;
 350
 2351        view.ShowChatButton();
 2352        worldChatWindowHud.OnCloseView += ToggleOffChatIcon;
 2353        worldChatWindowHud.OnOpenChannelCreation += OpenChannelCreation;
 2354        worldChatWindowHud.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 2355    }
 356
 357    private void ToggleOffChatIcon() =>
 4358        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 359
 360    private void OpenFriendsWindow()
 361    {
 2362        worldChatWindowHud.SetVisibility(false);
 2363        privateChatWindow.SetVisibility(false);
 2364        publicChatWindow.SetVisibility(false);
 2365        channelChatWindow?.SetVisibility(false);
 2366        searchChannelsHud.SetVisibility(false);
 2367        isExperiencesViewerOpen.Set(false);
 2368        isEmotesVisible.Set(false);
 2369        voiceChatHud?.SetVisibility(false);
 2370        friendsHud?.SetVisibility(true);
 2371        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Friends);
 2372        chatBackWindow = friendsHud;
 2373        isPromoteChannelsToastVisible.Set(false);
 2374    }
 375
 376
 377    private void CloseFriendsWindow()
 378    {
 0379        if(friendsHud is { IsVisible: true })
 380        {
 0381            friendsHud?.SetVisibility(false);
 0382            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Friends);
 383        }
 0384    }
 385
 386    public void OpenPrivateChat(string userId)
 387    {
 0388        worldChatWindowHud.SetVisibility(false);
 0389        publicChatWindow.SetVisibility(false);
 0390        channelChatWindow.SetVisibility(false);
 0391        searchChannelsHud.SetVisibility(false);
 0392        friendsHud?.SetVisibility(false);
 0393        isExperiencesViewerOpen.Set(false);
 0394        isEmotesVisible.Set(false);
 0395        voiceChatHud?.SetVisibility(false);
 0396        openChat.Set(userId, false);
 0397        privateChatWindow.Setup(userId);
 0398        privateChatWindow.SetVisibility(true);
 0399        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0400    }
 401
 402    private void OpenLastActiveChatWindow()
 403    {
 0404        string lastOpenedChat = openChat.Get();
 405
 0406        string newChat = string.IsNullOrEmpty(lastOpenedChat)
 407            ? ChatUtils.NEARBY_CHANNEL_ID
 408            : lastOpenedChat;
 409
 0410        if (newChat == ChatUtils.CONVERSATION_LIST_ID)
 0411            newChat = ChatUtils.NEARBY_CHANNEL_ID;
 412
 0413        openChat.Set(newChat, true);
 0414    }
 415
 416    private void CloseAnyChatWindow()
 417    {
 0418        worldChatWindowHud.SetVisibility(false);
 0419        privateChatWindow.SetVisibility(false);
 0420        publicChatWindow.SetVisibility(false);
 0421        channelChatWindow.SetVisibility(false);
 0422        searchChannelsHud.SetVisibility(false);
 0423        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 0424    }
 425
 426    public void OpenChannelChat(string channelId)
 427    {
 0428        openChat.Set(channelId, false);
 0429        channelChatWindow?.Setup(channelId);
 0430        channelChatWindow?.SetVisibility(true);
 0431        publicChatWindow?.SetVisibility(false);
 0432        worldChatWindowHud?.SetVisibility(false);
 0433        privateChatWindow?.SetVisibility(false);
 0434        searchChannelsHud.SetVisibility(false);
 0435        friendsHud?.SetVisibility(false);
 0436        isExperiencesViewerOpen?.Set(false);
 0437        isEmotesVisible?.Set(false);
 0438        voiceChatHud?.SetVisibility(false);
 439
 0440        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0441    }
 442
 443    public void OpenPublicChat(string channelId, bool focusInputField)
 444    {
 0445        openChat.Set(channelId, false);
 0446        publicChatWindow?.Setup(channelId);
 0447        publicChatWindow?.SetVisibility(true, focusInputField);
 0448        channelChatWindow?.SetVisibility(false);
 0449        worldChatWindowHud?.SetVisibility(false);
 0450        privateChatWindow?.SetVisibility(false);
 0451        searchChannelsHud?.SetVisibility(false);
 0452        friendsHud?.SetVisibility(false);
 0453        isExperiencesViewerOpen?.Set(false);
 0454        isEmotesVisible?.Set(false);
 0455        voiceChatHud?.SetVisibility(false);
 456
 0457        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0458    }
 459
 460    private void OpenChatList()
 461    {
 1462        privateChatWindow.SetVisibility(false);
 1463        publicChatWindow.SetVisibility(false);
 1464        channelChatWindow.SetVisibility(false);
 1465        searchChannelsHud.SetVisibility(false);
 1466        friendsHud?.SetVisibility(false);
 1467        isExperiencesViewerOpen.Set(false);
 1468        isEmotesVisible.Set(false);
 1469        voiceChatHud?.SetVisibility(false);
 1470        openChat.Set(ChatUtils.CONVERSATION_LIST_ID, false);
 1471        worldChatWindowHud.SetVisibility(true);
 1472        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 1473    }
 474
 475    private void CloseChatList()
 476    {
 0477        if (!worldChatWindowHud.View.IsActive) return;
 0478        worldChatWindowHud.SetVisibility(false);
 0479        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Chat);
 0480    }
 481
 482    private void OpenVoiceChatWindow()
 483    {
 0484        worldChatWindowHud.SetVisibility(false);
 0485        privateChatWindow.SetVisibility(false);
 0486        publicChatWindow.SetVisibility(false);
 0487        channelChatWindow.SetVisibility(false);
 0488        searchChannelsHud.SetVisibility(false);
 0489        isExperiencesViewerOpen.Set(false);
 0490        isEmotesVisible.Set(false);
 0491        friendsHud?.SetVisibility(false);
 0492        voiceChatHud?.SetVisibility(true);
 0493        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 0494        isPromoteChannelsToastVisible.Set(false);
 0495    }
 496
 497    private void CloseVoiceChatWindow()
 498    {
 0499        if(voiceChatHud?.IsVisible ?? false)
 500        {
 0501            voiceChatHud?.SetVisibility(false);
 0502            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 503        }
 0504    }
 505
 506    public void AddPrivateChatWindow(PrivateChatWindowController controller)
 507    {
 1508        if (controller?.View == null)
 509        {
 0510            Debug.LogWarning("AddPrivateChatWindow >>> Private Chat Window doesn't exist yet!");
 0511            return;
 512        }
 513
 1514        if (controller.View.Transform.parent == view.leftWindowContainer)
 0515            return;
 516
 1517        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1518        notificationViewerTransform?.SetAsLastSibling();
 1519        topNotificationViewerTransform?.SetAsFirstSibling();
 1520        experiencesViewerTransform?.SetAsLastSibling();
 521
 1522        privateChatWindow = controller;
 523
 1524        controller.OnClosed += ToggleOffChatIcon;
 1525    }
 526
 527    public void AddPublicChatChannel(PublicChatWindowController controller)
 528    {
 1529        if (controller?.View == null)
 530        {
 0531            Debug.LogWarning("AddPublicChatChannel >>> Public Chat Window doesn't exist yet!");
 0532            return;
 533        }
 534
 1535        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 536
 1537        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1538        notificationViewerTransform?.SetAsLastSibling();
 1539        topNotificationViewerTransform?.SetAsFirstSibling();
 1540        experiencesViewerTransform?.SetAsLastSibling();
 541
 1542        publicChatWindow = controller;
 543
 1544        controller.OnClosed += ToggleOffChatIcon;
 1545    }
 546
 547    public void AddFriendsWindow(FriendsHUDController controller)
 548    {
 3549        if (controller?.View == null)
 550        {
 0551            Debug.LogWarning("AddFriendsWindow >>> Friends window doesn't exist yet!");
 0552            return;
 553        }
 554
 3555        if (controller.View.Transform.parent == view.leftWindowContainer)
 0556            return;
 557
 3558        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 3559        notificationViewerTransform?.SetAsLastSibling();
 3560        topNotificationViewerTransform?.SetAsFirstSibling();
 3561        experiencesViewerTransform?.SetAsLastSibling();
 562
 3563        friendsHud = controller;
 564
 3565        if (isFriendsFeatureEnabled)
 0566            view.ShowFriendsButton();
 567        else
 3568            view.HideFriendsButton();
 569
 3570        friendsHud.OnViewClosed += () =>
 571        {
 0572            view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Friends);
 0573            ToggleOffChatIcon();
 0574        };
 3575    }
 576
 577    public void AddVoiceChatWindow(VoiceChatWindowController controller)
 578    {
 1579        if (controller?.VoiceChatWindowView == null)
 580        {
 1581            Debug.LogWarning("AddVoiceChatWindow >>> Voice Chat window doesn't exist yet!");
 1582            return;
 583        }
 584
 0585        if (controller.VoiceChatWindowView.Transform.parent == view.leftWindowContainer)
 0586            return;
 587
 0588        controller.VoiceChatWindowView.Transform.SetParent(view.leftWindowContainer, false);
 589
 0590        voiceChatHud = controller;
 0591        view.ShowVoiceChatButton();
 0592        voiceChatHud.OnCloseView += () => view.ToggleOff(TaskbarHUDView.TaskbarButtonType.VoiceChat);
 593
 0594        if (controller?.VoiceChatBarView != null)
 595        {
 0596            controller.VoiceChatBarView.Transform.SetParent(view.altSectionContainer, false);
 0597            controller.VoiceChatBarView.Transform.SetAsFirstSibling();
 598        }
 0599    }
 600
 601    private void InitializeEmotesSelector(bool current, bool previous)
 602    {
 8603        if (!current) return;
 0604        view.ShowEmotesButton();
 0605    }
 606
 607    private void IsEmotesVisibleChanged(bool current, bool previous) =>
 0608        HandleEmotesToggle(current);
 609
 610    private void InitializeExperiencesViewer(Transform currentViewTransform, Transform previousViewTransform)
 611    {
 4612        if (currentViewTransform == null)
 4613            return;
 614
 0615        experiencesViewerTransform = currentViewTransform;
 0616        experiencesViewerTransform.SetParent(view.leftWindowContainer, false);
 0617        experiencesViewerTransform.SetAsLastSibling();
 618
 0619        view.ShowExperiencesButton();
 0620    }
 621
 622    private void InitializeNotificationPanel(Transform currentPanelTransform, Transform previousPanelTransform)
 623    {
 4624        if (currentPanelTransform == null)
 4625            return;
 626
 0627        notificationViewerTransform = currentPanelTransform;
 0628        notificationViewerTransform.SetParent(view.leftWindowContainer, false);
 0629        notificationViewerTransform.SetAsLastSibling();
 0630        experiencesViewerTransform.SetAsLastSibling();
 0631    }
 632
 633    private void InitializeTopNotificationPanel(Transform currentPanelTransform, Transform previousPanelTransform)
 634    {
 4635        if (currentPanelTransform == null)
 4636            return;
 637
 0638        topNotificationViewerTransform = currentPanelTransform;
 0639        topNotificationViewerTransform.SetParent(view.leftWindowContainer, false);
 0640        topNotificationViewerTransform.SetAsFirstSibling();
 0641    }
 642
 643    private void OpenChat(string chatId, string previous)
 644    {
 0645        if (chatId == ChatUtils.NEARBY_CHANNEL_ID)
 0646            OpenPublicChat(ChatUtils.NEARBY_CHANNEL_ID, true);
 0647        else if (chatController.GetAllocatedChannel(chatId) != null)
 648        {
 0649            if (chatController.GetAllocatedChannel(chatId).Joined)
 0650                OpenChannelChat(chatId);
 651            else
 0652                return;
 653        }
 0654        else if (chatId == ChatUtils.CONVERSATION_LIST_ID)
 0655            OpenChatList();
 656        else
 657        {
 658            async UniTaskVoid OpenPrivateChatAsync(string chatId, CancellationToken cancellationToken = default)
 659            {
 0660                var friendshipStatus = await friendsController.GetFriendshipStatus(chatId, cancellationToken);
 661
 0662                if (friendshipStatus == FriendshipStatus.FRIEND)
 0663                    OpenPrivateChat(chatId);
 0664            }
 665
 0666            openPrivateChatCancellationToken.Cancel();
 0667            openPrivateChatCancellationToken.Dispose();
 0668            openPrivateChatCancellationToken = new CancellationTokenSource();
 0669            OpenPrivateChatAsync(chatId, openPrivateChatCancellationToken.Token).Forget();
 670        }
 0671    }
 672
 673    private void IsExperiencesViewerOpenChanged(bool current, bool previous)
 674    {
 0675        if (current)
 0676            return;
 677
 0678        view.ToggleOff(TaskbarHUDView.TaskbarButtonType.Experiences);
 0679        ToggleOffChatIcon();
 0680    }
 681
 682    private void NumOfLoadedExperiencesChanged(int current, int previous)
 683    {
 4684        view.SetExperiencesVisibility(current > 0);
 685
 4686        if (current == 0)
 4687            isExperiencesViewerOpen.Set(false);
 4688    }
 689
 690    public void DisableFriendsWindow()
 691    {
 0692        view.friendsButton.transform.parent.gameObject.SetActive(false);
 0693    }
 694
 695    public void Dispose()
 696    {
 4697        if (view != null)
 698        {
 4699            view.OnChatToggle -= HandleChatToggle;
 4700            view.OnFriendsToggle -= HandleFriendsToggle;
 4701            view.OnEmotesToggle -= HandleEmotesToggle;
 4702            view.OnExperiencesToggle -= HandleExperiencesToggle;
 4703            view.OnVoiceChatToggle -= HandleVoiceChatToggle;
 704
 4705            view.Destroy();
 706        }
 707
 4708        if (mouseCatcher != null)
 709        {
 0710            mouseCatcher.OnMouseLock -= MouseCatcher_OnMouseLock;
 0711            mouseCatcher.OnMouseUnlock -= MouseCatcher_OnMouseUnlock;
 712        }
 713
 4714        if (toggleFriendsTrigger != null)
 4715            toggleFriendsTrigger.OnTriggered -= ToggleFriendsTrigger_OnTriggered;
 716
 4717        if (closeWindowTrigger != null)
 4718            closeWindowTrigger.OnTriggered -= CloseWindowTrigger_OnTriggered;
 719
 4720        if (toggleWorldChatTrigger != null)
 4721            toggleWorldChatTrigger.OnTriggered -= ToggleWorldChatTrigger_OnTriggered;
 722
 4723        isEmotesWheelInitialized.OnChange -= InitializeEmotesSelector;
 4724        isEmotesVisible.OnChange -= IsEmotesVisibleChanged;
 4725        isExperiencesViewerOpen.OnChange -= IsExperiencesViewerOpenChanged;
 4726        isExperiencesViewerInitialized.OnChange -= InitializeExperiencesViewer;
 4727        numOfLoadedExperiences.OnChange -= NumOfLoadedExperiencesChanged;
 728
 4729        openPrivateChatCancellationToken.Cancel();
 4730        openPrivateChatCancellationToken.Dispose();
 4731    }
 732
 733    public void SetVisibility(bool visible)
 734    {
 1735        view.SetVisibility(visible);
 1736    }
 737
 738    public void GoBackFromChat()
 739    {
 0740        if (chatBackWindow == friendsHud)
 0741            OpenFriendsWindow();
 742        else
 0743            OpenChatList();
 0744    }
 745
 746    public void AddChatChannel(ChatChannelHUDController controller)
 747    {
 1748        if (controller?.View == null)
 749        {
 0750            Debug.LogWarning("AddChatChannel >>> Chat Window doesn't exist yet!");
 0751            return;
 752        }
 753
 1754        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 755
 1756        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1757        experiencesViewerTransform?.SetAsLastSibling();
 758
 1759        channelChatWindow = controller;
 760
 1761        controller.OnClosed += ToggleOffChatIcon;
 1762        controller.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 1763    }
 764
 765    public void AddChannelSearch(SearchChannelsWindowController controller)
 766    {
 1767        if (controller.View.Transform.parent == view.leftWindowContainer) return;
 768
 1769        controller.View.Transform.SetParent(view.leftWindowContainer, false);
 1770        experiencesViewerTransform?.SetAsLastSibling();
 771
 1772        searchChannelsHud = controller;
 773
 1774        controller.OnClosed += () =>
 775        {
 0776            controller.SetVisibility(false);
 0777            ToggleOffChatIcon();
 0778        };
 779
 1780        controller.OnBack += GoBackFromChat;
 1781        controller.OnOpenChannelCreation += OpenChannelCreation;
 1782        controller.OnOpenChannelLeave += OpenChannelLeaveConfirmation;
 1783    }
 784
 785    public void AddChannelCreation(CreateChannelWindowController controller)
 786    {
 0787        if (controller.View.Transform.parent == view.fullScreenWindowContainer) return;
 788
 0789        controller.View.Transform.SetParent(view.fullScreenWindowContainer, false);
 0790        experiencesViewerTransform?.SetAsLastSibling();
 791
 0792        channelCreationWindow = controller;
 793
 0794        controller.OnNavigateToChannelWindow += channelId =>
 795        {
 0796            OpenChannelChat(channelId);
 0797            channelCreationWindow.SetVisibility(false);
 0798        };
 0799    }
 800
 801    private void OpenChannelCreation()
 802    {
 0803        channelCreationWindow.SetVisibility(true);
 0804    }
 805
 806    public void AddChannelLeaveConfirmation(LeaveChannelConfirmationWindowController controller)
 807    {
 0808        if (controller.View.Transform.parent == view.fullScreenWindowContainer) return;
 809
 0810        controller.View.Transform.SetParent(view.fullScreenWindowContainer, false);
 0811        channelLeaveWindow = controller;
 0812    }
 813
 814    private void OpenChannelLeaveConfirmation(string channelId)
 815    {
 0816        channelLeaveWindow.SetChannelToLeave(channelId);
 0817        channelLeaveWindow.SetVisibility(true);
 0818    }
 819
 820    public void OpenChannelSearch()
 821    {
 0822        privateChatWindow.SetVisibility(false);
 0823        publicChatWindow.SetVisibility(false);
 0824        channelChatWindow.SetVisibility(false);
 0825        searchChannelsHud.SetVisibility(true);
 0826        friendsHud?.SetVisibility(false);
 0827        isExperiencesViewerOpen.Set(false);
 0828        isEmotesVisible.Set(false);
 0829        voiceChatHud?.SetVisibility(false);
 0830        worldChatWindowHud.SetVisibility(false);
 0831        view.ToggleOn(TaskbarHUDView.TaskbarButtonType.Chat);
 0832    }
 833}

Methods/Properties

TaskbarHUDController(IChatController, DCL.Social.Friends.IFriendsController, Analytics.ISupportAnalytics)
isFriendsFeatureEnabled()
socialTooltipReference()
isEmotesWheelInitialized()
isEmotesVisible()
emoteJustTriggeredFromShortcut()
isExperiencesViewerInitialized()
notificationPanelTransform()
topNotificationPanelTransform()
isExperiencesViewerOpen()
numOfLoadedExperiences()
openChat()
isPromoteChannelsToastVisible()
CreateView()
Initialize(DCL.IMouseCatcher)
OpenIntercom()
HandleFriendsToggle(System.Boolean)
HandleEmotesToggle(System.Boolean)
ShowEmotes()
HandleExperiencesToggle(System.Boolean)
HandleVoiceChatToggle(System.Boolean)
ShowExperiences()
ToggleFriendsTrigger_OnTriggered(DCLAction_Trigger)
ToggleWorldChatTrigger_OnTriggered(DCLAction_Trigger)
CloseWindowTrigger_OnTriggered(DCLAction_Trigger)
HandleChatToggle(System.Boolean)
MouseCatcher_OnMouseUnlock()
MouseCatcher_OnMouseLock()
AddWorldChatWindow(DCL.Social.Chat.WorldChatWindowController)
ToggleOffChatIcon()
OpenFriendsWindow()
CloseFriendsWindow()
OpenPrivateChat(System.String)
OpenLastActiveChatWindow()
CloseAnyChatWindow()
OpenChannelChat(System.String)
OpenPublicChat(System.String, System.Boolean)
OpenChatList()
CloseChatList()
OpenVoiceChatWindow()
CloseVoiceChatWindow()
AddPrivateChatWindow(DCL.Social.Chat.PrivateChatWindowController)
AddPublicChatChannel(DCL.Social.Chat.PublicChatWindowController)
AddFriendsWindow(DCL.Social.Friends.FriendsHUDController)
AddVoiceChatWindow(VoiceChatWindowController)
InitializeEmotesSelector(System.Boolean, System.Boolean)
IsEmotesVisibleChanged(System.Boolean, System.Boolean)
InitializeExperiencesViewer(UnityEngine.Transform, UnityEngine.Transform)
InitializeNotificationPanel(UnityEngine.Transform, UnityEngine.Transform)
InitializeTopNotificationPanel(UnityEngine.Transform, UnityEngine.Transform)
OpenChat(System.String, System.String)
<OpenChat()
IsExperiencesViewerOpenChanged(System.Boolean, System.Boolean)
NumOfLoadedExperiencesChanged(System.Int32, System.Int32)
DisableFriendsWindow()
Dispose()
SetVisibility(System.Boolean)
GoBackFromChat()
AddChatChannel(DCL.Social.Chat.ChatChannelHUDController)
AddChannelSearch(DCL.Social.Chat.SearchChannelsWindowController)
AddChannelCreation(DCL.Social.Chat.CreateChannelWindowController)
OpenChannelCreation()
AddChannelLeaveConfirmation(DCL.Social.Chat.LeaveChannelConfirmationWindowController)
OpenChannelLeaveConfirmation(System.String)
OpenChannelSearch()