Skip to content

Commit d04ff9e

Browse files
authored
Added InfoBadge to status center (#6525)
1 parent 6d878f2 commit d04ff9e

File tree

3 files changed

+76
-4
lines changed

3 files changed

+76
-4
lines changed

Files/UserControls/NavigationToolbar.xaml

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<UserControl
1+
<UserControl
22
x:Class="Files.UserControls.NavigationToolbar"
33
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
44
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -335,6 +335,7 @@
335335
Background="{ThemeResource NavigationToolbarBackgroundBrush}"
336336
ColumnSpacing="0"
337337
CornerRadius="{StaticResource NavToolbarCornerRadius}">
338+
338339
<Grid Padding="8,0,8,8" ColumnSpacing="4">
339340
<Grid.ColumnDefinitions>
340341
<ColumnDefinition Width="Auto" />
@@ -557,6 +558,7 @@
557558
</Flyout>
558559
</Button.Flyout>
559560
</Button>
561+
<muxc:InfoBadge x:Name="StatusInfoBadge" HorizontalAlignment="Right" VerticalAlignment="Top" Value="{x:Bind OngoingTasksViewModel.InfoBadgeValue, Mode=OneWay}" />
560562
</Grid>
561563

562564
<Button
@@ -602,6 +604,41 @@
602604
</VisualState.Setters>
603605
</VisualState>
604606
</VisualStateGroup>
607+
<VisualStateGroup>
608+
<VisualState x:Name="TasksSuccess">
609+
<VisualState.StateTriggers>
610+
<triggers:CompareStateTrigger Value="{x:Bind OngoingTasksViewModel.InfoBadgeState, Mode=OneWay}" Comparison="Equal" To="0" />
611+
</VisualState.StateTriggers>
612+
<VisualState.Setters>
613+
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource SuccessIconInfoBadgeStyle}" />
614+
</VisualState.Setters>
615+
</VisualState>
616+
<VisualState x:Name="TasksOnging">
617+
<VisualState.StateTriggers>
618+
<triggers:CompareStateTrigger Value="{x:Bind OngoingTasksViewModel.InfoBadgeState, Mode=OneWay}" Comparison="Equal" To="1" />
619+
</VisualState.StateTriggers>
620+
<VisualState.Setters>
621+
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource AttentionValueInfoBadgeStyle}" />
622+
</VisualState.Setters>
623+
</VisualState>
624+
<VisualState x:Name="TasksFailure">
625+
<VisualState.StateTriggers>
626+
<triggers:CompareStateTrigger Value="{x:Bind OngoingTasksViewModel.InfoBadgeState, Mode=OneWay}" Comparison="Equal" To="2" />
627+
</VisualState.StateTriggers>
628+
<VisualState.Setters>
629+
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource CriticalValueInfoBadgeStyle}" />
630+
</VisualState.Setters>
631+
</VisualState>
632+
<VisualState x:Name="TasksCompletionWithFailure">
633+
<VisualState.StateTriggers>
634+
<triggers:CompareStateTrigger Value="{x:Bind OngoingTasksViewModel.InfoBadgeState, Mode=OneWay}" Comparison="Equal" To="3" />
635+
</VisualState.StateTriggers>
636+
<VisualState.Setters>
637+
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource CriticalIconInfoBadgeStyle}" />
638+
</VisualState.Setters>
639+
</VisualState>
640+
</VisualStateGroup>
605641
</VisualStateManager.VisualStateGroups>
642+
606643
</Grid>
607644
</UserControl>

Files/UserControls/NavigationToolbar.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Files.Helpers.XamlHelpers;
1+
using Files.Helpers.XamlHelpers;
22
using Files.ViewModels;
33
using System.Windows.Input;
44
using Windows.System;
@@ -172,4 +172,4 @@ public bool ShowSettingsButton
172172
public static readonly DependencyProperty ShowSettingsButtonProperty =
173173
DependencyProperty.Register(nameof(ShowSettingsButton), typeof(bool), typeof(NavigationToolbar), new PropertyMetadata(null));
174174
}
175-
}
175+
}

Files/ViewModels/StatusCenterViewModel.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Linq;
1111
using System.Threading;
1212
using System.Windows.Input;
13+
using Windows.ApplicationModel.Core;
1314
using Windows.UI;
1415
using Windows.UI.Xaml;
1516
using Windows.UI.Xaml.Controls;
@@ -64,6 +65,27 @@ public bool AnyBannersPresent
6465
get => StatusBannersSource.Any();
6566
}
6667

68+
public int InfoBadgeState
69+
{
70+
get
71+
{
72+
var anyFailure = StatusBannersSource.Any(i => i.Status != ReturnResult.InProgress && i.Status != ReturnResult.Success);
73+
74+
return (anyFailure, AnyOperationsOngoing) switch
75+
{
76+
(false, false) => 0, // all success
77+
(false, true) => 1, // ongoing
78+
(true, true) => 2, // onging with failure
79+
(true, false) => 3 // completed with failure
80+
};
81+
}
82+
}
83+
84+
public int InfoBadgeValue
85+
{
86+
get => OngoingOperationsCount > 0 ? OngoingOperationsCount : -1;
87+
}
88+
6789
#endregion Public Properties
6890

6991
#region Events
@@ -120,6 +142,8 @@ public void UpdateBanner(StatusBanner banner)
120142
{
121143
OnPropertyChanged(nameof(OngoingOperationsCount));
122144
OnPropertyChanged(nameof(AnyOperationsOngoing));
145+
OnPropertyChanged(nameof(InfoBadgeState));
146+
OnPropertyChanged(nameof(InfoBadgeValue));
123147
}
124148

125149
public void UpdateMedianProgress()
@@ -203,6 +227,8 @@ private void ReportProgressToBanner(float value)
203227

204228
private void ReportProgressToBanner(ReturnResult value)
205229
{
230+
Banner.Status = value;
231+
OngoingTasksActions.UpdateBanner(Banner);
206232
}
207233

208234
#endregion Private Helpers
@@ -260,7 +286,16 @@ public bool IsProgressing
260286

261287
public string Title { get; private set; }
262288

263-
public ReturnResult Status { get; private set; } = ReturnResult.InProgress;
289+
private ReturnResult status = ReturnResult.InProgress;
290+
291+
public ReturnResult Status
292+
{
293+
get => status;
294+
set
295+
{
296+
SetProperty(ref status, value);
297+
}
298+
}
264299

265300
public FileOperationType Operation { get; private set; }
266301

0 commit comments

Comments
 (0)