From 699eda5d1b26ed91ae93c64a446edb75e740a63a Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 14 Sep 2022 19:04:36 -0700 Subject: [PATCH] =?UTF-8?q?[AltWidget]=20Adds=20=E2=80=9Cicon=E2=80=9D=20s?= =?UTF-8?q?tyle=20lock=20screen=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AltWidget/AltWidget.swift | 57 +++++++++++++-- .../SmallIcon.imageset/Contents.json | 16 +++++ .../SmallIcon.imageset/altminicon.pdf | Bin 0 -> 4486 bytes AltWidget/ComplicationView.swift | 68 +++++++++++++++--- 4 files changed, 125 insertions(+), 16 deletions(-) create mode 100644 AltWidget/Assets.xcassets/SmallIcon.imageset/Contents.json create mode 100644 AltWidget/Assets.xcassets/SmallIcon.imageset/altminicon.pdf diff --git a/AltWidget/AltWidget.swift b/AltWidget/AltWidget.swift index 87666400..62696399 100644 --- a/AltWidget/AltWidget.swift +++ b/AltWidget/AltWidget.swift @@ -189,9 +189,9 @@ struct HomeScreenWidget: Widget } } -struct LockScreenWidget: Widget +struct TextLockScreenWidget: Widget { - private let kind: String = "LockAppDetail" + private let kind: String = "TextLockAppDetail" public var body: some WidgetConfiguration { if #available(iOSApplicationExtension 16, *) @@ -199,10 +199,10 @@ struct LockScreenWidget: Widget return IntentConfiguration(kind: kind, intent: ViewAppIntent.self, provider: Provider()) { (entry) in - ComplicationView(entry: entry) + ComplicationView(entry: entry, style: .text) } .supportedFamilies([.accessoryCircular]) - .configurationDisplayName("AltWidget") + .configurationDisplayName("AltWidget (Text)") .description("View remaining days until SideStore expires.") } else @@ -212,11 +212,58 @@ struct LockScreenWidget: Widget } } +struct IconLockScreenWidget: Widget +{ + private let kind: String = "IconLockAppDetail" + + public var body: some WidgetConfiguration { + if #available(iOSApplicationExtension 16, *) + { + return IntentConfiguration(kind: kind, + intent: ViewAppIntent.self, + provider: Provider()) { (entry) in + ComplicationView(entry: entry, style: .icon) + } + .supportedFamilies([.accessoryCircular]) + .configurationDisplayName("AltWidget (Icon)") + .description("View remaining days until SideStore expires.") + } + else + { + return EmptyWidgetConfiguration() + } + } +} +// +//struct LockScreenWidget: Widget +//{ +// private let kind: String = "LockAppDetail" +// +// public var body: some WidgetConfiguration { +// if #available(iOSApplicationExtension 16, *) +// { +// return IntentConfiguration(kind: kind, +// intent: ViewAppIntent.self, +// provider: Provider()) { (entry) in +// ComplicationView(entry: entry, style: .icon) +// } +// .supportedFamilies([.accessoryCircular]) +// .configurationDisplayName("AltWidget") +// .description("View remaining days until SideStore expires.") +// } +// else +// { +// return EmptyWidgetConfiguration() +// } +// } +//} + @main struct AltWidgets: WidgetBundle { var body: some Widget { HomeScreenWidget() - LockScreenWidget() + IconLockScreenWidget() + TextLockScreenWidget() } } diff --git a/AltWidget/Assets.xcassets/SmallIcon.imageset/Contents.json b/AltWidget/Assets.xcassets/SmallIcon.imageset/Contents.json new file mode 100644 index 00000000..84d8b8f9 --- /dev/null +++ b/AltWidget/Assets.xcassets/SmallIcon.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "altminicon.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/AltWidget/Assets.xcassets/SmallIcon.imageset/altminicon.pdf b/AltWidget/Assets.xcassets/SmallIcon.imageset/altminicon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cdddd470cb2addb1108e2f54fe5e60f405b5feb0 GIT binary patch literal 4486 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 99 ? 18.0 : 20.0 - Text("\(daysRemaining)") - .font(.system(size: fontSize, weight: .bold, design: .rounded)) + switch self.style + { + case .text: + VStack(spacing: -1) { + let fontSize = daysRemaining > 99 ? 18.0 : 20.0 + Text("\(daysRemaining)") + .font(.system(size: fontSize, weight: .bold, design: .rounded)) + + Text(daysRemaining == 1 ? "DAY" : "DAYS") + .font(.caption) + } + .fixedSize() + .offset(y: -1) - Text(daysRemaining == 1 ? "DAY" : "DAYS") - .font(.caption) + case .icon: + ZStack { + // Destination + Image("SmallIcon") + .resizable() + .aspectRatio(1.0, contentMode: .fill) + .scaleEffect(x: 0.8, y: 0.8) + + // Source + ( + daysRemaining > 7 ? + Text("7+") + .font(.system(size: 18, weight: .bold, design: .rounded)) + .kerning(-2) : + + Text("\(daysRemaining)") + .font(.system(size: 20, weight: .bold, design: .rounded)) + ) + .foregroundColor(Color.black) + .blendMode(.destinationOut) // Clip text out of image. + } } - .fixedSize() - .offset(y: -1) } } .gaugeStyle(.accessoryCircularCapacity) @@ -74,14 +111,23 @@ struct ComplicationView_Previews: PreviewProvider { icon: UIImage(named: "AltStore")) return Group { - ComplicationView(entry: AppEntry(date: Date(), app: weekAltstore)) + ComplicationView(entry: AppEntry(date: Date(), app: weekAltstore), style: .icon) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) - ComplicationView(entry: AppEntry(date: expiredDate, app: weekAltstore)) + ComplicationView(entry: AppEntry(date: expiredDate, app: weekAltstore), style: .icon) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) - ComplicationView(entry: AppEntry(date: longRefreshedDate, app: yearAltstore)) + ComplicationView(entry: AppEntry(date: longRefreshedDate, app: yearAltstore), style: .icon) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) + + ComplicationView(entry: AppEntry(date: Date(), app: weekAltstore), style: .text) + .previewContext(WidgetPreviewContext(family: .accessoryCircular)) + + ComplicationView(entry: AppEntry(date: expiredDate, app: weekAltstore), style: .text) + .previewContext(WidgetPreviewContext(family: .accessoryCircular)) + + ComplicationView(entry: AppEntry(date: longRefreshedDate, app: yearAltstore), style: .text) + .previewContext(WidgetPreviewContext(family: .accessoryCircular)) } } }