Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .gitignore
Binary file not shown.
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,27 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- **WindowsFeaturesService** — added SECURITY-CRITICAL documentation comment
on `FeatureNamePattern()` regex explaining it is the sole injection defense.

## [0.48.15] - 2026-05-15

### Fixed
- **AppBlockerView, AppAlertsView, ShortcutCleanerView** — removed XAML
`<UserControl.DataContext>` that bypassed DI container, causing these views
to operate on isolated ViewModel instances instead of the shared singletons.
- **DashboardView** — ColorHex string bindings now use `HexToBrushConverter`
instead of invalid `<SolidColorBrush Color="{Binding}"/>` which produced
runtime binding errors (health score ring, recommendations, disk verdicts,
tune-up overall verdict).
- **WindowsFeaturesView** — "Not elevated" warning badge now uses `FlexVis`
converter (supports `ConverterParameter=Inverse`) instead of `BoolToVis`
which ignores the parameter, causing the badge to always display.

### Changed
- **AppBlockerView, AppAlertsView** — replaced legacy `SystemControlForeground*`
brushes with app-standard `TextPrimary`/`TextSecondary`/`Border1` resources
for consistent dark-theme styling.
- **MainWindowViewModel** — corrected stale comment "non-DI resolved" to
"resolved from DI at runtime" (all 4 VMs are DI singletons since v0.48.0).

## [0.48.14] - 2026-05-15

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion SysManager/SysManager/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public partial class MainWindowViewModel : ObservableObject, IDisposable
public AboutViewModel About { get; }
public ServicesViewModel Services { get; }

// ── Implemented ViewModels (non-DI resolved) ─────────────────────
// ── Implemented ViewModels (resolved from DI at runtime) ────────
public WindowsFeaturesViewModel WindowsFeatures { get; }
public AppAlertsViewModel AppAlerts { get; }
public ShortcutCleanerViewModel ShortcutCleaner { get; }
Expand Down
17 changes: 9 additions & 8 deletions SysManager/SysManager/Views/AppAlertsView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
<UserControl x:Class="SysManager.Views.AppAlertsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SysManager.ViewModels">
<UserControl.DataContext>
<vm:AppAlertsViewModel />
</UserControl.DataContext>
xmlns:vm="clr-namespace:SysManager.ViewModels"
d:DataContext="{d:DesignInstance vm:AppAlertsViewModel}"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Margin="24">
<Grid.RowDefinitions>
Expand All @@ -18,9 +19,9 @@
<!-- Header -->
<StackPanel Grid.Row="0" Margin="0,0,0,16">
<TextBlock Text="App Installation Alerts" FontSize="20" FontWeight="SemiBold"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}" />
Foreground="{StaticResource TextPrimary}" />
<TextBlock Text="{Binding MonitorStatus}" Opacity="0.7" Margin="0,4,0,0"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}" />
Foreground="{StaticResource TextSecondary}" />
</StackPanel>

<!-- Toolbar -->
Expand All @@ -38,7 +39,7 @@
AutoGenerateColumns="False" IsReadOnly="True"
CanUserAddRows="False" CanUserDeleteRows="False"
HeadersVisibility="Column" GridLinesVisibility="Horizontal"
BorderThickness="1" BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}">
BorderThickness="1" BorderBrush="{StaticResource Border1}">
<DataGrid.Columns>
<DataGridTextColumn Header="Detected" Binding="{Binding DetectedAt, StringFormat='{}{0:HH:mm:ss dd-MMM}'}" Width="120" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="200" />
Expand All @@ -51,7 +52,7 @@
<!-- Footer -->
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,8,0,0">
<TextBlock Opacity="0.6" VerticalAlignment="Center"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}">
Foreground="{StaticResource TextSecondary}">
<Run Text="{Binding AlertCount, Mode=OneWay}" />
<Run Text=" total · " />
<Run Text="{Binding UnacknowledgedCount, Mode=OneWay}" />
Expand Down
19 changes: 10 additions & 9 deletions SysManager/SysManager/Views/AppBlockerView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
<UserControl x:Class="SysManager.Views.AppBlockerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SysManager.ViewModels">
<UserControl.DataContext>
<vm:AppBlockerViewModel />
</UserControl.DataContext>
xmlns:vm="clr-namespace:SysManager.ViewModels"
d:DataContext="{d:DesignInstance vm:AppBlockerViewModel}"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Margin="24">
<Grid.RowDefinitions>
Expand All @@ -19,11 +20,11 @@
<!-- Header -->
<StackPanel Grid.Row="0" Margin="0,0,0,16">
<TextBlock Text="Application Blocker" FontSize="20" FontWeight="SemiBold"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}" />
Foreground="{StaticResource TextPrimary}" />
<TextBlock Text="{Binding BlockStatus}" Opacity="0.7" Margin="0,4,0,0"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}" />
Foreground="{StaticResource TextSecondary}" />
<TextBlock Text="Requires administrator privileges." Opacity="0.5" Margin="0,2,0,0"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}" />
Foreground="{StaticResource TextSecondary}" />
</StackPanel>

<!-- Block input -->
Expand All @@ -48,7 +49,7 @@
AutoGenerateColumns="False" IsReadOnly="False"
CanUserAddRows="False" CanUserDeleteRows="False"
HeadersVisibility="Column" GridLinesVisibility="Horizontal"
BorderThickness="1" BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}">
BorderThickness="1" BorderBrush="{StaticResource Border1}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" Width="40" />
<DataGridTextColumn Header="Executable" Binding="{Binding ExecutableName}" Width="*" IsReadOnly="True" />
Expand All @@ -58,7 +59,7 @@
<!-- Footer -->
<StackPanel Grid.Row="4" Orientation="Horizontal" Margin="0,8,0,0">
<TextBlock Opacity="0.6" VerticalAlignment="Center"
Foreground="{DynamicResource SystemControlForegroundBaseHighBrush}">
Foreground="{StaticResource TextSecondary}">
<Run Text="{Binding BlockedCount, Mode=OneWay}" />
<Run Text=" blocked" />
</TextBlock>
Expand Down
25 changes: 9 additions & 16 deletions SysManager/SysManager/Views/DashboardView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,8 @@
<!-- Circular gauge (score number with colored ring) -->
<Border Grid.Column="0" Width="100" Height="100" CornerRadius="50"
BorderThickness="6" Margin="0,0,16,0"
HorizontalAlignment="Center" VerticalAlignment="Center">
<Border.BorderBrush>
<SolidColorBrush Color="{Binding HealthResult.ColorHex}"/>
</Border.BorderBrush>
HorizontalAlignment="Center" VerticalAlignment="Center"
BorderBrush="{Binding HealthResult.ColorHex, Converter={StaticResource HexBrush}}">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="{Binding HealthResult.Score}" FontSize="32" FontWeight="Bold"
HorizontalAlignment="Center" Foreground="White"/>
Expand Down Expand Up @@ -119,16 +117,10 @@
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,2,0,0">
<TextBlock Text="{Binding IconGlyph}" FontFamily="Segoe Fluent Icons"
FontSize="12" Margin="0,0,6,0" VerticalAlignment="Center">
<TextBlock.Foreground>
<SolidColorBrush Color="{Binding ColorHex}"/>
</TextBlock.Foreground>
</TextBlock>
<TextBlock Text="{Binding Message}" FontSize="12" VerticalAlignment="Center">
<TextBlock.Foreground>
<SolidColorBrush Color="{Binding ColorHex}"/>
</TextBlock.Foreground>
</TextBlock>
FontSize="12" Margin="0,0,6,0" VerticalAlignment="Center"
Foreground="{Binding ColorHex, Converter={StaticResource HexBrush}}"/>
<TextBlock Text="{Binding Message}" FontSize="12" VerticalAlignment="Center"
Foreground="{Binding ColorHex, Converter={StaticResource HexBrush}}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
Expand Down Expand Up @@ -250,7 +242,8 @@
<TextBlock Text="{Binding Name}" Foreground="#C9D1D9" Margin="0,0,6,0"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding Verdict}" FontWeight="SemiBold"
VerticalAlignment="Center" Foreground="{Binding ColorHex}"/>
VerticalAlignment="Center"
Foreground="{Binding ColorHex, Converter={StaticResource HexBrush}}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
Expand Down Expand Up @@ -295,7 +288,7 @@
<!-- Overall verdict -->
<Separator Margin="0,8" Background="#21262D"/>
<TextBlock Text="{Binding TuneUpResult.OverallVerdict}" FontWeight="SemiBold" FontSize="13"
Foreground="{Binding TuneUpResult.OverallColorHex}"/>
Foreground="{Binding TuneUpResult.OverallColorHex, Converter={StaticResource HexBrush}}"/>
</StackPanel>
</Border>

Expand Down
9 changes: 5 additions & 4 deletions SysManager/SysManager/Views/ShortcutCleanerView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
<UserControl x:Class="SysManager.Views.ShortcutCleanerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SysManager.ViewModels">
<UserControl.DataContext>
<vm:ShortcutCleanerViewModel />
</UserControl.DataContext>
xmlns:vm="clr-namespace:SysManager.ViewModels"
d:DataContext="{d:DesignInstance vm:ShortcutCleanerViewModel}"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<UserControl.Resources>
<LinearGradientBrush x:Key="PageBg" StartPoint="0,0" EndPoint="1,1">
Expand Down
2 changes: 1 addition & 1 deletion SysManager/SysManager/Views/WindowsFeaturesView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
<TextBlock Text="✓ Administrator" FontSize="11" Foreground="#4ADE80"/>
</Border>
<Border Background="#2D1F1F" CornerRadius="4" Padding="6,2" Margin="4,0"
Visibility="{Binding IsElevated, Converter={StaticResource BoolToVis}, ConverterParameter=Inverse}">
Visibility="{Binding IsElevated, Converter={StaticResource FlexVis}, ConverterParameter=Inverse}">
<TextBlock Text="⚠ Not elevated — toggle disabled" FontSize="11" Foreground="#F59E0B"/>
</Border>
</WrapPanel>
Expand Down
Loading