ios/BitwardenWatchApp/ComplicationController.swift
2025-10-06 15:18:35 -05:00

100 lines
3.7 KiB
Swift

import ClockKit
class ComplicationController: NSObject, CLKComplicationDataSource {
// MARK: - Complication Configuration
func getComplicationDescriptors(handler: @escaping ([CLKComplicationDescriptor]) -> Void) {
let descriptors = [
CLKComplicationDescriptor(
identifier: "bitwarden-watch-complication",
displayName: "Bitwarden",
supportedFamilies: [
CLKComplicationFamily.circularSmall,
CLKComplicationFamily.graphicCircular,
CLKComplicationFamily.graphicCorner,
CLKComplicationFamily.utilitarianSmall,
],
),
]
handler(descriptors)
}
// MARK: - Timeline Configuration
func getPrivacyBehavior(
for _: CLKComplication,
withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void,
) {
handler(.showOnLockScreen)
}
// MARK: - Timeline Population
func getCurrentTimelineEntry(
for complication: CLKComplication,
withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void,
) {
guard let icon = UIImage(named: "ComplicationIcon") else {
handler(nil)
return
}
let imageProvider = CLKFullColorImageProvider(fullColorImage: icon)
switch complication.family {
case .circularSmall:
let template = CLKComplicationTemplateCircularSmallSimpleImage(
imageProvider: CLKImageProvider(onePieceImage: icon),
)
handler(CLKComplicationTimelineEntry(date: .now, complicationTemplate: template))
case .graphicCircular:
let template = CLKComplicationTemplateGraphicCircularImage(imageProvider: imageProvider)
handler(CLKComplicationTimelineEntry(date: .now, complicationTemplate: template))
case .graphicCorner:
let template = CLKComplicationTemplateGraphicCornerCircularImage(imageProvider: imageProvider)
handler(CLKComplicationTimelineEntry(date: .now, complicationTemplate: template))
case .utilitarianSmall:
let template = CLKComplicationTemplateUtilitarianSmallSquare(
imageProvider: CLKImageProvider(onePieceImage: icon),
)
handler(CLKComplicationTimelineEntry(date: .now, complicationTemplate: template))
default:
handler(nil)
}
}
// MARK: - Sample Templates
func getLocalizableSampleTemplate(
for complication: CLKComplication,
withHandler handler: @escaping (CLKComplicationTemplate?) -> Void,
) {
guard let icon = UIImage(named: "ComplicationIcon") else {
handler(nil)
return
}
let imageProvider = CLKFullColorImageProvider(fullColorImage: icon)
switch complication.family {
case .circularSmall:
let template = CLKComplicationTemplateCircularSmallSimpleImage(
imageProvider: CLKImageProvider(onePieceImage: icon),
)
handler(template)
case .graphicCircular:
let template = CLKComplicationTemplateGraphicCircularImage(imageProvider: imageProvider)
handler(template)
case .graphicCorner:
let template = CLKComplicationTemplateGraphicCornerCircularImage(imageProvider: imageProvider)
handler(template)
case .utilitarianSmall:
let template = CLKComplicationTemplateUtilitarianSmallSquare(
imageProvider: CLKImageProvider(onePieceImage: icon),
)
handler(template)
default:
handler(nil)
}
}
}