diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index 2ee285a38..75fa59421 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -43,6 +43,7 @@ class BranchesView : Subview [NonSerialized] private List newLocalBranches; [NonSerialized] private BranchTreeNode newNodeSelection; [NonSerialized] private BranchesMode targetMode; + [NonSerialized] private bool favouritesHasChanged; [SerializeField] private BranchTreeNode activeBranchNode; [SerializeField] private BranchTreeNode localRoot; @@ -51,6 +52,7 @@ class BranchesView : Subview [SerializeField] private List remotes = new List(); [SerializeField] private Vector2 scroll; [SerializeField] private BranchTreeNode selectedNode; + private List favouritesList; public override void InitializeView(IView parent) { @@ -62,6 +64,7 @@ public override void OnEnable() { base.OnEnable(); AttachHandlers(Repository); + favouritesHasChanged = true; } public override void OnDisable() @@ -70,6 +73,21 @@ public override void OnDisable() DetachHandlers(Repository); } + public override void OnDataUpdate() + { + base.OnDataUpdate(); + MaybeUpdateData(); + } + + private void MaybeUpdateData() + { + if (favouritesHasChanged) + { + favouritesList = Manager.LocalSettings.Get(FavoritesSetting, new List()); + favouritesHasChanged = false; + } + } + public override void OnRepositoryChanged(IRepository oldRepository) { base.OnRepositoryChanged(oldRepository); @@ -246,12 +264,12 @@ public void OnEmbeddedGUI() private int CompareBranches(GitBranch a, GitBranch b) { - if (GetFavourite(a.Name)) + if (IsFavourite(a.Name)) { return -1; } - if (GetFavourite(b.Name)) + if (IsFavourite(b.Name)) { return 1; } @@ -269,19 +287,9 @@ private int CompareBranches(GitBranch a, GitBranch b) return 0; } - private bool GetFavourite(BranchTreeNode branch) - { - return GetFavourite(branch.Name); - } - - private bool GetFavourite(string branchName) + private bool IsFavourite(string branchName) { - if (string.IsNullOrEmpty(branchName)) - { - return false; - } - - return Manager.LocalSettings.Get(FavoritesSetting, new List()).Contains(branchName); + return !String.IsNullOrEmpty(branchName) && favouritesList.Contains(branchName); } private void OnLocalBranchesUpdate(IEnumerable list) @@ -312,7 +320,6 @@ private void BuildTree(IEnumerable local, IEnumerable remo // Prepare for updated favourites listing favourites.Clear(); - var cachedFavs = Manager.LocalSettings.Get>(FavoritesSetting, new List()); // Just build directly on the local root, keep track of active branch localRoot = new BranchTreeNode("", NodeType.Folder, false); @@ -342,7 +349,7 @@ private void BuildTree(IEnumerable local, IEnumerable remo } // Add to favourites - if (cachedFavs.Contains(branch.Name)) + if (favouritesList.Contains(branch.Name)) { favourites.Add(node); } @@ -386,7 +393,7 @@ private void BuildTree(IEnumerable local, IEnumerable remo } // Add to favourites - if (cachedFavs.Contains(branch.Name)) + if (favouritesList.Contains(branch.Name)) { favourites.Add(node); } @@ -597,7 +604,7 @@ private void OnTreeNodeGUI(BranchTreeNode node) if (node.Type != NodeType.Folder) { - var favourite = GetFavourite(node); + var favourite = IsFavourite(node.Name); if (Event.current.type == EventType.Repaint) { GUI.DrawTexture(favouriteRect, favourite ? Styles.FavouriteIconOn : Styles.FavouriteIconOff); @@ -610,7 +617,7 @@ private void OnTreeNodeGUI(BranchTreeNode node) } } // Favourite status - else if (Event.current.type == EventType.Repaint && node.Type != NodeType.Folder && GetFavourite(node.Name)) + else if (Event.current.type == EventType.Repaint && node.Type != NodeType.Folder && IsFavourite(node.Name)) { GUI.DrawTexture(favouriteRect, Styles.FavouriteIconOn); } diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs index 2882f5c9c..4518b2aaf 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs @@ -45,13 +45,16 @@ class SettingsView : Subview [SerializeField] private bool isBusy; [SerializeField] private int lockedFileSelection = -1; [SerializeField] private bool hasRemote; - [SerializeField] private bool remoteHasChanged; + [NonSerialized] private bool remoteHasChanged; [NonSerialized] private bool userDataHasChanged; [SerializeField] private string newGitName; [SerializeField] private string newGitEmail; [SerializeField] private string newRepositoryRemoteUrl; [SerializeField] private User cachedUser; + + [SerializeField] private bool metricsEnabled; + [NonSerialized] private bool metricsHasChanged; public override void OnEnable() { @@ -59,6 +62,7 @@ public override void OnEnable() AttachHandlers(Repository); remoteHasChanged = true; + metricsHasChanged = true; } public override void OnDisable() @@ -141,6 +145,12 @@ public override void OnGUI() private void MaybeUpdateData() { + if (metricsHasChanged) + { + metricsEnabled = Manager.UsageTracker.Enabled; + metricsHasChanged = false; + } + if (lockedFiles == null) lockedFiles = new List(); @@ -477,13 +487,10 @@ private void OnInstallPathGUI() private void OnPrivacyGui() { - var service = Manager != null ? Manager.UsageTracker : null; - GUILayout.Label(PrivacyTitle, EditorStyles.boldLabel); - EditorGUI.BeginDisabledGroup(isBusy || service == null); + EditorGUI.BeginDisabledGroup(isBusy); { - var metricsEnabled = service != null && service.Enabled; EditorGUI.BeginChangeCheck(); { metricsEnabled = GUILayout.Toggle(metricsEnabled, MetricsOptInLabel); @@ -492,7 +499,6 @@ private void OnPrivacyGui() { Manager.UsageTracker.Enabled = metricsEnabled; } - } EditorGUI.EndDisabledGroup(); }