< Summary

Class:DCL.PortableExperiences.Confirmation.ExperiencesConfirmationPopupComponentView
Assembly:ExperienciesConfirmation
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ExperiencesConfirmation/ExperiencesConfirmationPopupComponentView.cs
Covered lines:0
Uncovered lines:61
Coverable lines:61
Total lines:166
Line coverage:0% (0 of 61)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:7
Method coverage:0% (0 of 7)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%20400%
OnEnable()0%2100%
OnDisable()0%2100%
RefreshControl()0%30500%
Show(...)0%12300%
Hide(...)0%6200%
OnCancelTriggered(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ExperiencesConfirmation/ExperiencesConfirmationPopupComponentView.cs

#LineLine coverage
 1using DCL.Helpers;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using TMPro;
 6using UIComponents.Scripts.Components;
 7using UnityEngine;
 8using UnityEngine.UI;
 9
 10namespace DCL.PortableExperiences.Confirmation
 11{
 12    public class ExperiencesConfirmationPopupComponentView : BaseComponentView<ExperiencesConfirmationViewModel>,
 13        IExperiencesConfirmationPopupView
 14    {
 15        [Serializable]
 16        private struct PermissionContainer
 17        {
 18            public string permission;
 19            public GameObject container;
 20        }
 21
 22        [SerializeField] private Button acceptButton;
 23        [SerializeField] private Button rejectButton;
 24        [SerializeField] private Button[] cancelButtons;
 25        [SerializeField] private InputAction_Trigger cancelTrigger;
 26        [SerializeField] private GameObject permissionsContainer;
 27        [SerializeField] private GameObject descriptionContainer;
 28        [SerializeField] private TMP_Text nameLabel;
 29        [SerializeField] private TMP_Text descriptionLabel;
 30        [SerializeField] private TMP_Text allowButtonLabel;
 31        [SerializeField] private TMP_Text rejectButtonLabel;
 32        [SerializeField] private Toggle dontAskMeAgainToggle;
 33        [SerializeField] private ImageComponentView iconImage;
 34        [SerializeField] private Texture2D defaultIconSprite;
 35        [SerializeField] private RectTransform root;
 36        [SerializeField] private GameObject smartWearableTitle;
 37        [SerializeField] private GameObject scenePxTitle;
 38        [SerializeField] private List<PermissionContainer> permissionsConfig;
 39        [SerializeField] private Button useWeb3ApiInfoButton;
 40        [SerializeField] private ShowHideAnimator useWeb3ApiInfoToast;
 41
 42        private Dictionary<string, GameObject> permissionContainers;
 43
 44        public event Action OnAccepted;
 45        public event Action OnRejected;
 46        public event Action OnCancelled;
 47        public event Action OnDontShowAnymore;
 48        public event Action OnKeepShowing;
 49
 50        public override void Awake()
 51        {
 052            base.Awake();
 53
 054            permissionContainers = permissionsConfig.ToDictionary(container => container.permission, container => contai
 55
 056            acceptButton.onClick.AddListener(() => OnAccepted?.Invoke());
 057            rejectButton.onClick.AddListener(() => OnRejected?.Invoke());
 58
 059            foreach (Button cancelButton in cancelButtons)
 060                cancelButton.onClick.AddListener(() => OnCancelled?.Invoke());
 61
 062            dontAskMeAgainToggle.onValueChanged.AddListener(arg0 =>
 63            {
 064                if (arg0)
 065                    OnDontShowAnymore?.Invoke();
 66                else
 067                    OnKeepShowing?.Invoke();
 068            });
 69
 070            useWeb3ApiInfoButton.onClick.AddListener(() =>
 71            {
 072                if (useWeb3ApiInfoToast.gameObject.activeSelf)
 073                    useWeb3ApiInfoToast.Hide();
 74                else
 75                {
 076                    useWeb3ApiInfoToast.gameObject.SetActive(true);
 077                    useWeb3ApiInfoToast.ShowDelayHide(10f);
 78                }
 079            });
 080        }
 81
 82        public override void OnEnable()
 83        {
 084            base.OnEnable();
 85
 086            cancelTrigger.OnTriggered += OnCancelTriggered;
 087        }
 88
 89        public override void OnDisable()
 90        {
 091            base.OnDisable();
 92
 093            cancelTrigger.OnTriggered -= OnCancelTriggered;
 094        }
 95
 96        public override void RefreshControl()
 97        {
 098            bool isPermissionsEnabled = model.Permissions.Count > 0;
 099            bool isDescriptionEnabled = !string.IsNullOrEmpty(model.Description);
 100
 0101            permissionsContainer.SetActive(isPermissionsEnabled);
 0102            descriptionContainer.SetActive(isDescriptionEnabled);
 103
 0104            foreach ((string _, GameObject container) in permissionContainers)
 0105                container.SetActive(false);
 106
 0107            foreach (string permission in model.Permissions)
 0108                permissionContainers[permission].SetActive(true);
 109
 0110            descriptionLabel.text = model.Description;
 0111            nameLabel.text = model.Name;
 112
 0113            if (string.IsNullOrEmpty(model.IconUrl))
 114            {
 0115                iconImage.UseLoadingIndicator = false;
 0116                iconImage.SetImage(defaultIconSprite);
 0117                iconImage.ImageComponent.color = new Color(0.08627451f, 0.08235294f, 0.09411765f, 1f);
 118            }
 119            else
 120            {
 0121                iconImage.UseLoadingIndicator = true;
 0122                iconImage.SetImage(model.IconUrl);
 0123                iconImage.ImageComponent.color = Color.white;
 124            }
 125
 0126            smartWearableTitle.SetActive(model.IsSmartWearable);
 0127            scenePxTitle.SetActive(!model.IsSmartWearable);
 128
 0129            if (model.IsSmartWearable)
 130            {
 0131                allowButtonLabel.text = "ALLOW AND EQUIP";
 0132                rejectButtonLabel.text = "DON'T ALLOW\nAND EQUIP";
 133            }
 134            else
 135            {
 0136                allowButtonLabel.text = "OK";
 0137                rejectButtonLabel.text = "DON'T ALLOW";
 138            }
 139
 0140            root.ForceUpdateLayout();
 0141        }
 142
 143        public override void Show(bool instant = false)
 144        {
 0145            gameObject.SetActive(true);
 0146            base.Show(instant);
 147
 148            // let the subscribers know that the default option is 'keep showing'
 0149            if (dontAskMeAgainToggle.isOn)
 0150                dontAskMeAgainToggle.isOn = false;
 151            else
 0152                OnKeepShowing?.Invoke();
 0153        }
 154
 155        public override void Hide(bool instant = false)
 156        {
 0157            base.Hide(instant);
 158
 0159            if (instant)
 0160                gameObject.SetActive(false);
 0161        }
 162
 163        private void OnCancelTriggered(DCLAction_Trigger action) =>
 0164            OnCancelled?.Invoke();
 165    }
 166}