Skip to content

Commit 63fbfe4

Browse files
authored
Feature: Auto clear Status Center badge when opening flyout (#17153)
1 parent da5cf3e commit 63fbfe4

File tree

3 files changed

+45
-12
lines changed

3 files changed

+45
-12
lines changed

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4232,4 +4232,8 @@
42324232
<data name="ShowStatusCenterButton" xml:space="preserve">
42334233
<value>Show status center button</value>
42344234
</data>
4235+
<data name="StatusCenterProgressRing" xml:space="preserve">
4236+
<value>Status center progress ping</value>
4237+
<comment>Screen reader name for the status center progress ring</comment>
4238+
</data>
42354239
</root>

src/Files.App/UserControls/NavigationToolbar.xaml

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<converters:NullToTrueConverter x:Key="NullToFalseConverter" Inverse="True" />
3030
<converters:NullToVisibilityCollapsedConverter x:Key="NullToVisibilityCollapsedConverter" />
3131
<converters1:BoolNegationConverter x:Key="BoolNegationConverter" />
32+
<converters:VisibilityInvertConverter x:Key="VisibilityInvertConverter" />
3233

3334
<ResourceDictionary.MergedDictionaries>
3435
<ResourceDictionary Source="ms-appx:///UserControls/KeyboardShortcut/KeyboardShortcut.xaml" />
@@ -476,36 +477,35 @@
476477
Visibility="{x:Bind ViewModel.ShowStatusCenterButton, Mode=OneWay}">
477478

478479
<Grid Margin="-16">
479-
480480
<controls:ThemedIcon
481481
x:Name="StatusCenterIcon"
482482
Width="16"
483483
Height="16"
484-
x:Load="{x:Bind OngoingTasksViewModel.HasAnyItem, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}"
485-
Style="{StaticResource App.ThemedIcons.StatusCenter}" />
484+
Style="{StaticResource App.ThemedIcons.StatusCenter}"
485+
Visibility="{x:Bind OngoingTasksViewModel.ShowProgressRing, Converter={StaticResource VisibilityInvertConverter}, Mode=OneWay}" />
486486

487487
<ProgressRing
488488
x:Name="MedianOperationProgressRing"
489489
HorizontalAlignment="Center"
490490
VerticalAlignment="Center"
491-
x:Load="{x:Bind OngoingTasksViewModel.HasAnyItemInProgress, Mode=OneWay}"
492-
Background="{ThemeResource SubtleFillColorSecondaryBrush}"
491+
AutomationProperties.Name="{helpers:ResourceString Name=StatusCenterProgressRing}"
493492
IsIndeterminate="False"
493+
Visibility="{x:Bind OngoingTasksViewModel.ShowProgressRing, Mode=OneWay}"
494494
Value="{x:Bind OngoingTasksViewModel.AverageOperationProgressValue, Mode=OneWay}" />
495495

496496
<InfoBadge
497497
x:Name="StatusInfoBadge"
498498
HorizontalAlignment="Center"
499499
VerticalAlignment="Center"
500-
Visibility="{x:Bind OngoingTasksViewModel.HasAnyItem, Mode=OneWay}"
500+
Visibility="{x:Bind OngoingTasksViewModel.ShowProgressRing, Mode=OneWay}"
501501
Value="{x:Bind OngoingTasksViewModel.InfoBadgeValue, Mode=OneWay}" />
502-
503502
</Grid>
504503

505504
<Button.Flyout>
506505
<Flyout
507506
contract8Present:ShouldConstrainToRootBounds="False"
508507
AutomationProperties.Name="{helpers:ResourceString Name=StatusCenter}"
508+
Opened="{x:Bind OngoingTasksViewModel.OnStatusCenterFlyoutOpened, Mode=OneWay}"
509509
Placement="BottomEdgeAlignedRight">
510510
<Flyout.FlyoutPresenterStyle>
511511
<Style TargetType="FlyoutPresenter">
@@ -517,7 +517,7 @@
517517
<ucs:StatusCenter
518518
x:Name="OngoingTasksControl"
519519
Width="400"
520-
MinHeight="300"
520+
MinHeight="120"
521521
MaxHeight="500"
522522
x:FieldModifier="public"
523523
IsTabStop="True" />
@@ -629,6 +629,7 @@
629629
To="0" />
630630
</VisualState.StateTriggers>
631631
<VisualState.Setters>
632+
<Setter Target="MedianOperationProgressRing.Background" Value="{ThemeResource SystemFillColorSuccessBrush}" />
632633
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource SuccessIconInfoBadgeStyle}" />
633634
</VisualState.Setters>
634635
</VisualState>
@@ -640,7 +641,9 @@
640641
To="1" />
641642
</VisualState.StateTriggers>
642643
<VisualState.Setters>
643-
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource AttentionValueInfoBadgeStyle}" />
644+
<Setter Target="MedianOperationProgressRing.Foreground" Value="{ThemeResource SystemFillColorAttentionBrush}" />
645+
<Setter Target="MedianOperationProgressRing.Background" Value="{ThemeResource SubtleFillColorSecondaryBrush}" />
646+
<Setter Target="StatusCenterIcon.Visibility" Value="Collapsed" />
644647
</VisualState.Setters>
645648
</VisualState>
646649
<VisualState x:Name="TasksFailure">
@@ -651,7 +654,9 @@
651654
To="2" />
652655
</VisualState.StateTriggers>
653656
<VisualState.Setters>
654-
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource CriticalValueInfoBadgeStyle}" />
657+
<Setter Target="MedianOperationProgressRing.Foreground" Value="{ThemeResource SystemFillColorAttentionBrush}" />
658+
<Setter Target="MedianOperationProgressRing.Background" Value="{ThemeResource SubtleFillColorSecondaryBrush}" />
659+
<Setter Target="StatusCenterIcon.Visibility" Value="Collapsed" />
655660
</VisualState.Setters>
656661
</VisualState>
657662
<VisualState x:Name="TasksCompletionWithFailure">
@@ -662,11 +667,13 @@
662667
To="3" />
663668
</VisualState.StateTriggers>
664669
<VisualState.Setters>
670+
<Setter Target="MedianOperationProgressRing.Background" Value="{ThemeResource SystemFillColorCriticalBrush}" />
671+
<Setter Target="StatusCenterIcon.Visibility" Value="Collapsed" />
665672
<Setter Target="StatusInfoBadge.Style" Value="{StaticResource CriticalIconInfoBadgeStyle}" />
666673
</VisualState.Setters>
667674
</VisualState>
668675
</VisualStateGroup>
669676
</VisualStateManager.VisualStateGroups>
670677
</Grid>
671678

672-
</UserControl>
679+
</UserControl>

src/Files.App/ViewModels/UserControls/StatusCenterViewModel.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,28 @@ public int InProgressItemCount
3131
}
3232

3333
public bool HasAnyItemInProgress
34-
=> InProgressItemCount > 0;
34+
{
35+
get
36+
{
37+
if (InProgressItemCount > 0)
38+
ShowProgressRing = true;
39+
40+
return InProgressItemCount > 0;
41+
}
42+
}
3543

3644
public bool HasAnyItem
3745
=> StatusCenterItems.Any();
3846

47+
48+
private bool _ShowProgressRing = false;
49+
public bool ShowProgressRing
50+
{
51+
get => _ShowProgressRing;
52+
private set => SetProperty(ref _ShowProgressRing, value);
53+
54+
}
55+
3956
public int InfoBadgeState
4057
{
4158
get
@@ -64,6 +81,11 @@ public StatusCenterViewModel()
6481
StatusCenterItems.CollectionChanged += (s, e) => OnPropertyChanged(nameof(HasAnyItem));
6582
}
6683

84+
public void OnStatusCenterFlyoutOpened()
85+
{
86+
ShowProgressRing = HasAnyItemInProgress || InfoBadgeState == 3;
87+
}
88+
6789
public StatusCenterItem AddItem(
6890
string headerResource,
6991
string subHeaderResource,

0 commit comments

Comments
 (0)