wxr
2021-11-19 0edfc730dafa1407efdeb8a6eed4c88c21aa1963
siri
8个文件已添加
17个文件已修改
988 ■■■■■ 已修改文件
.vs/HDL_APP_Project/xs/UserPrefs.xml 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/AppDelegate.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Base.lproj/Intents.intentdefinition 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Entitlements.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/Data/DataManager.cs 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/Data/SceneDateManager.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/HDLRunSceneIntentHandlder.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/SiriBaseView.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/SiriScene.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/Support/NSUserActivityHelper.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/Support/NSUserDefaultsHelper.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/UI/Cells.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Other/SkipControl.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PersonalCenter/SiriIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_APP_Project.sln 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/Entitlements.plist 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/Info.plist 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/SiriIntents.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntentsUI/Entitlements.plist 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntentsUI/Info.plist 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntentsUI/SiriIntentsUI.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -6,25 +6,59 @@
  <MonoDevelop.Ide.ItemProperties.SiriIntents>
    <MonoDevelop.MacDev.AppleDevelopmentTeam />
  </MonoDevelop.Ide.ItemProperties.SiriIntents>
  <MonoDevelop.Ide.Workbench ActiveDocument="SiriBinding/obj/Debug/iOS/HdlSiri/HDLRunSceneIntent.g.cs">
  <MonoDevelop.Ide.Workbench ActiveDocument="HDL-ON_iOS/Other/SkipControl.cs">
    <Files>
      <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="203" Column="35" />
      <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="HDL-ON_iOS/Other/Siri/Data/SceneDateManager.cs" Line="10" Column="102" />
      <File FileName="HDL-ON_iOS/Other/Siri/UI/Cells.cs" />
      <File FileName="HDL-ON_iOS/Other/Siri/HDLRunSceneIntentHandlder.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" />
      <File FileName="HDL-ON_iOS/Other/Siri/Support/NSUserActivityHelper.cs" />
      <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" />
      <File FileName="HDL-ON_iOS/Other/Siri/Support/NSUserDefaultsHelper.cs" />
      <File FileName="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" />
      <File FileName="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" />
      <File FileName="HDL-ON_iOS/Other/Siri/Data/DataManager.cs" />
      <File FileName="HDL-ON_iOS/Other/SkipControl.cs" Line="30" Column="57" />
    </Files>
    <Pads>
      <Pad Id="ProjectPad">
        <State name="__root__">
          <Node name="HDL_APP_Project" expanded="True">
            <Node name="HDL-ON_iOS" selected="True" />
            <Node name="SiriBinding" expanded="True">
              <Node name="NativeReferenceFolder" expanded="True" />
            <Node name="HDL_ON" expanded="True">
              <Node name="DAL" expanded="True">
                <Node name="Server" expanded="True" />
              </Node>
              <Node name="UI" expanded="True">
                <Node name="CSS" expanded="True" />
                <Node name="UI1-Login" expanded="True" />
                <Node name="UI2" expanded="True">
                  <Node name="4-PersonalCenter" expanded="True" />
                </Node>
              </Node>
            </Node>
            <Node name="HDL-ON_iOS" expanded="True">
              <Node name="Base.lproj" expanded="True" />
              <Node name="Other" expanded="True">
                <Node name="Siri" expanded="True">
                  <Node name="Data" expanded="True" />
                  <Node name="Support" expanded="True" />
                </Node>
                <Node name="SkipControl.cs" selected="True" />
              </Node>
              <Node name="Resources" expanded="True">
                <Node name="Phone" expanded="True" />
              </Node>
            </Node>
            <Node name="SiriIntents" expanded="True" />
            <Node name="SiriIntentsUI" expanded="True" />
          </Node>
        </State>
      </Pad>
      <Pad Id="MonoDevelop.Debugger.WatchPad">
        <State>
          <Value>GetType().Assembly</Value>
        </State>
      </Pad>
    </Pads>
@@ -38,6 +72,7 @@
    <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" />
@@ -47,6 +82,11 @@
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/Function/Scene.cs" relfile="HDL_ON/Entity/Function/Scene.cs" line="333" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" line="251" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs" line="185" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" line="894" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="62" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="60" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" relfile="HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs" line="64" column="1" />
      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL-ON_iOS/Other/Siri/SiriBaseView.cs" relfile="HDL-ON_iOS/Other/Siri/SiriBaseView.cs" line="60" column="1" />
    </BreakpointStore>
  </MonoDevelop.Ide.DebuggingService.Breakpoints>
  <MultiItemStartupConfigurations />
HDL-ON_iOS/AppDelegate.cs
@@ -10,6 +10,8 @@
using HDL_ON.UI;
using HDL_ON.DAL.Server;
using Intents;
using Other.Siri;
using HDLSceneSiri;
namespace SharedMethod
{
@@ -473,6 +475,51 @@
            HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway();
        }
        #region Siri
        public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
        {
            var intent = userActivity.GetInteraction()?.Intent as HDLRunSceneIntent;
            if (!(intent is null))
            {
                HandleIntent(intent);
                return true;
            }
            else if (userActivity.ActivityType == NSUserActivityHelper.ViewMenuActivityType)
            {
                HandleUserActivity();
                return true;
            }
            return false;
        }
        void HandleIntent(HDLRunSceneIntent intent)
        {
            var handler = new HDLRunSceneIntentHandlder();
            handler.HandleRunScene(intent, (response) => {
                if (response.Code != HDLRunSceneIntentResponseCode.Success)
                {
                    Console.WriteLine("Quantity must be greater than 0 to add to order");
                }
            });
        }
        void HandleUserActivity()
        {
            //var rootViewController = Window?.RootViewController as UINavigationController;
            //var orderHistoryViewController = rootViewController?.ViewControllers?.FirstOrDefault() as OrderHistoryTableViewController;
            //if (orderHistoryViewController is null)
            //{
            //    Console.WriteLine("Failed to access OrderHistoryTableViewController.");
            //    return;
            //}
            //var segue = OrderHistoryTableViewController.SegueIdentifiers.SoupMenu;
            //orderHistoryViewController.PerformSegue(segue, null);
        }
        #endregion
    }
}
HDL-ON_iOS/Base.lproj/Intents.intentdefinition
New file
@@ -0,0 +1,181 @@
<?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>
    <key>INEnums</key>
    <array/>
    <key>INIntentDefinitionModelVersion</key>
    <string>1.2</string>
    <key>INIntentDefinitionNamespace</key>
    <string>8yVV3C</string>
    <key>INIntentDefinitionSystemVersion</key>
    <string>20G165</string>
    <key>INIntentDefinitionToolsBuildVersion</key>
    <string>13A233</string>
    <key>INIntentDefinitionToolsVersion</key>
    <string>13.0</string>
    <key>INIntents</key>
    <array>
        <dict>
            <key>INIntentCategory</key>
            <string>generic</string>
            <key>INIntentDescription</key>
            <string>Run Scene</string>
            <key>INIntentDescriptionID</key>
            <string>Pe02nj</string>
            <key>INIntentLastParameterTag</key>
            <integer>2</integer>
            <key>INIntentName</key>
            <string>HDLRunScene</string>
            <key>INIntentParameterCombinations</key>
            <dict>
                <key>sceneName,sceneId</key>
                <dict>
                    <key>INIntentParameterCombinationIsPrimary</key>
                    <true/>
                    <key>INIntentParameterCombinationSupportsBackgroundExecution</key>
                    <true/>
                    <key>INIntentParameterCombinationTitle</key>
                    <string>执行场景“${sceneName}”</string>
                    <key>INIntentParameterCombinationTitleID</key>
                    <string>oCGdw4</string>
                </dict>
            </dict>
            <key>INIntentParameters</key>
            <array>
                <dict>
                    <key>INIntentParameterDisplayName</key>
                    <string>Scene Name</string>
                    <key>INIntentParameterDisplayNameID</key>
                    <string>wC0SgK</string>
                    <key>INIntentParameterDisplayPriority</key>
                    <integer>1</integer>
                    <key>INIntentParameterMetadata</key>
                    <dict>
                        <key>INIntentParameterMetadataCapitalization</key>
                        <string>Sentences</string>
                        <key>INIntentParameterMetadataDefaultValueID</key>
                        <string>xz2KkJ</string>
                    </dict>
                    <key>INIntentParameterName</key>
                    <string>sceneName</string>
                    <key>INIntentParameterTag</key>
                    <integer>1</integer>
                    <key>INIntentParameterType</key>
                    <string>String</string>
                </dict>
                <dict>
                    <key>INIntentParameterDisplayName</key>
                    <string>Scene Id</string>
                    <key>INIntentParameterDisplayNameID</key>
                    <string>MtgGtd</string>
                    <key>INIntentParameterDisplayPriority</key>
                    <integer>2</integer>
                    <key>INIntentParameterMetadata</key>
                    <dict>
                        <key>INIntentParameterMetadataCapitalization</key>
                        <string>Sentences</string>
                        <key>INIntentParameterMetadataDefaultValueID</key>
                        <string>hQHCm1</string>
                    </dict>
                    <key>INIntentParameterName</key>
                    <string>sceneId</string>
                    <key>INIntentParameterTag</key>
                    <integer>2</integer>
                    <key>INIntentParameterType</key>
                    <string>String</string>
                </dict>
            </array>
            <key>INIntentResponse</key>
            <dict>
                <key>INIntentResponseCodes</key>
                <array>
                    <dict>
                        <key>INIntentResponseCodeFormatString</key>
                        <string>${sceneName}</string>
                        <key>INIntentResponseCodeFormatStringID</key>
                        <string>Pq8YBC</string>
                        <key>INIntentResponseCodeName</key>
                        <string>success</string>
                        <key>INIntentResponseCodeSuccess</key>
                        <true/>
                    </dict>
                    <dict>
                        <key>INIntentResponseCodeFormatString</key>
                        <string>${errorMessage}</string>
                        <key>INIntentResponseCodeFormatStringID</key>
                        <string>CX5DVI</string>
                        <key>INIntentResponseCodeName</key>
                        <string>failure</string>
                    </dict>
                    <dict>
                        <key>INIntentResponseCodeName</key>
                        <string>error</string>
                        <key>INIntentResponseCodeSuccess</key>
                        <true/>
                    </dict>
                </array>
                <key>INIntentResponseLastParameterTag</key>
                <integer>3</integer>
                <key>INIntentResponseParameters</key>
                <array>
                    <dict>
                        <key>INIntentResponseParameterDisplayName</key>
                        <string>Error Message</string>
                        <key>INIntentResponseParameterDisplayNameID</key>
                        <string>HxQb2M</string>
                        <key>INIntentResponseParameterDisplayPriority</key>
                        <integer>1</integer>
                        <key>INIntentResponseParameterName</key>
                        <string>errorMessage</string>
                        <key>INIntentResponseParameterTag</key>
                        <integer>1</integer>
                        <key>INIntentResponseParameterType</key>
                        <string>String</string>
                    </dict>
                    <dict>
                        <key>INIntentResponseParameterDisplayName</key>
                        <string>Success Message</string>
                        <key>INIntentResponseParameterDisplayNameID</key>
                        <string>BaAbSP</string>
                        <key>INIntentResponseParameterDisplayPriority</key>
                        <integer>2</integer>
                        <key>INIntentResponseParameterName</key>
                        <string>successMessage</string>
                        <key>INIntentResponseParameterTag</key>
                        <integer>2</integer>
                        <key>INIntentResponseParameterType</key>
                        <string>String</string>
                    </dict>
                    <dict>
                        <key>INIntentResponseParameterDisplayName</key>
                        <string>Scene Name</string>
                        <key>INIntentResponseParameterDisplayNameID</key>
                        <string>pqg7cb</string>
                        <key>INIntentResponseParameterDisplayPriority</key>
                        <integer>3</integer>
                        <key>INIntentResponseParameterName</key>
                        <string>sceneName</string>
                        <key>INIntentResponseParameterTag</key>
                        <integer>3</integer>
                        <key>INIntentResponseParameterType</key>
                        <string>String</string>
                    </dict>
                </array>
            </dict>
            <key>INIntentRestrictions</key>
            <integer>1</integer>
            <key>INIntentTitle</key>
            <string>Run Scene</string>
            <key>INIntentTitleID</key>
            <string>j3jRXP</string>
            <key>INIntentType</key>
            <string>Custom</string>
            <key>INIntentVerb</key>
            <string>Do</string>
        </dict>
    </array>
    <key>INTypes</key>
    <array/>
</dict>
</plist>
HDL-ON_iOS/Entitlements.plist
@@ -10,5 +10,9 @@
    </array>
    <key>com.apple.developer.siri</key>
    <true/>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.hdl.onpro</string>
    </array>
</dict>
</plist>
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -28,6 +28,7 @@
        <CodesignKey>iPhone Developer</CodesignKey>
        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC";-w</MtouchExtraArgs>
        <CodesignProvision>On+Dev-20210616-1</CodesignProvision>
        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
        <DebugType>none</DebugType>
@@ -38,6 +39,7 @@
        <MtouchLink>SdkOnly</MtouchLink>
        <MtouchArch>x86_64</MtouchArch>
<CodesignKey>iPhone Developer</CodesignKey>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
        <DebugSymbols>true</DebugSymbols>
@@ -56,6 +58,7 @@
        <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
<CodesignProvision>OnPro211116-1</CodesignProvision>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
        <DebugType>none</DebugType>
@@ -70,6 +73,7 @@
        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
        <MtouchI18n>cjk</MtouchI18n>
        <CodesignProvision>OnPro-Hoc20211117-1</CodesignProvision>
        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    </PropertyGroup>
    <ItemGroup>
        <Reference Include="System" />
@@ -103,6 +107,9 @@
        </Reference>
        <Reference Include="Shared.IOS.HDLLinphoneSDK">
          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
        </Reference>
        <Reference Include="Shared.IOS.HDLSceneSiri">
          <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath>
        </Reference>
    </ItemGroup>
    <ItemGroup>
@@ -464,6 +471,9 @@
        <Folder Include="Resources\Phone\PersonalCenter\FacePassage\" />
        <Folder Include="Resources\Phone\FunctionIcon\Electrical\AirSwitch\" />
        <Folder Include="Other\Siri\" />
        <Folder Include="Other\Siri\Data\" />
        <Folder Include="Other\Siri\Support\" />
        <Folder Include="Other\Siri\UI\" />
    </ItemGroup>
    <ItemGroup>
        <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -499,6 +509,12 @@
        </Compile>
        <Compile Include="Other\Siri\VoiceShortcutDataManager.cs" />
        <Compile Include="Other\Siri\SiriScene.cs" />
        <Compile Include="Other\Siri\HDLRunSceneIntentHandlder.cs" />
        <Compile Include="Other\Siri\Data\SceneDateManager.cs" />
        <Compile Include="Other\Siri\Data\DataManager.cs" />
        <Compile Include="Other\Siri\Support\NSUserDefaultsHelper.cs" />
        <Compile Include="Other\Siri\Support\NSUserActivityHelper.cs" />
        <Compile Include="Other\Siri\UI\Cells.cs" />
    </ItemGroup>
    <ItemGroup>
      <BundleResource Include="Resources\Phone\LoginIcon\ShowPasswordIcon.png" />
@@ -1366,6 +1382,7 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\btnCloseIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\btnInfoIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\AirFresh\HumiOnIcon.png" />
      <BundleResource Include="Resources\Phone\PersonalCenter\SiriIcon.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
@@ -1410,10 +1427,6 @@
        <Project>{2DDF4C3C-6998-432E-9F43-6786D82F0630}</Project>
        <Name>Blufi</Name>
      </ProjectReference>
      <ProjectReference Include="..\SiriBinding\SiriBinding.csproj">
        <Project>{77FFAB61-395D-4AD3-863E-C4E32B5038E7}</Project>
        <Name>SiriBinding</Name>
      </ProjectReference>
      <ProjectReference Include="..\SiriIntents\SiriIntents.csproj">
        <IsAppExtension>true</IsAppExtension>
        <Project>{760980F5-1CD3-4F4F-9134-34D87BECD790}</Project>
@@ -1425,6 +1438,9 @@
        <Name>SiriIntentsUI</Name>
      </ProjectReference>
    </ItemGroup>
    <ItemGroup>
      <Content Include="Base.lproj\Intents.intentdefinition" />
    </ItemGroup>
    <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" />
    <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
    <ProjectExtensions>
HDL-ON_iOS/Other/Siri/Data/DataManager.cs
New file
@@ -0,0 +1,202 @@
/*
See LICENSE folder for this sample’s licensing information.
Abstract:
A data manager that manages data conforming to `Codable` and stores it in `UserDefaults`.
*/
using System;
using Foundation;
using CoreFoundation;
namespace Other.Siri
{
    public struct UserDefaultsStorageDescriptor
    {
        public string Key { get; set; }
        public UserDefaultsStorageDescriptor(string key)
        {
            Key = key;
        }
    }
    public static class NotificationKeys
    {
        // Clients of `DataManager` that want to know when the data changes can
        // listen for this notification.
        public const string DataChanged = "DataChangedNotification";
    }
    public class DataManager<ManagedDataType> : NSObject
        where ManagedDataType : NSObject, INSCoding
    {
        // This sample uses App Groups to share a suite of data between the
        // main app and the different extensions.
        protected NSUserDefaults UserDefaults = NSUserDefaultsHelper.DataSuite;
        // To prevent data races, all access to `UserDefaults` uses this queue.
        protected DispatchQueue UserDefaultsAccessQueue = new DispatchQueue("User Defaults Access Queue");
        // Storage and observation information.
        protected UserDefaultsStorageDescriptor StorageDescriptor;
        // A flag to avoid receiving notifications about data this instance just
        // wrote to `UserDefaults`.
        protected bool IgnoreLocalUserDefaultsChanges = false;
        // The observer object handed back after registering to observe a
        // property.
        IDisposable UserDefaultsObserver;
        // The data managed by this `DataManager`.
        //此“DataManager”管理的数据。
        protected ManagedDataType ManagedDataBackingInstance;
        // Access to `managedDataBackingInstance` needs to occur on a dedicated
        // queue to avoid data races.
        protected DispatchQueue DataAccessQueue = new DispatchQueue("Data Access Queue");
        // Public access to the managed data for clients of `DataManager`
        public ManagedDataType ManagedData
        {
            get
            {
                ManagedDataType data = null;
                DataAccessQueue.DispatchSync(() => data = ManagedDataBackingInstance);
                return data;
            }
        }
        // See note below about createInitialData and initialData
        public DataManager(UserDefaultsStorageDescriptor storageDescriptor, ManagedDataType initialData)
        {
            StorageDescriptor = storageDescriptor;
            LoadData();
            if (ManagedDataBackingInstance is null)
            {
                ManagedDataBackingInstance = initialData;
                WriteData();
            }
            ObserveChangesInUserDefaults();
        }
        // createInitialData
        //
        // The Swift version of this app has a createInitialData method.
        // Each child class of the DataManager class overrides this method, and
        // then the DataManager base class calls the derived versions to get
        // the initial data. C# gives a compiler warning for this ("Virtual
        // member call in constructor"). Since in C# the base class constructor
        // is run before the child class constructor, having the base clas
        // constructor call out to a method on the derived class is calling
        // a method on an object that has not yet been fully constructed.
        // The C# version of this sample works around this problem by passing
        // in the initial data to the constructor.
        void ObserveChangesInUserDefaults()
        {
            var weakThis = new WeakReference<DataManager<ManagedDataType>>(this);
            Action<NSObservedChange> changeHandler = (change) =>
            {
                if (weakThis.TryGetTarget(out var dataManager))
                {
                    // Ignore any change notifications coming from data this
                    // instance just saved to `NSUserDefaults`.
                    if (dataManager is null || dataManager.IgnoreLocalUserDefaultsChanges)
                    {
                        return;
                    }
                    // The underlying data changed in `NSUserDefaults`, so
                    // update this instance with the change and notify clients
                    // of the change.
                    dataManager.LoadData();
                    dataManager.NotifyClientsDataChanged();
                }
            };
            UserDefaultsObserver = UserDefaults.AddObserver(
                StorageDescriptor.Key,
                NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New,
                changeHandler
            );
        }
        // Notifies clients the data changed by posting an `NSNotification` with
        // the key `NotificationKeys.DataChanged`
        void NotifyClientsDataChanged()
        {
            var notification = NSNotification.FromName(NotificationKeys.DataChanged, this);
            NSNotificationCenter.DefaultCenter.PostNotification(notification);
        }
        protected virtual void FinishUnarchiving(NSObject unarchivedData)
        {
            throw new NotImplementedException();
        }
        // Loads the data from `NSUserDefaults`.
        void LoadData()
        {
            UserDefaultsAccessQueue.DispatchSync(() =>
            {
                NSData archivedData = UserDefaults.DataForKey(StorageDescriptor.Key);
                try
                {
                    // Let the derived classes handle the specifics of
                    // putting the unarchived data in the correct format.
                    // This is necessary because the derived classes
                    // (SoupMenuManager, SoupOrderMenuManager) are using
                    // generic data formats (NSMutableSet<T> or NSMutableArray<T>)
                    // and these types cannot be casted directly from the
                    // deserialized data.
                    NSObject unarchivedData = NSKeyedUnarchiver.UnarchiveObject(archivedData);
                    FinishUnarchiving(unarchivedData);
                }
                catch (Exception e)
                {
                    if (!(e is null))
                    {
                        Console.WriteLine($"Error: {e.Message}");
                    }
                }
            });
        }
        // Writes the data to `NSUserDefaults`
        protected void WriteData()
        {
            UserDefaultsAccessQueue.DispatchAsync(() =>
            {
                try
                {
                    NSData encodedData = NSKeyedArchiver.ArchivedDataWithRootObject(ManagedDataBackingInstance);
                    IgnoreLocalUserDefaultsChanges = true;
                    UserDefaults.SetValueForKey(encodedData, (NSString)StorageDescriptor.Key);
                    IgnoreLocalUserDefaultsChanges = false;
                    NotifyClientsDataChanged();
                }
                catch (Exception e)
                {
                    throw new Exception($"Could not save data. Reason: {e.Message}");
                }
            });
        }
        protected void SetIsLoginValue()
        {
            UserDefaults.SetBool(true, NSUserDefaultsHelper.StorageKeys.GLOBAL_GIsLogin);
        }
        public void SetAccessTokenValue(string accessToken)
        {
            UserDefaults.SetString(accessToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GAccessToken);
        }
        public void SetRefreshTokenValue(string refreshToken)
        {
            UserDefaults.SetString(refreshToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRefreshToken);
        }
        public void SetRegionUrlValue(string regionUrl)
        {
            UserDefaults.SetString(regionUrl, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRegionUrl);
        }
    }
}
HDL-ON_iOS/Other/Siri/Data/SceneDateManager.cs
New file
@@ -0,0 +1,79 @@
using Foundation;
using Intents;
using System;
using System.Linq;
namespace Other.Siri
{
    public class SceneDateManager : DataManager<NSMutableArray<SiriScene>>
    {
        public SceneDateManager() : base(new UserDefaultsStorageDescriptor(NSUserDefaultsHelper.StorageKeys.OrderHistory), new NSMutableArray<SiriScene>()) { }
        // Converts an `Order` into `OrderSoupIntent` and donates it as an
        // interaction to the system so that this order can be suggested in the
        // future or turned into a voice shortcut for quickly placing the same
        // order in the future.
        void DonateInteraction(SiriScene order)
        {
            var interaction = new INInteraction(order.Intent, null);
            interaction.Identifier = order.Id.ToString();
            interaction.DonateInteraction((error) =>
            {
                if (!(error is null))
                {
                    Console.WriteLine($"Interaction donation failed: {error}");
                }
                else
                {
                    Console.WriteLine("Successfully donated interaction.");
                }
            });
        }
        #region Public API for clients of `SoupOrderDataManager`
        // Convenience method to access the data with a property name that makes
        // sense in the caller's context.
        public NSMutableArray<SiriScene> OrderHistory
        {
            get
            {
                return ManagedData as NSMutableArray<SiriScene>;
            }
        }
        public void PlaceOrder(SiriScene order)
        {
            // Access to `ManagedDataBackingInstance` is only valid on
            // `DataAccessQueue`.
            DataAccessQueue.DispatchSync(() =>
            {
                if (ManagedDataBackingInstance.Count == 0)
                {
                    // Getting an error trying to insert at 0 for an empty
                    // NSMutableArray<Order>
                    ManagedDataBackingInstance.Add(order);
                }
                else
                {
                    ManagedDataBackingInstance.Insert(order, 0);
                }
            });
            // Access to UserDefaults is gated behind a separate access queue.
            WriteData();
            // Donate an interaction to the system.
            DonateInteraction(order);
        }
        #endregion
        #region Support methods for unarchiving saved data
        override protected void FinishUnarchiving(NSObject unarchivedData)
        {
            var array = (NSArray)unarchivedData;
            SiriScene[] orders = NSArray.FromArray<SiriScene>(array);
            ManagedDataBackingInstance = new NSMutableArray<SiriScene>(orders);
        }
        #endregion
    }
}
HDL-ON_iOS/Other/Siri/HDLRunSceneIntentHandlder.cs
New file
@@ -0,0 +1,26 @@
using System;
using HDLSceneSiri;
using ObjCRuntime;
namespace Other.Siri
{
    public class HDLRunSceneIntentHandlder : HDLRunSceneIntentHandling
    {
        public HDLRunSceneIntentHandlder()
        {
        }
        public override void ConfirmRunScene(HDLRunSceneIntent intent, Action<HDLRunSceneIntentResponse> completion)
        {
            Console.WriteLine("asjdkfasdfa");
            base.ConfirmRunScene(intent, completion);
        }
        public override void HandleRunScene(HDLRunSceneIntent intent,  Action<HDLRunSceneIntentResponse> completion)
        {
            throw new NotImplementedException();
        }
    }
}
HDL-ON_iOS/Other/Siri/SiriBaseView.cs
@@ -1,6 +1,7 @@
using System;
using CoreGraphics;
using Foundation;
using HDL_ON.Entity;
using Intents;
using IntentsUI;
using UIKit;
@@ -9,14 +10,41 @@
{
    public partial class SiriBaseView : UIViewController, IINUIAddVoiceShortcutViewControllerDelegate, IINUIEditVoiceShortcutViewControllerDelegate
    {
        VoiceShortcutDataManager VoiceShortcutDataManager;
        public SiriBaseView() : base("SiriBaseView", null)
        {
             VoiceShortcutDataManager = new VoiceShortcutDataManager();
        }
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
            //HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = true;
            HDL_ON_iOS.AppDelegate.rootViewController.SetNavigationBarHidden(false, true);
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.
            UserActivity = NSUserActivityHelper.ViewMenuActivity;
            //    var btnVS = new INUIAddVoiceShortcutButton(INUIAddVoiceShortcutButtonStyle.White);
            //    btnVS.Frame = new CGRect(20, 500, 280, 44);
            //btnVS.Shortcut = VoiceShortcutDataManager.FirstTemp().Shortcut ;
            //    View.AddSubview(btnVS);
            foreach(var localScene in FunctionList.List.scenes)
            {
                var cell = new  UIView();
                cell.Frame = new CGRect(20, 800, 300, 60);
            }
            var ddd = Xamarin.Essentials.DeviceInfo.VersionString;
@@ -24,14 +52,12 @@
            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);
                INVoiceShortcut existingShortcut = VoiceShortcutDataManager?.VoiceShortcutForOrder(ss);
                //if (!(existingShortcut is null))
                //{
                //    var editVoiceShortcutViewController = new INUIEditVoiceShortcutViewController(existingShortcut);
@@ -42,6 +68,10 @@
                {
                    // Since the app isn't yet managing a voice shortcut for
                    // this order, present the add view controller
                    new SceneDateManager().PlaceOrder(ss);
                    INShortcut newShortcut = new INShortcut(ss.Intent);
                    if (!(newShortcut is null))
                    {
HDL-ON_iOS/Other/Siri/SiriScene.cs
@@ -1,6 +1,7 @@
using System;
using Foundation;
using HdlSiri;
using HDLSceneSiri;
//using HdlSiri;
using Intents;
using UIKit;
@@ -25,9 +26,10 @@
        {
            get
            {
                var orderSoupIntent = new HDLRunSceneIntent() { SceneId = Id, SceneName = Name };
                //orderSoupIntent.Quantity = new NSNumber(Quantity);
                //orderSoupIntent.Soup = new INObject(MenuItem.ItemNameKey, MenuItem.LocalizedString);
                var orderSoupIntent = new HDLRunSceneIntent();// { SceneId = Id, SceneName = Name };
                orderSoupIntent.SceneId = Id;//orderSoupIntent.Quantity = new NSNumber(Quantity);
                orderSoupIntent.SceneName = Name;//orderSoupIntent.Soup = new INObject(MenuItem.ItemNameKey, MenuItem.LocalizedString);
                //var image = UIImage.FromBundle(MenuItem.IconImageName);
                //if (!(image is null))
HDL-ON_iOS/Other/Siri/Support/NSUserActivityHelper.cs
New file
@@ -0,0 +1,56 @@
using System;
using Foundation;
#if __IOS__
using CoreSpotlight;
using UIKit;
using System.Linq.Expressions;
using System.Xml;
#endif
namespace Other.Siri
{
    public static class NSUserActivityHelper
    {
        public static class ActivityKeys
        {
            public const string MenuItems = "menuItems";
            public const string SegueId = "segueID";
        }
        static string SearchableItemContentType = "Soup Menu";
        public static string ViewMenuActivityType = "com.xamarin.SoupChef.viewMenu";
        public static NSUserActivity ViewMenuActivity {
            get
            {
                var userActivity = new NSUserActivity(ViewMenuActivityType)
                {
                    Title = "测试title", //NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_TITLE", "View menu activity title"),
                    EligibleForSearch = true,
                    EligibleForPrediction = true
                };
                var attributes = new CSSearchableItemAttributeSet(NSUserActivityHelper.SearchableItemContentType)
                {
                    //ThumbnailData = UIImage.FromBundle("tomato").AsPNG(),
                    Keywords = ViewMenuSearchableKeywords,
                    DisplayName = "测试DisplayName",// NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_TITLE", "View menu activity title"),
                    ContentDescription = "测试ContentDescription",//NSBundleHelper.SoupKitBundle.GetLocalizedString("VIEW_MENU_CONTENT_DESCRIPTION", "View menu content description")
                };
                userActivity.ContentAttributeSet = attributes;
                //var phrase = NSBundleHelper.SoupKitBundle.GetLocalizedString("ORDER_LUNCH_SUGGESTED_PHRASE", "Voice shortcut suggested phrase");
                userActivity.SuggestedInvocationPhrase = "测试phrase";
                return userActivity;
            }
        }
        static string[] ViewMenuSearchableKeywords = new string[] {
             "Searchable Keyword",
            "Searchable Keyword",
            "Searchable Keyword"
        };
    }
}
HDL-ON_iOS/Other/Siri/Support/NSUserDefaultsHelper.cs
New file
@@ -0,0 +1,40 @@
using System;
using Foundation;
using System.Resources;
namespace Other.Siri
{
    public static class NSUserDefaultsHelper
    {
        private const string AppGroup = "group.com.hdl.onpro";
        public static class StorageKeys
        {
            public const string SoupMenu = "soupMenu";
            public const string OrderHistory = "orderHistory";
            public const string VoiceShortcutHistory = "voiceShortcutHistory";
            public const string APP_KEY = "HDL-HOME-APP-TEST";
            public const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss";
            public const string GLOBAL_GIsLogin = "IsLogin";
            public const string GLOBAL_GAccessToken = "AccessToken";
            public const string GLOBAL_GRefreshToken = "RefreshToken";
            public const string GLOBAL_GRegionUrl = "RegionUrl";
        }
        public static NSUserDefaults DataSuite {
            get {
                var dataSuite = new NSUserDefaults(AppGroup, NSUserDefaultsType.SuiteName);
                if( dataSuite is null )
                {
                    throw new Exception($"Could not load UserDefaults for app group {AppGroup}");
                }
                return dataSuite;
            }
        }
    }
}
HDL-ON_iOS/Other/Siri/UI/Cells.cs
New file
@@ -0,0 +1,14 @@
using System;
using UIKit;
namespace Other.Siri.UI
{
    public class Cells : UITableViewCell
    {
        public Cells()
        {
        }
        //public string
    }
}
HDL-ON_iOS/Other/Siri/VoiceShortcutDataManager.cs
@@ -8,6 +8,7 @@
using System;
using Intents;
using System.Linq;
using HDLSceneSiri;
namespace Other.Siri
{
@@ -20,11 +21,16 @@
            UpdateVoiceShortcuts(null);
        }
        public VoiceShortcutDataManager(Action action)
        {
            UpdateVoiceShortcuts(action);
        }
        public INVoiceShortcut VoiceShortcutForOrder(SiriScene ss)
        {
            var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) =>
            {
                var intent = shortcut.Shortcut.Intent as HdlSiri.HDLRunSceneIntent;
                var intent = shortcut.Shortcut.Intent as HDLRunSceneIntent;
                if (intent is null) { return false; }
                var orderFromIntent = SiriScene.FromOrderSoupIntent(intent);
                if (orderFromIntent is null) { return false; }
@@ -33,6 +39,36 @@
            return voiceShortcut;
        }
        public INVoiceShortcut VoiceShortcutForOrder2(SiriScene ss)
        {
            var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) =>
            {
                var intent = shortcut.Shortcut.Intent as 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 INVoiceShortcut FirstTemp ()
        {
            try
            {
                if(VoiceShortcuts == null)
                {
                    UpdateVoiceShortcuts(null);
                }
                return VoiceShortcuts[0];
            }
            catch
            {
                return null;
            }
        }
        public void UpdateVoiceShortcuts(Action completion)
        {
            INVoiceShortcutCenter.SharedCenter.GetAllVoiceShortcuts((voiceShortcutsFromCenter, error) =>
HDL-ON_iOS/Other/SkipControl.cs
@@ -1,5 +1,6 @@
using System;
using CoreGraphics;
using Foundation;
using Intents;
using IntentsUI;
using Other.Siri;
@@ -15,14 +16,27 @@
        public void SkipSiriView()
        {
            var user = new SiriBaseView();
            user.View.BackgroundColor = UIColor.Magenta;
            //var user = new SiriBaseView();
            //user.View.BackgroundColor = new UIColor(242, 243, 247, 1);
            HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = true;
            HDL_ON_iOS.AppDelegate.rootViewController.NavigationBarHidden = false;
            HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(user, true);
            //HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(user, true);
            NSMutableArray list = new NSMutableArray();
            foreach (var localScene in HDL_ON.Entity.FunctionList.List.scenes)
            {
                list.Add(new HDLSceneSiri.HDLSiriSceneModel()
                {
                    UserSceneId = localScene.userSceneId,
                    Name = localScene.name,
                });
            }
            var vc = new HDLSceneSiri.HDLSiriSceneListViewController();
            vc.DataSource = list;
            //vc.TitleName
            //PresentViewController(vc, true, null);
            HDL_ON_iOS.AppDelegate.rootViewController.PushViewController(vc, true);
        }
    }
}
HDL-ON_iOS/Resources/Phone/PersonalCenter/SiriIcon.png
HDL_APP_Project.sln
@@ -10,11 +10,11 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blufi", "HdlBluWi\Blufi.csproj", "{2DDF4C3C-6998-432E-9F43-6786D82F0630}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriBinding", "SiriBinding\SiriBinding.csproj", "{77FFAB61-395D-4AD3-863E-C4E32B5038E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriIntents", "SiriIntents\SiriIntents.csproj", "{760980F5-1CD3-4F4F-9134-34D87BECD790}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SiriIntentsUI", "SiriIntentsUI\SiriIntentsUI.csproj", "{ACC48A7F-250B-4915-A250-9BC399DBD6B3}"
EndProject
Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "SiriBinding", "SiriBinding\SiriBinding.csproj", "{3ED45164-1242-414A-8B08-2751710F6E05}"
EndProject
Global
    GlobalSection(SharedMSBuildProjectFiles) = preSolution
@@ -69,18 +69,6 @@
        {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
        {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
        {2DDF4C3C-6998-432E-9F43-6786D82F0630}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhone.Build.0 = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|Any CPU.Build.0 = Release|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhone.ActiveCfg = Release|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhone.Build.0 = Release|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
        {77FFAB61-395D-4AD3-863E-C4E32B5038E7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
        {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|Any CPU.ActiveCfg = Debug|iPhone
        {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|Any CPU.Build.0 = Debug|iPhone
        {760980F5-1CD3-4F4F-9134-34D87BECD790}.Debug|iPhone.ActiveCfg = Debug|iPhone
@@ -105,6 +93,18 @@
        {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhone.Build.0 = Release|iPhone
        {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
        {ACC48A7F-250B-4915-A250-9BC399DBD6B3}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhone.ActiveCfg = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhone.Build.0 = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|Any CPU.Build.0 = Release|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhone.ActiveCfg = Release|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhone.Build.0 = Release|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
        {3ED45164-1242-414A-8B08-2751710F6E05}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -198,11 +198,6 @@
            bool b = false;
            btnIcon.MouseUpEventHandler += (sender, e) =>
            {
#if __IOS__
                var dd =new  Other.SkipControl();
                dd.SkipSiriView();
                return;
#endif
                //ESOnVideo.Current.Test(false);
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -152,6 +152,10 @@
        /// 智能音箱文本
        /// </summary>
        Button btnSmartSpeakerText;
        /// <summary>
        /// Siri文本
        /// </summary>
        Button btnSiriText;
        public PersonalCenterPage()
@@ -850,6 +854,78 @@
            #endregion
            #region Siri
            #if __IOS__
            //if (Application.PhoneType >= 12)
            {
                //supportView 加高 显示3行 3*44
                supportView.Height = Application.GetRealWidth(3 * 44);
                FrameLayout siriView = new FrameLayout()
                {
                    Height = Application.GetRealWidth(44),
                };
                supportView.AddChidren(siriView);
                //住宅为当前账号才显示智能音箱入口
                Button btnSiriIcon = new Button()
                {
                    X = Application.GetRealWidth(12),
                    Y = Application.GetRealWidth(10),
                    Width = Application.GetMinRealAverage(24),
                    Height = Application.GetMinRealAverage(24),
                    UnSelectedImagePath = "PersonalCenter/SiriIcon.png",
                };
                siriView.AddChidren(btnSiriIcon);
                btnSiriText = new Button()
                {
                    X = Application.GetRealWidth(48),
                    Width = Application.GetRealWidth(270),
                    Height = Application.GetRealWidth(44),
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = CSS_FontSize.TextFontSize
                };
                if(Language.CurrentLanguage == "Chinese")
                {
                    btnSiriText.Text = "Siri快捷方式";
                }else
                {
                    btnSiriText.Text = "Siri Shortcut";
                }
                siriView.AddChidren(btnSiriText);
                btnSiriText.MouseUpEventHandler = (sender, e) => {
                    var ddd =new Other.SkipControl();
                    ddd.SkipSiriView();
                };
                Button btnSiriRight = new Button()
                {
                    X = Application.GetRealWidth(315),
                    Y = Application.GetRealWidth(14),
                    Width = Application.GetMinRealAverage(16),
                    Height = Application.GetMinRealAverage(16),
                    UnSelectedImagePath = "Public/Right.png",
                };
                siriView.AddChidren(btnSiriRight);
                var btnSmartSpeakerViewLine = new Button()
                {
                    X = Application.GetRealWidth(48),
                    Y = Application.GetRealWidth(43),
                    Height = Application.GetRealHeight(1),
                    Width = Application.GetRealWidth(279),
                    BackgroundColor = CSS_Color.DividingLineColor
                };
                siriView.AddChidren(btnSmartSpeakerViewLine);
            }
            #endif
            #endregion
            #region 获取支持
            //FrameLayout supView = new FrameLayout()
            //{
SiriIntents/Entitlements.plist
@@ -1,6 +1,10 @@
<?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>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.hdl.onpro</string>
    </array>
</dict>
</plist>
SiriIntents/Info.plist
@@ -7,7 +7,7 @@
    <key>CFBundleName</key>
    <string>SiriIntents</string>
    <key>CFBundleIdentifier</key>
    <string>com.hdl.onpro.SiriIntents</string>
    <string>com.hdl.onpro.siri</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleInfoDictionaryVersion</key>
@@ -28,11 +28,10 @@
            <array/>
            <key>IntentsSupported</key>
            <array>
                <string>INSendMessageIntent</string>
                <string>INSearchForMessagesIntent</string>
                <string>INSetMessageAttributeIntent</string>
                <string>HDLRunSceneIntent</string>
            </array>
            <key>IntentsRestrictedWhileProtectedDataUnavailable</key>
            <array/>
        </dict>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.intents-service</string>
SiriIntents/SiriIntents.csproj
@@ -79,12 +79,16 @@
    <MtouchArch>ARM64</MtouchArch>
    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
    <MtouchVerbosity></MtouchVerbosity>
    <CodesignProvision>OnproSiri211116-1</CodesignProvision>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="Xamarin.iOS" />
    <Reference Include="Shared.IOS.HDLSceneSiri">
      <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Resources\" />
SiriIntentsUI/Entitlements.plist
@@ -1,6 +1,10 @@
<?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>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.hdl.onpro</string>
    </array>
</dict>
</plist>
SiriIntentsUI/Info.plist
@@ -7,7 +7,7 @@
    <key>CFBundleName</key>
    <string>SiriIntentsUI</string>
    <key>CFBundleIdentifier</key>
    <string>com.hdl.onpro.SiriIntentsui</string>
    <string>com.hdl.onpro.siriui</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleInfoDictionaryVersion</key>
@@ -19,16 +19,19 @@
    <key>CFBundleVersion</key>
    <string>1.3.11171</string>
    <key>MinimumOSVersion</key>
    <string>15.0</string>
    <string>12.0</string>
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>IntentsSupported</key>
            <array>
                <string>INSendMessageIntent</string>
                <string>HDLRunSceneIntent</string>
            </array>
            <key>IntentsRestrictedWhileLocked</key>
            <array/>
            <key>IntentsRestrictedWhileProtectedDataUnavailable</key>
            <array/>
        </dict>
        <key>NSExtensionMainStoryboard</key>
        <string>MainInterface</string>
SiriIntentsUI/SiriIntentsUI.csproj
@@ -79,12 +79,16 @@
    <MtouchArch>ARM64</MtouchArch>
    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
    <MtouchVerbosity></MtouchVerbosity>
    <CodesignProvision>OnproSiriUI211116-1</CodesignProvision>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="Xamarin.iOS" />
    <Reference Include="Shared.IOS.HDLSceneSiri">
      <HintPath>..\..\HDLXamarinSceneSiri\Shared.IOS.HDLSceneSiri\Shared.IOS.HDLSceneSiri\bin\Release\Shared.IOS.HDLSceneSiri.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Resources\" />