Add expiration handling in LockScreenLiveActivityView for improved user feedback

This commit is contained in:
2026-03-13 08:11:02 +01:00
parent c301b62d37
commit 0dc6cd915c

View File

@@ -51,6 +51,10 @@ extension Color {
struct LockScreenLiveActivityView: View { struct LockScreenLiveActivityView: View {
let context: ActivityViewContext<LiveActivitiesAppAttributes> let context: ActivityViewContext<LiveActivitiesAppAttributes>
private var isExpired: Bool {
context.state.endDate <= Date()
}
private var hasNextLesson: Bool { private var hasNextLesson: Bool {
!context.state.nextSubject.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty !context.state.nextSubject.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
} }
@@ -124,15 +128,26 @@ struct LockScreenLiveActivityView: View {
Spacer(minLength: 4) Spacer(minLength: 4)
// Visszaszámláló // Visszaszámláló
Text(timerInterval: context.state.date, countsDown: true) if isExpired {
.multilineTextAlignment(.trailing) Text("Vége")
.frame(minWidth: 86, maxWidth: 100, alignment: .trailing) .multilineTextAlignment(.trailing)
.font(countdownFont) .frame(minWidth: 86, maxWidth: 100, alignment: .trailing)
.monospacedDigit() .font(.headline)
.lineLimit(1) .lineLimit(1)
.minimumScaleFactor(0.75) .minimumScaleFactor(0.75)
.layoutPriority(1) .layoutPriority(1)
.padding(.trailing, 16) .padding(.trailing, 16)
} else {
Text(timerInterval: context.state.date, countsDown: true)
.multilineTextAlignment(.trailing)
.frame(minWidth: 86, maxWidth: 100, alignment: .trailing)
.font(countdownFont)
.monospacedDigit()
.lineLimit(1)
.minimumScaleFactor(0.75)
.layoutPriority(1)
.padding(.trailing, 16)
}
} }
// .activityBackgroundTint( // .activityBackgroundTint(
// context.state.color != "#676767" // context.state.color != "#676767"
@@ -256,13 +271,22 @@ struct LiveCardWidget: Widget {
Image(systemName: context.state.icon) Image(systemName: context.state.icon)
} }
compactTrailing: { compactTrailing: {
Text(timerInterval: context.state.date, countsDown: true) if context.state.endDate <= Date() {
.multilineTextAlignment(.center) Text("Vége")
.frame(width: 52) .multilineTextAlignment(.center)
.font(.caption2) .frame(width: 52)
.monospacedDigit() .font(.caption2)
.lineLimit(1) .lineLimit(1)
.minimumScaleFactor(0.7) .minimumScaleFactor(0.7)
} else {
Text(timerInterval: context.state.date, countsDown: true)
.multilineTextAlignment(.center)
.frame(width: 52)
.font(.caption2)
.monospacedDigit()
.lineLimit(1)
.minimumScaleFactor(0.7)
}
/// Collapsed /// Collapsed
} minimal: { } minimal: {