Skip to content

Commit aa00c2b

Browse files
committed
#198: Lockscreen Widget and new optimized Watch complications
1 parent cb999f6 commit aa00c2b

30 files changed

+710
-139
lines changed

nightguard WatchKit App/Base.lproj/Interface.storyboard

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder.WatchKit.Storyboard" version="3.0" toolsVersion="19162" targetRuntime="watchKit" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="zZT-1m-QPq">
2+
<document type="com.apple.InterfaceBuilder.WatchKit.Storyboard" version="3.0" toolsVersion="21225" targetRuntime="watchKit" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="zZT-1m-QPq">
33
<device id="watch44"/>
44
<dependencies>
5-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
6-
<plugIn identifier="com.apple.InterfaceBuilder.IBWatchKitPlugin" version="19044"/>
5+
<deployment identifier="watchOS"/>
6+
<plugIn identifier="com.apple.InterfaceBuilder.IBWatchKitPlugin" version="21040"/>
77
</dependencies>
88
<scenes>
99
<!--Main Controller-->

nightguard WatchKit App/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<key>CFBundleSignature</key>
2222
<string>????</string>
2323
<key>CFBundleVersion</key>
24-
<string>779</string>
24+
<string>785</string>
2525
<key>UISupportedInterfaceOrientations</key>
2626
<array>
2727
<string>UIInterfaceOrientationPortrait</string>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"info" : {
3-
"version" : 1,
4-
"author" : "xcode"
3+
"author" : "xcode",
4+
"version" : 1
55
}
6-
}
6+
}

nightguard WatchKit Extension/ComplicationController.swift

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
3030
handler([])
3131
}
3232

33+
fileprivate func createLine1And2TextProvider(_ currentNightscoutData: NightscoutData) -> (CLKTextProvider, CLKTextProvider) {
34+
35+
var line1TextProvider : CLKTextProvider
36+
var line2TextProvider : CLKTextProvider
37+
38+
if useRelativeTimeWhenPossible {
39+
line1TextProvider = CLKSimpleTextProvider(text: getSgvAndArrow(currentNightscoutData, " "))
40+
line1TextProvider.tintColor = UIColorChanger.getBgColor(
41+
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
42+
line2TextProvider = getRelativeDateTextProvider(for: currentNightscoutData.time)
43+
} else {
44+
line1TextProvider = CLKSimpleTextProvider(text: "\(currentNightscoutData.hourAndMinutes)")
45+
line1TextProvider.tintColor = UIColorChanger.getBgColor(
46+
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
47+
line2TextProvider = CLKSimpleTextProvider(text: "\(UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))\(currentNightscoutData.bgdeltaString)\(currentNightscoutData.bgdeltaArrow)")
48+
}
49+
50+
return (line1TextProvider, line2TextProvider)
51+
}
52+
3353
func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
3454

3555
let currentNightscoutData = NightscoutCacheService.singleton.getCurrentNightscoutData()
@@ -40,19 +60,7 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
4060
switch complication.family {
4161
case .modularSmall:
4262

43-
var line1TextProvider : CLKTextProvider
44-
var line2TextProvider : CLKTextProvider
45-
if useRelativeTimeWhenPossible {
46-
line1TextProvider = CLKSimpleTextProvider(text: getSgvAndArrow(currentNightscoutData, " "))
47-
line1TextProvider.tintColor = UIColorChanger.getBgColor(
48-
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
49-
line2TextProvider = getRelativeDateTextProvider(for: currentNightscoutData.time)
50-
} else {
51-
line1TextProvider = CLKSimpleTextProvider(text: "\(currentNightscoutData.hourAndMinutes)")
52-
line1TextProvider.tintColor = UIColorChanger.getBgColor(
53-
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
54-
line2TextProvider = CLKSimpleTextProvider(text: "\(UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))\(currentNightscoutData.bgdeltaString)\(currentNightscoutData.bgdeltaArrow)")
55-
}
63+
let (line1TextProvider, line2TextProvider) = createLine1And2TextProvider(currentNightscoutData)
5664
let modTemplate = CLKComplicationTemplateModularSmallStackText(line1TextProvider: line1TextProvider,
5765
line2TextProvider: line2TextProvider)
5866
template = modTemplate
@@ -110,6 +118,23 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
110118
textProvider.tintColor = UIColorChanger.getBgColor(
111119
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
112120
template = CLKComplicationTemplateUtilitarianLargeFlat(textProvider: textProvider, imageProvider: imageProvider)
121+
case .extraLarge:
122+
let row1Col1 = CLKSimpleTextProvider(text: getOneLine(currentNightscoutData))
123+
row1Col1.tintColor = UIColorChanger.getBgColor(
124+
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
125+
let row1Col2 = getRelativeDateTextProvider(for: currentNightscoutData.time)
126+
var row2Col1 = CLKSimpleTextProvider(text: "")
127+
var row2Col2 = CLKSimpleTextProvider(text: "")
128+
if self.oldNightscoutData.count > 1 {
129+
let nightscoutData = self.oldNightscoutData[1]
130+
row2Col1 = CLKSimpleTextProvider(text: getOneLine(nightscoutData))
131+
row2Col2 = getRelativeDateTextProvider(for: nightscoutData.time) as? CLKSimpleTextProvider ?? row2Col2
132+
}
133+
134+
template = CLKComplicationTemplateExtraLargeColumnsText(
135+
row1Column1TextProvider: row1Col1, row1Column2TextProvider: row1Col2,
136+
row2Column1TextProvider: row2Col1, row2Column2TextProvider: row2Col2)
137+
113138
case .circularSmall:
114139

115140
let textProvider = CLKSimpleTextProvider(text:
@@ -136,13 +161,15 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
136161
case .graphicCircular:
137162
if #available(watchOSApplicationExtension 5.0, *) {
138163

139-
let sgvLong = "\(UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))"
140-
let sgvShort = "\(UnitsConverter.mgdlToShortDisplayUnits(currentNightscoutData.sgv))"
141-
let centerTextProvider = CLKSimpleTextProvider(text: sgvLong, shortText: sgvShort)
142-
centerTextProvider.tintColor = UIColorChanger.getBgColor(
164+
let line2TextProvider = CLKSimpleTextProvider(text: "\(UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))")
165+
line2TextProvider.tintColor = UIColorChanger.getBgColor(
166+
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
167+
168+
let line1TextProvider = CLKSimpleTextProvider(text: "\(currentNightscoutData.hourAndMinutes)")
169+
line1TextProvider.tintColor = UIColorChanger.getBgColor(
143170
UnitsConverter.mgdlToDisplayUnits(currentNightscoutData.sgv))
144-
let gaugeProvider = CLKSimpleGaugeProvider(style: .fill, gaugeColor: UIColor.black, fillFraction: CLKSimpleGaugeProviderFillFractionEmpty)
145-
template = CLKComplicationTemplateGraphicCircularClosedGaugeText(gaugeProvider: gaugeProvider, centerTextProvider: centerTextProvider)
171+
172+
template = CLKComplicationTemplateGraphicCircularStackText(line1TextProvider: line1TextProvider, line2TextProvider: line2TextProvider)
146173
} else {
147174
abort()
148175
}
@@ -157,6 +184,14 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
157184
} else {
158185
abort()
159186
}
187+
case .graphicExtraLarge:
188+
189+
let (line1TextProvider, line2TextProvider) = createLine1And2TextProvider(currentNightscoutData)
190+
191+
let modTemplate = CLKComplicationTemplateGraphicExtraLargeCircularStackText(
192+
line1TextProvider: line1TextProvider, line2TextProvider: line2TextProvider)
193+
194+
template = modTemplate
160195
default: break
161196
}
162197

@@ -242,10 +277,14 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
242277
func getPlaceholderTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
243278
var template: CLKComplicationTemplate? = nil
244279
switch complication.family {
280+
case .graphicExtraLarge:
281+
template = nil
245282
case .modularSmall:
246283
template = nil
247284
case .modularLarge:
248285
template = nil
286+
case .extraLarge:
287+
template = nil
249288
case .utilitarianSmall:
250289
template = nil
251290
case .utilitarianLarge:
@@ -260,13 +299,15 @@ class ComplicationController: NSObject, CLKComplicationDataSource {
260299

261300
func getComplicationDescriptors(handler: @escaping ([CLKComplicationDescriptor]) -> Void) {
262301
let descriptors = [
263-
CLKComplicationDescriptor(identifier: "nightguardComplication", displayName: "Nightguard",
302+
CLKComplicationDescriptor(identifier: "nightguardComplication", displayName: "BG Values",
264303
supportedFamilies: [CLKComplicationFamily.circularSmall,
265304
CLKComplicationFamily.graphicBezel,
266305
CLKComplicationFamily.graphicCorner,
267306
CLKComplicationFamily.graphicCircular,
307+
CLKComplicationFamily.graphicExtraLarge,
268308
CLKComplicationFamily.modularLarge,
269309
CLKComplicationFamily.modularSmall,
310+
CLKComplicationFamily.extraLarge,
270311
CLKComplicationFamily.utilitarianLarge,
271312
CLKComplicationFamily.utilitarianSmall])
272313
]

nightguard WatchKit Extension/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<key>CFBundleSignature</key>
2222
<string>????</string>
2323
<key>CFBundleVersion</key>
24-
<string>779</string>
24+
<string>$(CURRENT_PROJECT_VERSION)</string>
2525
<key>CLKComplicationPrincipalClass</key>
2626
<string>$(PRODUCT_MODULE_NAME).ComplicationController</string>
2727
<key>NSAppTransportSecurity</key>

nightguard WatchKit Extension/MainViewModel.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,10 @@ class MainViewModel: ObservableObject, Identifiable {
206206

207207
fileprivate func updateComplication() {
208208
let complicationServer = CLKComplicationServer.sharedInstance()
209-
for complication in complicationServer.activeComplications! {
210-
complicationServer.reloadTimeline(for: complication)
209+
if complicationServer.activeComplications != nil {
210+
for complication in complicationServer.activeComplications! {
211+
complicationServer.reloadTimeline(for: complication)
212+
}
211213
}
212214
}
213215

nightguard WatchKit Extension/UserDefaultsRepository.swift

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,6 @@ class UserDefaultsRepository {
6262
key: "alarmSoundFileName",
6363
default: "")
6464

65-
static let showBGOnAppBadge = UserDefaultsValue<Bool>(
66-
key: "showBGOnAppBadge",
67-
default: false,
68-
onChange: { show in
69-
#if os(iOS)
70-
if show {
71-
UIApplication.shared.setCurrentBGValueOnAppBadge()
72-
} else {
73-
UIApplication.shared.clearAppBadge()
74-
}
75-
#endif
76-
})
77-
7865
static let alarmNotificationState = UserDefaultsValue<Bool>(key: "alarmNotificationState", default: false)
7966

8067
// If this is set to true, you can override the default units setting from your backend
@@ -101,13 +88,6 @@ class UserDefaultsRepository {
10188
static let maximumBloodGlucoseDisplayed = UserDefaultsValue<Float>(key: "maximumBloodGlucoseDisplayed", default: 350)
10289

10390
#if os(iOS)
104-
static let screenlockSwitchState = UserDefaultsValue<Bool>(
105-
key: "screenlockSwitchState",
106-
default: UIApplication.shared.isIdleTimerDisabled,
107-
onChange: { screenlock in
108-
UIApplication.shared.isIdleTimerDisabled = screenlock
109-
})
110-
11191
static let nightscoutUris = UserDefaultsValue<[String]>(key: "nightscoutUris", default: [])
11292

11393
// minutes of idle (user inactivity) before dimming the screen (0 means never)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"colors" : [
3+
{
4+
"idiom" : "universal"
5+
}
6+
],
7+
"info" : {
8+
"author" : "xcode",
9+
"version" : 1
10+
}
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"platform" : "ios",
6+
"size" : "1024x1024"
7+
}
8+
],
9+
"info" : {
10+
"author" : "xcode",
11+
"version" : 1
12+
}
13+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info" : {
3+
"author" : "xcode",
4+
"version" : 1
5+
}
6+
}

0 commit comments

Comments
 (0)