From dd3f6db0cb3c242758ab0000a0513e093f02531c Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期四, 18 十一月 2021 13:11:32 +0800
Subject: [PATCH] 合并成功

---
 SiriIntentsUI/Info.plist                          |    3 
 SiriIntents/Info.plist                            |    3 
 HDL-ON_iOS/Info.plist                             |    4 
 HDL-ON_iOS/Other/Siri/SiriBaseView.cs             |   69 +++++++++++++
 HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs |   57 +++++++++++
 HDL-ON_iOS/HDL-ON_iOS.csproj                      |    2 
 HDL-ON_iOS/Other/Siri/SiriScene.cs                |  100 ++++++++++++++++++++
 .vs/HDL_APP_Project/xs/UserPrefs.xml              |   24 ++--
 HDL-ON_iOS/Other/SkipControl.cs                   |   12 --
 9 files changed, 248 insertions(+), 26 deletions(-)

diff --git a/.vs/HDL_APP_Project/xs/UserPrefs.xml b/.vs/HDL_APP_Project/xs/UserPrefs.xml
index 203c887..50014a3 100644
--- a/.vs/HDL_APP_Project/xs/UserPrefs.xml
+++ b/.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -3,32 +3,33 @@
     <MonoDevelop.MacDev.AppleDevelopmentTeam />
   </MonoDevelop.Ide.ItemProperties.SiriIntentUI>
   <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" />
-  <MonoDevelop.Ide.ItemProperties.SiriIntents FirstBuild="True">
+  <MonoDevelop.Ide.ItemProperties.SiriIntents>
     <MonoDevelop.MacDev.AppleDevelopmentTeam />
   </MonoDevelop.Ide.ItemProperties.SiriIntents>
-  <MonoDevelop.Ide.Workbench ActiveDocument="SiriIntents/IntentHandler.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="SiriBinding/obj/Debug/iOS/HdlSiri/HDLRunSceneIntent.g.cs">
     <Files>
       <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="203" Column="35" />
-      <File FileName="HDL-ON_iOS/Other/SkipControl.cs" Line="35" Column="1" />
-      <File FileName="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" Line="25" Column="2" />
-      <File FileName="SiriBinding/ApiDefinition.cs" Line="8" Column="18" />
-      <File FileName="SiriBinding/Structs.cs" Line="19" Column="1" />
-      <File FileName="SiriIntents/IntentHandler.cs" Line="1" Column="1" />
+      <File FileName="HDL-ON_iOS/Other/SkipControl.cs" Line="18" Column="36" />
+      <File FileName="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" Line="34" Column="101" />
+      <File FileName="SiriBinding/Structs.cs" />
+      <File FileName="SiriIntents/IntentHandler.cs" />
+      <File FileName="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" Line="23" Column="45" />
+      <File FileName="SiriBinding/obj/Debug/iOS/HdlSiri/HDLRunSceneIntent.g.cs" Line="63" Column="1" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
         <State name="__root__">
           <Node name="HDL_APP_Project" expanded="True">
-            <Node name="SiriIntents" expanded="True">
-              <Node name="IntentHandler.cs" selected="True" />
+            <Node name="HDL-ON_iOS" selected="True" />
+            <Node name="SiriBinding" expanded="True">
+              <Node name="NativeReferenceFolder" expanded="True" />
             </Node>
-            <Node name="SiriIntentsUI" expanded="True" />
           </Node>
         </State>
       </Pad>
     </Pads>
   </MonoDevelop.Ide.Workbench>
-  <MonoDevelop.Ide.ItemProperties.SiriIntentsUI FirstBuild="True">
+  <MonoDevelop.Ide.ItemProperties.SiriIntentsUI>
     <MonoDevelop.MacDev.AppleDevelopmentTeam />
   </MonoDevelop.Ide.ItemProperties.SiriIntentsUI>
   <MonoDevelop.Ide.DebuggingService.PinnedWatches />
@@ -37,7 +38,6 @@
     <String>Shared.Droid.TouchID/Shared.Droid.TouchID.csproj</String>
     <String>Shared.IOS/Shared.IOS.csproj</String>
     <String>SiriIntent/SiriIntent.csproj</String>
-    <String>SiriBinding/SiriBinding.csproj</String>
   </DisabledProjects>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
   <MonoDevelop.Ide.ItemProperties.HDL-ON__Android PreferredExecutionTarget="Android.SelectDevice" />
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 418934f..a817328 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -497,6 +497,8 @@
         <Compile Include="Other\Siri\SiriBaseView.designer.cs">
           <DependentUpon>SiriBaseView.cs</DependentUpon>
         </Compile>
+        <Compile Include="Other\Siri\VoiceShortcutDataManager.cs" />
+        <Compile Include="Other\Siri\SiriScene.cs" />
     </ItemGroup>
     <ItemGroup>
       <BundleResource Include="Resources\Phone\LoginIcon\ShowPasswordIcon.png" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index d00fc31..a8ea6d3 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -135,5 +135,9 @@
 	<string>Make audio/video calls</string>
 	<key>NSSiriUsageDescription</key>
 	<string>On Pro data will be send to Siri.</string>
+	<key>NSUserActivityTypes</key>
+	<array>
+		<string>HDLRunSceneIntent</string>
+	</array>
 </dict>
 </plist>
diff --git a/HDL-ON_iOS/Other/Siri/SiriBaseView.cs b/HDL-ON_iOS/Other/Siri/SiriBaseView.cs
index e168dbd..bf375b9 100644
--- a/HDL-ON_iOS/Other/Siri/SiriBaseView.cs
+++ b/HDL-ON_iOS/Other/Siri/SiriBaseView.cs
@@ -1,10 +1,13 @@
 锘縰sing System;
-
+using CoreGraphics;
+using Foundation;
+using Intents;
+using IntentsUI;
 using UIKit;
 
 namespace Other.Siri
 {
-    public partial class SiriBaseView : UIViewController
+    public partial class SiriBaseView : UIViewController, IINUIAddVoiceShortcutViewControllerDelegate, IINUIEditVoiceShortcutViewControllerDelegate
     {
         public SiriBaseView() : base("SiriBaseView", null)
         {
@@ -14,6 +17,43 @@
         {
             base.ViewDidLoad();
             // Perform any additional setup after loading the view, typically from a nib.
+
+
+
+
+            var btn = UIButton.FromType(UIButtonType.System);
+            btn.Frame = new CGRect(20, 200, 280, 44);
+            btn.SetTitle("Click Me", UIControlState.Normal);
+
+
+            VoiceShortcutDataManager VoiceShortcutDataManager = new VoiceShortcutDataManager();
+            btn.TouchUpInside += (sender, e) =>
+            {
+                //HDL_ON_iOS.AppDelegate.rootViewController.SetNavigationBarHidden(HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden ? false : true, true);
+                var ss = new SiriScene() { Id = Guid.NewGuid().ToString(), Name = Guid.NewGuid().ToString() };
+                //INVoiceShortcut existingShortcut = VoiceShortcutDataManager?.VoiceShortcutForOrder(ss);
+                //if (!(existingShortcut is null))
+                //{
+                //    var editVoiceShortcutViewController = new INUIEditVoiceShortcutViewController(existingShortcut);
+                //    editVoiceShortcutViewController.Delegate = this;
+                //    PresentViewController(editVoiceShortcutViewController, true, null);
+                //}
+                //else
+                {
+                    // Since the app isn't yet managing a voice shortcut for
+                    // this order, present the add view controller
+                    INShortcut newShortcut = new INShortcut(ss.Intent);
+                    if (!(newShortcut is null))
+                    {
+                        var addVoiceShortcutVC = new INUIAddVoiceShortcutViewController(newShortcut);
+                        addVoiceShortcutVC.Delegate = this;
+                        PresentViewController(addVoiceShortcutVC, true, null);
+                    }
+                }
+
+            };
+
+            View.AddSubview(btn);
         }
 
         public override void DidReceiveMemoryWarning()
@@ -21,6 +61,31 @@
             base.DidReceiveMemoryWarning();
             // Release any cached data, images, etc that aren't in use.
         }
+
+        public void DidFinish(INUIAddVoiceShortcutViewController controller, INVoiceShortcut voiceShortcut, NSError error)
+        {
+            Console.WriteLine("didF");
+        }
+
+        public void DidCancel(INUIAddVoiceShortcutViewController controller)
+        {
+            Console.WriteLine("didC");
+        }
+
+        public void DidUpdate(INUIEditVoiceShortcutViewController controller, INVoiceShortcut voiceShortcut, NSError error)
+        {
+            Console.WriteLine("didU");
+        }
+
+        public void DidDelete(INUIEditVoiceShortcutViewController controller, NSUuid deletedVoiceShortcutIdentifier)
+        {
+            Console.WriteLine("didD");
+        }
+
+        public void DidCancel(INUIEditVoiceShortcutViewController controller)
+        {
+            Console.WriteLine("didC");
+        }
     }
 }
 
diff --git a/HDL-ON_iOS/Other/Siri/SiriScene.cs b/HDL-ON_iOS/Other/Siri/SiriScene.cs
new file mode 100644
index 0000000..8dcb815
--- /dev/null
+++ b/HDL-ON_iOS/Other/Siri/SiriScene.cs
@@ -0,0 +1,100 @@
+锘縰sing System;
+using Foundation;
+using HdlSiri;
+using Intents;
+using UIKit;
+
+namespace Other.Siri
+{
+    public class SiriScene : NSObject , INSCoding
+    {
+        public SiriScene()
+        {
+        }
+
+        public string Id;
+
+        public string Name;
+
+        public void EncodeTo(NSCoder encoder)
+        {
+            Console.WriteLine("nscoder");
+        }
+
+        public HDLRunSceneIntent Intent
+        {
+            get
+            {
+                var orderSoupIntent = new HDLRunSceneIntent() { SceneId = Id, SceneName = Name };
+                //orderSoupIntent.Quantity = new NSNumber(Quantity);
+                //orderSoupIntent.Soup = new INObject(MenuItem.ItemNameKey, MenuItem.LocalizedString);
+
+                //var image = UIImage.FromBundle(MenuItem.IconImageName);
+                //if (!(image is null))
+                //{
+                //    var data = image.AsPNG();
+                //    orderSoupIntent.SetImage(INImage.FromData(data), "soup");
+                //}
+
+                //orderSoupIntent.Options = MenuItemOptions
+                //    .ToArray<MenuItemOption>()
+                //    .Select<MenuItemOption, INObject>(arg => new INObject(arg.Value, arg.LocalizedString))
+                //    .ToArray<INObject>();
+
+                //var comment = "Suggested phrase for ordering a specific soup";
+                //var phrase = NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_SOUP_SUGGESTED_PHRASE", comment);
+                //orderSoupIntent.SuggestedInvocationPhrase = String.Format(phrase, MenuItem.LocalizedString);
+
+                return orderSoupIntent;
+            }
+        }
+
+        public static SiriScene FromOrderSoupIntent(HDLRunSceneIntent intent)
+        {
+            //var menuManager = new SoupMenuManager();
+
+            //var soupID = intent.Soup?.Identifier;
+            //if (soupID is null)
+            //{
+            //    return null;
+            //}
+
+            //var menuItem = menuManager.FindItem(soupID);
+            //if (menuItem is null)
+            //{
+            //    return null;
+            //}
+
+            //var quantity = intent.Quantity;
+            //if (menuItem is null)
+            //{
+            //    return null;
+            //}
+
+            //MenuItemOption[] rawOptions;
+            //if (intent.Options is null)
+            //{
+            //    rawOptions = new MenuItemOption[0];
+            //}
+            //else
+            //{
+            //    // For the equivalent code in Apple's Swift sample, compactMap
+            //    // is used. This eliminates nil values from the final result. 
+            //    // Here, LINQ's Where method is used to filter out the null 
+            //    // values.
+            //    rawOptions = intent.Options.Select<INObject, MenuItemOption>((option) =>
+            //    {
+            //        var optionID = option.Identifier;
+            //        return (optionID is null) ? null : new MenuItemOption(optionID);
+            //    }).Where((option) => !(option is null)).ToArray<MenuItemOption>();
+            //}
+
+            //var order = new Order(quantity.Int32Value, menuItem, new NSMutableSet<MenuItemOption>(rawOptions));
+
+            //return order;
+            return null;
+        }
+
+
+    }
+}
diff --git a/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs b/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs
new file mode 100644
index 0000000..041374d
--- /dev/null
+++ b/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs
@@ -0,0 +1,57 @@
+锘�/*
+See LICENSE folder for this sample鈥檚 licensing information.
+
+Abstract:
+A data manager that surfaces INVoiceShortcuts managed by INVoiceShortcutCenter.
+*/
+
+using System;
+using Intents;
+using System.Linq;
+
+namespace Other.Siri
+{
+    public class VoiceShortcutDataManager 
+    {
+        INVoiceShortcut[] VoiceShortcuts;
+
+        public VoiceShortcutDataManager()
+        {
+            UpdateVoiceShortcuts(null);
+        }
+
+        public INVoiceShortcut VoiceShortcutForOrder(SiriScene ss)
+        {
+            var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) =>
+            {
+                var intent = shortcut.Shortcut.Intent as HdlSiri.HDLRunSceneIntent;
+                if (intent is null) { return false; }
+                var orderFromIntent = SiriScene.FromOrderSoupIntent(intent);
+                if (orderFromIntent is null) { return false; }
+                return ss.IsEqual(orderFromIntent);
+            });
+            return voiceShortcut;
+        }
+
+        public void UpdateVoiceShortcuts(Action completion)
+        {
+            INVoiceShortcutCenter.SharedCenter.GetAllVoiceShortcuts((voiceShortcutsFromCenter, error) =>
+            {
+                if (voiceShortcutsFromCenter is null)
+                {
+                    if (!(error is null))
+                    {
+                        Console.WriteLine($"Failed to fetch voice shortcuts with error {error}");
+                    }
+                    return;
+                }
+                VoiceShortcuts = voiceShortcutsFromCenter;
+                if (!(completion is null))
+                {
+                    completion();
+                }
+            }); 
+        }
+
+    }
+}
diff --git a/HDL-ON_iOS/Other/SkipControl.cs b/HDL-ON_iOS/Other/SkipControl.cs
index dc94297..408138f 100644
--- a/HDL-ON_iOS/Other/SkipControl.cs
+++ b/HDL-ON_iOS/Other/SkipControl.cs
@@ -1,5 +1,7 @@
 锘縰sing System;
 using CoreGraphics;
+using Intents;
+using IntentsUI;
 using Other.Siri;
 using UIKit;
 
@@ -16,21 +18,11 @@
             var user = new SiriBaseView();
             user.View.BackgroundColor = UIColor.Magenta;
 
-            var btn = UIButton.FromType(UIButtonType.System);
-            btn.Frame = new CGRect(20, 200, 280, 44);
-            btn.SetTitle("Click Me", UIControlState.Normal);
-
-
             HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = true;
             HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = false;
             HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(user, true);
 
-            btn.TouchUpInside += (sender, e) =>
-            {
-                HDL_ON_iOS.AppDelegate.rootViewController.SetNavigationBarHidden(HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden ? false : true, true);
-            };
 
-            user.View.AddSubview(btn);
         }
     }
 }
diff --git a/SiriIntents/Info.plist b/SiriIntents/Info.plist
index bf03fa4..63023d3 100644
--- a/SiriIntents/Info.plist
+++ b/SiriIntents/Info.plist
@@ -1,4 +1,4 @@
-锘�<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
@@ -31,6 +31,7 @@
 				<string>INSendMessageIntent</string>
 				<string>INSearchForMessagesIntent</string>
 				<string>INSetMessageAttributeIntent</string>
+				<string>HDLRunSceneIntent</string>
 			</array>
 		</dict>
 		<key>NSExtensionPointIdentifier</key>
diff --git a/SiriIntentsUI/Info.plist b/SiriIntentsUI/Info.plist
index 269af89..b9e141f 100644
--- a/SiriIntentsUI/Info.plist
+++ b/SiriIntentsUI/Info.plist
@@ -1,4 +1,4 @@
-锘�<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
@@ -27,6 +27,7 @@
 			<key>IntentsSupported</key>
 			<array>
 				<string>INSendMessageIntent</string>
+				<string>HDLRunSceneIntent</string>
 			</array>
 		</dict>
 		<key>NSExtensionMainStoryboard</key>

--
Gitblit v1.8.0