< Summary

Class:DCL.SettingsPanelHUD.Controls.SettingsControlView
Assembly:SettingsPanelHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SettingsPanelHUD/Scripts/ControlsModule/SettingsControlView.cs
Covered lines:58
Uncovered lines:13
Coverable lines:71
Total lines:183
Line coverage:81.6% (58 of 71)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SettingsControlView()0%110100%
Initialize(...)0%11110100%
OnDestroy()0%550100%
RefreshControl()0%110100%
ApplySetting(...)0%2100%
OnInfoButtonClicked()0%6200%
OnGeneralSettingsChanged(...)0%2100%
OnQualitySettingsChanged(...)0%2100%
OnAnyDeactivationFlagChange(...)0%2100%
OnAnyDisableFlagChange(...)0%2100%
OnAnyOverrideFlagChange(...)0%2100%
AllFlagsAreDisabled(...)0%12300%
AnyFlagIsEnabled(...)0%12300%
SwitchVisibility(...)0%110100%
SwitchInteractibility(...)0%330100%
SetOverriden(...)0%110100%
SwitchUIControlInteractibility(...)0%10100100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SettingsPanelHUD/Scripts/ControlsModule/SettingsControlView.cs

#LineLine coverage
 1using DCL.SettingsCommon;
 2using DCL.SettingsCommon.SettingsControllers.BaseControllers;
 3using DCL.SettingsPanelHUD.Common;
 4using System.Collections.Generic;
 5using System.Linq;
 6using TMPro;
 7using UIComponents.Scripts.Components;
 8using UIComponents.Scripts.Components.Tooltip;
 9using UnityEngine;
 10using UnityEngine.UI;
 11using QualitySettings = DCL.SettingsCommon.QualitySettings;
 12
 13namespace DCL.SettingsPanelHUD.Controls
 14{
 15    /// <summary>
 16    /// MonoBehaviour that represents the base of a CONTROL view.
 17    /// </summary>
 18    public class SettingsControlView : MonoBehaviour, ISettingsControlView
 19    {
 20        [SerializeField] private CanvasGroup canvasGroup;
 21        [SerializeField] private CanvasGroup controlCanvasGroup;
 22
 23        [Space]
 24        [SerializeField] private TextMeshProUGUI title;
 25        [SerializeField] private Color titleDeactivationColor;
 26
 27        [Space]
 28        [SerializeField] private GameObject betaIndicator;
 29        [SerializeField] private ButtonComponentView infoButton;
 30        [SerializeField] private TooltipComponentView tooltip;
 31
 32        [Space]
 33        [SerializeField] private List<TextMeshProUGUI> valueLabels;
 34        [SerializeField] private Color valueLabelDeactivationColor;
 35
 36        [Space]
 37        [SerializeField] private List<Image> handleImages;
 38        [SerializeField] private Color handlerDeactivationColor;
 39
 40        [Space]
 41        [SerializeField] private List<CanvasGroup> controlBackgroundCanvasGroups;
 4542        [SerializeField] private float controlBackgroundDeactivationAlpha = 0.5f;
 43
 44        private SettingsControlController settingsControlController;
 45
 46        private SettingsControlModel controlConfig;
 47        private Color originalTitleColor;
 48        private Color originalLabelColor;
 49        private Color originalHandlerColor;
 50        private float originalControlBackgroundAlpha;
 51
 52        public virtual void Initialize(SettingsControlModel model, SettingsControlController controller)
 53        {
 3554            controlConfig = model;
 3555            settingsControlController = controller;
 3556            settingsControlController.Initialize();
 57
 3558            betaIndicator.SetActive(model.isBeta);
 59
 3560            tooltip.SetModel(new TooltipComponentModel("This setting is being controlled \n by the creator"));
 3561            infoButton.onClick.AddListener(OnInfoButtonClicked);
 3562            infoButton.gameObject.SetActive(false);
 63
 3564            title.text = model.title;
 3565            originalTitleColor = title.color;
 3566            originalLabelColor = valueLabels.Count > 0 ? valueLabels[0].color : Color.white;
 3567            originalHandlerColor = handleImages.Count > 0 ? handleImages[0].color : Color.white;
 3568            originalControlBackgroundAlpha = controlBackgroundCanvasGroups.Count > 0 ? controlBackgroundCanvasGroups[0].
 69
 4070            SwitchInteractibility(isInteractable: model.flagsThatDisableMe.All(flag => flag.Get() == false));
 3771            SwitchVisibility(isVisible: model.flagsThatDeactivateMe.All(flag => flag.Get() == false));
 3772            SetOverriden(@override: model.flagsThatOverrideMe.Any(flag => flag.Get()));
 73
 3574            RefreshControl();
 75
 8076            foreach (BooleanVariable flag in model.flagsThatDisableMe)
 577                flag.OnChange += OnAnyDisableFlagChange;
 78
 7479            foreach (BooleanVariable flag in model.flagsThatDeactivateMe)
 280                flag.OnChange += OnAnyDeactivationFlagChange;
 81
 7482            foreach (BooleanVariable flag in model.flagsThatOverrideMe)
 283                flag.OnChange += OnAnyOverrideFlagChange;
 84
 3585            Settings.i.generalSettings.OnChanged += OnGeneralSettingsChanged;
 3586            Settings.i.qualitySettings.OnChanged += OnQualitySettingsChanged;
 3587            Settings.i.OnResetAllSettings += RefreshControl;
 3588        }
 89
 90        protected virtual void OnDestroy()
 91        {
 3892            if (controlConfig != null)
 93            {
 8094                foreach (BooleanVariable flag in controlConfig.flagsThatDisableMe)
 595                    flag.OnChange -= OnAnyDisableFlagChange;
 96
 7497                foreach (BooleanVariable flag in controlConfig.flagsThatDeactivateMe)
 298                    flag.OnChange -= OnAnyDeactivationFlagChange;
 99
 74100                foreach (BooleanVariable flag in controlConfig.flagsThatOverrideMe)
 2101                    flag.OnChange -= OnAnyOverrideFlagChange;
 102            }
 103
 38104            infoButton.onClick.RemoveListener(OnInfoButtonClicked);
 105
 38106            Settings.i.generalSettings.OnChanged -= OnGeneralSettingsChanged;
 38107            Settings.i.qualitySettings.OnChanged -= OnQualitySettingsChanged;
 38108            Settings.i.OnResetAllSettings -= RefreshControl;
 38109        }
 110
 35111        public virtual void RefreshControl() { }
 112
 113        /// <summary>
 114        /// It will be triggered when the CONTROL state changes and will execute the main flow of the CONTROL controller
 115        /// </summary>
 116        /// <param name="newValue">Value of the new state. It can be a bool (for toggle controls), a float (for slider c
 117        protected void ApplySetting(object newValue)
 118        {
 0119            settingsControlController.UpdateSetting(newValue);
 0120            settingsControlController.ApplySettings();
 0121        }
 122
 123        private void OnInfoButtonClicked()
 124        {
 0125            if (!tooltip.gameObject.activeSelf)
 0126                tooltip.Show();
 0127        }
 128
 129        private void OnGeneralSettingsChanged(GeneralSettings _) =>
 0130            RefreshControl();
 131
 132        private void OnQualitySettingsChanged(QualitySettings _) =>
 0133            RefreshControl();
 134
 135        private void OnAnyDeactivationFlagChange(bool deactivateFlag, bool _ = false) =>
 0136            SwitchVisibility(isVisible: AllFlagsAreDisabled(deactivateFlag, controlConfig.flagsThatDeactivateMe));
 137
 138        private void OnAnyDisableFlagChange(bool disableFlag, bool _ = false) =>
 0139            SwitchInteractibility(isInteractable: AllFlagsAreDisabled(disableFlag, controlConfig.flagsThatDisableMe));
 140
 141        private void OnAnyOverrideFlagChange(bool overrideFlag, bool _ = false) =>
 0142            SetOverriden(@override: AnyFlagIsEnabled(overrideFlag, controlConfig.flagsThatOverrideMe));
 143
 144        private static bool AllFlagsAreDisabled(bool flagEnabled, List<BooleanVariable> flags) =>
 0145            !flagEnabled && flags.All(flag => flag.Get() == false);
 146
 147        private static bool AnyFlagIsEnabled(bool flagEnabled, List<BooleanVariable> flags) =>
 0148            flagEnabled || flags.Any(flag => flag.Get());
 149
 150        private void SwitchVisibility(bool isVisible)
 151        {
 35152            gameObject.SetActive(isVisible);
 35153            CommonSettingsPanelEvents.RaiseRefreshAllWidgetsSize();
 35154        }
 155
 156        private void SwitchInteractibility(bool isInteractable)
 157        {
 35158            title.color = isInteractable ? originalTitleColor : titleDeactivationColor;
 35159            SwitchUIControlInteractibility(isInteractable, canvasGroup);
 35160        }
 161
 162        private void SetOverriden(bool @override)
 163        {
 35164            infoButton.gameObject.SetActive(@override);
 35165            SwitchUIControlInteractibility(isInteractable: !@override, controlCanvasGroup);
 35166        }
 167
 168        private void SwitchUIControlInteractibility(bool isInteractable, CanvasGroup group)
 169        {
 292170            foreach (TextMeshProUGUI text in valueLabels)
 76171                text.color = isInteractable ? originalLabelColor : valueLabelDeactivationColor;
 172
 296173            foreach (Image image in handleImages)
 78174                image.color = isInteractable ? originalHandlerColor : handlerDeactivationColor;
 175
 296176            foreach (CanvasGroup bkgCanvasGroup in controlBackgroundCanvasGroups)
 78177                bkgCanvasGroup.alpha = isInteractable ? originalControlBackgroundAlpha : controlBackgroundDeactivationAl
 178
 70179            group.interactable = isInteractable;
 70180            group.blocksRaycasts = isInteractable;
 70181        }
 182    }
 183}