md-app/ios/SearchWidget/SearchWidgetLiveActivity.swift

81 lines
2.4 KiB
Swift

//
// SearchWidgetLiveActivity.swift
// SearchWidget
//
// Created by Johann Villegas on 9/04/25.
//
import ActivityKit
import WidgetKit
import SwiftUI
struct SearchWidgetAttributes: ActivityAttributes {
public typealias LiveDeliveryData = ContentState
public struct ContentState: Codable, Hashable {
var title: String
var body: String
var searchTerm: String
var totalResults: Int
var timestamp: Int64
}
var id = UUID()
}
struct SearchWidgetLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: SearchWidgetAttributes.self) { context in
// Lock Screen/Banner UI
VStack {
HStack {
Text(context.state.title)
.font(.headline)
Spacer()
Text("\(context.state.totalResults)")
.font(.caption)
}
Text(context.state.body)
.font(.subheadline)
if !context.state.searchTerm.isEmpty {
Text("Search: \(context.state.searchTerm)")
.font(.caption)
}
}
.padding()
} dynamicIsland: { context in
// Dynamic Island UI
DynamicIsland {
// Expanded UI
DynamicIslandExpandedRegion(.leading) {
Text(context.state.title)
.font(.headline)
}
DynamicIslandExpandedRegion(.trailing) {
Text("\(context.state.totalResults)")
.font(.caption)
}
DynamicIslandExpandedRegion(.bottom) {
Text(context.state.body)
.font(.subheadline)
if !context.state.searchTerm.isEmpty {
Text("Search: \(context.state.searchTerm)")
.font(.caption)
}
}
} compactLeading: {
// Compact Leading
Text("\(context.state.totalResults)")
} compactTrailing: {
// Compact Trailing
Image(systemName: "magnifyingglass")
} minimal: {
// Minimal UI
Image(systemName: "magnifyingglass")
}
}
}
}