< Summary

Class:PrivateChatWindowComponentView
Assembly:PrivateChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/PrivateChatWindow/PrivateChatWindowComponentView.cs
Covered lines:45
Uncovered lines:18
Coverable lines:63
Total lines:176
Line coverage:71.4% (45 of 63)
Covered branches:0
Total branches:0
Covered methods:16
Total methods:21
Method coverage:76.1% (16 of 21)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
add_OnUnfriend(...)0%110100%
remove_OnUnfriend(...)0%110100%
add_OnFocused(...)0%110100%
remove_OnFocused(...)0%110100%
Awake()0%110100%
Initialize(...)0%110100%
Dispose()0%5.25080%
SetLoadingMessagesActive(...)0%2.062075%
SetOldMessagesLoadingActive(...)0%2.032080%
RefreshControl()0%110100%
Setup(...)0%110100%
Show()0%110100%
Hide()0%110100%
OnPointerDown(...)0%220100%
ShowOptions()0%2100%
HandleBlockFromContextMenu(...)0%6200%
HandleUnblockFromButtonInChat(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/PrivateChatWindow/PrivateChatWindowComponentView.cs

#LineLine coverage
 1using DCL.Social.Chat;
 2using DCL.Social.Friends;
 3using SocialBar.UserThumbnail;
 4using SocialFeaturesAnalytics;
 5using System;
 6using TMPro;
 7using UnityEngine;
 8using UnityEngine.EventSystems;
 9using UnityEngine.UI;
 10
 11public class PrivateChatWindowComponentView : BaseComponentView, IPrivateChatComponentView, IPointerDownHandler
 12{
 13    private const float REQUEST_MORE_ENTRIES_SCROLL_THRESHOLD = 0.995f;
 14
 15    [SerializeField] internal Button backButton;
 16    [SerializeField] internal Button closeButton;
 17    [SerializeField] internal UserThumbnailComponentView userThumbnail;
 18    [SerializeField] internal TMP_Text userNameLabel;
 19    [SerializeField] internal PrivateChatHUDView chatView;
 20    [SerializeField] internal GameObject jumpInButtonContainer;
 21    [SerializeField] internal JumpInButton jumpInButton;
 22    [SerializeField] internal UserContextMenu userContextMenu;
 23    [SerializeField] internal RectTransform userContextMenuReferencePoint;
 24    [SerializeField] internal Button optionsButton;
 25    [SerializeField] internal GameObject messagesLoading;
 26    [SerializeField] internal ScrollRect scroll;
 27    [SerializeField] internal GameObject oldMessagesLoadingContainer;
 28    [SerializeField] private Model model;
 29
 30    private IFriendsController friendsController;
 31    private ISocialAnalytics socialAnalytics;
 32    private Coroutine alphaRoutine;
 33    private Vector2 originalSize;
 34
 35    public event Action OnPressBack;
 36    public event Action OnMinimize;
 37    public event Action OnClose;
 38    public event Action<string> OnUnfriend
 39    {
 140        add => userContextMenu.OnUnfriend += value;
 141        remove => userContextMenu.OnUnfriend -= value;
 42    }
 43
 44    public event Action OnRequireMoreMessages;
 45    public event Action<bool> OnFocused
 46    {
 247        add => onFocused += value;
 148        remove => onFocused -= value;
 49    }
 50    public event Action OnClickOverWindow;
 51    public event Action<string> OnUnblockUser;
 52
 453    public IChatHUDComponentView ChatHUD => chatView;
 254    public bool IsActive => gameObject.activeInHierarchy;
 055    public RectTransform Transform => (RectTransform) transform;
 056    public bool IsFocused => isFocused;
 57
 58    public override void Awake()
 59    {
 1460        base.Awake();
 1461        originalSize = ((RectTransform) transform).sizeDelta;
 1562        backButton.onClick.AddListener(() => OnPressBack?.Invoke());
 1563        closeButton.onClick.AddListener(() => OnClose?.Invoke());
 1464        optionsButton.onClick.AddListener(ShowOptions);
 1465        userContextMenu.OnBlock += HandleBlockFromContextMenu;
 1466        scroll.onValueChanged.AddListener((scrollPos) =>
 67        {
 068            if (scrollPos.y > REQUEST_MORE_ENTRIES_SCROLL_THRESHOLD)
 069                OnRequireMoreMessages?.Invoke();
 070        });
 71
 1472        chatView.OnUnblockUser += HandleUnblockFromButtonInChat;
 1473    }
 74
 75    public void Initialize(IFriendsController friendsController, ISocialAnalytics socialAnalytics)
 76    {
 1477        this.friendsController = friendsController;
 1478        this.socialAnalytics = socialAnalytics;
 1479    }
 80
 81    public override void Dispose()
 82    {
 2883        if (!this) return;
 2884        if (!gameObject) return;
 85
 2886        if (userContextMenu != null)
 2887            userContextMenu.OnBlock -= HandleBlockFromContextMenu;
 88
 2889        if (chatView!= null)
 2790            chatView.OnUnblockUser -= HandleUnblockFromButtonInChat;
 91
 2892        base.Dispose();
 2893    }
 94
 95    public void SetLoadingMessagesActive(bool isActive)
 96    {
 397        if (messagesLoading == null)
 098            return;
 99
 3100        messagesLoading.SetActive(isActive);
 3101    }
 102
 103    public void SetOldMessagesLoadingActive(bool isActive)
 104    {
 3105        if (oldMessagesLoadingContainer == null)
 0106            return;
 107
 3108        oldMessagesLoadingContainer.SetActive(isActive);
 3109        oldMessagesLoadingContainer.transform.SetAsFirstSibling();
 3110    }
 111
 112    public override void RefreshControl()
 113    {
 2114        userThumbnail.Configure(new UserThumbnailComponentModel
 115        {
 116            faceUrl = model.faceSnapshotUrl,
 117            isBlocked = model.isUserBlocked,
 118            isOnline = model.isUserOnline
 119        });
 2120        userNameLabel.SetText(model.userName);
 2121        jumpInButtonContainer.SetActive(model.isUserOnline);
 2122        chatView.SetBlockedStatus(model.isUserBlocked);
 2123    }
 124
 125    public void Setup(UserProfile profile, bool isOnline, bool isBlocked)
 126    {
 2127        model = new Model
 128        {
 129            userId = profile.userId,
 130            faceSnapshotUrl = profile.face256SnapshotURL,
 131            userName = profile.userName,
 132            isUserOnline = isOnline,
 133            isUserBlocked = isBlocked
 134        };
 2135        RefreshControl();
 136
 2137        jumpInButton.Initialize(friendsController, profile.userId, socialAnalytics);
 2138    }
 139
 2140    public void Show() => gameObject.SetActive(true);
 141
 2142    public void Hide() => gameObject.SetActive(false);
 143
 1144    public void OnPointerDown(PointerEventData eventData) => OnClickOverWindow?.Invoke();
 145
 146    private void ShowOptions()
 147    {
 0148        var contextMenuTransform = (RectTransform) userContextMenu.transform;
 0149        contextMenuTransform.pivot = userContextMenuReferencePoint.pivot;
 0150        contextMenuTransform.position = userContextMenuReferencePoint.position;
 0151        userContextMenu.Show(model.userId);
 0152    }
 153
 154    private void HandleBlockFromContextMenu(string userId, bool isBlocked)
 155    {
 0156        if (userId != model.userId) return;
 0157        model.isUserBlocked = isBlocked;
 0158        RefreshControl();
 0159    }
 160
 161    private void HandleUnblockFromButtonInChat(string userId)
 162    {
 0163        HandleBlockFromContextMenu(userId, false);
 0164    }
 165
 166
 167    [Serializable]
 168    private struct Model
 169    {
 170        public string userId;
 171        public string userName;
 172        public string faceSnapshotUrl;
 173        public bool isUserBlocked;
 174        public bool isUserOnline;
 175    }
 176}