Skip to content

Commit bd44bad

Browse files
committed
feat: config for iOS widget
1 parent 0cfa8ff commit bd44bad

File tree

15 files changed

+925
-3
lines changed

15 files changed

+925
-3
lines changed
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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"platform" : "ios",
6+
"size" : "1024x1024"
7+
},
8+
{
9+
"appearances" : [
10+
{
11+
"appearance" : "luminosity",
12+
"value" : "dark"
13+
}
14+
],
15+
"idiom" : "universal",
16+
"platform" : "ios",
17+
"size" : "1024x1024"
18+
},
19+
{
20+
"appearances" : [
21+
{
22+
"appearance" : "luminosity",
23+
"value" : "tinted"
24+
}
25+
],
26+
"idiom" : "universal",
27+
"platform" : "ios",
28+
"size" : "1024x1024"
29+
}
30+
],
31+
"info" : {
32+
"author" : "xcode",
33+
"version" : 1
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info" : {
3+
"author" : "xcode",
4+
"version" : 1
5+
}
6+
}
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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//
2+
// HomePlayerWidget.swift
3+
// HomePlayerWidget
4+
//
5+
// Created by Kingkor Roy Tirtho on 15/12/24.
6+
//
7+
8+
import WidgetKit
9+
import SwiftUI
10+
11+
private let widgetGroupId = "group.spotube_home_player_widget"
12+
13+
struct Provider: TimelineProvider {
14+
func placeholder(in context: Context) -> SimpleEntry {
15+
SimpleEntry(date: Date(), emoji: "😀")
16+
}
17+
18+
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
19+
let entry = SimpleEntry(date: Date(), emoji: "😀")
20+
completion(entry)
21+
}
22+
23+
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
24+
var entries: [SimpleEntry] = []
25+
26+
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
27+
let currentDate = Date()
28+
for hourOffset in 0 ..< 5 {
29+
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
30+
let entry = SimpleEntry(date: entryDate, emoji: "😀")
31+
entries.append(entry)
32+
}
33+
34+
let timeline = Timeline(entries: entries, policy: .atEnd)
35+
completion(timeline)
36+
}
37+
38+
// func relevances() async -> WidgetRelevances<Void> {
39+
// // Generate a list containing the contexts this widget is relevant in.
40+
// }
41+
}
42+
43+
struct SimpleEntry: TimelineEntry {
44+
let date: Date
45+
let emoji: String
46+
}
47+
48+
struct HomePlayerWidgetEntryView : View {
49+
var entry: Provider.Entry
50+
51+
var body: some View {
52+
VStack {
53+
Text("Time:")
54+
Text(entry.date, style: .time)
55+
56+
Text("Emoji:")
57+
Text(entry.emoji)
58+
}
59+
}
60+
}
61+
62+
struct HomePlayerWidget: Widget {
63+
let kind: String = "HomePlayerWidget"
64+
65+
var body: some WidgetConfiguration {
66+
StaticConfiguration(kind: kind, provider: Provider()) { entry in
67+
if #available(iOS 17.0, *) {
68+
HomePlayerWidgetEntryView(entry: entry)
69+
.containerBackground(.fill.tertiary, for: .widget)
70+
} else {
71+
HomePlayerWidgetEntryView(entry: entry)
72+
.padding()
73+
.background()
74+
}
75+
}
76+
.configurationDisplayName("My Widget")
77+
.description("This is an example widget.")
78+
}
79+
}
80+
81+
#Preview(as: .systemSmall) {
82+
HomePlayerWidget()
83+
} timeline: {
84+
SimpleEntry(date: .now, emoji: "😀")
85+
SimpleEntry(date: .now, emoji: "🤩")
86+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// HomePlayerWidgetBundle.swift
3+
// HomePlayerWidget
4+
//
5+
// Created by Kingkor Roy Tirtho on 15/12/24.
6+
//
7+
8+
import WidgetKit
9+
import SwiftUI
10+
11+
@main
12+
struct HomePlayerWidgetBundle: WidgetBundle {
13+
var body: some Widget {
14+
HomePlayerWidget()
15+
}
16+
}

ios/HomePlayerWidget/Info.plist

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>NSExtension</key>
6+
<dict>
7+
<key>NSExtensionPointIdentifier</key>
8+
<string>com.apple.widgetkit-extension</string>
9+
</dict>
10+
</dict>
11+
</plist>
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.application-groups</key>
6+
<array>
7+
<string>group.spotube_home_player_widget</string>
8+
</array>
9+
</dict>
10+
</plist>

0 commit comments

Comments
 (0)