From 7b3a8903a86d871fb863a408b1daadd5830920f8 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Sat, 7 Feb 2026 16:47:22 -0600 Subject: [PATCH] Signed-off-by: Matt Bruce --- .../Views/Components/TopOverlayView.swift | 8 +++++-- .../OnboardingPermissionsPage.swift | 2 ++ .../Shared/Utilities/KeepAwakePrompt.swift | 22 +++++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/TheNoiseClock/Features/Clock/Views/Components/TopOverlayView.swift b/TheNoiseClock/Features/Clock/Views/Components/TopOverlayView.swift index c619112..6edd991 100644 --- a/TheNoiseClock/Features/Clock/Views/Components/TopOverlayView.swift +++ b/TheNoiseClock/Features/Clock/Views/Components/TopOverlayView.swift @@ -36,7 +36,8 @@ struct TopOverlayView: View { let _ = print("TopOverlayView: Rendering. Alarms count: \(alarmService.alarms.count), Enabled: \(alarmService.enabledAlarms.count)") VStack(spacing: Design.Spacing.small) { - HStack { + // Row 1: Date and Battery (Standard Status Bar positions) + HStack(alignment: .center) { if showDate { DateOverlayView(color: color, opacity: opacity, dateFormat: dateFormat) } @@ -52,8 +53,10 @@ struct TopOverlayView: View { ) } } + .padding(.top, Design.Spacing.xxSmall) // Minimal top padding for status bar alignment - HStack(alignment: .top) { + // Row 2: Alarms and Noise Controls (Below Dynamic Island) + HStack(alignment: .center) { if showNextAlarm, let nextAlarm = alarmService.enabledAlarms.sorted(by: { $0.time.nextOccurrence() < $1.time.nextOccurrence() }).first { NextAlarmOverlay( alarmTime: nextAlarm.time.nextOccurrence(), @@ -80,6 +83,7 @@ struct TopOverlayView: View { ) } } + .padding(.top, Design.Spacing.xSmall) // Extra spacing to clear Dynamic Island in portrait } .padding(.horizontal, Design.Spacing.medium) .padding(.vertical, Design.Spacing.small) diff --git a/TheNoiseClock/Features/Onboarding/Views/Components/OnboardingPermissionsPage.swift b/TheNoiseClock/Features/Onboarding/Views/Components/OnboardingPermissionsPage.swift index d11c44e..7565179 100644 --- a/TheNoiseClock/Features/Onboarding/Views/Components/OnboardingPermissionsPage.swift +++ b/TheNoiseClock/Features/Onboarding/Views/Components/OnboardingPermissionsPage.swift @@ -34,6 +34,8 @@ struct OnboardingPermissionsPage: View { .typography(.heroBold) .foregroundStyle(AppTextColors.primary) .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + .padding(.horizontal, Design.Spacing.large) Text("Works in silent mode, Focus mode, and even when your phone is locked.") .typography(.body) diff --git a/TheNoiseClock/Shared/Utilities/KeepAwakePrompt.swift b/TheNoiseClock/Shared/Utilities/KeepAwakePrompt.swift index 130a9ef..cdd45a9 100644 --- a/TheNoiseClock/Shared/Utilities/KeepAwakePrompt.swift +++ b/TheNoiseClock/Shared/Utilities/KeepAwakePrompt.swift @@ -21,35 +21,43 @@ struct KeepAwakePrompt: View { VStack(spacing: Design.Spacing.small) { Text("Keep Awake for Alarms") - .typography(.title2) + .typography(.title2Bold) .foregroundStyle(AppTextColors.primary) + .multilineTextAlignment(.center) Text("Enable Keep Awake so your alarm can play loudly and show the full screen while TheNoiseClock stays open.") .typography(.body) .foregroundStyle(AppTextColors.secondary) .multilineTextAlignment(.center) + .padding(.horizontal, Design.Spacing.small) } - VStack(spacing: Design.Spacing.small) { + VStack(spacing: Design.Spacing.medium) { Button(action: onEnable) { Text("Enable Keep Awake") + .font(Typography.headingEmphasis.font) + .foregroundStyle(.white) .frame(maxWidth: .infinity) + .frame(height: 50) + .background(AppAccent.primary) + .clipShape(.rect(cornerRadius: Design.CornerRadius.medium)) } - .buttonStyle(color: AppAccent.primary) Button(action: onDismiss) { Text("Not Now") + .font(Typography.bodyEmphasis.font) + .foregroundStyle(AppTextColors.secondary) .frame(maxWidth: .infinity) + .frame(height: 44) } - .buttonStyle(.plain) - .foregroundStyle(AppTextColors.secondary) } } .padding(Design.Spacing.xLarge) - .frame(maxWidth: .infinity) + .frame(maxWidth: .infinity, maxHeight: .infinity) .background(AppSurface.primary) - .presentationDetents([.medium]) + .presentationDetents([.height(340)]) .presentationCornerRadius(Design.CornerRadius.xxLarge) + .presentationBackground(AppSurface.primary) } }