语记手表版 v0.1:一键录音、WatchConnectivity 传输、表盘复杂功能、iPhone 接收转写
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import SwiftUI
|
||||
import WidgetKit
|
||||
|
||||
/// 语记复杂功能:显示今日速记数,点一下打开手表 App 开始录音。
|
||||
/// 放进 Widget Extension target;今日数读的是手表本地 UserDefaults(与 WatchSessionManager 共用 key)。
|
||||
struct YuJiEntry: TimelineEntry {
|
||||
let date: Date
|
||||
let count: Int
|
||||
}
|
||||
|
||||
struct YuJiProvider: TimelineProvider {
|
||||
func placeholder(in context: Context) -> YuJiEntry {
|
||||
YuJiEntry(date: Date(), count: 3)
|
||||
}
|
||||
|
||||
func getSnapshot(in context: Context, completion: @escaping (YuJiEntry) -> Void) {
|
||||
completion(YuJiEntry(date: Date(), count: WatchSessionManager.loadTodayCount()))
|
||||
}
|
||||
|
||||
func getTimeline(in context: Context, completion: @escaping (Timeline<YuJiEntry>) -> Void) {
|
||||
let entry = YuJiEntry(date: Date(), count: WatchSessionManager.loadTodayCount())
|
||||
let nextMidnight = Calendar.current.startOfDay(for: Date().addingTimeInterval(86400))
|
||||
completion(Timeline(entries: [entry], policy: .after(nextMidnight)))
|
||||
}
|
||||
}
|
||||
|
||||
struct YuJiComplicationView: View {
|
||||
@Environment(\.widgetFamily) private var family
|
||||
var entry: YuJiEntry
|
||||
|
||||
var body: some View {
|
||||
switch family {
|
||||
case .accessoryCircular:
|
||||
ZStack {
|
||||
AccessoryWidgetBackground()
|
||||
VStack(spacing: 0) {
|
||||
Image(systemName: "mic.fill").font(.caption2)
|
||||
Text("\(entry.count)").font(.headline)
|
||||
}
|
||||
}
|
||||
case .accessoryRectangular:
|
||||
HStack {
|
||||
Image(systemName: "mic.fill")
|
||||
VStack(alignment: .leading) {
|
||||
Text("语记").font(.caption2)
|
||||
Text("今日 \(entry.count) 条").font(.caption)
|
||||
}
|
||||
}
|
||||
default:
|
||||
HStack(spacing: 2) {
|
||||
Image(systemName: "mic.fill").font(.caption2)
|
||||
Text("\(entry.count)").font(.caption)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct YuJiComplicationWidget: Widget {
|
||||
var body: some WidgetConfiguration {
|
||||
StaticConfiguration(kind: "YuJiComplication", provider: YuJiProvider()) { entry in
|
||||
YuJiComplicationView(entry: entry)
|
||||
}
|
||||
.configurationDisplayName("语记")
|
||||
.description("今日速记数,点一下开始录音")
|
||||
.supportedFamilies([.accessoryCircular, .accessoryRectangular, .accessoryInline])
|
||||
}
|
||||
}
|
||||
|
||||
@main
|
||||
struct YuJiWidgets: WidgetBundle {
|
||||
var body: some Widget {
|
||||
YuJiComplicationWidget()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user