< Summary

Class:ExploreV2MenuComponentController
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/MainMenu/ExploreV2Menu/ExploreV2MenuComponentController.cs
Covered lines:196
Uncovered lines:26
Coverable lines:222
Total lines:411
Line coverage:88.2% (196 of 222)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ExploreV2MenuComponentController()0%110100%
Initialize()0%10100100%
Dispose()0%880100%
SetVisibility(...)0%110100%
OnSectionInitializedChanged(...)0%110100%
SectionInitializedChanged(...)0%2.062075%
OnSectionVisiblityChanged(...)0%550100%
InitializePlacesAndEventsSection()0%2.032080%
OnSectionOpen(...)0%440100%
SetVisibilityOnOpenChanged(...)0%110100%
CurrentSectionIndexChanged(...)0%4.594066.67%
SetVisibility_Internal(...)0%7.017093.33%
OnAfterShowAnimation()0%2100%
SetMenuTargetVisibility(...)0%440100%
SetSectionTargetVisibility(...)0%220100%
UpdateRealmInfo(...)0%770100%
UpdateAvailableRealmsInfo(...)0%770100%
NeedToRefreshRealms(...)0%8.66058.33%
UpdateProfileInfo(...)0%110100%
OnCloseButtonPressed(...)0%5.25080%
ConfigureOtherUIDependencies()0%110100%
CreateAnalyticsController()0%2100%
CreateView()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/MainMenu/ExploreV2Menu/ExploreV2MenuComponentController.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using DCL;
 5using ExploreV2Analytics;
 6using UnityEngine;
 7using Variables.RealmsInfo;
 8
 9/// <summary>
 10/// Main controller for the feature "Explore V2".
 11/// </summary>
 12public class ExploreV2MenuComponentController : IExploreV2MenuComponentController
 13{
 14    internal const ExploreSection DEFAULT_SECTION = ExploreSection.Explore;
 15
 16    internal const float MIN_TIME_AFTER_CLOSE_OTHER_UI_TO_OPEN_START_MENU = 0.1f;
 5817    internal readonly List<RealmRowComponentModel> currentAvailableRealms = new List<RealmRowComponentModel>();
 18    internal float chatInputHUDCloseTime = 0f;
 19    internal float controlsHUDCloseTime = 0f;
 20    internal ExploreSection currentOpenSection;
 21    internal float emotesHUDCloseTime = 0f;
 22    internal IExploreV2Analytics exploreV2Analytics;
 23    internal MouseCatcher mouseCatcher;
 24    internal IPlacesAndEventsSectionComponentController placesAndEventsSectionController;
 25    internal float playerInfoCardHUDCloseTime = 0f;
 26    private Dictionary<BaseVariable<bool>, ExploreSection> sectionsByInitVar;
 27    internal Dictionary<BaseVariable<bool>, ExploreSection> sectionsByVisiblityVar;
 28
 29    private Dictionary<ExploreSection, (BaseVariable<bool> initVar, BaseVariable<bool> visibilityVar)> sectionsVariables
 30
 31    internal IExploreV2MenuComponentView view;
 32
 17433    internal UserProfile ownUserProfile => UserProfile.GetOwnUserProfile();
 5834    internal RectTransform topMenuTooltipReference => view.currentTopMenuTooltipReference;
 5835    internal RectTransform placesAndEventsTooltipReference => view.currentPlacesAndEventsTooltipReference;
 5836    internal RectTransform backpackTooltipReference => view.currentBackpackTooltipReference;
 5837    internal RectTransform mapTooltipReference => view.currentMapTooltipReference;
 5838    internal RectTransform builderTooltipReference => view.currentBuilderTooltipReference;
 5839    internal RectTransform questTooltipReference => view.currentQuestTooltipReference;
 5840    internal RectTransform settingsTooltipReference => view.currentSettingsTooltipReference;
 5841    internal RectTransform profileCardTooltipReference => view.currentProfileCardTooltipReference;
 42
 34743    internal BaseVariable<bool> isOpen => DataStore.i.exploreV2.isOpen;
 27344    internal BaseVariable<int> currentSectionIndex => DataStore.i.exploreV2.currentSectionIndex;
 8145    internal BaseVariable<bool> profileCardIsOpen => DataStore.i.exploreV2.profileCardIsOpen;
 12046    internal BaseVariable<bool> isInitialized => DataStore.i.exploreV2.isInitialized;
 5847    internal BaseVariable<bool> isPlacesAndEventsSectionInitialized => DataStore.i.exploreV2.isPlacesAndEventsSectionIni
 6548    internal BaseVariable<bool> placesAndEventsVisible => DataStore.i.exploreV2.placesAndEventsVisible;
 6049    internal BaseVariable<bool> isAvatarEditorInitialized => DataStore.i.HUDs.isAvatarEditorInitialized;
 6550    internal BaseVariable<bool> avatarEditorVisible => DataStore.i.HUDs.avatarEditorVisible;
 6051    internal BaseVariable<bool> isNavmapInitialized => DataStore.i.HUDs.isNavMapInitialized;
 6552    internal BaseVariable<bool> navmapVisible => DataStore.i.HUDs.navmapVisible;
 6053    internal BaseVariable<bool> isBuilderInitialized => DataStore.i.builderInWorld.isInitialized;
 6554    internal BaseVariable<bool> builderVisible => DataStore.i.HUDs.builderProjectsPanelVisible;
 6055    internal BaseVariable<bool> isQuestInitialized => DataStore.i.Quests.isInitialized;
 6556    internal BaseVariable<bool> questVisible => DataStore.i.HUDs.questsPanelVisible;
 6057    internal BaseVariable<bool> isSettingsPanelInitialized => DataStore.i.settings.isInitialized;
 6558    internal BaseVariable<bool> settingsVisible => DataStore.i.settings.settingsPanelVisible;
 59
 5860    internal BaseVariable<bool> controlsVisible => DataStore.i.HUDs.controlsVisible;
 5861    internal BaseVariable<bool> emotesVisible => DataStore.i.HUDs.emotesVisible;
 5862    internal BaseVariable<bool> chatInputVisible => DataStore.i.HUDs.chatInputVisible;
 5863    internal BooleanVariable playerInfoCardVisible => CommonScriptableObjects.playerInfoCardVisibleState;
 64
 65    public void Initialize()
 66    {
 5867        sectionsVariables = new Dictionary<ExploreSection, (BaseVariable<bool>, BaseVariable<bool>)>
 68        {
 69            { ExploreSection.Explore, (isPlacesAndEventsSectionInitialized,  placesAndEventsVisible) },
 70            { ExploreSection.Backpack, (isAvatarEditorInitialized,  avatarEditorVisible) },
 71            { ExploreSection.Map, (isNavmapInitialized,  navmapVisible) },
 72            { ExploreSection.Builder, (isBuilderInitialized,  builderVisible) },
 73            { ExploreSection.Quest, (isQuestInitialized,  questVisible) },
 74            { ExploreSection.Settings, (isSettingsPanelInitialized,  settingsVisible) },
 75        };
 75476        sectionsByInitVar = sectionsVariables.ToDictionary(pair => pair.Value.initVar, pair => pair.Key);
 75477        sectionsByVisiblityVar = sectionsVariables.ToDictionary(pair => pair.Value.visibilityVar, pair => pair.Key);
 78
 5879        mouseCatcher = SceneReferences.i?.mouseCatcher;
 5880        exploreV2Analytics = CreateAnalyticsController();
 5881        view = CreateView();
 5882        SetVisibility(false);
 83
 5884        DataStore.i.realm.playerRealm.OnChange += UpdateRealmInfo;
 5885        UpdateRealmInfo(DataStore.i.realm.playerRealm.Get(), null);
 86
 5887        DataStore.i.realm.realmsInfo.OnSet += UpdateAvailableRealmsInfo;
 5888        UpdateAvailableRealmsInfo(DataStore.i.realm.realmsInfo.Get());
 89
 5890        ownUserProfile.OnUpdate += UpdateProfileInfo;
 5891        UpdateProfileInfo(ownUserProfile);
 5892        view.currentProfileCard.onClick?.AddListener(() => { profileCardIsOpen.Set(!profileCardIsOpen.Get()); });
 5893        view.currentRealmViewer.onLogoClick?.AddListener(view.ShowRealmSelectorModal);
 5894        view.OnCloseButtonPressed += OnCloseButtonPressed;
 5895        view.OnAfterShowAnimation += OnAfterShowAnimation;
 96
 5897        DataStore.i.exploreV2.topMenuTooltipReference.Set(topMenuTooltipReference);
 5898        DataStore.i.exploreV2.placesAndEventsTooltipReference.Set(placesAndEventsTooltipReference);
 5899        DataStore.i.exploreV2.backpackTooltipReference.Set(backpackTooltipReference);
 58100        DataStore.i.exploreV2.mapTooltipReference.Set(mapTooltipReference);
 58101        DataStore.i.exploreV2.builderTooltipReference.Set(builderTooltipReference);
 58102        DataStore.i.exploreV2.questTooltipReference.Set(questTooltipReference);
 58103        DataStore.i.exploreV2.settingsTooltipReference.Set(settingsTooltipReference);
 58104        DataStore.i.exploreV2.profileCardTooltipReference.Set(profileCardTooltipReference);
 105
 58106        view.OnSectionOpen += OnSectionOpen;
 107
 58108        isOpen.OnChange += SetVisibilityOnOpenChanged;
 58109        SetVisibilityOnOpenChanged(isOpen.Get());
 110
 58111        currentSectionIndex.OnChange += CurrentSectionIndexChanged;
 58112        CurrentSectionIndexChanged(currentSectionIndex.Get(), 0);
 113
 812114        foreach (var sectionsVariables in sectionsVariables.Values)
 115        {
 348116            sectionsVariables.initVar.OnChangeWithSenderInfo += OnSectionInitializedChanged;
 348117            OnSectionInitializedChanged(sectionsVariables.initVar, sectionsVariables.initVar.Get());
 118
 348119            sectionsVariables.visibilityVar.OnChangeWithSenderInfo += OnSectionVisiblityChanged;
 348120            OnSectionVisiblityChanged(sectionsVariables.visibilityVar, sectionsVariables.visibilityVar.Get());
 121        }
 122
 58123        ConfigureOtherUIDependencies();
 124
 58125        isInitialized.Set(true);
 126
 58127        currentSectionIndex.Set((int)DEFAULT_SECTION, false);
 128
 129        //view.ConfigureEncapsulatedSection(ExploreSection.Backpack, DataStore.i.exploreV2.configureBackpackInFullscreen
 58130        view.ConfigureEncapsulatedSection(ExploreSection.Map, DataStore.i.exploreV2.configureMapInFullscreenMenu);
 58131        view.ConfigureEncapsulatedSection(ExploreSection.Builder, DataStore.i.exploreV2.configureBuilderInFullscreenMenu
 58132        view.ConfigureEncapsulatedSection(ExploreSection.Quest, DataStore.i.exploreV2.configureQuestInFullscreenMenu);
 58133        view.ConfigureEncapsulatedSection(ExploreSection.Settings, DataStore.i.exploreV2.configureSettingsInFullscreenMe
 58134    }
 135
 136    public void Dispose()
 137    {
 58138        DataStore.i.realm.playerRealm.OnChange -= UpdateRealmInfo;
 58139        DataStore.i.realm.realmsInfo.OnSet -= UpdateAvailableRealmsInfo;
 140
 58141        ownUserProfile.OnUpdate -= UpdateProfileInfo;
 58142        view?.currentProfileCard.onClick?.RemoveAllListeners();
 143
 58144        isOpen.OnChange -= SetVisibilityOnOpenChanged;
 58145        currentSectionIndex.OnChange -= CurrentSectionIndexChanged;
 146
 812147        foreach (var sectionsVariables in sectionsVariables.Values)
 148        {
 348149            sectionsVariables.initVar.OnChangeWithSenderInfo -= OnSectionInitializedChanged;
 348150            sectionsVariables.visibilityVar.OnChangeWithSenderInfo -= OnSectionVisiblityChanged;
 151        }
 152
 58153        if (placesAndEventsSectionController != null)
 154        {
 1155            placesAndEventsSectionController.OnCloseExploreV2 -= OnCloseButtonPressed;
 1156            placesAndEventsSectionController.Dispose();
 157        }
 158
 58159        if (view != null)
 160        {
 58161            view.currentProfileCard.onClick?.RemoveAllListeners();
 58162            view.currentRealmViewer.onLogoClick?.RemoveAllListeners();
 58163            view.OnCloseButtonPressed -= OnCloseButtonPressed;
 58164            view.OnAfterShowAnimation -= OnAfterShowAnimation;
 58165            view.OnSectionOpen -= OnSectionOpen;
 58166            view.Dispose();
 167        }
 58168    }
 169
 84170    public void SetVisibility(bool visible) => isOpen.Set(visible);
 171
 172    private void OnSectionInitializedChanged(BaseVariable<bool> initVar, bool initialized, bool _ = false) =>
 353173        SectionInitializedChanged(sectionsByInitVar[initVar], initialized);
 174
 175    internal void SectionInitializedChanged(ExploreSection section, bool initialized, bool _ = false)
 176    {
 363177        view.SetSectionActive(section, initialized);
 178
 363179        if (section == ExploreSection.Explore && initialized)
 0180            InitializePlacesAndEventsSection();
 363181    }
 182
 183    private void OnSectionVisiblityChanged(BaseVariable<bool> visibilityVar, bool visible, bool previous = false)
 184    {
 360185        ExploreSection section = sectionsByVisiblityVar[visibilityVar];
 360186        BaseVariable<bool> initVar = section == ExploreSection.Explore ? isInitialized : sectionsVariables[section].init
 187
 360188        if (!initVar.Get() || DataStore.i.common.isSignUpFlow.Get())
 151189            return;
 190
 209191        SetMenuTargetVisibility(sectionsByVisiblityVar[visibilityVar], visible);
 209192    }
 193
 194    internal void InitializePlacesAndEventsSection()
 195    {
 1196        if (placesAndEventsSectionController != null)
 0197            return;
 198
 1199        placesAndEventsSectionController = new PlacesAndEventsSectionComponentController(view.currentPlacesAndEventsSect
 1200        placesAndEventsSectionController.OnCloseExploreV2 += OnCloseButtonPressed;
 1201    }
 202
 203    internal void OnSectionOpen(ExploreSection section)
 204    {
 12205        if (section != currentOpenSection)
 11206            exploreV2Analytics.SendStartMenuSectionVisibility(currentOpenSection, false);
 207
 12208        currentOpenSection = section;
 209
 12210        if (currentOpenSection == ExploreSection.Backpack)
 2211            view.ConfigureEncapsulatedSection(ExploreSection.Backpack, DataStore.i.exploreV2.configureBackpackInFullscre
 212
 168213        foreach (var visibilityVar in sectionsByVisiblityVar.Keys)
 72214            visibilityVar.Set(currentOpenSection == sectionsByVisiblityVar[visibilityVar]);
 215
 12216        profileCardIsOpen.Set(false);
 12217    }
 218
 89219    internal void SetVisibilityOnOpenChanged(bool open, bool _ = false) => SetVisibility_Internal(open);
 220
 221    internal void CurrentSectionIndexChanged(int current, int previous)
 222    {
 499223        if (DataStore.i.exploreV2.isInShowAnimationTransiton.Get())
 0224            return;
 225
 499226        if (Enum.IsDefined(typeof(ExploreSection), current))
 227        {
 409228            if (!view.IsSectionActive((ExploreSection)current))
 409229                CurrentSectionIndexChanged(current + 1, current);
 230            else
 0231                view.GoToSection((ExploreSection)current);
 0232        }
 233        else
 90234            view.GoToSection(0);
 90235    }
 236
 237    internal void SetVisibility_Internal(bool visible)
 238    {
 89239        if (view == null || DataStore.i.common.isSignUpFlow.Get())
 0240            return;
 241
 89242        if (visible)
 243        {
 27244            mouseCatcher?.UnlockCursor();
 245
 27246            if (DataStore.i.common.isTutorialRunning.Get())
 1247                view.GoToSection(DEFAULT_SECTION);
 1248        }
 249        else
 250        {
 62251            CommonScriptableObjects.isFullscreenHUDOpen.Set(false);
 252
 868253            foreach (var sectionsVariables in sectionsVariables.Values)
 372254                sectionsVariables.visibilityVar.Set(false);
 255
 62256            profileCardIsOpen.Set(false);
 257        }
 258
 89259        view.SetVisible(visible);
 89260    }
 261
 0262    internal void OnAfterShowAnimation() => CommonScriptableObjects.isFullscreenHUDOpen.Set(true);
 263
 264    internal void SetMenuTargetVisibility(ExploreSection section, bool toVisible, bool _ = false)
 265    {
 227266        if (toVisible)
 267        {
 22268            if (currentSectionIndex.Get() != (int)section)
 19269                currentSectionIndex.Set((int)section);
 270
 22271            SetSectionTargetVisibility(section, toVisible: true);
 22272            view.GoToSection(section);
 22273        }
 205274        else if (currentOpenSection == section)
 275        {
 63276            SetSectionTargetVisibility(section, toVisible: false);
 277        }
 205278    }
 279
 280    private void SetSectionTargetVisibility(ExploreSection section, bool toVisible)
 281    {
 85282        bool wasInTargetVisibility =  toVisible ^ isOpen.Get();
 283
 85284        if (wasInTargetVisibility)
 285        {
 22286            SetVisibility(toVisible);
 22287            exploreV2Analytics.SendStartMenuVisibility(toVisible, ExploreUIVisibilityMethod.FromShortcut);
 288        }
 85289        exploreV2Analytics.SendStartMenuSectionVisibility(section, toVisible);
 85290    }
 291
 292    internal void UpdateRealmInfo(CurrentRealmModel currentRealm, CurrentRealmModel previousRealm)
 293    {
 60294        if (currentRealm == null)
 58295            return;
 296
 297        // Get the name of the current realm
 2298        view.currentRealmViewer.SetRealm(currentRealm.serverName);
 2299        view.currentRealmSelectorModal.SetCurrentRealm(currentRealm.serverName);
 300
 301        // Calculate number of users in the current realm
 2302        List<RealmModel> realmList = DataStore.i.realm.realmsInfo.Get()?.ToList();
 3303        RealmModel currentRealmModel = realmList?.FirstOrDefault(r => r.serverName == currentRealm.serverName);
 2304        int realmUsers = 0;
 2305        if (currentRealmModel != null)
 1306            realmUsers = currentRealmModel.usersCount;
 307
 2308        view.currentRealmViewer.SetNumberOfUsers(realmUsers);
 2309    }
 310
 311    internal void UpdateAvailableRealmsInfo(IEnumerable<RealmModel> currentRealmList)
 312    {
 60313        if (!NeedToRefreshRealms(currentRealmList))
 58314            return;
 315
 2316        currentAvailableRealms.Clear();
 2317        CurrentRealmModel currentRealm = DataStore.i.realm.playerRealm.Get();
 318
 2319        if (currentRealmList != null)
 320        {
 12321            foreach (RealmModel realmModel in currentRealmList)
 322            {
 4323                RealmRowComponentModel realmToAdd = new RealmRowComponentModel
 324                {
 325                    name = realmModel.serverName,
 326                    players = realmModel.usersCount,
 327                    isConnected = realmModel.serverName == currentRealm?.serverName
 328                };
 329
 4330                currentAvailableRealms.Add(realmToAdd);
 331            }
 332        }
 333
 2334        view.currentRealmSelectorModal.SetAvailableRealms(currentAvailableRealms);
 2335    }
 336
 337    internal bool NeedToRefreshRealms(IEnumerable<RealmModel> newRealmList)
 338    {
 60339        if (newRealmList == null)
 0340            return true;
 341
 60342        bool needToRefresh = false;
 60343        if (newRealmList.Count() == currentAvailableRealms.Count)
 344        {
 116345            foreach (RealmModel realm in newRealmList)
 346            {
 0347                if (!currentAvailableRealms.Exists(x => x.name == realm.serverName && x.players == realm.usersCount))
 348                {
 0349                    needToRefresh = true;
 0350                    break;
 351                }
 352            }
 353        }
 354        else
 2355            needToRefresh = true;
 356
 60357        return needToRefresh;
 358    }
 359
 360    internal void UpdateProfileInfo(UserProfile profile)
 361    {
 59362        view.currentProfileCard.SetIsClaimedName(profile.hasClaimedName);
 59363        view.currentProfileCard.SetProfileName(profile.userName);
 59364        view.currentProfileCard.SetProfileAddress(profile.ethAddress);
 59365        view.currentProfileCard.SetProfilePicture(profile.face256SnapshotURL);
 59366    }
 367
 368    internal void OnCloseButtonPressed(bool fromShortcut)
 369    {
 2370        if (DataStore.i.builderInWorld.areShortcutsBlocked.Get() || !isOpen.Get() )
 0371            return;
 372
 2373        SetVisibility(false);
 2374        exploreV2Analytics.SendStartMenuVisibility(false, fromShortcut ? ExploreUIVisibilityMethod.FromShortcut : Explor
 2375    }
 376
 377    internal void ConfigureOtherUIDependencies()
 378    {
 58379        controlsHUDCloseTime = Time.realtimeSinceStartup;
 58380        controlsVisible.OnChange += (current, _) =>
 381        {
 0382            if (!current)
 0383                controlsHUDCloseTime = Time.realtimeSinceStartup;
 0384        };
 385
 58386        emotesHUDCloseTime = Time.realtimeSinceStartup;
 58387        emotesVisible.OnChange += (current, _) =>
 388        {
 0389            if (!current)
 0390                emotesHUDCloseTime = Time.realtimeSinceStartup;
 0391        };
 392
 58393        chatInputHUDCloseTime = Time.realtimeSinceStartup;
 58394        chatInputVisible.OnChange += (current, _) =>
 395        {
 0396            if (!current)
 0397                chatInputHUDCloseTime = Time.realtimeSinceStartup;
 0398        };
 399
 58400        playerInfoCardHUDCloseTime = Time.realtimeSinceStartup;
 58401        playerInfoCardVisible.OnChange += (current, _) =>
 402        {
 0403            if (!current)
 0404                playerInfoCardHUDCloseTime = Time.realtimeSinceStartup;
 0405        };
 58406    }
 407
 0408    internal virtual IExploreV2Analytics CreateAnalyticsController() => new ExploreV2Analytics.ExploreV2Analytics();
 409
 0410    protected internal virtual IExploreV2MenuComponentView CreateView() => ExploreV2MenuComponentView.Create();
 411}

Methods/Properties

ExploreV2MenuComponentController()
ownUserProfile()
topMenuTooltipReference()
placesAndEventsTooltipReference()
backpackTooltipReference()
mapTooltipReference()
builderTooltipReference()
questTooltipReference()
settingsTooltipReference()
profileCardTooltipReference()
isOpen()
currentSectionIndex()
profileCardIsOpen()
isInitialized()
isPlacesAndEventsSectionInitialized()
placesAndEventsVisible()
isAvatarEditorInitialized()
avatarEditorVisible()
isNavmapInitialized()
navmapVisible()
isBuilderInitialized()
builderVisible()
isQuestInitialized()
questVisible()
isSettingsPanelInitialized()
settingsVisible()
controlsVisible()
emotesVisible()
chatInputVisible()
playerInfoCardVisible()
Initialize()
Dispose()
SetVisibility(System.Boolean)
OnSectionInitializedChanged(.BaseVariable[Boolean], System.Boolean, System.Boolean)
SectionInitializedChanged(ExploreSection, System.Boolean, System.Boolean)
OnSectionVisiblityChanged(.BaseVariable[Boolean], System.Boolean, System.Boolean)
InitializePlacesAndEventsSection()
OnSectionOpen(ExploreSection)
SetVisibilityOnOpenChanged(System.Boolean, System.Boolean)
CurrentSectionIndexChanged(System.Int32, System.Int32)
SetVisibility_Internal(System.Boolean)
OnAfterShowAnimation()
SetMenuTargetVisibility(ExploreSection, System.Boolean, System.Boolean)
SetSectionTargetVisibility(ExploreSection, System.Boolean)
UpdateRealmInfo(Variables.RealmsInfo.CurrentRealmModel, Variables.RealmsInfo.CurrentRealmModel)
UpdateAvailableRealmsInfo(System.Collections.Generic.IEnumerable[RealmModel])
NeedToRefreshRealms(System.Collections.Generic.IEnumerable[RealmModel])
UpdateProfileInfo(UserProfile)
OnCloseButtonPressed(System.Boolean)
ConfigureOtherUIDependencies()
CreateAnalyticsController()
CreateView()