< Summary

Class:FriendEntryBase
Assembly:FriendsHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/FriendsHUD/Scripts/Entries/FriendEntryBase.cs
Covered lines:1
Uncovered lines:45
Coverable lines:46
Total lines:117
Line coverage:2.1% (1 of 46)
Covered branches:0
Total branches:0
Covered methods:3
Total methods:15
Method coverage:20% (3 of 15)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendEntryBase()0%110100%
Awake()0%12300%
OnPointerEnter(...)0%6200%
Dock(...)0%2100%
OnDisable()0%2100%
OnDestroy()0%2100%
EnableAvatarSnapshotFetching()0%20400%
DisableAvatarSnapshotFetching()0%20400%
RefreshControl()0%1321100%
Populate(...)0%2100%
IsVisible(...)0%6200%
OnAvatarImageChange(...)0%2100%
ShowUserProfile()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/FriendsHUD/Scripts/Entries/FriendEntryBase.cs

#LineLine coverage
 1using DCL;
 2using DCL.Social.Friends;
 3using System;
 4using TMPro;
 5using UnityEngine;
 6using UnityEngine.EventSystems;
 7using UnityEngine.UI;
 8
 9public class FriendEntryBase : BaseComponentView
 10{
 11    private const string OPEN_PASSPORT_SOURCE = "FriendsHUD";
 212    public FriendEntryModel Model { get; private set; } = new FriendEntryModel();
 13
 14    public Image playerBlockedImage;
 15
 16    [SerializeField] private RectTransform menuPositionReference;
 17    [SerializeField] protected internal TextMeshProUGUI playerNameText;
 18    [SerializeField] protected internal RawImage playerImage;
 19    [SerializeField] protected internal Button menuButton;
 20    [SerializeField] protected internal AudioEvent audioEventHover;
 21    [SerializeField] protected internal GameObject onlineStatusContainer;
 22    [SerializeField] protected internal GameObject offlineStatusContainer;
 23    [SerializeField] protected internal Button passportButton;
 24
 25    private BaseVariable<(string playerId, string source)> currentPlayerInfoCardId;
 26    private bool avatarFetchingEnabled;
 27
 28    public event Action<FriendEntryBase> OnMenuToggle;
 29
 30    public override void Awake()
 31    {
 032        menuButton.onClick.RemoveAllListeners();
 033        menuButton.onClick.AddListener(() => OnMenuToggle?.Invoke(this));
 034        passportButton?.onClick.RemoveAllListeners();
 035        passportButton?.onClick.AddListener(ShowUserProfile);
 036    }
 37
 38    public override void OnPointerEnter(PointerEventData eventData)
 39    {
 040        if (audioEventHover != null)
 041            audioEventHover.Play(true);
 042    }
 43
 44    public void Dock(UserContextMenu contextMenuPanel)
 45    {
 046        var panelTransform = (RectTransform) contextMenuPanel.transform;
 047        panelTransform.pivot = menuPositionReference.pivot;
 048        panelTransform.position = menuPositionReference.position;
 049    }
 50
 51    public override void OnDisable()
 52    {
 053        DisableAvatarSnapshotFetching();
 054    }
 55
 56    protected void OnDestroy()
 57    {
 058        DisableAvatarSnapshotFetching();
 059    }
 60
 61    public virtual void EnableAvatarSnapshotFetching()
 62    {
 063        if (avatarFetchingEnabled) return;
 064        avatarFetchingEnabled = true;
 65        // TODO: replace image loading for ImageComponentView implementation
 066        Model?.avatarSnapshotObserver?.AddListener(OnAvatarImageChange);
 067    }
 68
 69    public virtual void DisableAvatarSnapshotFetching()
 70    {
 071        if (!avatarFetchingEnabled) return;
 072        avatarFetchingEnabled = false;
 73        // TODO: replace image loading for ImageComponentView implementation
 074        Model?.avatarSnapshotObserver?.RemoveListener(OnAvatarImageChange);
 075    }
 76
 77    public override void RefreshControl()
 78    {
 079        if (playerNameText.text != Model.userName)
 080            playerNameText.text = Model.userName;
 81
 082        playerBlockedImage.enabled = Model.blocked;
 83
 084        Model?.avatarSnapshotObserver?.RemoveListener(OnAvatarImageChange);
 85
 086        if (isActiveAndEnabled && avatarFetchingEnabled)
 87            // TODO: replace image loading for ImageComponentView implementation
 088            Model.avatarSnapshotObserver?.AddListener(OnAvatarImageChange);
 89
 090        if (onlineStatusContainer != null)
 091            onlineStatusContainer.SetActive(Model.status == PresenceStatus.ONLINE && !Model.blocked);
 092        if (offlineStatusContainer != null)
 093            offlineStatusContainer.SetActive(Model.status != PresenceStatus.ONLINE && !Model.blocked);
 094    }
 95
 96    public virtual void Populate(FriendEntryModel model)
 97    {
 098        Model = model;
 099        RefreshControl();
 0100    }
 101
 102    public virtual bool IsVisible(RectTransform container)
 103    {
 0104        if (!gameObject.activeSelf) return false;
 0105        return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 106    }
 107
 0108    private void OnAvatarImageChange(Texture2D texture) { playerImage.texture = texture; }
 109
 110    private void ShowUserProfile()
 111    {
 0112        if (currentPlayerInfoCardId == null)
 0113            currentPlayerInfoCardId = DataStore.i.HUDs.currentPlayerId;
 114
 0115        currentPlayerInfoCardId.Set((Model.userId, OPEN_PASSPORT_SOURCE));
 0116    }
 117}