diff --git a/Intents.intentdefinition b/Intents.intentdefinition
index f83b915d39..d19acbb04e 100644
--- a/Intents.intentdefinition
+++ b/Intents.intentdefinition
@@ -19,6 +19,8 @@
INIntentCategory
information
+ INIntentDescription
+ Display the latest message from the most important chats.
INIntentDescriptionID
jmsEbj
INIntentEligibleForWidgets
@@ -56,7 +58,7 @@
INIntentParameterConfigurable
INIntentParameterDisplayName
-
+ SELECT CHATS
INIntentParameterDisplayNameID
WIf4LD
INIntentParameterDisplayPriority
@@ -124,7 +126,7 @@
INIntentTitle
- Select Chats
+ Chats
INIntentTitleID
lMot0c
INIntentType
@@ -135,6 +137,8 @@
INIntentCategory
information
+ INIntentDescription
+ "Display shortcuts of your most important chats to always have quick access to them.
INIntentDescriptionID
DwL4WQ
INIntentEligibleForWidgets
@@ -172,7 +176,7 @@
INIntentParameterConfigurable
INIntentParameterDisplayName
-
+ SELECT CHATS
INIntentParameterDisplayNameID
Jg5dYF
INIntentParameterDisplayPriority
@@ -240,7 +244,7 @@
INIntentTitle
- Select Chats
+ Shortcuts
INIntentTitleID
3Sbb7H
INIntentType
diff --git a/Telegram/BUILD b/Telegram/BUILD
index ee94e58836..e6e25b5703 100644
--- a/Telegram/BUILD
+++ b/Telegram/BUILD
@@ -1161,6 +1161,12 @@ plist_fragment(
)
)
+filegroup(
+ name = "WidgetAssets",
+ srcs = glob(["WidgetKitWidget/WidgetImages.xcassets/**"]),
+ visibility = ["//visibility:public"],
+)
+
swift_library(
name = "WidgetExtensionLib",
module_name = "WidgetExtensionLib",
@@ -1168,7 +1174,7 @@ swift_library(
"WidgetKitWidget/**/*.swift",
]),
data = [
- #"SiriIntents/Intents.intentdefinition",
+ ":WidgetAssets",
],
deps = [
"//submodules/BuildConfig:BuildConfig",
@@ -1205,7 +1211,9 @@ ios_extension(
":disableProvisioningProfilesSetting": None,
"//conditions:default": "@build_configuration//provisioning:Widget.mobileprovision",
}),
- deps = [":WidgetExtensionLib"],
+ deps = [
+ ":WidgetExtensionLib",
+ ],
frameworks = [
":SwiftSignalKitFramework",
":PostboxFramework",
diff --git a/Telegram/WidgetKitWidget/TodayViewController.swift b/Telegram/WidgetKitWidget/TodayViewController.swift
index efb0c51dac..7b228c5262 100644
--- a/Telegram/WidgetKitWidget/TodayViewController.swift
+++ b/Telegram/WidgetKitWidget/TodayViewController.swift
@@ -87,11 +87,16 @@ struct Provider: IntentTimelineProvider {
}
func getSnapshot(for configuration: SelectFriendsIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {
- let entry = SimpleEntry(date: Date(), contents: .peers(ParsedPeers(accountId: 0, peers: WidgetDataPeers(accountPeerId: 0, peers: [], updateTimestamp: 0))))
+ let entry = SimpleEntry(date: Date(), contents: context.isPreview ? .preview : .peers(ParsedPeers(accountId: 0, peers: WidgetDataPeers(accountPeerId: 0, peers: [], updateTimestamp: 0))))
completion(entry)
}
func getTimeline(for configuration: SelectFriendsIntent, in context: Context, completion: @escaping (Timeline) -> ()) {
+ if context.isPreview {
+ completion(Timeline(entries: [SimpleEntry(date: Date(), contents: .preview)], policy: .atEnd))
+ return
+ }
+
let currentDate = Date()
let entryDate = Calendar.current.date(byAdding: .hour, value: 0, to: currentDate)!
@@ -240,11 +245,16 @@ struct AvatarsProvider: IntentTimelineProvider {
}
func getSnapshot(for configuration: SelectAvatarFriendsIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {
- let entry = SimpleEntry(date: Date(), contents: .peers(ParsedPeers(accountId: 0, peers: WidgetDataPeers(accountPeerId: 0, peers: [], updateTimestamp: 0))))
+ let entry = SimpleEntry(date: Date(), contents: context.isPreview ? .preview : .peers(ParsedPeers(accountId: 0, peers: WidgetDataPeers(accountPeerId: 0, peers: [], updateTimestamp: 0))))
completion(entry)
}
func getTimeline(for configuration: SelectAvatarFriendsIntent, in context: Context, completion: @escaping (Timeline) -> ()) {
+ if context.isPreview {
+ completion(Timeline(entries: [SimpleEntry(date: Date(), contents: .preview)], policy: .atEnd))
+ return
+ }
+
let currentDate = Date()
let entryDate = Calendar.current.date(byAdding: .hour, value: 0, to: currentDate)!
@@ -388,6 +398,7 @@ struct AvatarsProvider: IntentTimelineProvider {
struct SimpleEntry: TimelineEntry {
enum Contents {
case recent
+ case preview
case peers(ParsedPeers)
}
@@ -397,13 +408,10 @@ struct SimpleEntry: TimelineEntry {
enum PeersWidgetData {
case empty
+ case preview
case peers(ParsedPeers)
}
-extension PeersWidgetData {
- static let previewData = PeersWidgetData.empty
-}
-
struct AvatarItemView: View {
var peer: ParsedPeer?
var itemSize: CGFloat
@@ -428,23 +436,6 @@ struct WidgetView: View {
@Environment(\.colorScheme) private var colorScheme
let data: PeersWidgetData
- func placeholder(geometry: GeometryProxy) -> some View {
- let defaultItemSize: CGFloat = 60.0
- let defaultPaddingFraction: CGFloat = 0.36
-
- let columnCount = Int(round(geometry.size.width / (defaultItemSize * (1.0 + defaultPaddingFraction))))
- let itemSize = floor(geometry.size.width / (CGFloat(columnCount) + defaultPaddingFraction * CGFloat(columnCount - 1)))
-
- let firstRowY = itemSize / 2.0
- let secondRowY = itemSize / 2.0 + geometry.size.height - itemSize
-
- return ZStack {
- ForEach(0 ..< columnCount * 2, content: { i in
- return Circle().frame(width: itemSize, height: itemSize).position(x: itemSize / 2.0 + floor(CGFloat(i % columnCount) * itemSize * (1.0 + defaultPaddingFraction)), y: i / columnCount == 0 ? firstRowY : secondRowY).foregroundColor(.gray)
- })
- }
- }
-
private func linkForPeer(accountId: Int64, id: Int64) -> String {
switch self.widgetFamily {
case .systemSmall:
@@ -454,94 +445,15 @@ struct WidgetView: View {
}
}
- func peersView(geometry: GeometryProxy, peers: ParsedPeers) -> some View {
- let columnCount: Int
- let rowCount: Int
-
- let itemSizeFraction: CGFloat
- let horizontalInsetFraction: CGFloat
- let verticalInsetFraction: CGFloat
- let horizontalSpacingFraction: CGFloat
- let verticalSpacingFraction: CGFloat
-
- switch self.widgetFamily {
- case .systemLarge:
- itemSizeFraction = 0.1762917933
- horizontalInsetFraction = 0.04863221884
- verticalInsetFraction = 0.04863221884
- horizontalSpacingFraction = 0.06079027356
- verticalSpacingFraction = 0.06079027356
- columnCount = 4
- rowCount = 4
- case .systemMedium:
- itemSizeFraction = 0.1762917933
- horizontalInsetFraction = 0.04863221884
- verticalInsetFraction = 0.1032258065
- horizontalSpacingFraction = 0.06079027356
- verticalSpacingFraction = 0.07741935484
- columnCount = 4
- rowCount = 2
- case .systemSmall:
- itemSizeFraction = 0.335483871
- horizontalInsetFraction = 0.1032258065
- verticalInsetFraction = 0.1032258065
- horizontalSpacingFraction = 0.1161290323
- verticalSpacingFraction = 0.1161290323
- columnCount = 2
- rowCount = 2
- @unknown default:
- itemSizeFraction = 0.335483871
- horizontalInsetFraction = 0.1032258065
- verticalInsetFraction = 0.1032258065
- horizontalSpacingFraction = 0.1161290323
- verticalSpacingFraction = 0.1161290323
- columnCount = 2
- rowCount = 2
- }
-
- let itemSize = floor(geometry.size.width * itemSizeFraction)
-
- return ZStack {
- ForEach(0 ..< min(peers.peers.count, columnCount * rowCount), content: { i in
- Link(destination: URL(string: linkForPeer(accountId: peers.peers[i].accountId, id: peers.peers[i].peer.id))!, label: {
- AvatarItemView(
- peer: peers.peers[i],
- itemSize: itemSize,
- placeholderColor: getPlaceholderColor()
- ).frame(width: itemSize, height: itemSize)
- }).frame(width: itemSize, height: itemSize)
- .position(x: floor(horizontalInsetFraction * geometry.size.width + itemSize / 2.0 + CGFloat(i % columnCount) * (itemSize + horizontalSpacingFraction * geometry.size.width)), y: floor(verticalInsetFraction * geometry.size.height + itemSize / 2.0 + CGFloat(i / columnCount) * (itemSize + verticalSpacingFraction * geometry.size.height)))
- })
- }
- }
-
- func peerViews() -> AnyView {
- switch data {
- case .empty:
- return AnyView(GeometryReader { geometry in
- placeholder(geometry: geometry)
- })
- case let .peers(peers):
- return AnyView(GeometryReader { geometry in
- peersView(geometry: geometry, peers: peers)
- })
- }
- }
-
- var body1: some View {
- ZStack {
- peerViews()
- }
- .padding(0.0)
- }
-
- func chatTopLine(_ peer: ParsedPeer?) -> some View {
+ func chatTopLine(_ content: ChatContent) -> some View {
let dateText: String
let chatTitle: AnyView
let date: Text
+ var isPlaceholder = false
- if let peer = peer {
+ switch content {
+ case let .peer(peer):
if let message = peer.peer.message {
dateText = DateFormatter.localizedString(from: Date(timeIntervalSince1970: Double(message.timestamp)), dateStyle: .none, timeStyle: .short)
} else {
@@ -553,14 +465,23 @@ struct WidgetView: View {
.foregroundColor(.primary))
date = Text(dateText)
.font(Font.system(size: 14.0, weight: .regular, design: .default)).foregroundColor(.secondary)
- } else {
+ case let .preview(index):
+ dateText = index == 0 ? "9:00" : "8:42"
+ chatTitle = AnyView(Text("News Channel")
+ .lineLimit(1)
+ .font(Font.system(size: 16.0, weight: .medium, design: .default))
+ .foregroundColor(.primary))
+ date = Text(dateText)
+ .font(Font.system(size: 14.0, weight: .regular, design: .default)).foregroundColor(.secondary)
+ case .placeholder:
+ isPlaceholder = true
dateText = " "
chatTitle = AnyView(Text(" ").font(Font.system(size: 16.0, weight: .medium, design: .default)).foregroundColor(.primary))
date = Text(dateText)
.font(Font.system(size: 16.0, weight: .regular, design: .default)).foregroundColor(.secondary)
}
return HStack(alignment: .center, spacing: 0.0, content: {
- if peer != nil {
+ if !isPlaceholder {
chatTitle
} else {
chatTitle
@@ -574,7 +495,7 @@ struct WidgetView: View {
)
}
Spacer()
- if peer != nil {
+ if !isPlaceholder {
date
} else {
date
@@ -590,78 +511,88 @@ struct WidgetView: View {
.padding(0.0)
}
- func chatBottomLine(_ peer: ParsedPeer?) -> AnyView {
- var text = peer?.peer.message?.text ?? ""
- text += "\n"
- if peer == nil {
- text = "First Line Of Text Here\nSecond line fwqefeqwfqwef qwef wq"
- }
- if let message = peer?.peer.message {
- //TODO:localize
- switch message.content {
- case .text:
- break
- case .image:
- if !message.text.isEmpty {
- text = "š¼ \(message.text)"
- } else {
- text = "š¼ Photo"
+ func chatBottomLine(_ content: ChatContent) -> AnyView {
+ var text = ""
+ var isPlaceholder = false
+ switch content {
+ case let .peer(peer):
+ if let message = peer.peer.message {
+ //TODO:localize
+ switch message.content {
+ case .text:
+ break
+ case .image:
+ if !message.text.isEmpty {
+ text = "š¼ \(message.text)"
+ } else {
+ text = "š¼ Photo"
+ }
+ case .video:
+ if !message.text.isEmpty {
+ text = "š¹ \(message.text)"
+ } else {
+ text = "š¹ Video"
+ }
+ case .gif:
+ if !message.text.isEmpty {
+ text = "\(message.text)"
+ } else {
+ text = "Gif"
+ }
+ case let .file(file):
+ if !message.text.isEmpty {
+ text = "š¹ \(message.text)"
+ } else {
+ text = "š \(file.name)"
+ }
+ case let .music(music):
+ if !music.title.isEmpty && !music.artist.isEmpty {
+ text = "\(music.artist) ā \(music.title)"
+ } else if !music.title.isEmpty {
+ text = music.title
+ } else if !music.artist.isEmpty {
+ text = music.artist
+ } else {
+ text = "Music"
+ }
+ case .voiceMessage:
+ text = "š¤ Voice Message"
+ case .videoMessage:
+ text = "Video Message"
+ case let .sticker(sticker):
+ text = "\(sticker.altText) Sticker"
+ case let .call(call):
+ if call.isVideo {
+ text = "Video Call"
+ } else {
+ text = "Voice Call"
+ }
+ case .mapLocation:
+ text = "Location"
+ case let .game(game):
+ text = "š® \(game.title)"
+ case let .poll(poll):
+ text = "š \(poll.title)"
}
- case .video:
- if !message.text.isEmpty {
- text = "š¹ \(message.text)"
- } else {
- text = "š¹ Video"
- }
- case .gif:
- if !message.text.isEmpty {
- text = "\(message.text)"
- } else {
- text = "Gif"
- }
- case let .file(file):
- if !message.text.isEmpty {
- text = "š¹ \(message.text)"
- } else {
- text = "š \(file.name)"
- }
- case let .music(music):
- if !music.title.isEmpty && !music.artist.isEmpty {
- text = "\(music.artist) ā \(music.title)"
- } else if !music.title.isEmpty {
- text = music.title
- } else if !music.artist.isEmpty {
- text = music.artist
- } else {
- text = "Music"
- }
- case .voiceMessage:
- text = "š¤ Voice Message"
- case .videoMessage:
- text = "Video Message"
- case let .sticker(sticker):
- text = "\(sticker.altText) Sticker"
- case let .call(call):
- if call.isVideo {
- text = "Video Call"
- } else {
- text = "Voice Call"
- }
- case .mapLocation:
- text = "Location"
- case let .game(game):
- text = "š® \(game.title)"
- case let .poll(poll):
- text = "š \(poll.title)"
- }
-
- if let author = message.author {
- if author.isMe {
- text = "You: \(text)"
- } else {
- text = "\(author.title): \(text)"
+
+ if let author = message.author {
+ if author.isMe {
+ text = "You: \(text)"
+ } else {
+ text = "\(author.title): \(text)"
+ }
}
}
+ text += "\n"
+ case let .preview(index):
+ if index == 0 {
+ text = "āļø 23 °C\nāļø Passing Clouds"
+ } else {
+ text = "š Sticker"
+ text += "\n"
+ }
+ case .placeholder:
+ isPlaceholder = true
}
let textView = Text(text)
@@ -671,7 +602,7 @@ struct WidgetView: View {
.multilineTextAlignment(.leading)
.padding(0.0)
- if peer != nil {
+ if !isPlaceholder {
return AnyView(textView)
} else {
return AnyView(
@@ -709,16 +640,23 @@ struct WidgetView: View {
}
}
- func chatContent(_ peer: ParsedPeer?) -> some View {
+ enum ChatContent {
+ case peer(ParsedPeer)
+ case preview(Int)
+ case placeholder
+ }
+
+ func chatContent(_ content: ChatContent) -> some View {
return VStack(alignment: .leading, spacing: 0.0, content: {
- chatTopLine(peer)
- chatBottomLine(peer)
+ chatTopLine(content)
+ chatBottomLine(content)
})
}
func chatContentView(_ index: Int, size: CGSize) -> AnyView {
let peers: ParsedPeers?
var isPlaceholder = false
+ var isPreview = false
switch data {
case let .peers(peersValue):
if peersValue.peers.count <= index {
@@ -727,6 +665,9 @@ struct WidgetView: View {
} else {
peers = peersValue
}
+ case .preview:
+ peers = nil
+ isPreview = true
default:
peers = nil
}
@@ -739,6 +680,20 @@ struct WidgetView: View {
)
}
+ if isPreview {
+ return AnyView(
+ HStack(alignment: .center, spacing: 0.0, content: {
+ Image("Widget/Avatar\(index == 0 ? "Channel" : "1")")
+ .aspectRatio(1.0, contentMode: .fit)
+ .clipShape(Circle())
+ .frame(width: 54.0, height: 54.0, alignment: .leading)
+ .padding(EdgeInsets(top: 0.0, leading: 10.0, bottom: 0.0, trailing: 10.0))
+ chatContent(.preview(index)).frame(maxWidth: .infinity).padding(EdgeInsets(top: 0.0, leading: 0.0, bottom: 0.0, trailing: 10.0))
+ })
+ .frame(width: size.width, height: itemHeight, alignment: .leading)
+ )
+ }
+
let url: URL
if let peers = peers {
url = URL(string: linkForPeer(accountId: peers.peers[index].accountId, id: peers.peers[index].peer.id))!
@@ -746,11 +701,18 @@ struct WidgetView: View {
url = URL(string: "\(buildConfig.appSpecificUrlScheme)://")!
}
+ let content: ChatContent
+ if let peer = peers?.peers[index] {
+ content = .peer(peer)
+ } else {
+ content = .placeholder
+ }
+
return AnyView(
Link(destination: url, label: {
HStack(alignment: .center, spacing: 0.0, content: {
AvatarItemView(peer: peers?.peers[index], itemSize: 54.0, placeholderColor: getPlaceholderColor()).frame(width: 54.0, height: 54.0, alignment: .leading).padding(EdgeInsets(top: 0.0, leading: 10.0, bottom: 0.0, trailing: 10.0))
- chatContent(peers?.peers[index]).frame(maxWidth: .infinity).padding(EdgeInsets(top: 0.0, leading: 0.0, bottom: 0.0, trailing: 10.0))
+ chatContent(content).frame(maxWidth: .infinity).padding(EdgeInsets(top: 0.0, leading: 0.0, bottom: 0.0, trailing: 10.0))
})
})
.frame(width: size.width, height: itemHeight, alignment: .leading)
@@ -795,7 +757,7 @@ struct WidgetView: View {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .none
- text = "updated on \(formatter.string(from: date))"
+ text = "updated \(formatter.string(from: date))"
} else {
let formatter = DateFormatter()
formatter.dateStyle = .none
@@ -803,6 +765,21 @@ struct WidgetView: View {
text = "updated at \(formatter.string(from: date))"
}
}
+ case .preview:
+ let date = Date()
+ let calendar = Calendar.current
+ //TODO:localize
+ if !calendar.isDate(Date(), inSameDayAs: date) {
+ let formatter = DateFormatter()
+ formatter.dateStyle = .short
+ formatter.timeStyle = .none
+ text = "updated \(formatter.string(from: date))"
+ } else {
+ let formatter = DateFormatter()
+ formatter.dateStyle = .none
+ formatter.timeStyle = .short
+ text = "updated at \(formatter.string(from: date))"
+ }
default:
text = "Long tap to edit widget"
}
@@ -902,6 +879,7 @@ struct AvatarsWidgetView: View {
func itemView(index: Int) -> some View {
let peers: ParsedPeers?
var isPlaceholder = false
+ var isPreview = false
switch data {
case let .peers(peersValue):
if peersValue.peers.count <= index {
@@ -910,6 +888,9 @@ struct AvatarsWidgetView: View {
} else {
peers = peersValue
}
+ case .preview:
+ peers = nil
+ isPreview = true
default:
peers = nil
}
@@ -921,8 +902,9 @@ struct AvatarsWidgetView: View {
})
}).aspectRatio(1.0, contentMode: .fit))
} else if isPlaceholder {
- //return AnyView(Circle().aspectRatio(1.0, contentMode: .fit).foregroundColor(.clear))
return AnyView(Circle().aspectRatio(1.0, contentMode: .fit).foregroundColor(getPlaceholderColor()))
+ } else if isPreview {
+ return AnyView(Image("Widget/Avatar\(index + 1)").aspectRatio(1.0, contentMode: .fit).clipShape(Circle()))
} else {
return AnyView(Circle().aspectRatio(1.0, contentMode: .fit).foregroundColor(getPlaceholderColor()))
}
@@ -999,6 +981,8 @@ func getWidgetData(contents: SimpleEntry.Contents) -> PeersWidgetData {
switch contents {
case .recent:
return .empty
+ case .preview:
+ return .preview
case let .peers(peers):
return .peers(peers)
}
@@ -1012,8 +996,8 @@ struct Static_Widget: Widget {
WidgetView(data: getWidgetData(contents: entry.contents))
})
.supportedFamilies([.systemMedium])
- .configurationDisplayName(presentationData.widgetGalleryTitle)
- .description(presentationData.widgetGalleryDescription)
+ .configurationDisplayName("Chats")
+ .description("Display the latest message from the most important chats.")
}
}
@@ -1025,8 +1009,8 @@ struct Static_AvatarsWidget: Widget {
AvatarsWidgetView(data: getWidgetData(contents: entry.contents))
})
.supportedFamilies([.systemMedium])
- .configurationDisplayName(presentationData.widgetGalleryTitle)
- .description(presentationData.widgetGalleryDescription)
+ .configurationDisplayName("Shortcuts")
+ .description("Display shortcuts of your most important chats to always have quick access to them.")
}
}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Contents.json
new file mode 100644
index 0000000000..73c00596a7
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Avatar1.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Avatar1.pdf
new file mode 100644
index 0000000000..084021fe6e
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Avatar1.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Contents.json
new file mode 100644
index 0000000000..706f6d58b2
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar1.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar1.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Avatar2.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Avatar2.pdf
new file mode 100644
index 0000000000..5d54ed11aa
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Avatar2.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Contents.json
new file mode 100644
index 0000000000..fdd16b3714
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar2.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar2.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Avatar3.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Avatar3.pdf
new file mode 100644
index 0000000000..7d78f0370f
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Avatar3.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Contents.json
new file mode 100644
index 0000000000..bde6c232a2
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar3.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar3.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Avatar4.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Avatar4.pdf
new file mode 100644
index 0000000000..65c9306447
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Avatar4.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Contents.json
new file mode 100644
index 0000000000..2567633507
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar4.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar4.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Avatar5.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Avatar5.pdf
new file mode 100644
index 0000000000..ffafc3c002
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Avatar5.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Contents.json
new file mode 100644
index 0000000000..2c8e148978
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar5.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar5.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Avatar6.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Avatar6.pdf
new file mode 100644
index 0000000000..2aaec1f153
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Avatar6.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Contents.json
new file mode 100644
index 0000000000..6137bb49be
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar6.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar6.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Avatar7.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Avatar7.pdf
new file mode 100644
index 0000000000..cda255b698
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Avatar7.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Contents.json
new file mode 100644
index 0000000000..63bd15a618
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar7.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar7.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Avatar8.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Avatar8.pdf
new file mode 100644
index 0000000000..6c97d03a30
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Avatar8.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Contents.json
new file mode 100644
index 0000000000..3b6cd02302
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Avatar8.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Avatar8.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/AvatarChannel.pdf b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/AvatarChannel.pdf
new file mode 100644
index 0000000000..784514a548
Binary files /dev/null and b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/AvatarChannel.pdf differ
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/Contents.json
new file mode 100644
index 0000000000..3cce887710
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/AvatarChannel.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "AvatarChannel.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Contents.json b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Contents.json
new file mode 100644
index 0000000000..6e965652df
--- /dev/null
+++ b/Telegram/WidgetKitWidget/WidgetImages.xcassets/Widget/Contents.json
@@ -0,0 +1,9 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "provides-namespace" : true
+ }
+}