Browse Source

Merge pull request #1302 from deltachat/avatar_no_image

Initials badge in siri shortcuts
bjoern 3 năm trước cách đây
mục cha
commit
19c10a145c

+ 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()
         }

+ 7 - 2
DcShare/Controller/ShareViewController.swift

@@ -87,8 +87,13 @@ class ShareViewController: SLComposeServiceViewController {
         isAccountConfigured = dcContext.isConfigured()
         if isAccountConfigured {
             if #available(iOSApplicationExtension 13.0, *) {
-               if let intent = self.extensionContext?.intent as? INSendMessageIntent, let chatId = Int(intent.conversationIdentifier ?? "") {
-                   selectedChatId = chatId
+                if let intent = self.extensionContext?.intent as? INSendMessageIntent,
+                   let identifiers = intent.conversationIdentifier?.split(separator: ".") {
+                    let contextId = Int(identifiers[0])
+                    let chatId = Int(identifiers[1])
+                    if dcContext.id == contextId {
+                        selectedChatId = chatId
+                    }
                }
             }