diff --git a/WatchApp Extension/ComplicationController.swift b/WatchApp Extension/ComplicationController.swift
index 63884fbbf0..139b33aa83 100644
--- a/WatchApp Extension/ComplicationController.swift
+++ b/WatchApp Extension/ComplicationController.swift
@@ -44,6 +44,7 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: (@escaping (CLKComplicationTimelineEntry?) -> Void)) {
+ var templateEntry: CLKComplicationTimelineEntry?
switch complication.family {
case .modularSmall:
if let context = ExtensionDelegate.shared().lastContext,
@@ -53,13 +54,50 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
let date = context.glucoseDate, date.timeIntervalSinceNow.minutes >= -15,
let template = CLKComplicationTemplateModularSmallStackText(line1: glucoseString, date: date)
{
- handler(CLKComplicationTimelineEntry(date: date, complicationTemplate: template))
+ templateEntry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
} else {
- handler(nil)
+ templateEntry = nil
+ }
+ case .modularLarge:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let date = context.glucoseDate, date.timeIntervalSinceNow.minutes >= -15,
+ let template = CLKComplicationTemplateModularLargeTallBody(line1: glucoseString, date: date)
+ {
+ templateEntry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
+ } else {
+ templateEntry = nil
+ }
+ case .circularSmall:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let date = context.glucoseDate, date.timeIntervalSinceNow.minutes >= -15,
+ let template = CLKComplicationTemplateCircularSmallStackText(line1: glucoseString, date: date)
+ {
+ templateEntry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
+ } else {
+ templateEntry = nil
+ }
+ case .extraLarge:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let date = context.glucoseDate, date.timeIntervalSinceNow.minutes >= -15,
+ let template = CLKComplicationTemplateExtraLargeStackText(line1: glucoseString, date: date)
+ {
+ templateEntry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
+ } else {
+ templateEntry = nil
}
default:
- handler(nil)
+ templateEntry = nil
}
+ handler(templateEntry)
}
func getTimelineEntries(for complication: CLKComplication, before date: Date, limit: Int, withHandler handler: (@escaping ([CLKComplicationTimelineEntry]?) -> Void)) {
@@ -69,17 +107,60 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: (@escaping ([CLKComplicationTimelineEntry]?) -> Void)) {
// Call the handler with the timeline entries after to the given date
- if let context = ExtensionDelegate.shared().lastContext,
- let glucose = context.glucose,
- let unit = context.preferredGlucoseUnit,
- let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
- let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
- let template = CLKComplicationTemplateModularSmallStackText(line1: glucoseString, date: glucoseDate)
- {
- handler([CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)])
- } else {
- handler(nil)
+ var templateEntry: [CLKComplicationTimelineEntry]?
+ switch complication.family {
+ case .modularSmall:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
+ let template = CLKComplicationTemplateModularSmallStackText(line1: glucoseString, date: glucoseDate)
+ {
+ templateEntry = [CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)]
+ } else {
+ templateEntry = nil
+ }
+ case .modularLarge:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
+ let template = CLKComplicationTemplateModularLargeTallBody(line1: glucoseString, date: glucoseDate)
+ {
+ templateEntry = [CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)]
+ } else {
+ templateEntry = nil
+ }
+ case .circularSmall:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
+ let template = CLKComplicationTemplateCircularSmallStackText(line1: glucoseString, date: glucoseDate)
+ {
+ templateEntry = [CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)]
+ } else {
+ templateEntry = nil
+ }
+ case .extraLarge:
+ if let context = ExtensionDelegate.shared().lastContext,
+ let glucose = context.glucose,
+ let unit = context.preferredGlucoseUnit,
+ let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
+ let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
+ let template = CLKComplicationTemplateExtraLargeStackText(line1: glucoseString, date: glucoseDate)
+ {
+ templateEntry = [CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)]
+ } else {
+ templateEntry = nil
+ }
+ default:
+ templateEntry = nil
}
+ handler(templateEntry)
}
// MARK: - Placeholder Templates
@@ -92,6 +173,27 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
template.line1TextProvider = CLKSimpleTextProvider(text: "--", shortText: "--", accessibilityLabel: "No glucose value available")
template.line2TextProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "mg/dL")
+ handler(template)
+ case .modularLarge:
+ let template = CLKComplicationTemplateModularLargeTallBody()
+
+ template.bodyTextProvider = CLKSimpleTextProvider(text: "--", shortText: "--", accessibilityLabel: "No glucose value available")
+ template.headerTextProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "mg/dL")
+
+ handler(template)
+ case .circularSmall:
+ let template = CLKComplicationTemplateCircularSmallStackText()
+
+ template.line1TextProvider = CLKSimpleTextProvider(text: "--", shortText: "--", accessibilityLabel: "No glucose value available")
+ template.line2TextProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "mg/dL")
+
+ handler(template)
+ case .extraLarge:
+ let template = CLKComplicationTemplateExtraLargeStackText()
+
+ template.line1TextProvider = CLKSimpleTextProvider(text: "--", shortText: "--", accessibilityLabel: "No glucose value available")
+ template.line2TextProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "mg/dL")
+
handler(template)
default:
handler(nil)
diff --git a/WatchApp Extension/Extensions/CLKComplicationTemplate.swift b/WatchApp Extension/Extensions/CLKComplicationTemplate.swift
index cd30289801..285ffcf96c 100644
--- a/WatchApp Extension/Extensions/CLKComplicationTemplate.swift
+++ b/WatchApp Extension/Extensions/CLKComplicationTemplate.swift
@@ -20,7 +20,50 @@ extension CLKComplicationTemplateModularSmallStackText {
self.init()
line1TextProvider = CLKSimpleTextProvider(text: line1)
- line2TextProvider = CLKTimeTextProvider(date: date)
+ line2TextProvider = CLKRelativeDateTextProvider(date: date, style: .natural, units: .minute)
}
}
+extension CLKComplicationTemplateCircularSmallStackText {
+
+ convenience init?(line1: String?, date: Date?) {
+ guard let line1 = line1, let date = date else {
+ return nil
+ }
+
+ self.init()
+
+ line1TextProvider = CLKSimpleTextProvider(text: line1)
+ line2TextProvider = CLKRelativeDateTextProvider(date: date, style: .natural, units: .minute)
+ }
+
+}
+extension CLKComplicationTemplateModularLargeTallBody {
+
+ convenience init?(line1: String?, date: Date?) {
+ guard let line1 = line1, let date = date else {
+ return nil
+ }
+
+ self.init()
+
+ bodyTextProvider = CLKSimpleTextProvider(text: line1)
+ headerTextProvider = CLKRelativeDateTextProvider(date: date, style: .natural, units: .minute)
+ }
+
+}
+extension CLKComplicationTemplateExtraLargeStackText {
+
+ convenience init?(line1: String?, date: Date?) {
+ guard let line1 = line1, let date = date else {
+ return nil
+ }
+
+ self.init()
+
+ highlightLine2 = false
+ line1TextProvider = CLKSimpleTextProvider(text: line1)
+ line2TextProvider = CLKRelativeDateTextProvider(date: date, style: .natural, units: .minute)
+ }
+
+}
diff --git a/WatchApp Extension/Info.plist b/WatchApp Extension/Info.plist
index 50f23199d8..927a9e8bd6 100644
--- a/WatchApp Extension/Info.plist
+++ b/WatchApp Extension/Info.plist
@@ -27,6 +27,9 @@
CLKComplicationSupportedFamilies
CLKComplicationFamilyModularSmall
+ CLKComplicationFamilyModularLarge
+ CLKComplicationFamilyCircularSmall
+ CLKComplicationFamilyExtraLarge
NSExtension