Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
e03689f38c
commit
7b3a8903a8
@ -36,7 +36,8 @@ struct TopOverlayView: View {
|
|||||||
let _ = print("TopOverlayView: Rendering. Alarms count: \(alarmService.alarms.count), Enabled: \(alarmService.enabledAlarms.count)")
|
let _ = print("TopOverlayView: Rendering. Alarms count: \(alarmService.alarms.count), Enabled: \(alarmService.enabledAlarms.count)")
|
||||||
|
|
||||||
VStack(spacing: Design.Spacing.small) {
|
VStack(spacing: Design.Spacing.small) {
|
||||||
HStack {
|
// Row 1: Date and Battery (Standard Status Bar positions)
|
||||||
|
HStack(alignment: .center) {
|
||||||
if showDate {
|
if showDate {
|
||||||
DateOverlayView(color: color, opacity: opacity, dateFormat: dateFormat)
|
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 {
|
if showNextAlarm, let nextAlarm = alarmService.enabledAlarms.sorted(by: { $0.time.nextOccurrence() < $1.time.nextOccurrence() }).first {
|
||||||
NextAlarmOverlay(
|
NextAlarmOverlay(
|
||||||
alarmTime: nextAlarm.time.nextOccurrence(),
|
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(.horizontal, Design.Spacing.medium)
|
||||||
.padding(.vertical, Design.Spacing.small)
|
.padding(.vertical, Design.Spacing.small)
|
||||||
|
|||||||
@ -34,6 +34,8 @@ struct OnboardingPermissionsPage: View {
|
|||||||
.typography(.heroBold)
|
.typography(.heroBold)
|
||||||
.foregroundStyle(AppTextColors.primary)
|
.foregroundStyle(AppTextColors.primary)
|
||||||
.multilineTextAlignment(.center)
|
.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.")
|
Text("Works in silent mode, Focus mode, and even when your phone is locked.")
|
||||||
.typography(.body)
|
.typography(.body)
|
||||||
|
|||||||
@ -21,35 +21,43 @@ struct KeepAwakePrompt: View {
|
|||||||
|
|
||||||
VStack(spacing: Design.Spacing.small) {
|
VStack(spacing: Design.Spacing.small) {
|
||||||
Text("Keep Awake for Alarms")
|
Text("Keep Awake for Alarms")
|
||||||
.typography(.title2)
|
.typography(.title2Bold)
|
||||||
.foregroundStyle(AppTextColors.primary)
|
.foregroundStyle(AppTextColors.primary)
|
||||||
|
.multilineTextAlignment(.center)
|
||||||
|
|
||||||
Text("Enable Keep Awake so your alarm can play loudly and show the full screen while TheNoiseClock stays open.")
|
Text("Enable Keep Awake so your alarm can play loudly and show the full screen while TheNoiseClock stays open.")
|
||||||
.typography(.body)
|
.typography(.body)
|
||||||
.foregroundStyle(AppTextColors.secondary)
|
.foregroundStyle(AppTextColors.secondary)
|
||||||
.multilineTextAlignment(.center)
|
.multilineTextAlignment(.center)
|
||||||
|
.padding(.horizontal, Design.Spacing.small)
|
||||||
}
|
}
|
||||||
|
|
||||||
VStack(spacing: Design.Spacing.small) {
|
VStack(spacing: Design.Spacing.medium) {
|
||||||
Button(action: onEnable) {
|
Button(action: onEnable) {
|
||||||
Text("Enable Keep Awake")
|
Text("Enable Keep Awake")
|
||||||
|
.font(Typography.headingEmphasis.font)
|
||||||
|
.foregroundStyle(.white)
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
|
.frame(height: 50)
|
||||||
|
.background(AppAccent.primary)
|
||||||
|
.clipShape(.rect(cornerRadius: Design.CornerRadius.medium))
|
||||||
}
|
}
|
||||||
.buttonStyle(color: AppAccent.primary)
|
|
||||||
|
|
||||||
Button(action: onDismiss) {
|
Button(action: onDismiss) {
|
||||||
Text("Not Now")
|
Text("Not Now")
|
||||||
.frame(maxWidth: .infinity)
|
.font(Typography.bodyEmphasis.font)
|
||||||
}
|
|
||||||
.buttonStyle(.plain)
|
|
||||||
.foregroundStyle(AppTextColors.secondary)
|
.foregroundStyle(AppTextColors.secondary)
|
||||||
|
.frame(maxWidth: .infinity)
|
||||||
|
.frame(height: 44)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(Design.Spacing.xLarge)
|
.padding(Design.Spacing.xLarge)
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
.background(AppSurface.primary)
|
.background(AppSurface.primary)
|
||||||
.presentationDetents([.medium])
|
.presentationDetents([.height(340)])
|
||||||
.presentationCornerRadius(Design.CornerRadius.xxLarge)
|
.presentationCornerRadius(Design.CornerRadius.xxLarge)
|
||||||
|
.presentationBackground(AppSurface.primary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user