wxr
2021-11-30 e75ccccb370b47305c6eadb321efb27c86cdd28b
SiriIntents/IntentHandler.cs
New file
@@ -0,0 +1,134 @@
using System;
using System.Collections.Generic;
using Foundation;
using HDLSceneSiri;
using Intents;
namespace SiriIntents
{
    // As an example, this class is set up to handle Message intents.
    // You will want to replace this or add other intents as appropriate.
    // The intents you wish to handle must be declared in the extension's Info.plist.
    // You can test your example integration by saying things to Siri like:
    // "Send a message using <myApp>"
    // "<myApp> John saying hello"
    // "Search for messages in <myApp>"
    [Register("IntentHandler")]
    public class IntentHandler : INExtension//, IINSendMessageIntentHandling, IINSearchForMessagesIntentHandling, IINSetMessageAttributeIntentHandling
    {
        protected IntentHandler(IntPtr handle) : base(handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        public override NSObject GetHandler(INIntent intent)
        {
            // This is the default implementation.  If you want different objects to handle different intents,
            // you can override this and return the handler you want for that particular intent.
            if (intent is HDLRunSceneIntent)
            {
                return new HDLRunSceneIntentHandlder();
            }
            return this;
        }
        //// Implement resolution methods to provide additional information about your intent (optional).
        //[Export("resolveRecipientsForSearchForMessages:withCompletion:")]
        //public void ResolveRecipients(INSendMessageIntent intent, Action<INPersonResolutionResult[]> completion)
        //{
        //    var recipients = intent.Recipients;
        //    // If no recipients were provided we'll need to prompt for a value.
        //    if (recipients.Length == 0)
        //    {
        //        completion(new INPersonResolutionResult[] { INPersonResolutionResult.NeedsValue });
        //        return;
        //    }
        //    var resolutionResults = new List<INPersonResolutionResult>();
        //    foreach (var recipient in recipients)
        //    {
        //        var matchingContacts = new INPerson[] { recipient }; // Implement your contact matching logic here to create an array of matching contacts
        //        if (matchingContacts.Length > 1)
        //        {
        //            // We need Siri's help to ask user to pick one from the matches.
        //            resolutionResults.Add(INPersonResolutionResult.GetDisambiguation(matchingContacts));
        //        }
        //        else if (matchingContacts.Length == 1)
        //        {
        //            // We have exactly one matching contact
        //            resolutionResults.Add(INPersonResolutionResult.GetSuccess(recipient));
        //        }
        //        else
        //        {
        //            // We have no contacts matching the description provided
        //            resolutionResults.Add(INPersonResolutionResult.Unsupported);
        //        }
        //    }
        //    completion(resolutionResults.ToArray());
        //}
        //[Export("resolveContentForSendMessage:withCompletion:")]
        //public void ResolveContent(INSendMessageIntent intent, Action<INStringResolutionResult> completion)
        //{
        //    var text = intent.Content;
        //    if (!string.IsNullOrEmpty(text))
        //        completion(INStringResolutionResult.GetSuccess(text));
        //    else
        //        completion(INStringResolutionResult.NeedsValue);
        //}
        //// Once resolution is completed, perform validation on the intent and provide confirmation (optional).
        //[Export("confirmSendMessage:completion:")]
        //public void ConfirmSendMessage(INSendMessageIntent intent, Action<INSendMessageIntentResponse> completion)
        //{
        //    // Verify user is authenticated and your app is ready to send a message.
        //    var userActivity = new NSUserActivity("INSendMessageIntent");
        //    var response = new INSendMessageIntentResponse(INSendMessageIntentResponseCode.Ready, userActivity);
        //    completion(response);
        //}
        //// Handle the completed intent (required).
        //public void HandleSendMessage(INSendMessageIntent intent, Action<INSendMessageIntentResponse> completion)
        //{
        //    // Implement your application logic to send a message here.
        //    var userActivity = new NSUserActivity("INSendMessageIntent");
        //    var response = new INSendMessageIntentResponse(INSendMessageIntentResponseCode.Success, userActivity);
        //    completion(response);
        //}
        //// Implement handlers for each intent you wish to handle.
        //// As an example for messages, you may wish to add HandleSearchForMessages and HandleSetMessageAttribute.
        //public void HandleSearchForMessages(INSearchForMessagesIntent intent, Action<INSearchForMessagesIntentResponse> completion)
        //{
        //    // Implement your application logic to find a message that matches the information in the intent.
        //    var userActivity = new NSUserActivity("INSearchForMessagesIntent");
        //    var response = new INSearchForMessagesIntentResponse(INSearchForMessagesIntentResponseCode.Success, userActivity);
        //    // Initialize with found message's attributes
        //    var sender = new INPerson(new INPersonHandle("sarah@example.com", INPersonHandleType.EmailAddress), null, "Sarah", null, null, null);
        //    var recipient = new INPerson(new INPersonHandle("+1-415-555-5555", INPersonHandleType.PhoneNumber), null, "John", null, null, null);
        //    var message = new INMessage("identifier", "I am so excited about SiriKit!", NSDate.Now, sender, new INPerson[] { recipient });
        //    response.Messages = new INMessage[] { message };
        //    completion(response);
        //}
        //public void HandleSetMessageAttribute(INSetMessageAttributeIntent intent, Action<INSetMessageAttributeIntentResponse> completion)
        //{
        //    // Implement your application logic to set the message attribute here.
        //    var userActivity = new NSUserActivity("INSetMessageAttributeIntent");
        //    var response = new INSetMessageAttributeIntentResponse(INSetMessageAttributeIntentResponseCode.Success, userActivity);
        //    completion(response);
        //}
    }
}