Files
amethyst/todos/004-pending-p3-hardcoded-status-colors.md
T
nrobi144andClaude Opus 4.6 7ff4d8e3b7 fix(desktop): avatar ripple + P3 hardcoded colors + inline shapes
Avatar/Account switcher:
- Rewrite SidebarAccountHeader with same shape/hover as other nav items
- Entire row (avatar + display name) is clickable with rounded clip
- Inline DropdownMenu replaces overlaid AccountSwitcherDropdown
- Collapsed: compact avatar with same rounded hover treatment

P3 #004 — Hardcoded status colors:
- Add StatusGreen/StatusRed/StatusAmber to commons Colors.kt
- Replace 32 inline Color() values across 10 files with theme tokens
- Color.Red → MaterialTheme.colorScheme.error where appropriate
- Color.Green/Gray → StatusGreen/onSurfaceVariant

P3 #005 — Inline shapes:
- RoundedCornerShape(8.dp) → MaterialTheme.shapes.small (~20 files)
- RoundedCornerShape(12.dp) → MaterialTheme.shapes.medium
- RoundedCornerShape(16.dp) → MaterialTheme.shapes.large
- Pill shapes (100dp/999dp) kept as-is

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-29 07:02:52 +03:00

1.3 KiB

status, priority, issue_id, tags
status priority issue_id tags
pending p3 004
code-review
theming
desktop

Hardcoded status colors should use theme tokens

Problem Statement

32 inline Color() constructors across 10 desktop files use hardcoded RGB values for status indicators (green/red/amber). These don't adapt to dark/light mode properly.

Findings

Key files: RelayStatusCard.kt, TorStatusIndicator.kt, LoginProgressSteps.kt, MediaServerSettings.kt, DevSettingsSection.kt, NewKeyWarningCard.kt, ProfileInfoCard.kt

Common hardcoded values:

  • Color(0xFF4CAF50) green — should use a semantic success color
  • Color(0xFFF44336) red — should use MaterialTheme.colorScheme.error
  • Color(0xFFFFB300) amber — should use a semantic warning color
  • Color.Red / Color.Green — bare Material colors

Proposed Solutions

Extract semantic status colors as ColorScheme extensions:

val ColorScheme.statusSuccess: Color get() = if (isLight) Color(0xFF339900) else Color(0xFF99cc33)
val ColorScheme.statusError: Color get() = error
val ColorScheme.statusWarning: Color get() = if (isLight) Color(0xFFC09B14) else Color(0xFFE1C419)

Acceptance Criteria

  • No bare Color.Red/Green/Yellow in desktop UI files
  • Status colors adapt properly to dark/light mode