Browse Source

show chat initals and color in siri shortcuts when no chat avatar is available

cyberta 4 years ago
parent
commit
9404258b3c

+ 4 - 1
DcCore/DcCore/Helper/DcUtils.swift

@@ -14,7 +14,7 @@ public struct DcUtils {
         }
     }
 
-    public static func donateSendMessageIntent(context: DcContext, chatId: Int) {
+    public static func donateSendMessageIntent(context: DcContext, chatId: Int, chatAvatar: UIImage?) {
         if #available(iOS 13.0, *) {
             let chat = context.getChat(chatId: chatId)
             let groupName = INSpeakableString(spokenPhrase: chat.name)
@@ -30,6 +30,9 @@ public struct DcUtils {
             if let imageData = chat.profileImage?.pngData() {
                 let image = INImage(imageData: imageData)
                 sendMessageIntent.setImage(image, forParameterNamed: \.speakableGroupName)
+            } else if let imageData = chatAvatar?.pngData() {
+                let image = INImage(imageData: imageData)
+                sendMessageIntent.setImage(image, forParameterNamed: \.speakableGroupName)
             }
 
             // Donate the intent.

+ 11 - 0
DcCore/DcCore/Views/InitialsBadge.swift

@@ -139,4 +139,15 @@ public class InitialsBadge: UIView {
         imageView.image = nil
         label.text = nil
     }
+    
+    public func asImage() -> UIImage? {
+        UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0.0)
+        if let context = UIGraphicsGetCurrentContext() {
+            layer.render(in: context)
+            let image = UIGraphicsGetImageFromCurrentImageContext()
+            UIGraphicsEndImageContext()
+            return image
+        }
+        return nil
+    }
 }

+ 21 - 2
DcShare/Controller/SendingController.swift

@@ -18,6 +18,19 @@ class SendingController: UIViewController {
         view.text = String.localized("one_moment")
         return view
     }()
+    
+    private lazy var initialsBadge: InitialsBadge = {
+        let view = InitialsBadge(size: 95)
+        let chat = dcContext.getChat(chatId: chatId)
+        view.setColor(chat.color)
+        if let image = chat.profileImage {
+            view.setImage(image)
+        } else {
+            view.setName(chat.name)
+        }
+        view.isHidden = true
+        return view
+    }()
 
     private var activityIndicator: UIActivityIndicatorView = {
         let view: UIActivityIndicatorView
@@ -53,11 +66,14 @@ class SendingController: UIViewController {
     private func setupViews() {
         view.addSubview(progressLabel)
         view.addSubview(activityIndicator)
+        view.addSubview(initialsBadge)
         view.addConstraints([
             progressLabel.constraintCenterXTo(view),
             progressLabel.constraintAlignTopTo(view, paddingTop: 25),
             activityIndicator.constraintCenterXTo(view),
-            activityIndicator.constraintCenterYTo(view)
+            activityIndicator.constraintCenterYTo(view),
+            initialsBadge.constraintCenterXTo(view),
+            initialsBadge.constraintCenterYTo(view)
         ])
         setupNavigationBar()
     }
@@ -75,7 +91,10 @@ class SendingController: UIViewController {
             }
 
             if !self.dcContext.getChat(chatId: self.chatId).isSelfTalk {
-                DcUtils.donateSendMessageIntent(context: self.dcContext, chatId: self.chatId)
+                self.initialsBadge.isHidden = false
+                let image = self.initialsBadge.asImage()
+                self.initialsBadge.isHidden = true
+                DcUtils.donateSendMessageIntent(context: self.dcContext, chatId: self.chatId, chatAvatar: image)
             }
             self.delegate?.onSendingAttemptFinished()
         }