Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 115 additions & 13 deletions WatchApp Extension/ComplicationController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)) {
Expand All @@ -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
Expand All @@ -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)
Expand Down
45 changes: 44 additions & 1 deletion WatchApp Extension/Extensions/CLKComplicationTemplate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

}
3 changes: 3 additions & 0 deletions WatchApp Extension/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
<key>CLKComplicationSupportedFamilies</key>
<array>
<string>CLKComplicationFamilyModularSmall</string>
<string>CLKComplicationFamilyModularLarge</string>
<string>CLKComplicationFamilyCircularSmall</string>
<string>CLKComplicationFamilyExtraLarge</string>
</array>
<key>NSExtension</key>
<dict>
Expand Down