-
Notifications
You must be signed in to change notification settings - Fork 3
/
ComplicationHandler.swift
151 lines (133 loc) · 5.72 KB
/
ComplicationHandler.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
//
// ComplicationHandler.swift
// SmogWatch WatchKit Extension
//
// Created by Kuba Suder on 27.12.2018.
// Copyright © 2018 Kuba Suder. Licensed under WTFPL license.
//
import ClockKit
private let PMTitleText = "PM10"
private let PMShortTitleText = "PM"
private let PlaceholderText = "–"
private let SampleValueText = "00"
protocol ComplicationHandler {
func template(for value: Double) -> CLKComplicationTemplate
func templateForNoValue() -> CLKComplicationTemplate
func templateForSampleValue() -> CLKComplicationTemplate
}
extension ComplicationHandler {
func integerValue(_ value: Double) -> Int {
return Int(value.rounded())
}
func integerText(_ value: Double) -> String {
return String(integerValue(value))
}
}
enum ComplicationHandlers {
static func handler(for complication: CLKComplication) -> ComplicationHandler {
switch complication.family {
case .circularSmall:
return CircularSmall()
case .modularSmall:
return ModularSmall()
case .utilitarianSmallFlat:
return UtilitarianSmallFlat()
case .utilitarianLarge:
return UtilitarianLarge()
default:
preconditionFailure("Complication family not supported")
}
}
class CircularSmall: ComplicationHandler {
func template(for value: Double) -> CLKComplicationTemplate {
let template = CLKComplicationTemplateCircularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: integerText(value))
return template
}
func templateForNoValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateCircularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: PlaceholderText)
return template
}
func templateForSampleValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateCircularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: SampleValueText)
return template
}
}
class ModularSmall: ComplicationHandler {
func template(for value: Double) -> CLKComplicationTemplate {
let template = CLKComplicationTemplateModularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMTitleText, shortText: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: integerText(value))
return template
}
func templateForNoValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateModularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMTitleText, shortText: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: PlaceholderText)
return template
}
func templateForSampleValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateModularSmallStackText()
template.line1TextProvider = CLKSimpleTextProvider(text: PMTitleText, shortText: PMShortTitleText)
template.line2TextProvider = CLKSimpleTextProvider(text: SampleValueText)
return template
}
}
class UtilitarianSmallFlat: ComplicationHandler {
func template(for value: Double) -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianSmallFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10: \(integerValue(value))",
shortText: "PM: \(integerValue(value))"
)
return template
}
func templateForNoValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianSmallFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10: \(PlaceholderText)",
shortText: "PM: \(PlaceholderText)"
)
return template
}
func templateForSampleValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianSmallFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10: \(SampleValueText)",
shortText: "PM: \(SampleValueText)"
)
return template
}
}
class UtilitarianLarge: ComplicationHandler {
func template(for value: Double) -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianLargeFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10 Level: \(integerValue(value))",
shortText: "PM10: \(integerValue(value))"
)
return template
}
func templateForNoValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianLargeFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10 Level: No data",
shortText: "PM10: No data"
)
return template
}
func templateForSampleValue() -> CLKComplicationTemplate {
let template = CLKComplicationTemplateUtilitarianLargeFlat()
template.textProvider = CLKSimpleTextProvider(
text: "PM10 Level: \(SampleValueText)",
shortText: "PM10: \(SampleValueText)"
)
return template
}
}
}