T3-11/14/15 + M2 잔여: 권한 정책 UI(PermissionGate/PermissionRequested 다이얼로그+SavesInProfile), 추적 방지(TrackerBlocklist/WebResourceRequested 차단+실드 배지·팝업), 주소창 진행 바+파라미터 제거 복사(UrlCleaner/NavProgressTracker), U5 완료 알림(Mobile.Core 감지기+Plugin.LocalNotification), 재생중 ongoing 미디어 알림, 썸네일/해상도 API(Thumbnailer 사이드카 캐시+/thumb)+라이브러리 그리드, 외부망 안내(ConnectionTroubleshoot). 147 tests GREEN

This commit is contained in:
Yun Chan 2026-08-15 18:11:49 +09:00
parent 27c91c04dd
commit 46c6c321f2
26 changed files with 1058 additions and 30 deletions

View file

@ -191,6 +191,14 @@
<Button Name="HistoryBtn" Style="{StaticResource IconButton}" Content="&#xE823;" ToolTip="방문 기록" Margin="0,0,2,0" Click="ToggleHistory"/>
<Button Name="TabSearchBtn" Style="{StaticResource IconButton}" Content="&#xE721;" ToolTip="탭 검색 (Ctrl+Shift+A)" Margin="0,0,2,0" Click="ToggleTabSearch"/>
<Button Name="DownloadsBtn" Style="{StaticResource IconButton}" Content="&#xE896;" ToolTip="다운로드 (Ctrl+J)" Margin="0,0,2,0" Click="ToggleDownloads"/>
<!-- T3-14 추적 방지 실드 -->
<Grid Margin="0,0,2,0">
<Button Name="ShieldBtn" Style="{StaticResource IconButton}" Content="&#xE72E;" ToolTip="추적 방지" Click="Shield_Click"/>
<Border Name="ShieldBadge" CornerRadius="8" Background="#FF4CAF50" Padding="5,1"
HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,2,2,0" Visibility="Collapsed">
<TextBlock Name="ShieldBadgeText" Text="" FontSize="9" Foreground="White"/>
</Border>
</Grid>
<Button Name="PlaylistBtn" Style="{StaticResource IconButton}" Content="&#xE8D6;" ToolTip="미디어 재생목록" Margin="0,0,2,0" Click="TogglePlaylistPanel"/>
<Button Style="{StaticResource IconButton}" Content="&#xE8B7;" ToolTip="저장 폴더 열기" Margin="0,0,2,0" Click="OpenFolder_Click"/>
<Button Name="LinkBtn" Style="{StaticResource IconButton}" Content="&#xE71B;" ToolTip="링크로 받기 (YouTube·Instagram·X)" Margin="0,0,2,0" Click="ToggleLink"/>
@ -208,10 +216,25 @@
<!-- 주소창 -->
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="8" Height="32" VerticalAlignment="Center">
<TextBox Name="AddressBox" Style="{StaticResource DarkTextBox}"
PreviewKeyDown="AddressBox_PreviewKeyDown" TextChanged="AddressBox_TextChanged"
BorderThickness="0" Background="Transparent"
Padding="14,0" FontSize="13" VerticalContentAlignment="Center"/>
<Grid>
<TextBox Name="AddressBox" Style="{StaticResource DarkTextBox}"
PreviewKeyDown="AddressBox_PreviewKeyDown" TextChanged="AddressBox_TextChanged"
BorderThickness="0" Background="Transparent"
Padding="14,0" FontSize="13" VerticalContentAlignment="Center">
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header="붙여넣기" Command="ApplicationCommands.Paste"/>
<MenuItem Header="복사" Command="ApplicationCommands.Copy"/>
<Separator/>
<MenuItem Header="파라미터 제거 후 복사" Click="CopyCleanUrl_Click" InputGestureText="T3-15"/>
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
<!-- T3-15 주소창 진행 바 -->
<ProgressBar Name="NavProgress" Height="2" VerticalAlignment="Bottom" MinHeight="2"
Minimum="0" Maximum="100" IsIndeterminate="True" Visibility="Collapsed"
Foreground="{StaticResource AccentBrush}" Background="Transparent" BorderThickness="0"/>
</Grid>
</Border>
</DockPanel>
</Border>
@ -527,6 +550,21 @@
</Popup>
<!-- ===== 다운로드 플라이아웃 (T1-5) ===== -->
<!-- T3-14 추적 방지 실드 팝업 -->
<Popup Name="ShieldPopup" PlacementTarget="{Binding ElementName=ShieldBtn}"
Placement="Bottom" HorizontalOffset="-10" VerticalOffset="6"
StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{StaticResource CardBg}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="12" Padding="10" Width="320" MaxHeight="360">
<StackPanel>
<TextBlock Text="추적 방지 — 차단된 요청" Foreground="{StaticResource TextPrimary}"
FontWeight="SemiBold" Margin="6,4,6,8"/>
<ListBox Name="ShieldList" Background="Transparent" BorderThickness="0"
Foreground="{StaticResource TextSecondary}" FontSize="12"/>
</StackPanel>
</Border>
</Popup>
<Popup Name="DownloadsPopup" PlacementTarget="{Binding ElementName=DownloadsBtn}"
Placement="Bottom" HorizontalOffset="-10" VerticalOffset="6"
StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade">