< 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:33
Uncovered lines:13
Coverable lines:46
Total lines:113
Line coverage:71.7% (33 of 46)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FriendEntryBase()0%110100%
Awake()0%330100%
OnPointerEnter(...)0%6200%
Dock(...)0%2100%
OnDisable()0%110100%
OnDestroy()0%110100%
EnableAvatarSnapshotFetching()0%4.134080%
DisableAvatarSnapshotFetching()0%440100%
RefreshControl()0%11.0911090.91%
Populate(...)0%110100%
IsVisible(...)0%2.152066.67%
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 System;
 2using TMPro;
 3using UnityEngine;
 4using UnityEngine.EventSystems;
 5using UnityEngine.UI;
 6
 7public class FriendEntryBase : BaseComponentView
 8{
 329    public FriendEntryModel Model { get; private set; } = new FriendEntryModel();
 10
 11    public Image playerBlockedImage;
 12
 13    [SerializeField] private RectTransform menuPositionReference;
 14    [SerializeField] protected internal TextMeshProUGUI playerNameText;
 15    [SerializeField] protected internal RawImage playerImage;
 16    [SerializeField] protected internal Button menuButton;
 17    [SerializeField] protected internal AudioEvent audioEventHover;
 18    [SerializeField] protected internal GameObject onlineStatusContainer;
 19    [SerializeField] protected internal GameObject offlineStatusContainer;
 20    [SerializeField] protected internal Button passportButton;
 21
 22    private StringVariable currentPlayerInfoCardId;
 23    private bool avatarFetchingEnabled;
 24
 25    public event Action<FriendEntryBase> OnMenuToggle;
 26
 27    public override void Awake()
 28    {
 2829        menuButton.onClick.RemoveAllListeners();
 3030        menuButton.onClick.AddListener(() => OnMenuToggle?.Invoke(this));
 2831        passportButton?.onClick.RemoveAllListeners();
 2832        passportButton?.onClick.AddListener(ShowUserProfile);
 1333    }
 34
 35    public override void OnPointerEnter(PointerEventData eventData)
 36    {
 037        if (audioEventHover != null)
 038            audioEventHover.Play(true);
 039    }
 40
 41    public void Dock(UserContextMenu contextMenuPanel)
 42    {
 043        var panelTransform = (RectTransform) contextMenuPanel.transform;
 044        panelTransform.pivot = menuPositionReference.pivot;
 045        panelTransform.position = menuPositionReference.position;
 046    }
 47
 48    public override void OnDisable()
 49    {
 4350        DisableAvatarSnapshotFetching();
 4351    }
 52
 53    protected void OnDestroy()
 54    {
 2855        DisableAvatarSnapshotFetching();
 2856    }
 57
 58    public virtual void EnableAvatarSnapshotFetching()
 59    {
 560        if (avatarFetchingEnabled) return;
 561        avatarFetchingEnabled = true;
 62        // TODO: replace image loading for ImageComponentView implementation
 563        Model?.avatarSnapshotObserver?.AddListener(OnAvatarImageChange);
 564    }
 65
 66    public virtual void DisableAvatarSnapshotFetching()
 67    {
 13768        if (!avatarFetchingEnabled) return;
 569        avatarFetchingEnabled = false;
 70        // TODO: replace image loading for ImageComponentView implementation
 571        Model?.avatarSnapshotObserver?.RemoveListener(OnAvatarImageChange);
 572    }
 73
 74    public override void RefreshControl()
 75    {
 1976        if (playerNameText.text != Model.userName)
 1977            playerNameText.text = Model.userName;
 78
 1979        playerBlockedImage.enabled = Model.blocked;
 80
 1981        Model?.avatarSnapshotObserver?.RemoveListener(OnAvatarImageChange);
 82
 1983        if (isActiveAndEnabled && avatarFetchingEnabled)
 84            // TODO: replace image loading for ImageComponentView implementation
 085            Model.avatarSnapshotObserver?.AddListener(OnAvatarImageChange);
 86
 1987        if (onlineStatusContainer != null)
 1088            onlineStatusContainer.SetActive(Model.status == PresenceStatus.ONLINE && !Model.blocked);
 1989        if (offlineStatusContainer != null)
 1090            offlineStatusContainer.SetActive(Model.status != PresenceStatus.ONLINE && !Model.blocked);
 1991    }
 92
 93    public virtual void Populate(FriendEntryModel model)
 94    {
 1995        Model = model;
 1996        RefreshControl();
 1997    }
 98
 99    public virtual bool IsVisible(RectTransform container)
 100    {
 5101        if (!gameObject.activeSelf) return false;
 5102        return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 103    }
 104
 0105    private void OnAvatarImageChange(Texture2D texture) { playerImage.texture = texture; }
 106
 107    private void ShowUserProfile()
 108    {
 0109        if (currentPlayerInfoCardId == null)
 0110            currentPlayerInfoCardId = Resources.Load<StringVariable>("CurrentPlayerInfoCardId");
 0111        currentPlayerInfoCardId.Set(Model.userId);
 0112    }
 113}