wxr
2021-11-24 8655407ab6987bb7268fab55b6380051f26668fe
SiriIntentsUI/IntentViewController.cs
@@ -1,51 +1,116 @@
using System;
using CoreGraphics;
using Foundation;
//using HDLSceneSiri;
using Intents;
using IntentsUI;
using UIKit;
namespace SiriIntentsUI
{
    // As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent.
    // You will want to replace this or add other intents as appropriate.
    // The intents whose interactions you wish to handle must be declared in the extension's Info.plist.
    // You can test this example integration by saying things to Siri like:
    // "Send a message using <myApp>"
    public partial class IntentViewController : UIViewController, IINUIHostedViewControlling
    {
        protected IntentViewController(IntPtr handle) : base(handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
        //public override void ViewDidLoad()
        //{
        //    base.ViewDidLoad();
            // Do any required interface initialization here.
        }
        //    // Do any required interface  here.
        //}
        public override void DidReceiveMemoryWarning()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning();
        //public override void DidReceiveMemoryWarning()
        //{
        //    // Releases the view if it doesn't have a superview.
        //    base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }
        //    // Release any cached data, images, etc that aren't in use.
        //}
        [Export("configureWithInteraction:context:completion:")]
        public void Configure(INInteraction interaction, INUIHostedViewContext context, Action<CGSize> completion)
        {
            // Do configuration here, including preparing views and calculating a desired size for presentation.
            if (completion != null)
                completion(DesiredSize());
            throw new NotImplementedException();
        }
        CGSize DesiredSize()
        {
            return ExtensionContext.GetHostedViewMaximumAllowedSize();
        }
        [Export("configureViewForParameters:ofInteraction:interactiveBehavior:context:completion:")]
        public void ConfigureView(
            NSSet<INParameter> parameters,
            INInteraction interaction,
            INUIInteractiveBehavior interactiveBehavior,
            INUIHostedViewContext context,
            INUIHostedViewControllingConfigureViewHandler completion)
        {
            //if (@available(iOS 12.0, *))
            {
                //HDLRunSceneIntentResponse rsp = interaction.IntentResponse as HDLRunSceneIntentResponse;
                //if (rsp.Code == HDLRunSceneIntentResponseCode.Success)
                //{
                //    this.messageLabel.Text = rsp.SuccessMessage;
                //}
                //else if (rsp.Code == HDLRunSceneIntentResponseCode.Failure || rsp.Code == HDLRunSceneIntentResponseCode.Error)
                //{
                //    this.messageLabel.Text = rsp.ErrorMessage;
                //}
                //else
                {
                    //messageLabel.Text = "执行成功";// rsp.SuccessMessage;
                }
            }
            CGSize size = new CGSize(DesiredSize().Width, 80);
            //if (completion != null)
                completion(true, parameters, size);
            //var intent = interaction.Intent as OrderSoupIntent;
            //if (intent is null)
            //{
            //    completion(false, new NSSet<INParameter>(), CGSize.Empty);
            //}
            //var order = Order.FromOrderSoupIntent(intent);
            //foreach (var view in View.Subviews)
            //{
            //    view.RemoveFromSuperview();
            //}
            //// Different UIs can be displayed depending if the intent is in the
            //// confirmation phase or the handle phase.
            //var desiredSize = CGSize.Empty;
            //if (interaction.IntentHandlingStatus == INIntentHandlingStatus.Ready)
            //{
            //    desiredSize = DisplayInvoice(order, intent);
            //}
            //else if (interaction.IntentHandlingStatus == INIntentHandlingStatus.Success)
            //{
            //    var response = interaction.IntentResponse as OrderSoupIntentResponse;
            //    if (!(response is null))
            //    {
            //        desiredSize = DisplayOrderConfirmation(order, intent, response);
            //    }
            //}
            //completion(true, parameters, desiredSize);
        }
    }
}