diff --git a/ios/Platform/Platform/ContentView.swift b/ios/Platform/Platform/ContentView.swift index 45f320b..660ec43 100644 --- a/ios/Platform/Platform/ContentView.swift +++ b/ios/Platform/Platform/ContentView.swift @@ -121,9 +121,15 @@ struct MainTabView: View { AssistantSheetView(onFoodAdded: foodAdded) } .onOpenURL { url in - if url.scheme == "platform" && url.host == "add-food" { - selectedTab = 1 // Fitness tab + guard url.scheme == "platform" else { return } + switch url.host { + case "fitness": + selectedTab = 1 + case "add-food": + selectedTab = 1 showAssistant = true + default: + break } } .task { diff --git a/ios/Platform/PlatformWidget/PlatformWidget.swift b/ios/Platform/PlatformWidget/PlatformWidget.swift index 4c7768d..1352b0a 100644 --- a/ios/Platform/PlatformWidget/PlatformWidget.swift +++ b/ios/Platform/PlatformWidget/PlatformWidget.swift @@ -184,14 +184,23 @@ struct SmallWidgetView: View { let entry: CalorieEntry var body: some View { - VStack(spacing: 8) { - CalorieRingView(entry: entry, size: 90, lineWidth: 8) + ZStack(alignment: .bottomTrailing) { + VStack(spacing: 8) { + CalorieRingView(entry: entry, size: 80, lineWidth: 7) - Text("\(Int(entry.remaining)) left") - .font(.caption2.weight(.medium)) - .foregroundStyle(.secondary) + Text("\(Int(entry.remaining)) left") + .font(.caption2.weight(.medium)) + .foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + + // + button — separate tap target → opens food assistant + Link(destination: URL(string: "platform://add-food")!) { + Image(systemName: "plus.circle.fill") + .font(.title2) + .foregroundStyle(Color(red: 0.020, green: 0.588, blue: 0.412)) + } } - .frame(maxWidth: .infinity, maxHeight: .infinity) } } @@ -199,24 +208,32 @@ struct MediumWidgetView: View { let entry: CalorieEntry var body: some View { - HStack(spacing: 20) { - CalorieRingView(entry: entry, size: 100, lineWidth: 9) + ZStack(alignment: .bottomTrailing) { + HStack(spacing: 20) { + CalorieRingView(entry: entry, size: 100, lineWidth: 9) - VStack(alignment: .leading, spacing: 6) { - Text("Calories") - .font(.headline) - .foregroundStyle(.primary) + VStack(alignment: .leading, spacing: 6) { + Text("Calories") + .font(.headline) + .foregroundStyle(.primary) - Text("\(Int(entry.totalCalories)) of \(Int(entry.calorieGoal))") - .font(.subheadline) - .foregroundStyle(.secondary) + Text("\(Int(entry.totalCalories)) of \(Int(entry.calorieGoal))") + .font(.subheadline) + .foregroundStyle(.secondary) - Text("\(Int(entry.remaining)) remaining") - .font(.caption) - .foregroundStyle(.tertiary) + Text("\(Int(entry.remaining)) remaining") + .font(.caption) + .foregroundStyle(.tertiary) + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + + Link(destination: URL(string: "platform://add-food")!) { + Image(systemName: "plus.circle.fill") + .font(.title2) + .foregroundStyle(Color(red: 0.020, green: 0.588, blue: 0.412)) } } - .frame(maxWidth: .infinity, maxHeight: .infinity) } } @@ -290,7 +307,7 @@ struct PlatformWidget: Widget { var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: CalorieProvider()) { entry in PlatformWidgetEntryView(entry: entry) - .widgetURL(URL(string: "platform://add-food")) + .widgetURL(URL(string: "platform://fitness")) .containerBackground(.fill.tertiary, for: .widget) } .configurationDisplayName("Calories")