Fix donated saved messages avatar

Add custom placeholder for donated avatarless chats
This commit is contained in:
Ilya Laktyushin 2020-09-24 11:12:54 +03:00
parent 84efd043c1
commit 0ec1736ff8

View File

@ -12,7 +12,7 @@ import AvatarNode
import AccountContext import AccountContext
private let savedMessagesAvatar: UIImage = { private let savedMessagesAvatar: UIImage = {
return generateImage(CGSize(width: 60.0, height: 60.0), contextGenerator: { size, context in return generateImage(CGSize(width: 60.0, height: 60.0), rotatedContext: { size, context in
var locations: [CGFloat] = [1.0, 0.0] var locations: [CGFloat] = [1.0, 0.0]
let colorSpace = CGColorSpaceCreateDeviceRGB() let colorSpace = CGColorSpaceCreateDeviceRGB()
@ -68,6 +68,7 @@ public func donateSendMessageIntent(account: Account, sharedContext: SharedAccou
|> mapToSignal { unlocked -> Signal<[(Peer, SendMessageIntentSubject, UIImage?)], NoError> in |> mapToSignal { unlocked -> Signal<[(Peer, SendMessageIntentSubject, UIImage?)], NoError> in
if unlocked { if unlocked {
return sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.intentsSettings]) return sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.intentsSettings])
|> take(1)
|> mapToSignal { sharedData -> Signal<[(Peer, SendMessageIntentSubject)], NoError> in |> mapToSignal { sharedData -> Signal<[(Peer, SendMessageIntentSubject)], NoError> in
let settings = (sharedData.entries[ApplicationSpecificSharedDataKeys.intentsSettings] as? IntentsSettings) ?? IntentsSettings.defaultSettings let settings = (sharedData.entries[ApplicationSpecificSharedDataKeys.intentsSettings] as? IntentsSettings) ?? IntentsSettings.defaultSettings
if let accountId = settings.account, accountId != account.peerId { if let accountId = settings.account, accountId != account.peerId {
@ -136,7 +137,20 @@ public func donateSendMessageIntent(account: Account, sharedContext: SharedAccou
} else { } else {
let peerAndAvatar = (peerAvatarImage(account: account, peerReference: PeerReference(peer), authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil)) let peerAndAvatar = (peerAvatarImage(account: account, peerReference: PeerReference(peer), authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil))
|> map { imageVersions -> (Peer, SendMessageIntentSubject, UIImage?) in |> map { imageVersions -> (Peer, SendMessageIntentSubject, UIImage?) in
let avatarImage = imageVersions?.0 var avatarImage: UIImage?
if let image = imageVersions?.0 {
avatarImage = image
} else {
let avatarFont = avatarPlaceholderFont(size: 26.0)
let size = CGSize(width: 60.0, height: 60.0)
if let image = generateImage(size, rotatedContext: { size, context in
context.clear(CGRect(origin: CGPoint(), size: size))
drawPeerAvatarLetters(context: context, size: CGSize(width: size.width, height: size.height), font: avatarFont, letters: peer.displayLetters, peerId: peer.id)
})?.withRenderingMode(.alwaysOriginal) {
avatarImage = image
}
}
return (peer, subject, avatarImage) return (peer, subject, avatarImage)
} }
signals.append(peerAndAvatar) signals.append(peerAndAvatar)
@ -151,7 +165,7 @@ public func donateSendMessageIntent(account: Account, sharedContext: SharedAccou
|> deliverOnMainQueue).start(next: { peers in |> deliverOnMainQueue).start(next: { peers in
let presentationData = sharedContext.currentPresentationData.with { $0 } let presentationData = sharedContext.currentPresentationData.with { $0 }
for (peer, subject, avatarImage) in peers { for (peer, _, avatarImage) in peers {
let recipientHandle = INPersonHandle(value: "tg\(peer.id.toInt64())", type: .unknown) let recipientHandle = INPersonHandle(value: "tg\(peer.id.toInt64())", type: .unknown)
let displayTitle: String let displayTitle: String
var nameComponents = PersonNameComponents() var nameComponents = PersonNameComponents()