Widgets: align every widget to the exact logo palette (KC-19)
WidgetTheme now uses the true brand colors — accent RGB(232,98,42) on the logo's dark RGB(26,29,34) — replacing a near-miss orange on slate. Bars countdown, My Tasks, and Day Progress inherit it; Task Live Activity drops its hardcoded accent/black tint for the theme; lock screen rings tint brand orange. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -584,3 +584,25 @@ and the Event date / Counting from rows in the config appeared not to work.
|
|||||||
Files: `KisaniCalWidgets/EventCountdownWidget.swift`.
|
Files: `KisaniCalWidgets/EventCountdownWidget.swift`.
|
||||||
Note: existing widget instances re-read their config; dates must be re-picked
|
Note: existing widget instances re-read their config; dates must be re-picked
|
||||||
once (params changed to optional).
|
once (params changed to optional).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## KC-19 — Widgets: exact logo palette everywhere
|
||||||
|
|
||||||
|
**Status:** In Progress (implemented & build-verified, pending device build)
|
||||||
|
**Reported by:** User
|
||||||
|
**Area:** Widgets
|
||||||
|
|
||||||
|
### Description
|
||||||
|
All widgets should match the brand orange theme of the logo exactly.
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
- `WidgetTheme` now uses the precise brand palette: accent **RGB(232,98,42)**
|
||||||
|
(app `AppColors.accent`) on the logo's dark **RGB(26,29,34)** background —
|
||||||
|
previously a near-miss orange on a slate background.
|
||||||
|
- Every themed widget (Event Countdown Bars, My Tasks, Day Progress) inherits it.
|
||||||
|
- Task Live Activity: hardcoded accent → `WidgetTheme.accent`; background tint →
|
||||||
|
logo dark.
|
||||||
|
- Lock-screen ring tints → brand accent (renders in color on StandBy/home).
|
||||||
|
|
||||||
|
Files: `WidgetViews.swift`, `TaskLiveActivity.swift`.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import SwiftUI
|
|||||||
|
|
||||||
@available(iOS 16.1, *)
|
@available(iOS 16.1, *)
|
||||||
struct TaskLiveActivity: Widget {
|
struct TaskLiveActivity: Widget {
|
||||||
private let accent = Color(red: 0.93, green: 0.42, blue: 0.20) // brand orange
|
private let accent = WidgetTheme.accent // brand orange
|
||||||
|
|
||||||
var body: some WidgetConfiguration {
|
var body: some WidgetConfiguration {
|
||||||
ActivityConfiguration(for: TaskActivityAttributes.self) { context in
|
ActivityConfiguration(for: TaskActivityAttributes.self) { context in
|
||||||
@@ -35,7 +35,7 @@ struct TaskLiveActivity: Widget {
|
|||||||
}
|
}
|
||||||
.padding(.horizontal, 16)
|
.padding(.horizontal, 16)
|
||||||
.padding(.vertical, 12)
|
.padding(.vertical, 12)
|
||||||
.activityBackgroundTint(Color.black.opacity(0.55))
|
.activityBackgroundTint(WidgetTheme.background.opacity(0.9))
|
||||||
.activitySystemActionForegroundColor(.white)
|
.activitySystemActionForegroundColor(.white)
|
||||||
|
|
||||||
} dynamicIsland: { context in
|
} dynamicIsland: { context in
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import WidgetKit
|
|||||||
// MARK: - Shared widget theme (slate background + brand orange)
|
// MARK: - Shared widget theme (slate background + brand orange)
|
||||||
|
|
||||||
enum WidgetTheme {
|
enum WidgetTheme {
|
||||||
static let background = Color(red: 0.224, green: 0.255, blue: 0.310) // dark slate
|
// Exactly the brand palette: app accent RGB(232,98,42) on the logo's
|
||||||
static let accent = Color(red: 0.93, green: 0.42, blue: 0.20) // brand orange
|
// dark RGB(26,29,34) — widgets read as siblings of the app icon.
|
||||||
|
static let background = Color(red: 26/255, green: 29/255, blue: 34/255)
|
||||||
|
static let accent = Color(red: 232/255, green: 98/255, blue: 42/255)
|
||||||
static let text = Color.white
|
static let text = Color.white
|
||||||
static let textDim = Color.white.opacity(0.55)
|
static let textDim = Color.white.opacity(0.55)
|
||||||
static let textFaint = Color.white.opacity(0.4)
|
static let textFaint = Color.white.opacity(0.4)
|
||||||
@@ -209,7 +211,7 @@ struct LockScreenRectView: View {
|
|||||||
ProgressView(value: Double(365 - days), total: 365)
|
ProgressView(value: Double(365 - days), total: 365)
|
||||||
.progressViewStyle(.circular)
|
.progressViewStyle(.circular)
|
||||||
.frame(width: 22, height: 22)
|
.frame(width: 22, height: 22)
|
||||||
.tint(.white)
|
.tint(WidgetTheme.accent)
|
||||||
} else if task.isComplete {
|
} else if task.isComplete {
|
||||||
Image(systemName: "checkmark.circle.fill")
|
Image(systemName: "checkmark.circle.fill")
|
||||||
.foregroundColor(.green)
|
.foregroundColor(.green)
|
||||||
@@ -229,7 +231,7 @@ struct LockScreenCircularView: View {
|
|||||||
if !task.isComplete, let days = task.daysLeft, days <= 365 {
|
if !task.isComplete, let days = task.daysLeft, days <= 365 {
|
||||||
ProgressView(value: Double(365 - days), total: 365)
|
ProgressView(value: Double(365 - days), total: 365)
|
||||||
.progressViewStyle(.circular)
|
.progressViewStyle(.circular)
|
||||||
.tint(.white)
|
.tint(WidgetTheme.accent)
|
||||||
}
|
}
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
if let days = task.daysLeft {
|
if let days = task.daysLeft {
|
||||||
|
|||||||
Reference in New Issue
Block a user