wjc
2023-07-26 80075a89316729927db0ad65ca7674f81a942a93
Merge branch 'Dev-Branch' into wjc
23个文件已添加
88个文件已修改
3278 ■■■■■ 已修改文件
DLL/IOS/EZSDK.IOS.dll 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Resources/Resource.designer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/picture_bg.imageset/picture_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn .png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn @2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn @3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/en.lproj/Localizable.strings 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/ApiUtlis.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/HDLCommon.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Mqtt/MqttClient.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpUtil.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/DB_ResidenceData.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmebly.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 551 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs 170 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/RoomPage.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs 315 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs 504 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/Server/HttpUtil.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/SiriIntents.csproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntentsUI/SiriIntentsUI.csproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DLL/IOS/EZSDK.IOS.dll
Binary files differ
HDL-ON_Android/Assets/Language.ini
@@ -664,6 +664,14 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -2001,7 +2009,17 @@
676=中
677=高
678=当前用户数据已清空,即将返回上一页。
679=群控
679=组控
680=炫彩开关
681=自动炫彩测试
682=群组
683=该时间无效
684=长度超出范围
685=注:用户管理仅可对已添加用户进行管理。如需添加新用户,请前往锁端进行相关操作。
@@ -3339,6 +3357,13 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -4672,7 +4697,12 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -5994,6 +6024,15 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png
HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png

HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png

HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png

HDL-ON_Android/HDL-ON_Android.csproj
@@ -401,7 +401,6 @@
    <AndroidAsset Include="Assets\Phone\LogicIcon\selectlocation.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\ColorfulBar.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_white.png" />
    <AndroidAsset Include="Assets\h5\index.html" />
    <AndroidAsset Include="Assets\h5\static\index.63b34199.css" />
    <AndroidAsset Include="Assets\h5\static\images\coal-save-ic.png" />
@@ -455,6 +454,9 @@
    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\VideoDoorlockBatteryManagementBg.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\groupControl_white.png" />
    <AndroidAsset Include="Assets\Phone\Classification\Room\HomePagebg.png" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\values\colors.xml" />
HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.8.1" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202307061">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="2.0.0" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202307261">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <!--友盟-->
HDL-ON_Android/Resources/Resource.designer.cs
@@ -14,7 +14,7 @@
{
    
    
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "12.2.8.165")]
    public partial class Resource
    {
        
HDL-ON_iOS/Assets.xcassets/picture_bg.imageset/picture_bg.png

HDL-ON_iOS/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png

HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png

HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png

HDL-ON_iOS/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@3x.png
HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@3x.png
HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png

HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png

HDL-ON_iOS/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@3x.png
HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@3x.png
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "preview_stoppaly_btn .png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "preview_stoppaly_btn @2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "preview_stoppaly_btn @3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn .png
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn @2x.png
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn .imageset/preview_stoppaly_btn @3x.png
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json
@@ -1,13 +1,13 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "preview_stoppaly_btn_sel.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "preview_stoppaly_btn_sel@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
@@ -16,7 +16,7 @@
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
    "author" : "xcode",
    "version" : 1
  }
}
}
HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@3x.png
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json
@@ -1,22 +1,23 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn .png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn @2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "preview_stopplay_btn @3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
    "author" : "xcode",
    "version" : 1
  }
}
}
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @3x.png
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json
@@ -1,13 +1,13 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn .png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn @2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
@@ -16,7 +16,7 @@
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
    "author" : "xcode",
    "version" : 1
  }
}
}
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn.png
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn@2x.png
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn@3x.png
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json
@@ -1,13 +1,13 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn_sel.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "preview_stopplay_btn_sel@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
@@ -16,7 +16,7 @@
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
    "author" : "xcode",
    "version" : 1
  }
}
}
HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@3x.png
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png

HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png

HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@3x.png
HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@3x.png
HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png

HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png

HDL-ON_iOS/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@3x.png
HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png

HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png

HDL-ON_iOS/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@3x.png
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -25,7 +25,7 @@
        <MtouchArch>x86_64</MtouchArch>
        <MtouchLink>Full</MtouchLink>
        <MtouchDebug>true</MtouchDebug>
        <CodesignKey>iPhone Developer</CodesignKey>
        <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
        <CodesignProvision>OnPro230605-1-Dev</CodesignProvision>
        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
@@ -51,7 +51,7 @@
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <MtouchArch>ARM64</MtouchArch>
        <CodesignKey>iPhone Developer: xuebiao huang (4P32GXQWWK)</CodesignKey>
        <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
        <MtouchDebug>true</MtouchDebug>
        <MtouchI18n>cjk</MtouchI18n>
        <MtouchLink>SdkOnly</MtouchLink>
@@ -96,9 +96,6 @@
        <Reference Include="HDL.Shared.IOS.ScanQRCode">
          <HintPath>..\DLL\IOS\HDL.Shared.IOS.ScanQRCode.dll</HintPath>
        </Reference>
        <Reference Include="Shared.IOS">
          <HintPath>..\DLL\Shared.IOS.dll</HintPath>
        </Reference>
        <Reference Include="Shared.IOS.HDLLinphoneSDK">
          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
        </Reference>
@@ -116,6 +113,9 @@
        </Reference>
        <Reference Include="EZSDK.IOS">
          <HintPath>..\DLL\IOS\EZSDK.IOS.dll</HintPath>
        </Reference>
        <Reference Include="Shared.IOS">
          <HintPath>..\DLL\Shared.IOS.dll</HintPath>
        </Reference>
    </ItemGroup>
    <ItemGroup>
@@ -1562,6 +1562,32 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\Light\ColorfulBar.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockUserManager.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\groupControl.png" />
      <BundleResource Include="Resources\Phone\LogicIcon\SeriesIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\peephole.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\securityipcamez.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\FaceUnlockImage.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\VideoDoorlockBatteryManagementBg.png" />
      <BundleResource Include="Resources\Phone\Classification\Room\HomePagebg.png" />
      <BundleResource Include="Resources\h5\index.html" />
      <BundleResource Include="Resources\h5\static\index.63b34199.css" />
      <BundleResource Include="Resources\h5\static\images\coal-save-ic.png" />
@@ -1591,30 +1617,6 @@
      <BundleResource Include="Resources\h5\static\img\equal-plant-ic.7ef6befa.png" />
      <BundleResource Include="Resources\h5\static\img\coal-save-ic.6c5fd125.png" />
      <BundleResource Include="Resources\h5\static\font\SourceHanSansCN-Normal.otf" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockUserManager.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\groupControl.png" />
      <BundleResource Include="Resources\Phone\LogicIcon\SeriesIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceOnIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\peephole.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\securityipcamez.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\FaceUnlockImage.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Info.plist
@@ -11,7 +11,7 @@
    <key>CFBundleName</key>
    <string>On Pro</string>
    <key>CFBundleShortVersionString</key>
    <string>1.8.1</string>
    <string>1.9.0</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
@@ -36,7 +36,7 @@
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1.8.1</string>
    <string>1.9.0</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>weixinULAPI</string>
HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="tPl-Go-Tmu">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="tPl-Go-Tmu">
    <device id="retina4_7" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment version="4352" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
@@ -14,7 +14,7 @@
                <navigationController id="tPl-Go-Tmu" sceneMemberID="viewController">
                    <tabBarItem key="tabBarItem" title="Item" id="EOh-Lf-fJU"/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="9n2-YJ-ND5">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
@@ -35,7 +35,7 @@
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="R2t-zM-WMl">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="R2t-zM-WMl" id="a02-NK-SeS">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -92,14 +92,14 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo" translatesAutoresizingMaskIntoConstraints="NO" id="MPX-n4-aGz">
                                <rect key="frame" x="82.5" y="100" width="210" height="94"/>
                                <rect key="frame" x="82.5" y="120" width="210" height="94"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="94" id="UZa-4y-JdR"/>
                                    <constraint firstAttribute="width" constant="210" id="xPZ-ku-beA"/>
                                </constraints>
                            </imageView>
                            <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9VU-hP-zCR">
                                <rect key="frame" x="45" y="247" width="285" height="39"/>
                                <rect key="frame" x="45" y="267" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="39" id="Uox-Yc-kob"/>
                                    <constraint firstAttribute="width" constant="285" id="wAy-Hx-fAn"/>
@@ -112,7 +112,7 @@
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p2R-3f-bRm">
                                <rect key="frame" x="45" y="306" width="285" height="39"/>
                                <rect key="frame" x="45" y="326" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="39" id="Dta-c4-zZr"/>
                                    <constraint firstAttribute="width" constant="285" id="OT3-hb-4Yn"/>
@@ -138,7 +138,7 @@
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="EWl-dl-v7z">
                                <rect key="frame" x="45" y="365" width="285" height="39"/>
                                <rect key="frame" x="45" y="385" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="39" id="FhC-TV-ezu"/>
                                    <constraint firstAttribute="width" constant="285" id="Niw-45-NHf"/>
@@ -151,7 +151,7 @@
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tbh-3f-Kyo">
                                <rect key="frame" x="45" y="483" width="285" height="39"/>
                                <rect key="frame" x="45" y="503" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="39" id="aUb-DN-crC"/>
                                    <constraint firstAttribute="width" constant="285" id="u2c-90-3In"/>
@@ -164,7 +164,7 @@
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ps8-ku-D1c">
                                <rect key="frame" x="45" y="424" width="285" height="39"/>
                                <rect key="frame" x="45" y="444" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="39" id="Mu0-my-UVK"/>
                                    <constraint firstAttribute="width" constant="285" id="rGt-yT-DqQ"/>
@@ -222,7 +222,7 @@
                        <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZDeviceCell" rowHeight="73" id="Xkg-Dw-w2X" customClass="DeviceListCell">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="73"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="73"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Xkg-Dw-w2X" id="Iet-JC-0rQ">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="73"/>
@@ -392,7 +392,7 @@
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZCameraCell" id="7Im-ni-l3z">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="7Im-ni-l3z" id="DdN-J1-0fa">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -428,13 +428,13 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="设备序列号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iwL-Ah-WH0">
                                <rect key="frame" x="20" y="150" width="72" height="17"/>
                                <rect key="frame" x="20" y="170" width="72" height="17"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3Ww-0Y-zfl">
                                <rect key="frame" x="102" y="138.5" width="253" height="40"/>
                                <rect key="frame" x="102" y="158.5" width="253" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="zI7-mv-iMH"/>
                                </constraints>
@@ -442,7 +442,7 @@
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iAj-OV-oUu">
                                <rect key="frame" x="102" y="198.5" width="253" height="40"/>
                                <rect key="frame" x="102" y="218.5" width="253" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="jeW-7w-Zss"/>
                                </constraints>
@@ -450,7 +450,7 @@
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2s3-2Z-WBg">
                                <rect key="frame" x="170" y="258.5" width="35" height="33"/>
                                <rect key="frame" x="170" y="278.5" width="35" height="33"/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <state key="normal" title="跳转">
                                    <color key="titleColor" systemColor="darkTextColor"/>
@@ -466,7 +466,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="通道号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gfd-eM-Uwg">
                                <rect key="frame" x="20" y="210" width="43" height="17"/>
                                <rect key="frame" x="20" y="230" width="43" height="17"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
@@ -512,7 +512,7 @@
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DemoAPICell" id="wpS-t4-02o">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wpS-t4-02o" id="8mM-ux-z21">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -551,7 +551,7 @@
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="UVM-wN-ME4">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="UVM-wN-ME4" id="PFk-ak-8nJ">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -587,22 +587,22 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8AH-ts-VAl">
                                <rect key="frame" x="0.0" y="44" width="187.5" height="100"/>
                                <rect key="frame" x="0.0" y="64" width="187.5" height="100"/>
                                <color key="backgroundColor" red="0.17321318387985229" green="0.74333697557449341" blue="0.45914602279663086" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="100" id="uyH-gu-qB2"/>
                                </constraints>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="frT-lO-vkv">
                                <rect key="frame" x="187.5" y="144" width="187.5" height="100"/>
                                <rect key="frame" x="187.5" y="164" width="187.5" height="100"/>
                                <color key="backgroundColor" red="0.17321318387985229" green="0.74333697557449341" blue="0.45914602279663086" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XlI-CJ-eCW">
                                <rect key="frame" x="0.0" y="144" width="187.5" height="100"/>
                                <rect key="frame" x="0.0" y="164" width="187.5" height="100"/>
                                <color key="backgroundColor" red="0.93333333330000001" green="0.65490196079999996" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCt-fy-olc">
                                <rect key="frame" x="187.5" y="44" width="187.5" height="100"/>
                                <rect key="frame" x="187.5" y="64" width="187.5" height="100"/>
                                <color key="backgroundColor" red="0.85770881180000003" green="0.211302614" blue="0.113631911" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </view>
                        </subviews>
@@ -648,7 +648,7 @@
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="VhH-MZ-U0P">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VhH-MZ-U0P" id="Kep-2I-4hb">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -683,7 +683,7 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hdv-eQ-Pot">
                                <rect key="frame" x="0.0" y="44" width="375" height="211"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="211"/>
                                <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="hdv-eQ-Pot" secondAttribute="height" multiplier="16:9" id="qjy-ev-K4v"/>
@@ -800,24 +800,23 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="gFl-PI-CLn">
                                <rect key="frame" x="0.0" y="44" width="375" height="623"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="603"/>
                            </imageView>
                            <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NRj-hs-uOI">
                                <rect key="frame" x="0.0" y="44" width="375" height="211"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="211"/>
                                <subviews>
                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Xz-5f-ZJx">
                                        <rect key="frame" x="0.0" y="0.0" width="375" height="211"/>
                                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        <color key="backgroundColor" red="0.047058823530000002" green="0.054901960780000002" blue="0.062745098040000002" alpha="1" colorSpace="calibratedRGB"/>
                                        <constraints>
                                            <constraint firstAttribute="width" secondItem="1Xz-5f-ZJx" secondAttribute="height" multiplier="16:9" id="7NS-WA-bEr"/>
                                        </constraints>
                                    </view>
                                </subviews>
                                <constraints>
                                    <constraint firstItem="1Xz-5f-ZJx" firstAttribute="centerY" secondItem="NRj-hs-uOI" secondAttribute="centerY" id="DTc-SB-nnD"/>
                                    <constraint firstItem="1Xz-5f-ZJx" firstAttribute="top" secondItem="NRj-hs-uOI" secondAttribute="top" id="DTc-SB-nnD"/>
                                    <constraint firstAttribute="width" secondItem="NRj-hs-uOI" secondAttribute="height" multiplier="16:9" id="FHe-T4-BRJ"/>
                                    <constraint firstItem="1Xz-5f-ZJx" firstAttribute="width" secondItem="NRj-hs-uOI" secondAttribute="width" id="JfK-ti-Ys7"/>
                                    <constraint firstItem="1Xz-5f-ZJx" firstAttribute="height" secondItem="NRj-hs-uOI" secondAttribute="height" id="QcN-dO-GL9"/>
                                    <constraint firstAttribute="bottom" secondItem="1Xz-5f-ZJx" secondAttribute="bottom" id="ted-kP-rO7"/>
                                    <constraint firstAttribute="trailing" secondItem="1Xz-5f-ZJx" secondAttribute="trailing" id="wA6-Da-kWF"/>
                                    <constraint firstItem="1Xz-5f-ZJx" firstAttribute="centerX" secondItem="NRj-hs-uOI" secondAttribute="centerX" id="zUn-i2-2qZ"/>
@@ -826,7 +825,7 @@
                                <viewLayoutGuide key="frameLayoutGuide" id="itJ-oF-sXb"/>
                            </scrollView>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2bL-GF-xWw">
                                <rect key="frame" x="0.0" y="44" width="375" height="40"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="40"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="u99-on-soH"/>
@@ -836,7 +835,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yrc-c9-rvb">
                                <rect key="frame" x="147.5" y="54" width="80" height="24"/>
                                <rect key="frame" x="147.5" y="74" width="80" height="24"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="80" id="O7b-Gn-efp"/>
@@ -847,7 +846,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dTs-1h-o4p">
                                <rect key="frame" x="157" y="162" width="61" height="93"/>
                                <rect key="frame" x="157" y="182" width="61" height="93"/>
                                <subviews>
                                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="picture_bg" translatesAutoresizingMaskIntoConstraints="NO" id="oew-Eh-y6G">
                                        <rect key="frame" x="0.0" y="0.0" width="61" height="93"/>
@@ -911,7 +910,7 @@
                                </constraints>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1FE-Su-4U4">
                                <rect key="frame" x="0.0" y="255" width="375" height="37"/>
                                <rect key="frame" x="0.0" y="275" width="375" height="37"/>
                                <subviews>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xSp-4i-Jwh">
                                        <rect key="frame" x="0.0" y="0.0" width="75" height="37"/>
@@ -942,6 +941,12 @@
                                            <constraint firstAttribute="height" constant="37" id="dpN-py-vBv"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <state key="normal">
                                            <color key="titleColor" red="0.61960784310000006" green="0.62352941179999999" blue="0.62352941179999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        </state>
                                        <state key="highlighted">
                                            <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                        </state>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lTh-qe-8pV">
                                        <rect key="frame" x="300" y="0.0" width="75" height="37"/>
@@ -961,14 +966,17 @@
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <state key="normal" title="高清">
                                            <color key="titleColor" red="0.70588235294117641" green="0.70588235294117641" blue="0.70588235294117641" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <color key="titleColor" red="0.61960784310000006" green="0.62352941179999999" blue="0.62352941179999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        </state>
                                        <state key="highlighted">
                                            <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                        </state>
                                        <connections>
                                            <action selector="qualityButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Hze-u0-cgn"/>
                                        </connections>
                                    </button>
                                </subviews>
                                <color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <color key="backgroundColor" red="0.047058823529411764" green="0.054901960784313725" blue="0.062745098039215685" alpha="1" colorSpace="calibratedRGB"/>
                                <constraints>
                                    <constraint firstItem="xSp-4i-Jwh" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="1W5-cF-JRC"/>
                                    <constraint firstItem="lTh-qe-8pV" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="HsY-AZ-lgd"/>
@@ -989,10 +997,10 @@
                                </constraints>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Gq-77-ypg">
                                <rect key="frame" x="0.0" y="292" width="375" height="375"/>
                                <rect key="frame" x="0.0" y="312" width="375" height="355"/>
                                <subviews>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fUI-tR-jyG">
                                        <rect key="frame" x="77.5" y="87.5" width="100" height="100"/>
                                        <rect key="frame" x="77.5" y="77.5" width="100" height="100"/>
                                        <constraints>
                                            <constraint firstAttribute="width" constant="100" id="4pV-lo-eLV"/>
                                            <constraint firstAttribute="height" constant="100" id="CFM-rZ-KQg"/>
@@ -1008,7 +1016,7 @@
                                        </connections>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4Eh-hh-84T">
                                        <rect key="frame" x="197.5" y="87.5" width="100" height="100"/>
                                        <rect key="frame" x="197.5" y="77.5" width="100" height="100"/>
                                        <constraints>
                                            <constraint firstAttribute="width" constant="100" id="MdX-on-ZlR"/>
                                            <constraint firstAttribute="height" constant="100" id="uZ6-ZC-fku"/>
@@ -1025,7 +1033,7 @@
                                        </connections>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wEO-O3-gSJ">
                                        <rect key="frame" x="77.5" y="187.5" width="100" height="100"/>
                                        <rect key="frame" x="77.5" y="177.5" width="100" height="100"/>
                                        <constraints>
                                            <constraint firstAttribute="width" constant="100" id="HNG-1d-auy"/>
                                            <constraint firstAttribute="height" constant="100" id="fFt-WV-T6O"/>
@@ -1041,7 +1049,7 @@
                                        </connections>
                                    </button>
                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lrx-9r-gJZ">
                                        <rect key="frame" x="0.0" y="287" width="375" height="88"/>
                                        <rect key="frame" x="0.0" y="287" width="375" height="68"/>
                                        <subviews>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Un0-bC-uwU">
                                                <rect key="frame" x="325" y="0.0" width="50" height="50"/>
@@ -1059,7 +1067,7 @@
                                                </connections>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cRL-ov-Bad">
                                                <rect key="frame" x="110.5" y="-33" width="154" height="154"/>
                                                <rect key="frame" x="110.5" y="-43" width="154" height="154"/>
                                                <constraints>
                                                    <constraint firstAttribute="width" constant="154" id="2qV-nc-X2D"/>
                                                    <constraint firstAttribute="height" constant="154" id="CCV-cO-2RB"/>
@@ -1069,7 +1077,7 @@
                                                <state key="highlighted" image="ptz_bg"/>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="46J-XC-G3M">
                                                <rect key="frame" x="162.5" y="-33" width="50" height="50"/>
                                                <rect key="frame" x="162.5" y="-43" width="50" height="50"/>
                                                <constraints>
                                                    <constraint firstAttribute="width" constant="50" id="bG6-29-hdH"/>
                                                    <constraint firstAttribute="height" constant="50" id="sI2-gA-aFQ"/>
@@ -1080,7 +1088,7 @@
                                                </connections>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YpD-H2-J3L">
                                                <rect key="frame" x="162.5" y="71" width="50" height="50"/>
                                                <rect key="frame" x="162.5" y="61" width="50" height="50"/>
                                                <constraints>
                                                    <constraint firstAttribute="width" constant="50" id="8xd-ja-amB"/>
                                                    <constraint firstAttribute="height" constant="50" id="fYS-8a-jfb"/>
@@ -1091,7 +1099,7 @@
                                                </connections>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WlW-FZ-jz8">
                                                <rect key="frame" x="214.5" y="18" width="50" height="50"/>
                                                <rect key="frame" x="214.5" y="8" width="50" height="50"/>
                                                <constraints>
                                                    <constraint firstAttribute="width" constant="50" id="JyV-sT-9Nd"/>
                                                    <constraint firstAttribute="height" constant="50" id="bVy-Jx-0Yf"/>
@@ -1102,7 +1110,7 @@
                                                </connections>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="g5e-Uk-Wgs">
                                                <rect key="frame" x="110.5" y="19" width="50" height="50"/>
                                                <rect key="frame" x="110.5" y="9" width="50" height="50"/>
                                                <constraints>
                                                    <constraint firstAttribute="width" constant="50" id="ZN7-OU-GCA"/>
                                                    <constraint firstAttribute="height" constant="50" id="et2-oA-SKp"/>
@@ -1130,7 +1138,7 @@
                                        </constraints>
                                    </view>
                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IqL-eW-ddl">
                                        <rect key="frame" x="0.0" y="287" width="375" height="88"/>
                                        <rect key="frame" x="0.0" y="287" width="375" height="68"/>
                                        <subviews>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="j3z-1C-gSQ">
                                                <rect key="frame" x="325" y="0.0" width="50" height="50"/>
@@ -1148,7 +1156,7 @@
                                                </connections>
                                            </button>
                                            <imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="preview_talkback" highlightedImage="spkImg" translatesAutoresizingMaskIntoConstraints="NO" id="SdD-om-sXP">
                                                <rect key="frame" x="137.5" y="-6" width="100" height="100"/>
                                                <rect key="frame" x="137.5" y="-16" width="100" height="100"/>
                                                <gestureRecognizers/>
                                                <constraints>
                                                    <constraint firstAttribute="height" constant="100" id="5Av-B7-ISV"/>
@@ -1168,7 +1176,7 @@
                                        </constraints>
                                    </view>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xQS-rQ-Xez">
                                        <rect key="frame" x="197.5" y="187.5" width="100" height="100"/>
                                        <rect key="frame" x="197.5" y="177.5" width="100" height="100"/>
                                        <constraints>
                                            <constraint firstAttribute="width" constant="100" id="Gjc-CC-41w"/>
                                            <constraint firstAttribute="height" constant="100" id="Kpb-pS-Xes"/>
@@ -1250,7 +1258,7 @@
                                </constraints>
                            </view>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nkn-oC-NfP">
                                <rect key="frame" x="0.0" y="44" width="40" height="40"/>
                                <rect key="frame" x="17.5" y="64" width="40" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="WQV-Fb-Hpn"/>
                                    <constraint firstAttribute="width" constant="40" id="rqc-sI-jaX"/>
@@ -1262,7 +1270,7 @@
                                </connections>
                            </button>
                            <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yYv-tJ-QCV">
                                <rect key="frame" x="160.5" y="122.5" width="54" height="54"/>
                                <rect key="frame" x="160.5" y="142.5" width="54" height="54"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="54" id="TXE-KQ-iJl"/>
                                    <constraint firstAttribute="height" constant="54" id="nqy-4G-kEq"/>
@@ -1275,7 +1283,7 @@
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YwB-6z-DKL">
                                <rect key="frame" x="0.0" y="134.5" width="375" height="30"/>
                                <rect key="frame" x="0.0" y="154.5" width="375" height="30"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="30" id="eMk-ij-ZRD"/>
                                </constraints>
@@ -1284,22 +1292,89 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" alpha="0.69999999999999996" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3XK-Ur-ZIj">
                                <rect key="frame" x="16" y="139" width="0.0" height="0.0"/>
                                <rect key="frame" x="16" y="159" width="0.0" height="0.0"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sMv-Yh-W5N">
                                <rect key="frame" x="0.0" y="312" width="375" height="355"/>
                                <subviews>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="---" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8Fe-E7-C5g">
                                        <rect key="frame" x="32" y="46.5" width="311" height="21"/>
                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                        <color key="textColor" red="0.090196078430000007" green="0.094117647060000004" blue="0.29411764709999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aq5-rn-Dgo" customClass="HDLEZOPButton">
                                        <rect key="frame" x="142.5" y="117.5" width="84.5" height="120"/>
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                        <state key="normal" title="忽略" image="hdl_ez_cat_eyes_ignore">
                                            <color key="titleColor" red="0.10588235294117647" green="0.1764705882352941" blue="0.30196078431372547" alpha="1" colorSpace="calibratedRGB"/>
                                        </state>
                                        <connections>
                                            <action selector="clickCalloutIgnoreAction:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="fTQ-p0-9jk"/>
                                        </connections>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2bC-B5-gMZ" customClass="HDLEZOPButton">
                                        <rect key="frame" x="259" y="117.5" width="84" height="120"/>
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                        <state key="normal" title="接听" image="hdl_ez_cat_eyes_answer">
                                            <color key="titleColor" red="0.10588235294117647" green="0.1764705882352941" blue="0.30196078431372547" alpha="1" colorSpace="calibratedRGB"/>
                                        </state>
                                        <connections>
                                            <action selector="clickCalloutAnswerAction:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="2tR-65-1sv"/>
                                        </connections>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jPI-nC-uAq" customClass="HDLEZOPButton">
                                        <rect key="frame" x="32" y="117.5" width="78.5" height="120"/>
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="120" id="NXb-C0-Nw5"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                        <state key="normal" title="挂断" image="hdl_ez_cat_eyes_hang_up">
                                            <color key="titleColor" red="0.1058823529" green="0.1764705882" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
                                        </state>
                                        <connections>
                                            <action selector="clickCalloutHangupAction:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Szo-xH-Mh6"/>
                                        </connections>
                                    </button>
                                </subviews>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <constraints>
                                    <constraint firstItem="aq5-rn-Dgo" firstAttribute="centerY" secondItem="jPI-nC-uAq" secondAttribute="centerY" id="0YK-rV-xIW"/>
                                    <constraint firstAttribute="trailing" secondItem="8Fe-E7-C5g" secondAttribute="trailing" constant="32" id="8NR-Fc-tPc"/>
                                    <constraint firstItem="aq5-rn-Dgo" firstAttribute="leading" secondItem="jPI-nC-uAq" secondAttribute="trailing" constant="32" id="8ht-5u-0y7"/>
                                    <constraint firstItem="2bC-B5-gMZ" firstAttribute="height" secondItem="aq5-rn-Dgo" secondAttribute="height" id="B0O-2O-7OG"/>
                                    <constraint firstItem="jPI-nC-uAq" firstAttribute="centerY" secondItem="sMv-Yh-W5N" secondAttribute="centerY" id="Fa3-MI-9zW"/>
                                    <constraint firstItem="aq5-rn-Dgo" firstAttribute="width" secondItem="jPI-nC-uAq" secondAttribute="width" multiplier="1.07143" id="Jzm-Kq-s1B"/>
                                    <constraint firstItem="aq5-rn-Dgo" firstAttribute="top" secondItem="8Fe-E7-C5g" secondAttribute="bottom" constant="50" id="aM7-YH-wta"/>
                                    <constraint firstItem="aq5-rn-Dgo" firstAttribute="height" secondItem="jPI-nC-uAq" secondAttribute="height" id="dri-gY-bvB"/>
                                    <constraint firstItem="jPI-nC-uAq" firstAttribute="leading" secondItem="sMv-Yh-W5N" secondAttribute="leading" constant="32" id="eUw-x2-5HY"/>
                                    <constraint firstItem="2bC-B5-gMZ" firstAttribute="leading" secondItem="aq5-rn-Dgo" secondAttribute="trailing" constant="32" id="eu1-g4-zxI"/>
                                    <constraint firstAttribute="trailing" secondItem="2bC-B5-gMZ" secondAttribute="trailing" constant="32" id="fzR-kq-9dw"/>
                                    <constraint firstItem="2bC-B5-gMZ" firstAttribute="centerY" secondItem="aq5-rn-Dgo" secondAttribute="centerY" id="jQf-ae-vvC"/>
                                    <constraint firstItem="8Fe-E7-C5g" firstAttribute="leading" secondItem="sMv-Yh-W5N" secondAttribute="leading" constant="32" id="p4O-md-aUe"/>
                                    <constraint firstItem="2bC-B5-gMZ" firstAttribute="width" secondItem="aq5-rn-Dgo" secondAttribute="width" id="w2D-Ia-3nQ"/>
                                </constraints>
                            </view>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="Yrc-c9-rvb" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" constant="10" id="0Cf-Q8-Mwq"/>
                            <constraint firstAttribute="trailing" secondItem="YwB-6z-DKL" secondAttribute="trailing" id="0oZ-sb-kgM"/>
                            <constraint firstItem="YwB-6z-DKL" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="135-mO-STg"/>
                            <constraint firstItem="7Gq-77-ypg" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="bottom" priority="751" id="4Dh-L5-Wxp"/>
                            <constraint firstItem="dTs-1h-o4p" firstAttribute="centerX" secondItem="JEB-Q6-XNh" secondAttribute="centerX" id="16Z-Vr-x9e"/>
                            <constraint firstItem="7Gq-77-ypg" firstAttribute="top" secondItem="NRj-hs-uOI" secondAttribute="bottom" priority="751" constant="37" id="4Dh-L5-Wxp"/>
                            <constraint firstItem="YwB-6z-DKL" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="58C-Bi-adb"/>
                            <constraint firstItem="dTs-1h-o4p" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="7Nq-GR-ypc"/>
                            <constraint firstAttribute="trailing" secondItem="1FE-Su-4U4" secondAttribute="trailing" id="9po-jh-PJt"/>
                            <constraint firstItem="1FE-Su-4U4" firstAttribute="top" secondItem="NRj-hs-uOI" secondAttribute="bottom" id="Aeo-vo-x5Y"/>
                            <constraint firstItem="3qm-Zv-a7S" firstAttribute="top" secondItem="sMv-Yh-W5N" secondAttribute="bottom" id="5fc-VK-Tfj"/>
                            <constraint firstItem="NRj-hs-uOI" firstAttribute="trailing" secondItem="1FE-Su-4U4" secondAttribute="trailing" id="9po-jh-PJt"/>
                            <constraint firstAttribute="trailing" secondItem="NRj-hs-uOI" secondAttribute="trailing" id="G3Q-MC-BpN"/>
                            <constraint firstItem="2bL-GF-xWw" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="JNG-uc-9XA"/>
                            <constraint firstItem="NRj-hs-uOI" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="PXn-FW-8dk"/>
@@ -1307,35 +1382,45 @@
                            <constraint firstItem="1FE-Su-4U4" firstAttribute="top" secondItem="dTs-1h-o4p" secondAttribute="bottom" id="Qae-km-Xxm"/>
                            <constraint firstItem="NRj-hs-uOI" firstAttribute="centerY" secondItem="yYv-tJ-QCV" secondAttribute="centerY" id="TGA-a5-AUm"/>
                            <constraint firstItem="nkn-oC-NfP" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="Tn0-Se-wHE"/>
                            <constraint firstItem="nkn-oC-NfP" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="YSp-TA-bZd"/>
                            <constraint firstItem="sMv-Yh-W5N" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="top" id="TvP-3j-NV3"/>
                            <constraint firstItem="yYv-tJ-QCV" firstAttribute="centerX" secondItem="YwB-6z-DKL" secondAttribute="centerX" id="Yt6-5R-nAw"/>
                            <constraint firstItem="1FE-Su-4U4" firstAttribute="top" secondItem="NRj-hs-uOI" secondAttribute="bottom" id="aO9-KQ-MPh"/>
                            <constraint firstItem="2bL-GF-xWw" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="adY-eM-6Nb"/>
                            <constraint firstItem="NRj-hs-uOI" firstAttribute="centerY" secondItem="YwB-6z-DKL" secondAttribute="centerY" id="cjf-nt-XqE"/>
                            <constraint firstItem="3qm-Zv-a7S" firstAttribute="top" secondItem="gFl-PI-CLn" secondAttribute="bottom" id="fSZ-Xw-PGz"/>
                            <constraint firstItem="gFl-PI-CLn" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="hvI-bX-2fD"/>
                            <constraint firstItem="3XK-Ur-ZIj" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" constant="16" id="hya-DL-nrl"/>
                            <constraint firstItem="sMv-Yh-W5N" firstAttribute="trailing" secondItem="PYB-vu-Xcw" secondAttribute="trailing" id="jzU-g2-HL3"/>
                            <constraint firstItem="1FE-Su-4U4" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="mfp-Y3-aJF"/>
                            <constraint firstItem="7Gq-77-ypg" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="nIY-1B-8KJ"/>
                            <constraint firstItem="NRj-hs-uOI" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="opo-g8-z05"/>
                            <constraint firstAttribute="trailing" secondItem="7Gq-77-ypg" secondAttribute="trailing" id="pjs-uX-99u"/>
                            <constraint firstItem="nkn-oC-NfP" firstAttribute="centerX" secondItem="xSp-4i-Jwh" secondAttribute="centerX" id="qFB-6I-bhK"/>
                            <constraint firstAttribute="trailing" secondItem="2bL-GF-xWw" secondAttribute="trailing" id="sJ1-Mt-Ys4"/>
                            <constraint firstItem="gFl-PI-CLn" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="sJh-Px-GtM"/>
                            <constraint firstAttribute="trailing" secondItem="gFl-PI-CLn" secondAttribute="trailing" id="vZX-0k-C1e"/>
                            <constraint firstItem="3XK-Ur-ZIj" firstAttribute="top" secondItem="2bL-GF-xWw" secondAttribute="bottom" constant="55" id="vyg-ls-OTR"/>
                            <constraint firstItem="Yrc-c9-rvb" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="y5l-xh-jsd"/>
                            <constraint firstItem="sMv-Yh-W5N" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="yPz-fc-ra1"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" id="vpB-aG-zb3"/>
                    <connections>
                        <outlet property="answerButton" destination="2bC-B5-gMZ" id="T42-Dl-1mx"/>
                        <outlet property="bottomView" destination="7Gq-77-ypg" id="kLP-FN-Tvv"/>
                        <outlet property="callOutAlertLabel" destination="8Fe-E7-C5g" id="h1w-BY-5fi"/>
                        <outlet property="captureButton" destination="wEO-O3-gSJ" id="ABn-Ub-QEs"/>
                        <outlet property="cloudBtn" destination="WYB-ca-Ox6" id="E4S-1L-4uS"/>
                        <outlet property="cloudTip" destination="wXb-RI-dLd" id="bCu-fP-8IF"/>
                        <outlet property="controlButton" destination="fUI-tR-jyG" id="uqI-1T-h8V"/>
                        <outlet property="currentHDStatus" destination="oNR-gT-NPm" id="STe-rh-VhG"/>
                        <outlet property="emptyBtnLeftMargin" destination="ea4-ei-JXX" id="aQh-Jb-qGX"/>
                        <outlet property="emptyButton" destination="MqM-GF-jSr" id="jD7-hz-yfd"/>
                        <outlet property="hangUpButton" destination="jPI-nC-uAq" id="WAF-xK-pJI"/>
                        <outlet property="highButton" destination="skK-Ar-y6h" id="jbk-j5-fCX"/>
                        <outlet property="ignoreButton" destination="aq5-rn-Dgo" id="0J6-cC-KP5"/>
                        <outlet property="largeBackButton" destination="nkn-oC-NfP" id="kwo-DU-hgk"/>
                        <outlet property="largeBtnRightMargin" destination="aid-gD-fi2" id="2eQ-2e-83s"/>
                        <outlet property="largeButton" destination="lTh-qe-8pV" id="feK-gX-fjt"/>
                        <outlet property="largeTitleLabel" destination="2bL-GF-xWw" id="mev-Ko-lDT"/>
                        <outlet property="localRecordButton" destination="xQS-rQ-Xez" id="Z0M-JE-cTx"/>
@@ -1344,9 +1429,12 @@
                        <outlet property="lowButton" destination="UlQ-aK-1VP" id="ISE-DJ-W5I"/>
                        <outlet property="messageLabel" destination="YwB-6z-DKL" id="196-Ds-Vl6"/>
                        <outlet property="middleButton" destination="WSh-Ao-McO" id="vty-N8-cDz"/>
                        <outlet property="playBtnLeftMargin" destination="qZZ-Fc-8jt" id="Fyj-20-v8W"/>
                        <outlet property="playButton" destination="xSp-4i-Jwh" id="DUU-ap-reQ"/>
                        <outlet property="playerPlayButton" destination="yYv-tJ-QCV" id="EIB-lc-14l"/>
                        <outlet property="playerView" destination="1Xz-5f-ZJx" id="tYS-5X-mCe"/>
                        <outlet property="playerViewBottomMargin" destination="ted-kP-rO7" id="oFs-an-sCu"/>
                        <outlet property="playerViewWHRatio" destination="7NS-WA-bEr" id="nAT-Lb-Z7I"/>
                        <outlet property="ptzCloseButton" destination="Un0-bC-uwU" id="pBM-jg-Hsv"/>
                        <outlet property="ptzControlButton" destination="cRL-ov-Bad" id="dO9-KY-Fpn"/>
                        <outlet property="ptzDownButton" destination="YpD-H2-J3L" id="9Hs-IT-QQk"/>
@@ -1358,6 +1446,8 @@
                        <outlet property="qualityButton" destination="JEB-Q6-XNh" id="z41-pC-jcF"/>
                        <outlet property="qualityView" destination="dTs-1h-o4p" id="cwe-H0-P0z"/>
                        <outlet property="scrollView" destination="NRj-hs-uOI" id="eoY-a5-7Nt"/>
                        <outlet property="scrollViewTopMargin" destination="PXn-FW-8dk" id="ROR-nh-sCL"/>
                        <outlet property="scrollViewWHRatio" destination="FHe-T4-BRJ" id="VDa-Ms-cmg"/>
                        <outlet property="speakImageView" destination="SdD-om-sXP" id="vut-X7-g34"/>
                        <outlet property="streamPlayBtn" destination="X2B-Km-Emd" id="wjk-zR-FDC"/>
                        <outlet property="streamTypeLabel" destination="5WH-Ih-9Yw" id="azv-2u-5FX"/>
@@ -1366,6 +1456,7 @@
                        <outlet property="talkView" destination="IqL-eW-ddl" id="hTy-iu-CUA"/>
                        <outlet property="talkViewContraint" destination="IcU-Zd-4MD" id="vMR-vH-k7J"/>
                        <outlet property="toolBar" destination="1FE-Su-4U4" id="CTH-vb-IfL"/>
                        <outlet property="videoCallOutView" destination="sMv-Yh-W5N" id="RBZ-2y-YXA"/>
                        <outlet property="voiceButton" destination="tAW-X2-E9K" id="N5O-Qz-qd6"/>
                        <outlet property="zoomSizeLabel" destination="3XK-Ur-ZIj" id="vYD-CM-uoE"/>
                    </connections>
@@ -1392,7 +1483,7 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kQU-Pc-qqv">
                                <rect key="frame" x="0.0" y="44" width="375" height="211"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="211"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <gestureRecognizers/>
                                <constraints>
@@ -1403,7 +1494,7 @@
                                </connections>
                            </view>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SJH-Sa-TMv">
                                <rect key="frame" x="0.0" y="44" width="375" height="40"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="40"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="o94-Gh-tdc"/>
@@ -1413,7 +1504,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3j6-e7-ztE">
                                <rect key="frame" x="0.0" y="255" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="275" width="375" height="44"/>
                                <subviews>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bu9-Qz-3Ij">
                                        <rect key="frame" x="187.5" y="0.0" width="187.5" height="44"/>
@@ -1472,7 +1563,7 @@
                                </constraints>
                            </view>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hY1-Ac-Oot">
                                <rect key="frame" x="0.0" y="44" width="40" height="40"/>
                                <rect key="frame" x="0.0" y="64" width="40" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="AFV-2p-wo1"/>
                                    <constraint firstAttribute="width" constant="40" id="h15-cw-wZH"/>
@@ -1483,7 +1574,7 @@
                                </connections>
                            </button>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="buq-PS-h5p">
                                <rect key="frame" x="0.0" y="195" width="375" height="60"/>
                                <rect key="frame" x="0.0" y="215" width="375" height="60"/>
                                <subviews>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z3E-1u-wEn">
                                        <rect key="frame" x="0.0" y="23" width="60" height="37"/>
@@ -1492,6 +1583,7 @@
                                            <constraint firstAttribute="width" constant="60" id="mZh-Ks-yHR"/>
                                        </constraints>
                                        <state key="normal" image="preview_play_btn"/>
                                        <state key="highlighted" image="preview_play_btn_sel"/>
                                        <connections>
                                            <action selector="playButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="nzq-1I-c5F"/>
                                        </connections>
@@ -1503,6 +1595,7 @@
                                            <constraint firstAttribute="height" constant="37" id="nC8-FN-WAT"/>
                                        </constraints>
                                        <state key="normal" image="preview_voice_btn"/>
                                        <state key="highlighted" image="preview_voice_btn_sel"/>
                                        <connections>
                                            <action selector="voiceButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="aAV-1Z-FGI"/>
                                        </connections>
@@ -1520,7 +1613,7 @@
                                        </connections>
                                    </button>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ruu-Hg-3Tx">
                                        <rect key="frame" x="0.0" y="0.0" width="34" height="20"/>
                                        <rect key="frame" x="20" y="0.0" width="34" height="20"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="20" id="0Xh-uc-DaE"/>
                                        </constraints>
@@ -1529,7 +1622,7 @@
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <slider opaque="NO" contentMode="scaleToFill" semanticContentAttribute="playback" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="e5d-g8-Knj">
                                        <rect key="frame" x="35.5" y="-5" width="303.5" height="31"/>
                                        <rect key="frame" x="55.5" y="-5" width="263.5" height="31"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="30" id="4zL-xp-G9T"/>
                                        </constraints>
@@ -1539,7 +1632,7 @@
                                        </connections>
                                    </slider>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ESG-x4-J8R">
                                        <rect key="frame" x="341" y="0.0" width="34" height="20"/>
                                        <rect key="frame" x="321" y="0.0" width="34" height="20"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="20" id="2SN-fe-EDR"/>
                                        </constraints>
@@ -1575,7 +1668,7 @@
                                <constraints>
                                    <constraint firstItem="Z3E-1u-wEn" firstAttribute="leading" secondItem="buq-PS-h5p" secondAttribute="leading" id="1R2-0e-zLb"/>
                                    <constraint firstItem="t6K-Cq-gMh" firstAttribute="leading" secondItem="Z3E-1u-wEn" secondAttribute="trailing" id="4m4-IR-mc0"/>
                                    <constraint firstItem="ruu-Hg-3Tx" firstAttribute="leading" secondItem="buq-PS-h5p" secondAttribute="leading" id="7Mx-RJ-l3f"/>
                                    <constraint firstItem="ruu-Hg-3Tx" firstAttribute="leading" secondItem="buq-PS-h5p" secondAttribute="leading" constant="20" id="7Mx-RJ-l3f"/>
                                    <constraint firstAttribute="bottom" secondItem="7aB-y0-gtH" secondAttribute="bottom" id="7tH-jm-Tc8"/>
                                    <constraint firstItem="7aB-y0-gtH" firstAttribute="leading" secondItem="gRk-Pf-zJ6" secondAttribute="trailing" constant="5" id="8Ex-wx-3ye"/>
                                    <constraint firstItem="ruu-Hg-3Tx" firstAttribute="top" secondItem="buq-PS-h5p" secondAttribute="top" id="Er7-IE-Hng"/>
@@ -1590,12 +1683,12 @@
                                    <constraint firstAttribute="bottom" secondItem="gRk-Pf-zJ6" secondAttribute="bottom" constant="10" id="pO2-v2-n1y"/>
                                    <constraint firstItem="e5d-g8-Knj" firstAttribute="centerY" secondItem="ESG-x4-J8R" secondAttribute="centerY" id="pTj-gC-TCd"/>
                                    <constraint firstAttribute="height" constant="60" id="tMQ-jL-rdi"/>
                                    <constraint firstAttribute="trailing" secondItem="ESG-x4-J8R" secondAttribute="trailing" id="vMR-I6-RPC"/>
                                    <constraint firstAttribute="trailing" secondItem="ESG-x4-J8R" secondAttribute="trailing" constant="20" id="vMR-I6-RPC"/>
                                    <constraint firstAttribute="trailing" secondItem="7aB-y0-gtH" secondAttribute="trailing" id="vXW-8l-Y0i"/>
                                </constraints>
                            </view>
                            <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="jim-qG-8NV">
                                <rect key="frame" x="0.0" y="299" width="375" height="368"/>
                                <rect key="frame" x="0.0" y="319" width="375" height="348"/>
                                <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="1" minimumInteritemSpacing="1" id="rBI-Vc-Dgo">
                                    <size key="itemSize" width="106" height="80"/>
@@ -1662,14 +1755,14 @@
                                </connections>
                            </collectionView>
                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="no_video" translatesAutoresizingMaskIntoConstraints="NO" id="KsP-XU-bB0">
                                <rect key="frame" x="140.5" y="361" width="94" height="94"/>
                                <rect key="frame" x="140.5" y="381" width="94" height="94"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="94" id="aF8-gn-fXB"/>
                                    <constraint firstAttribute="width" constant="94" id="kaI-f1-60h"/>
                                </constraints>
                            </imageView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="空空如也" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pg3-8C-ucI">
                                <rect key="frame" x="137.5" y="465" width="100" height="20"/>
                                <rect key="frame" x="137.5" y="485" width="100" height="20"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="100" id="lIY-Ce-8Ca"/>
                                    <constraint firstAttribute="height" constant="20" id="zIg-E3-en7"/>
@@ -1679,7 +1772,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ihF-af-cva">
                                <rect key="frame" x="338.5" y="54" width="26.5" height="12"/>
                                <rect key="frame" x="338.5" y="74" width="26.5" height="12"/>
                                <fontDescription key="fontDescription" type="system" pointSize="10"/>
                                <color key="textColor" systemColor="systemRedColor"/>
                                <nil key="highlightedColor"/>
@@ -1687,7 +1780,6 @@
                        </subviews>
                        <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="3j6-e7-ztE" firstAttribute="top" secondItem="buq-PS-h5p" secondAttribute="bottom" id="3Mc-Kc-zIp"/>
                            <constraint firstItem="kQU-Pc-qqv" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="3Sz-uF-O8o"/>
                            <constraint firstItem="ihF-af-cva" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" constant="10" id="4k9-qQ-Y1T"/>
                            <constraint firstItem="hY1-Ac-Oot" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" id="9Ug-e9-Uoo"/>
@@ -1710,6 +1802,7 @@
                            <constraint firstAttribute="trailing" secondItem="ihF-af-cva" secondAttribute="trailing" constant="10" id="mtn-nO-5qu"/>
                            <constraint firstAttribute="trailing" secondItem="buq-PS-h5p" secondAttribute="trailing" id="qAj-RS-bdT"/>
                            <constraint firstItem="3j6-e7-ztE" firstAttribute="top" secondItem="kQU-Pc-qqv" secondAttribute="bottom" id="tGf-lM-bPe"/>
                            <constraint firstItem="buq-PS-h5p" firstAttribute="bottom" secondItem="kQU-Pc-qqv" secondAttribute="bottom" id="w1f-hD-qgK"/>
                            <constraint firstItem="SJH-Sa-TMv" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="xkf-hy-wp1"/>
                            <constraint firstItem="jim-qG-8NV" firstAttribute="top" secondItem="3j6-e7-ztE" secondAttribute="bottom" priority="750" id="zW5-Vq-dsE"/>
                        </constraints>
@@ -1756,6 +1849,7 @@
                        <outlet property="noVideoLabel" destination="pg3-8C-ucI" id="pWG-m9-pOS"/>
                        <outlet property="playButton" destination="Z3E-1u-wEn" id="kh9-WC-095"/>
                        <outlet property="playTimeLabel" destination="ruu-Hg-3Tx" id="wAa-dH-XNO"/>
                        <outlet property="playViewWHScale" destination="0Wa-du-utY" id="4f8-NA-Y6I"/>
                        <outlet property="playbackList" destination="jim-qG-8NV" id="dpb-Sy-z2g"/>
                        <outlet property="playerToolbox" destination="buq-PS-h5p" id="1ue-bg-0Vs"/>
                        <outlet property="playerToolboxConstraint" destination="tMQ-jL-rdi" id="STA-TC-Nan"/>
@@ -1809,7 +1903,7 @@
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MessageCell" rowHeight="75" id="St6-kz-bZE" customClass="MessageListCell">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="75"/>
                                <rect key="frame" x="0.0" y="50" width="375" height="75"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="St6-kz-bZE" id="gqt-AI-8vk">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="75"/>
@@ -1927,7 +2021,7 @@
                        <color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZSettingCell" id="Mk7-Ag-WW0">
                                <rect key="frame" x="0.0" y="49.5" width="375" height="44"/>
                                <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mk7-Ag-WW0" id="Pt3-DC-cCE">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -1947,6 +2041,8 @@
                        <outlet property="hdSwitch" destination="KBU-5V-GwK" id="lf0-8b-Qeq"/>
                        <outlet property="nVersionLabel" destination="bvq-5A-JW8" id="dqy-G7-H05"/>
                        <outlet property="nameLabel" destination="8Y3-zX-Cnw" id="w24-b8-OXa"/>
                        <outlet property="privacyMaskSwitch" destination="rv3-Sh-Gib" id="Cmw-V7-tnn"/>
                        <outlet property="rightArrowImg" destination="PR2-qZ-cVt" id="g4z-ld-DK0"/>
                        <outlet property="serialLabel" destination="9VV-np-Xv9" id="Vvo-rR-zdY"/>
                        <outlet property="updateImageView" destination="A8K-Mk-xFS" id="qqg-Hg-1rw"/>
                        <outlet property="videoSwitch" destination="eKv-yq-ycl" id="HD9-JX-sBQ"/>
@@ -1976,6 +2072,17 @@
                        <action selector="HDChanged:" destination="3ZH-14-C2h" eventType="valueChanged" id="fHK-6L-vL6"/>
                    </connections>
                </switch>
                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="rv3-Sh-Gib">
                    <rect key="frame" x="0.0" y="0.0" width="51" height="31"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                    <connections>
                        <action selector="privacyMasking:" destination="3ZH-14-C2h" eventType="valueChanged" id="X9h-ed-zD5"/>
                    </connections>
                </switch>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="hdl_ez_list_next" id="PR2-qZ-cVt">
                    <rect key="frame" x="0.0" y="0.0" width="42" height="49"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                </imageView>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="设备名" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8Y3-zX-Cnw">
                    <rect key="frame" x="0.0" y="0.0" width="72" height="21"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
@@ -2024,7 +2131,7 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入设备名称" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="r1W-d8-Rg7">
                                <rect key="frame" x="0.0" y="94" width="375" height="40"/>
                                <rect key="frame" x="0.0" y="114" width="375" height="40"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="NLX-OK-XZ7"/>
@@ -2034,7 +2141,7 @@
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xdQ-Ec-12V">
                                <rect key="frame" x="45" y="194" width="285" height="39"/>
                                <rect key="frame" x="45" y="214" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="285" id="F6x-VP-pj1"/>
                                    <constraint firstAttribute="height" constant="39" id="eMs-1w-UTL"/>
@@ -2046,7 +2153,7 @@
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="不超过50个字符" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xj6-wT-AiB">
                                <rect key="frame" x="9" y="145" width="216" height="21"/>
                                <rect key="frame" x="9" y="165" width="216" height="21"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="21" id="H5l-ew-D4h"/>
                                </constraints>
@@ -2188,7 +2295,7 @@
                                <rect key="frame" x="0.0" y="32" width="375" height="635"/>
                            </imageView>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sid-Ff-mRw">
                                <rect key="frame" x="0.0" y="44" width="375" height="211"/>
                                <rect key="frame" x="0.0" y="64" width="375" height="211"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <gestureRecognizers/>
                                <constraints>
@@ -2199,7 +2306,7 @@
                                </connections>
                            </view>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IqR-oy-XmU">
                                <rect key="frame" x="147.5" y="54" width="80" height="24"/>
                                <rect key="frame" x="147.5" y="74" width="80" height="24"/>
                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="80" id="57P-5k-0tb"/>
@@ -2210,7 +2317,7 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XID-G7-Q1F">
                                <rect key="frame" x="0.0" y="44" width="40" height="40"/>
                                <rect key="frame" x="0.0" y="64" width="40" height="40"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="40" id="AOT-6h-sls"/>
                                    <constraint firstAttribute="height" constant="40" id="JO7-Hb-1i7"/>
@@ -2222,7 +2329,7 @@
                                </connections>
                            </button>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b60-F5-UgT">
                                <rect key="frame" x="0.0" y="195" width="375" height="60"/>
                                <rect key="frame" x="0.0" y="215" width="375" height="60"/>
                                <subviews>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a6a-IS-kTU">
                                        <rect key="frame" x="0.0" y="23" width="60" height="37"/>
@@ -2311,7 +2418,7 @@
                                </constraints>
                            </view>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="es2-2O-C6T">
                                <rect key="frame" x="197.5" y="355" width="100" height="100"/>
                                <rect key="frame" x="197.5" y="375" width="100" height="100"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="100" id="ggm-qd-KNb"/>
                                    <constraint firstAttribute="width" constant="100" id="sET-Nc-aei"/>
@@ -2329,7 +2436,7 @@
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uxM-3S-gu1">
                                <rect key="frame" x="77.5" y="355" width="100" height="100"/>
                                <rect key="frame" x="77.5" y="375" width="100" height="100"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="100" id="76E-yD-MgD"/>
                                    <constraint firstAttribute="height" constant="100" id="YTu-Ca-QiC"/>
@@ -2408,7 +2515,7 @@
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4ol-dw-GX9">
                                <rect key="frame" x="45" y="260" width="285" height="39"/>
                                <rect key="frame" x="45" y="280" width="285" height="39"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="285" id="ZIE-YP-8dt"/>
                                    <constraint firstAttribute="height" constant="39" id="t3Q-fl-sHA"/>
@@ -2420,7 +2527,7 @@
                                </connections>
                            </button>
                            <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="ex5-eL-x0h">
                                <rect key="frame" x="0.0" y="80" width="375" height="150"/>
                                <rect key="frame" x="0.0" y="100" width="375" height="150"/>
                                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="150" id="azy-6S-UKf"/>
@@ -2429,10 +2536,10 @@
                                <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
                            </textView>
                            <progressView hidden="YES" opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jcN-yM-fWF">
                                <rect key="frame" x="20" y="313" width="335" height="4"/>
                                <rect key="frame" x="20" y="333" width="335" height="4"/>
                            </progressView>
                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="正在更新..." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ckd-hd-wtP">
                                <rect key="frame" x="20" y="269" width="335" height="21"/>
                                <rect key="frame" x="20" y="289" width="335" height="21"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="21" id="hMV-z6-oh2"/>
                                </constraints>
@@ -2485,8 +2592,12 @@
        <image name="chuanshujilu--2" width="24" height="24"/>
        <image name="cloud" width="32" height="32"/>
        <image name="duijiangji" width="39" height="39"/>
        <image name="hdl_ez_cat_eyes_answer" width="68" height="68"/>
        <image name="hdl_ez_cat_eyes_hang_up" width="68" height="68"/>
        <image name="hdl_ez_cat_eyes_ignore" width="68" height="68"/>
        <image name="hdl_ez_list_next" width="16" height="16"/>
        <image name="icon_download_fill" width="20" height="20"/>
        <image name="large_back_btn" width="10" height="19"/>
        <image name="large_back_btn" width="12" height="20"/>
        <image name="logo" width="210" height="94"/>
        <image name="message" width="39" height="39"/>
        <image name="no_message" width="94" height="94"/>
@@ -2504,10 +2615,10 @@
        <image name="preview_barrel" width="65" height="65"/>
        <image name="preview_barrel_dis" width="65" height="65"/>
        <image name="preview_barrel_sel" width="65" height="65"/>
        <image name="preview_enlarge" width="37" height="37"/>
        <image name="preview_enlarge_btn_sel" width="37" height="37"/>
        <image name="preview_play_btn" width="37" height="37"/>
        <image name="preview_play_btn_sel" width="37" height="37"/>
        <image name="preview_enlarge" width="20" height="20"/>
        <image name="preview_enlarge_btn_sel" width="20" height="20"/>
        <image name="preview_play_btn" width="20" height="20"/>
        <image name="preview_play_btn_sel" width="20" height="20"/>
        <image name="preview_recording" width="65" height="65"/>
        <image name="preview_recording_dis" width="65" height="65"/>
        <image name="preview_recording_sel" width="65" height="65"/>
@@ -2517,9 +2628,9 @@
        <image name="preview_talkback" width="65" height="65"/>
        <image name="preview_talkback_dis" width="65" height="65"/>
        <image name="preview_talkback_sel" width="65" height="65"/>
        <image name="preview_unvoice_btn" width="37" height="37"/>
        <image name="preview_voice_btn" width="37" height="37"/>
        <image name="preview_voice_btn_sel" width="37" height="37"/>
        <image name="preview_unvoice_btn" width="20" height="20"/>
        <image name="preview_voice_btn" width="20" height="20"/>
        <image name="preview_voice_btn_sel" width="20" height="20"/>
        <image name="ptz_bg" width="154" height="154"/>
        <image name="setup" width="39" height="39"/>
        <image name="spkImg" width="155" height="155"/>
HDL-ON_iOS/Resources/Language.ini
@@ -664,6 +664,14 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -2001,7 +2009,17 @@
676=中
677=高
678=当前用户数据已清空,即将返回上一页。
679=群控
679=组控
680=炫彩开关
681=自动炫彩测试
682=群组
683=该时间无效
684=长度超出范围
685=注:用户管理仅可对已添加用户进行管理。如需添加新用户,请前往锁端进行相关操作。
@@ -3339,6 +3357,13 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -4672,7 +4697,12 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
@@ -5994,6 +6024,15 @@
677=High 
678=Current user data has been cleared, about to return to the previous page.
679=Group control
680=Colorful switch
681=Test
682=Group
683=The time is invalid
684=Length out of range
685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png

HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png

HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png

HDL-ON_iOS/Resources/en.lproj/Localizable.strings
@@ -50,6 +50,7 @@
"device_verify_code_wrong"="Incorrect device password.";
"device_restart_talk"="Enabling two-way audio. Please wait...";
"device_save_gallery"="Saved to the albums.";
"device_save_gallery_failure"="Download failure";
"device_analogue_camera"="Analog Channel";
"device_digital_camera"="Digital Channel";
"device_lan_device_list_title"="LAN Device List";
@@ -72,7 +73,7 @@
"device_open_success"="Success to open the door!";
"device_please_input_door_password"="Input the unlock password";
"device_history"="History";
"device_his_no_more_data"="No more data";
"device_his_no_more_data"="In the end";
"device_temp_pass"="Temporary password";
"device_temp_year"=".";
"device_temp_month"=".";
@@ -107,6 +108,18 @@
"device_temp_copied"="Copied";
"device_temp_long_tap_copy"="Long press to copy";
"device_temp_sure_to_delete"="Are you sure to delete the temporary password?";
"device_callout_alert_message" = "Doorbell on call...";
"device_callout_hang_up" = "Hang up";
"device_callout_ignore" = "Ignore";
"device_callout_answer" = "Answer";
"device_full_scene_play" = "play";
"device_full_scene_pause" = "Pause";
"device_full_scene_sound" = "Sound";
"device_full_scene_sound_off" = "Sound off";
"device_full_scene_quality" = "Articulation";
"device_full_scene_exit_full" = "Exit";
"device_callout_answer" = "Answered";
"device_callout_no_answer" = "Missed";
"dmessage_title"="Message";
"message_read"="Mark as Read";
@@ -140,8 +153,15 @@
"setting_secure_code"="Encrypt Video and Picture";
"setting_cloud_storage"="Cloud Storage";
"setting_hardware_decoding" = "Hardware decoding";
"setting_privacy_masking" = "Privacy masking";
"setting_sd_card_formatting" = "SD card formatting";
"setting_formatting_alert_message" = "You are currently formatting an SD card";
"setting_opration_fail"="Operation failed.";
"setting_opration_success"="Completed.";
"setting_privacy_masking_ing"="Running, please try again later";
"setting_privacy_masking_fail"="Setup failed, please try again later";
"setting_sd_card_success"="Successful formatting";
"setting_sd_card_fail"="Formatting failed, please try again";
"setting_switching"="Switching. Please wait...";
"setting_device_security_check"="Security Authentication";
"setting_input_code_plz"="Input the device verification code (6 characters on the device label).";
@@ -223,4 +243,13 @@
"Logout"="Log Out";
//通用
"hdl_ez_common_no_data"="No Data";
"hdl_ez_common_no_data"="No Data";
"hdl_ez_download"="Download";
"hdl_ez_download_selectPhotos" = "Select a photo";
"hdl_ez_download_takePhoto" = "Take a picture";
"hdl_ez_download_selectFrAlbum" = "Select from the albums";
"hdl_ez_download_cancle"= "Cancle";
"hdl_ez_download_tip" = "Tips";
"hdl_ez_download_auth" = "Please authorize access";
"hdl_ez_download_sure" = "Sure";
"hdl_ez_download_toSet" = "Setting";
HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
@@ -50,6 +50,7 @@
"device_verify_code_wrong"="设备密码错误";
"device_restart_talk"="正在开启对讲,请稍候...";
"device_save_gallery"="已保存至手机相册";
"device_save_gallery_failure"="下载失败";
"device_analogue_camera"="模拟通道";
"device_digital_camera"="数字通道";
"device_lan_device_list_title"="局域网设备列表";
@@ -67,12 +68,24 @@
"device_account_pw_empty"="帐号或密码不能为空";
"device_lan_preview_title"="局域网预览";
"device_add_device_qr_code"="设备二维码";
"device_callout_alert_message" = "门铃呼叫中...";
"device_callout_hang_up" = "挂断";
"device_callout_ignore" = "忽略";
"device_callout_answer" = "接听";
"device_full_scene_play" = "播放";
"device_full_scene_pause" = "暂停";
"device_full_scene_sound" = "音量";
"device_full_scene_sound_off" = "静音";
"device_full_scene_quality" = "清晰度";
"device_full_scene_exit_full" = "退出全屏";
"device_callout_answer" = "已接";
"device_callout_no_answer" = "未接";
"device_open"="开门";
"device_open_success"="开门成功!";
"device_please_input_door_password"="请输入开锁密码";
"device_history"="历史记录";
"device_his_no_more_data"="没有更多数据";
"device_his_no_more_data"="到底啦";
"device_temp_pass"="临时密码";
"device_temp_year"="年";
"device_temp_month"="月";
@@ -141,8 +154,15 @@
"setting_secure_code"="视频图片加密";
"setting_cloud_storage"="云存储";
"setting_hardware_decoding" = "硬解码";
"setting_privacy_masking" = "隐私遮蔽";
"setting_sd_card_formatting" = "SD卡格式化";
"setting_formatting_alert_message" = "您当前正在格式化SD卡";
"setting_opration_fail"="操作失败";
"setting_opration_success"="操作成功";
"setting_privacy_masking_ing"="正在执行中,请稍后再试";
"setting_privacy_masking_fail"="设置失败,请稍后再试";
"setting_sd_card_success"="格式化成功";
"setting_sd_card_fail"="格式化失败,请重新再试";
"setting_switching"="正在切换,请稍候...";
"setting_device_security_check"="设备操作安全验证";
"setting_input_code_plz"="请输入该设备的设备验证码(设备标签上的6位字母)";
@@ -225,3 +245,12 @@
//通用
"hdl_ez_common_no_data"="暂无数据";
"hdl_ez_download"="下载";
"hdl_ez_download_selectPhotos" = "选取照片";
"hdl_ez_download_takePhoto" = "拍照";
"hdl_ez_download_selectFrAlbum" = "从相册选取";
"hdl_ez_download_cancle"= "取消";
"hdl_ez_download_tip" = "温馨提示";
"hdl_ez_download_auth" = "请打开访问权限";
"hdl_ez_download_sure" = "确定";
"hdl_ez_download_toSet" = "去设置";
HDL_ON/Common/ApiUtlis.cs
@@ -104,6 +104,11 @@
                code = Ins.HttpRequest.RefreshToken();
                if (code != StateCode.SUCCESS)
                {
                    if (waitPage != null)
                    {
                        waitPage.RemoveFromParent();
                        waitPage = null;
                    }
                    MainPage.Log($"刷新token失败");
                    return;
                }
@@ -112,6 +117,11 @@
                code = Ins.HttpRequest.GetHomePager();
                if (code != StateCode.SUCCESS)
                {
                    if (waitPage != null)
                    {
                        waitPage.RemoveFromParent();
                        waitPage = null;
                    }
                    MainPage.Log($"刷新住宅信息失败");
                    return;
                }
@@ -120,6 +130,11 @@
                code = Ins.HttpRequest.GetUserInfo();
                if (code != StateCode.SUCCESS)
                {
                    if (waitPage != null)
                    {
                        waitPage.RemoveFromParent();
                        waitPage = null;
                    }
                    MainPage.Log($"刷新个人信息失败");
                    return;
                }
@@ -178,7 +193,7 @@
                                FunctionList.List.ClearDatas();
                                //MainPage.Log($"============设备============开始" + FunctionList.List.Functions.Count);
                                //MainPage.Log($"读取设备信息成功");
                                //MainPage.Log($"sid列表获取====" + deviceResult.Data.ToString());
                                MainPage.Log($"sid列表获取====" + deviceResult.Data.ToString());
                                var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                if (deviceList == null)
                                {
HDL_ON/Common/HDLCommon.cs
@@ -358,6 +358,14 @@
                            eSVideoInfo.Lc_AccessToken = json["subToken"].ToString();//"子账号token
                            eSVideoInfo.DeviceSerial = json["devSerial"].ToString();//设备序列号
                            eSVideoInfo.HomeId = jpushMessageInfo.HomeId;
                            if (json.ContainsKey("msgId") && !string.IsNullOrEmpty(json["msgId"].ToString()))
                            {
                                eSVideoInfo.msgId = json["msgId"].ToString();
                            }
                            if (json.ContainsKey("currentTime") && !string.IsNullOrEmpty(json["currentTime"].ToString()))
                            {
                                eSVideoInfo.currentTime = json["currentTime"].ToString();
                            }
                        }
                        else if (interphoneTypeEnum == InterphoneType.HDL.ToString())
                        {
@@ -461,6 +469,7 @@
                case "464027401@qq.com":
                case "13580507523":
                case "15626203746":
                case "18316672920":
                    return;
            }
HDL_ON/Common/R.cs
@@ -5,8 +5,39 @@
    public static class StringId
    {
        /// <summary>
        /// 群控
        /// 注:用户管理仅可对已添加用户进行管理。如需添加新用户,请前往锁端进行相关操作。
        /// </summary>
        public const int VideoDoorlockManagerTip = 685;
        /// <summary>
        /// 长度超出范围
        /// </summary>
        public const int LengthOutOfRange = 684;
        /// <summary>
        /// 该时间无效
        /// </summary>
        public const int TimeInvalid = 683;
        //public const int
        /// <summary>
        /// 群组(跑马灯分组)
        /// </summary>
        public const int HorseRaceLampGroup = 682;
        /// <summary>
        /// 自动炫彩测试
        /// </summary>
        public const int CulorfulTest = 681;
        /// <summary>
        /// 炫彩开关
        /// </summary>
        public const int ColorfulSwitch = 680;
        /// <summary>
        /// 组控
        /// </summary>
        public const int GroupControl = 679;
        /// <summary>
HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -491,48 +491,6 @@
                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appDeviceRefresh/up")
                                {
                                    MainPage.Log("设备数据刷新通知");
                                    var deviceResult = new HttpServerRequest().GetDeviceList();
                                    if (deviceResult.Code == StateCode.SUCCESS)
                                    {
                                        MainPage.Log($"读取设备信息成功");
                                        var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                        if (deviceList == null)
                                        {
                                            deviceList = new DevcieApiPack();
                                        }
                                        string delFile = "";
                                        if (FunctionList.List.GetDeviceFunctionList().Count > 0)
                                        {
                                            for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
                                            {
                                                var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
                                                if (SPK.MusicSpkList().Contains(localFunction.spk))
                                                {
                                                    i++;
                                                    continue;
                                                }
                                                var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
                                                if (delFile == localFunction.savePath)
                                                {
                                                    i++;
                                                    continue;
                                                }
                                                delFile = localFunction.savePath;
                                                FunctionList.List.DeleteFunction(localFunction);
                                            }
                                        }
                                        //处理剩下的新增功能
                                        foreach (var newFunction in deviceList.list)
                                        {
                                            newFunction.SaveFunctionFile();
                                            FunctionList.List.IniFunctionList(newFunction.savePath);
                                        }
                                    }
                                    else
                                    {
                                        MainPage.Log($"读取云端设备数据失败:Code:{deviceResult.Code};  Msg:{deviceResult.message}");
                                    }
                                }
                                //网关密钥变化
                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/custom/mqtt/secret/change")
@@ -879,6 +837,7 @@
            //测试账号,不挤下线
            switch (UserInfo.Current.userMobileInfo)
            {
                case "18316672920":
                case "15626203746":
                case "464027401@qq.com":
                    return;
HDL_ON/DAL/Server/HttpUtil.cs
@@ -18,8 +18,8 @@
        /// 固定域名,正式环境
        /// 公共域名就近解析
        /// </summary>
        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
        const string APP_KEY = "HDL-HOME-APP-TEST";
        const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss";
        //public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm
HDL_ON/DAL/Server/NewAPI.cs
@@ -902,9 +902,9 @@
        public const string Api_Post_GetDoorlockUserList = "/home-wisdom/platform/yingshi/lock/user/list";
        /// <summary>
        /// 更改门锁用户备注名
        /// 更改门锁用户备注名
        /// </summary>
        public const string Api_Post_setDoorUserRemark = "/home-wisdom/platform/yingshi/lock/user/list";
        public const string Api_Post_setDoorUserRemark = "/home-wisdom/platform/yingshi/lock/setDoorUserRemark";
        /// <summary>
        /// 删除用户数字密码
        /// </summary>
HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
@@ -213,8 +213,14 @@
                //2.设置萤石子账号的AccessToken到SDK
                EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(mESVideoInfo.Lc_AccessToken);
                //3.打开视频播放页面
                EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(mESVideoInfo.DeviceSerial);
                string currentTimeStr = Utlis.GetTimestamp();   // 当前时间
                if (string.IsNullOrEmpty(mESVideoInfo.currentTime) && string.IsNullOrEmpty(currentTimeStr) && (long.Parse(currentTimeStr) - long.Parse(mESVideoInfo.currentTime)) > 30000) {    // 超时30s
                    EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(mESVideoInfo.DeviceSerial);
                }
                else {
                    EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(mESVideoInfo.DeviceSerial, mESVideoInfo.msgId);
                }
            }
            else if (interphoneType == InterphoneType.HDL.ToString())
            {
@@ -816,6 +822,14 @@
        /// 设备序列号
        /// </summary>
        public string DeviceSerial = string.Empty;
        /// <summary>
        /// 服务器推送时间
        /// </summary>
        public string currentTime = string.Empty;
        /// <summary>
        /// 消息id
        /// </summary>
        public string msgId = string.Empty;
        //========================HDL SIP==========================
        /// <summary>
        /// 设备sip账号 interphoneType是HDL时才会有值
HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -234,7 +234,7 @@
                //先清空呼叫和监视设备信息
                if (clearCallInfo)
                {
                    //InitCallInfo(null);
                    //InitCallInfo(null);//造成接收呼叫时开锁开锁异常
                }
                HDLSipInfo mHDLSipInfo = GetHDLSipInfo(mHDLCallVideoInfo.HomeId);
HDL_ON/Entity/DB_ResidenceData.cs
@@ -96,7 +96,7 @@
                    {
                        instance = new DB_ResidenceData();
                        instance.SaveResidenceData();
                        instance.residenceImage = "Classification/Room/Roombg.png";
                        instance.residenceImage = "Classification/Room/HomePagebg.png";
                        instance.HomeGateway = new HomeGatewayInfo()
                        {
                            homeId = "1396717478877241345",
@@ -135,7 +135,7 @@
                        instance = new DB_ResidenceData { };
                        return instance;
                    }
                    instance.residenceImage = "Classification/Room/Roombg.png";
                    instance.residenceImage = "Classification/Room/HomePagebg.png";
                    //初始化住宅功能数据
                    SpatialInfo.CurrentSpatial.InitRoomListFunctions();
HDL_ON/Entity/Function/Function.cs
@@ -803,25 +803,27 @@
            var list = new List<FunctionAttributes>();
            if (spk == SPK.GroupControl)
            {
                var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
                if (gc != null)
                lock (list)
                {
                    foreach (var temp in gc.sids)
                    var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
                    if (gc != null)
                    {
                        var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                        if (light != null)
                        foreach (var temp in gc.sids)
                        {
                            foreach (var attr in light.attributes)
                            var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                            if (light != null)
                            {
                                if (list.Find((obj) => obj.key == attr.key) == null)
                                foreach (var attr in light.attributes)
                                {
                                    list.Add(attr);
                                    if (list.Find((obj) => obj.key == attr.key) == null)
                                    {
                                        list.Add(attr);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
HDL_ON/HDL_ON.projitems
@@ -561,6 +561,7 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockFaceUnlockHelpPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockAudioSetupPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockBatteryManagementPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\2-Classification\SeriesFunctionListPage.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
        /// <summary>
        /// 版本号
        /// </summary>
        public static string VersionString = "1.8.1";
        public static string VersionString = "2.0.0";
        ///// <summary>
        ///// 客户端类型
        ///// </summary>
@@ -121,7 +121,8 @@
            SPK.AirSwitch,
            SPK.PanelSocket,SPK.ElectricSocket,
            SPK.MechanicalArm,SPK.IpCam_Imou,
            SPK.GroupControl
            SPK.GroupControl,
            SPK.AvMusic,SPK.MusicStandard
        };
HDL_ON/UI/UI0-Public/PublicAssmebly.cs
@@ -11,12 +11,16 @@
{
    public partial class PublicAssmebly
    {
        public Button btnTip;
        public int entryMaxLength = 40;
        //public Action entrylistener;
        void EditParaterEvent(Button btnConfirm, int errorId_IsNullOrEmpty, int errorId_ContainsPar, List<string> list, EditText editText, Action<string> callBackAction,
            FrameLayout contentView, Button btnLine, Button btnCancel, FrameLayout editView, Dialog dialog, int titleId)
        {
            var btnTip = new Button()
            btnTip = new Button()
            {
                X = editView.X,
                Y = editView.Bottom,
@@ -151,13 +155,14 @@
            etParater.TextChangeEventHandler = (sender, e) =>
            {
                if (etParater.Text.Length > 20)
                if (System.Text.Encoding.Default.GetBytes(etParater.Text).Length > entryMaxLength)
                {
                    etParater.Text = etParater.Text.Remove(20);
#if __ANDROID__
                    etParater.SetSelectionEnd();
#endif
                    //entrylistener?.Invoke();
                }
            };
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -157,11 +157,11 @@
                        break;
                    case SPK.MusicStandard:
                    case SPK.AvMusic:
                        //Music.A31MusicModel.Current= new Music.A31MusicModel { functionMusic = function };//当前播放器
                        //var a31PlayMusicPage = new Music.A31PlayMusicPage();
                        //MainPage.BasePageView.AddChidren(a31PlayMusicPage);
                        //a31PlayMusicPage.Show();
                        //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        Music.A31MusicModel.Current = new Music.A31MusicModel { functionMusic = function };//当前播放器
                        var a31PlayMusicPage = new Music.A31PlayMusicPage();
                        MainPage.BasePageView.AddChidren(a31PlayMusicPage);
                        a31PlayMusicPage.Show();
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        break;
                    case SPK.LightCCT:
                        var TureView = new ColorTureLampPage(function);
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -312,7 +312,6 @@
                    //etAccount.Text = "13143792049";
                    etAccount.Text = "18688414428";//天河3楼
                    //etAccount.Text = "18244942707";
                    //etAccount.Text = "12345678904";
                    //etAccount.Text = "13418062953";
                    etAccount.Text = "13138683659";
                    //etAccount.Text = "15217626103";
@@ -320,12 +319,13 @@
                    //etAccount.Text = "18321091245";
                    //etAccount.Text = "13751916353";
                    etAccount.Text = "13549566666";
                    etAccount.Text = "18316672920";
                    etAccount.Text = "support7@hdlautomation.com";
                    etAccount.Text = "13375012446";//测试服务器
                    etAccount.Text = "15855403939";
                    etAccount.Text = "15006564444";
                    etAccount.Text = "13580507523";
                    //etAccount.Text = "12345678904";//2.0 测试  萤石
                    etAccount.Text = "18316672920";
                }
                else
                {
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -70,19 +70,20 @@
        /// <summary>
        /// 切换显示功能类型区域
        /// </summary>
        FrameLayout changeView;
        /// <summary>
        /// 切换显示设备功能按钮
        /// </summary>
        Button btnChangeFunction;
        /// <summary>
        /// 切换显示场景功能按钮
        /// </summary>
        Button btnChangeScene;
        /// <summary>
        /// 切换显示场组控按钮
        /// </summary>
        Button btnChangeGroupControl;
        FrameLayout changeBaseView;
        //FrameLayout changeView;
        ///// <summary>
        ///// 切换显示设备功能按钮
        ///// </summary>
        //Button btnChangeFunction;
        ///// <summary>
        ///// 切换显示场景功能按钮
        ///// </summary>
        //Button btnChangeScene;
        ///// <summary>
        ///// 切换显示场组控按钮
        ///// </summary>
        //Button btnChangeGroupControl;
        /// <summary>
        /// 功能显示区域
        /// </summary>
@@ -116,11 +117,11 @@
#endregion
#region 报警信息
        Button btnMsgBg;
        Button btnMsgTime;
        Button btnMsg;
        //Button btnMsgBg;
        //Button btnMsgTime;
        //Button btnMsg;
        Button btnMsgIcon;
#endregion
        #endregion
        public HomePage()
        {
@@ -164,14 +165,14 @@
                };
                topView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(216),
                    Height = Application.GetRealHeight(113),//216),
                    BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                };
                bodyView.AddChidren(topView);
#else
                VerticalRefreshLayout refreshLayout = new VerticalRefreshLayout()
                {
                    Height = Application.GetRealHeight(216),
                    Height = Application.GetRealHeight(113),//216),
                    BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                };
                bodyView.AddChidren(refreshLayout);
@@ -184,7 +185,7 @@
                };
                topView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(216),
                    Height = Application.GetRealHeight(113),//216),
                };
                refreshLayout.AddChidren(topView);
#endif
@@ -508,57 +509,57 @@
#region msg
                FrameLayout msgView;
                msgView = new FrameLayout()
                {
                    Y = Application.GetRealHeight(164),
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealHeight(28),
                };
                topView.AddChidren(msgView);
                //FrameLayout msgView;
                //msgView = new FrameLayout()
                //{
                //    Y = Application.GetRealHeight(164),
                //    Gravity = Gravity.CenterHorizontal,
                //    Width = Application.GetRealWidth(343),
                //    Height = Application.GetRealHeight(28),
                //};
                //topView.AddChidren(msgView);
                btnMsgBg = new Button()
                {
                    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
                    Alpha = 0.4f,
                };
                msgView.AddChidren(btnMsgBg);
                //btnMsgBg = new Button()
                //{
                //    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
                //    Alpha = 0.4f,
                //};
                //msgView.AddChidren(btnMsgBg);
                btnMsgIcon = new Button()
                {
                    X = Application.GetRealWidth(12),
                    Gravity = Gravity.CenterVertical,
                    X = Application.GetRealWidth(290),
                    Y = Application.GetRealHeight(35),
                    Width = Application.GetMinRealAverage(24),
                    Height = Application.GetMinRealAverage(24),
                    UnSelectedImagePath = "Collection/MsgIcon.png",
                    SelectedImagePath = "Collection/MsgIconTip.png",
                };
                msgView.AddChidren(btnMsgIcon);
                topView.AddChidren(btnMsgIcon);
                btnMsg = new Button()
                {
                    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
                    Width = Application.GetRealWidth(240),
                    Text = "...",
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                msgView.AddChidren(btnMsg);
                //btnMsg = new Button()
                //{
                //    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
                //    Width = Application.GetRealWidth(240),
                //    Text = "...",
                //    TextColor = CSS_Color.MainBackgroundColor,
                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                //    TextAlignment = TextAlignment.CenterLeft,
                //};
                //msgView.AddChidren(btnMsg);
                btnMsgTime = new Button()
                {
                    X = Application.GetRealWidth(299),
                    Width = Application.GetRealWidth(44),
                    Text = "00:00",
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                msgView.AddChidren(btnMsgTime);
                //btnMsgTime = new Button()
                //{
                //    X = Application.GetRealWidth(299),
                //    Width = Application.GetRealWidth(44),
                //    Text = "00:00",
                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                //    TextAlignment = TextAlignment.CenterLeft,
                //};
                //msgView.AddChidren(btnMsgTime);
                LoadEvent_GotoMessageCenterPage();
@@ -570,134 +571,12 @@
                bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
                if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                {
                    changeView = new FrameLayout()
                    {
                        //Y = Application.GetRealHeight(20) + topView.Bottom,
                        Gravity = Gravity.CenterHorizontal,
                        Width = Application.GetRealWidth(334),
                        Height = Application.GetRealHeight(62),
                        BackgroundImagePath = "Collection/ChangeViewbg.png",
                    };
                    bodyView.AddChidren(changeView);
                loadNavView();
                    btnChangeFunction = new Button()
                    {
                        X = Application.GetRealWidth(10),
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Functions,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.HeadlineFontSize,
                        TextAlignment = TextAlignment.Center,
                        IsSelected = true,
                        IsBold = true,
                    };
                    changeView.AddChidren(btnChangeFunction);
                    Button btnLine = new Button()
                    {
                        X = btnChangeFunction.Right,
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetRealWidth(1),
                        Height = Application.GetRealHeight(14),
                        BackgroundColor = CSS_Color.PromptingColor1,
                    };
                    changeView.AddChidren(btnLine);
                    btnChangeScene = new Button()
                    {
                        X = btnLine.Right,
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Scenes,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.TextFontSize,
                        TextAlignment = TextAlignment.Center,
                    };
                    changeView.AddChidren(btnChangeScene);
                    Button btnLine2 = new Button()
                    {
                        X = btnChangeScene.Right,
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetRealWidth(1),
                        Height = Application.GetRealHeight(14),
                        BackgroundColor = CSS_Color.PromptingColor1,
                    };
                    changeView.AddChidren(btnLine2);
                    btnChangeGroupControl = new Button()
                    {
                        X = btnLine2.Right,
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.GroupControl,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.TextFontSize,
                        TextAlignment = TextAlignment.Center,
                    };
                    changeView.AddChidren(btnChangeGroupControl);
                }
                else
                {
                    changeView = new FrameLayout()
                    {
                        //Y = Application.GetRealHeight(20) + topView.Bottom,
                        Gravity = Gravity.CenterHorizontal,
                        Width = Application.GetRealWidth(230),
                        Height = Application.GetRealHeight(62),
                        BackgroundImagePath = "Collection/ChangeViewbg.png",
                    };
                    bodyView.AddChidren(changeView);
                    btnChangeFunction = new Button()
                    {
                        X = Application.GetRealWidth(10),
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Functions,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.HeadlineFontSize,
                        TextAlignment = TextAlignment.Center,
                        IsSelected = true,
                        IsBold = true,
                    };
                    changeView.AddChidren(btnChangeFunction);
                    Button btnLine = new Button()
                    {
                        X = btnChangeFunction.Right,
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetRealWidth(1),
                        Height = Application.GetRealHeight(14),
                        BackgroundColor = CSS_Color.PromptingColor1,
                    };
                    changeView.AddChidren(btnLine);
                    btnChangeScene = new Button()
                    {
                        X = btnLine.Right,
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Scenes,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.TextFontSize,
                        TextAlignment = TextAlignment.Center,
                    };
                    changeView.AddChidren(btnChangeScene);
                }
                #endregion
                #region ContextView
                contentView = new PageLayout()
                {
                    //Y = changeView.Bottom,
                    Height = Application.GetRealHeight(310 + 30 + 10), //20为超出部分
                    IsShowPoint = false,
                };
                bodyView.AddChidren(contentView);
                functionViews = new List<FrameLayout>();
@@ -712,6 +591,295 @@
        }
        void loadNavView()
        {
            if(changeBaseView == null)
            {
                changeBaseView = new FrameLayout()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Height = Application.GetRealHeight(62),
                };
                bodyView.AddChidren(changeBaseView);
            }
            else
            {
                changeBaseView.RemoveAll();
            }
            if (contentView == null)
            {
                contentView = new PageLayout()
                {
                    Height = Application.GetRealHeight(310 + 30 + 10 + 100), //20为超出部分
                    IsShowPoint = false,
                };
                bodyView.AddChidren(contentView);
            }
            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl && FunctionList.List.groupControls.Count > 0)
            {
                var changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(334),
                    Height = Application.GetRealHeight(62),
                    BackgroundImagePath = "Collection/ChangeViewbg.png",
                };
                changeBaseView.AddChidren(changeView);
                var btnChangeFunction = new Button()
                {
                    X = Application.GetRealWidth(10),
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Functions,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.HeadlineFontSize,
                    TextAlignment = TextAlignment.Center,
                    IsSelected = true,
                    IsBold = true,
                };
                changeView.AddChidren(btnChangeFunction);
                Button btnLine = new Button()
                {
                    X = btnChangeFunction.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(1),
                    Height = Application.GetRealHeight(14),
                    BackgroundColor = CSS_Color.PromptingColor1,
                };
                changeView.AddChidren(btnLine);
                var btnChangeScene = new Button()
                {
                    X = btnLine.Right,
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Scenes,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeScene);
                Button btnLine2 = new Button()
                {
                    X = btnChangeScene.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(1),
                    Height = Application.GetRealHeight(14),
                    BackgroundColor = CSS_Color.PromptingColor1,
                };
                changeView.AddChidren(btnLine2);
                var btnChangeGroupControl = new Button()
                {
                    X = btnLine2.Right,
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.GroupControl,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeGroupControl);
                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsBold = false;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    btnChangeGroupControl.IsSelected = true;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeGroupControl.IsBold = true;
                    CurShowTypeContent = 2;
                    contentView.PageIndex = 2;
                };
                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) => {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 2)
                    {
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsBold = false;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = true;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeGroupControl.IsBold = true;
                    }
                };
            }
            else
            {
                var changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(230),
                    Height = Application.GetRealHeight(62),
                    BackgroundImagePath = "Collection/ChangeViewbg.png",
                };
                changeBaseView.AddChidren(changeView);
                var btnChangeFunction = new Button()
                {
                    X = Application.GetRealWidth(10),
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Functions,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.HeadlineFontSize,
                    TextAlignment = TextAlignment.Center,
                    IsSelected = true,
                    IsBold = true,
                };
                changeView.AddChidren(btnChangeFunction);
                Button btnLine = new Button()
                {
                    X = btnChangeFunction.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(1),
                    Height = Application.GetRealHeight(14),
                    BackgroundColor = CSS_Color.PromptingColor1,
                };
                changeView.AddChidren(btnLine);
                var btnChangeScene = new Button()
                {
                    X = btnLine.Right,
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Scenes,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeScene);
                btnChangeFunction.MouseUpEventHandler = (sender, e) =>
                {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) =>
                {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                    }
                };
            }
            contentView.PageIndex = CurShowTypeContent;
        }
        /// <summary>
        /// 加载内容区域
        /// </summary>
@@ -736,8 +904,10 @@
                        {
                            if (contentView == null)
                            {
                                waitPage.Hide();
                                return;
                            }
                            loadNavView();
                            contentView.RemoveAll();
                            deviceFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(deviceFunctionView);
@@ -745,7 +915,6 @@
                            sceneFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(sceneFunctionView);
                            LoadSceneFunctionControlZone();
                            contentView.PageIndex = CurShowTypeContent;
                            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                            {
                                gcFunctionView = new VerticalScrolViewLayout();
@@ -759,6 +928,7 @@
                            GetUnreadPushMessages();
                            RegisterGetPushMessageAction();
                            contentView.PageIndex = CurShowTypeContent;
                            if (waitPage != null)
                            {
                                waitPage.RemoveFromParent();
@@ -819,11 +989,11 @@
                foreach (var function in list)
                {
                    //音乐模块有主从关系,需要特殊处理
                    if (SPK.MusicSpkList().Contains( function.spk))
                    {
                        continue;
                    }
                    else
                    //if (SPK.MusicSpkList().Contains( function.spk))
                    //{
                    //    continue;
                    //}
                    //else
                    {
                        if (!function.collect)
                            continue;
@@ -917,6 +1087,7 @@
        /// </summary>
        void LoadGroupControlFunctionControlZone()
        {
            #region ContextView
            gcFunctionView.RemoveAll();
            functionViews.Clear();
@@ -964,7 +1135,7 @@
                if (index == 0)
                {
                    var view = new FrameLayout();
                    deviceFunctionView.AddChidren(view);
                    gcFunctionView.AddChidren(view);
                    var btnNoCollectionBg = new Button()
                    {
@@ -1284,7 +1455,7 @@
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Music/MusicOnIcon.png";
                    btnCollection.Visible = false;
                    //btnCollection.Visible = false;
                    Button btnPower;
                    btnPower = new Button()
                    {
@@ -1431,7 +1602,7 @@
                btnName.MouseUpEventHandler = skipControlPageEvent;
                btnIcon.MouseUpEventHandler = skipControlPageEvent;
                btnState.MouseUpEventHandler = skipControlPageEvent;
                //不需要更新状态的动能列表
                //不需要更新状态的功能列表
                if(!SPK.NotStatusSpkList.Contains(function.spk) || function.spk != SPK.IpCam_Imou)
                {
                    UpdataFunctionStates(function);
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -238,6 +238,25 @@
        }
        /// <summary>
        /// 更新功能组控主页
        /// </summary>
        public static void RefreshGroupControlView()
        {
            if (bodyView != null)
            {
                if (FunctionList.List.groupControls.Count == 0)
                {
                    bodyView.loadNavView();
                    bodyView.contentView.PageIndex = 0;
                }
                bodyView.LoadGroupControlFunctionControlZone();
            }
        }
        /// <summary>
        /// 更新连接状态图标
        /// </summary>
        void CheckLinkStatus()
@@ -325,137 +344,9 @@
        /// </summary>
        void LoadEvent_ChangeShowedFunctionType()
        {
            btnChangeFunction.MouseUpEventHandler = (sender, e) =>
            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl && FunctionList.List.groupControls.Count>0)
            {
                btnChangeFunction.IsSelected = true;
                btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                btnChangeFunction.IsBold = true;
                btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                btnChangeScene.IsSelected = false;
                btnChangeScene.IsBold = false;
                CurShowTypeContent = 0;
                contentView.PageIndex = 0;
            };
            btnChangeScene.MouseUpEventHandler = (sender, e) =>
            {
                btnChangeScene.IsSelected = true;
                btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                btnChangeScene.IsBold = true;
                btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                btnChangeFunction.IsSelected = false;
                btnChangeFunction.IsBold = false;
                CurShowTypeContent = 1;
                contentView.PageIndex = 1;
            };
            contentView.PageChange = (sender, e) =>
            {
                if (contentView.PageIndex == 0)
                {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                }
                else if (contentView.PageIndex == 1)
                {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                }
            };
            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
            {
                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsBold = false;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    btnChangeGroupControl.IsSelected = true;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeGroupControl.IsBold = true;
                    CurShowTypeContent = 2;
                    contentView.PageIndex = 2;
                };
                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) => {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 2)
                    {
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsBold = false;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = true;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeGroupControl.IsBold = true;
                    }
                };
            }
        }
@@ -699,6 +590,11 @@
                    //    }
                    //    Control.Ins.SendWriteCommand(function, d);
                    //}
                    else if (function.spk == SPK.GroupControl)
                    {
                        d.Add("on_off", function.trait_on_off.curValue.ToString());
                        (function as GroupControl).Control(d);
                    }
                    else
                    {
                        d.Add("on_off", function.trait_on_off.curValue.ToString());
@@ -888,9 +784,9 @@
                skipPage.LoadPage(backAction);
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            btnMsgBg.MouseUpEventHandler = eventHandler;
            btnMsgTime.MouseUpEventHandler = eventHandler;
            btnMsg.MouseUpEventHandler = eventHandler;
            //btnMsgBg.MouseUpEventHandler = eventHandler;
            //btnMsgTime.MouseUpEventHandler = eventHandler;
            //btnMsg.MouseUpEventHandler = eventHandler;
            btnMsgIcon.MouseUpEventHandler = eventHandler;
        }
@@ -975,8 +871,8 @@
        void ShowMesBtnState(PushMessageInfo pushMessageInfo, bool allRead)
        {
            if (bodyView == null) return;
            btnMsg.Text = pushMessageInfo.messageTitle + ": " + pushMessageInfo.messageContent;
            btnMsgTime.Text = GetUnixToDateTime(pushMessageInfo.createTime);
            //btnMsg.Text = pushMessageInfo.messageTitle + ": " + pushMessageInfo.messageContent;
            //btnMsgTime.Text = GetUnixToDateTime(pushMessageInfo.createTime);
            btnMsgIcon.IsSelected = !allRead;
        }
@@ -986,8 +882,8 @@
        void ResetMesBtnRead()
        {
            if (bodyView == null) return;
            btnMsg.Text = "...";
            btnMsgTime.Text = "00:00";
            //btnMsg.Text = "...";
            //btnMsgTime.Text = "00:00";
            btnMsgIcon.IsSelected = false;
        }
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -672,7 +672,7 @@
                {
                    case ShowFunction.Series:
                        functionCount = FunctionList.List.GetSeries().Count;
                        functionOnCount = FunctionList.List.GetSeries().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                        //functionOnCount = FunctionList.List.GetSeries().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                        break;
                    case ShowFunction.IpCam:
                        functionCount = FunctionList.List.GetIpCamImouList().Count;
@@ -844,21 +844,29 @@
                        TextAlignment = TextAlignment.CenterLeft,
                        Text = "/" + functionCount,
                    };
                    functionView.AddChidren(btnFunctionCount);
                    Button btnOpenCount = new Button()
                    if (item == ShowFunction.Series)
                    {
                        X = Application.GetRealWidth(16),
                        Y = btnName.Bottom,
                        Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
                        Height = Application.GetRealHeight(24),
                        TextColor = CSS_Color.MainColor,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        TextAlignment = TextAlignment.CenterLeft,
                        Text = functionOnCount.ToString(),
                        Tag = item + "_onCount",
                        BorderWidth = 0,
                    };
                    functionView.AddChidren(btnOpenCount);
                        btnFunctionCount.Text = functionCount.ToString();
                    }
                    functionView.AddChidren(btnFunctionCount);
                    if (item != ShowFunction.Series)
                    {
                        Button btnOpenCount = new Button()
                        {
                            X = Application.GetRealWidth(16),
                            Y = btnName.Bottom,
                            Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
                            Height = Application.GetRealHeight(24),
                            TextColor = CSS_Color.MainColor,
                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                            TextAlignment = TextAlignment.CenterLeft,
                            Text = functionOnCount.ToString(),
                            Tag = item + "_onCount",
                            BorderWidth = 0,
                        };
                        functionView.AddChidren(btnOpenCount);
                    }
                }
@@ -876,6 +884,12 @@
                    case ShowFunction.Series:
                        btnName.TextID = StringId.HorseRaceLamp;
                        functionPageTitleId = StringId.HorseRaceLamp;
                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) => {
                            var page2 = new UI2.Classification.SeriesFunctionListPage();
                            MainPage.BasePageView.AddChidren(page2);
                            page2.LoadPage();
                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        };
                        break;
                    case ShowFunction.Light:
                        #region Light
@@ -1196,8 +1210,9 @@
                    && item != ShowFunction.SecurityMonitoring
                    && item != ShowFunction.DoorLock
                    && ShowFunction.EnergyMonitoring != item
                    && ShowFunction.VideoIntercom != item &&
                    ShowFunction.SecurityCenter != item
                    && ShowFunction.VideoIntercom != item
                    && ShowFunction.SecurityCenter != item
                    && ShowFunction.Series != item
                    && ShowFunction.Acst != item)
                {
                    btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
@@ -1437,13 +1452,13 @@
                    Inverter.Ins.H5Page.JSToNativeAction = (dictionary) =>
                    {
                        //var jObj = dictionary;
                        //JObject jObj = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(dictionary));
#if __IOS__
                        JObject jObj = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(dictionary));
#else
                        var valuePairs = "";
                        dictionary.TryGetValue("method", out valuePairs);
                        JObject jObj = JObject.Parse(valuePairs);
#endif
                        if (!jObj.ContainsKey("method") || !jObj.ContainsKey("data"))
                        {
@@ -1496,7 +1511,7 @@
            s1View.Height = s2View.Height = functionContentView.Height = functionContentViewHeight + Application.GetRealWidth(40);
            #endregion
#endregion
        }
       
HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -164,7 +164,7 @@
            if (titleId == StringId.Lights)
            {
                functionList.AddRange(FunctionList.List.groupControls);
                //functionList.AddRange(FunctionList.List.groupControls);
                functionList.AddRange(FunctionList.List.GetLightList());
            }
            else if(titleId == StringId.HorseRaceLamp)
HDL_ON/UI/UI2/2-Classification/RoomPage.cs
@@ -1,5 +1,6 @@

using System;
using System.Collections.Generic;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
@@ -89,6 +90,7 @@
            var list = room.GetRoomFunctions(false);
            foreach (var function in list)
            {
                if (MainPage.RoomNotSupportFunctionList.Contains(function.spk))
HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs
New file
@@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI.UI2.Classification
{
    /// <summary>
    /// 跑马灯页面
    /// 序列页面
    /// </summary>
    public class SeriesFunctionListPage : FrameLayout
    {
        FrameLayout bodyView;
        public SeriesFunctionListPage()
        {
            bodyView = this;
        }
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.HorseRaceLamp)).LoadTopView();
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            var functionListView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(603 - 12),
            };
            bodyView.AddChidren(functionListView);
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Hide();
            Dictionary<string, List<Button>> dicGroupButtons = new Dictionary<string, List<Button>>();
            List<string> oidList = new List<string>();
            foreach(var rgb in FunctionList.List.GetLightList())
            {
                //if(rgb.spk == SPK.LightRGB)
                {
                    var oid = rgb.sid.Substring(0, 16);
                    if (oidList.Contains(oid))
                    {
                        continue;
                    }
                    var seriesList = FunctionList.List.GetSeries().FindAll((obj) => obj.sid.StartsWith(oid));
                    if (seriesList.Count == 0)
                    {
                        continue;
                    }
                    oidList.Add(oid);
                    var list = new List<Function>();
                    List<Button> groupButtons = new List<Button>();
                    list.AddRange(seriesList);
                    var groupView = new VerticalScrolViewLayout()
                    {
                        Height = Application.GetRealHeight(44 + 51 * list.Count),
                        BackgroundColor = CSS_Color.MainBackgroundColor,
                        ScrollEnabled = false,
                    };
                    functionListView.AddChidren(groupView);
                    #region title
                    var titleView = new FrameLayout()
                    {
                        Height = Application.GetRealHeight(44),
                    };
                    groupView.AddChidren(titleView);
                    var btnTitle = new Button()
                    {
                        X = Application.GetRealWidth(16),
                        TextSize = CSS_FontSize.SubheadingFontSize,
                        TextAlignment = TextAlignment.CenterLeft,
                        TextColor = CSS_Color.MainColor,
                        Text =Language.StringByID( StringId.HorseRaceLampGroup )+ " "+ oidList.Count.ToString(),
                    };
                    if(Language.CurrentLanguage == "Chinese")
                    {
                        btnTitle.Text = Language.StringByID(StringId.HorseRaceLampGroup) + oidList.Count.ToString();
                    }
                    titleView.AddChidren(btnTitle);
                    #endregion
                    foreach (var series in list)
                    {
                        groupView.AddChidren(new Button
                        {
                            Height = 1,
                            BackgroundColor = CSS_Color.DividingLineColor,
                        });
                        var rgbColorfulView = new FrameLayout()
                        {
                            Height = Application.GetRealHeight(50),
                        };
                        groupView.AddChidren(rgbColorfulView);
                        var btnRgbColorfulTitle = new Button()
                        {
                            X = Application.GetRealWidth(16),
                            TextAlignment = TextAlignment.CenterLeft,
                            TextSize = CSS_FontSize.TextFontSize,
                            TextColor = CSS_Color.FirstLevelTitleColor,
                            Text = series.name == rgb.name ? Language.StringByID(StringId.AutomaticColoring) : series.name,
                        };
                        rgbColorfulView.AddChidren(btnRgbColorfulTitle);
                        var btnColorfulSwitch = new Button()
                        {
                            X = Application.GetRealWidth(320),
                            Gravity = Gravity.CenterVertical,
                            Width = Application.GetMinRealAverage(48),
                            Height = Application.GetMinRealAverage(36),
                            UnSelectedImagePath = "Public/Switch.png",
                            SelectedImagePath = "Public/SwitchOn.png",
                            Tag = series.sid,
                        };
                        rgbColorfulView.AddChidren(btnColorfulSwitch);
                        groupButtons.Add(btnColorfulSwitch);
                        btnColorfulSwitch.MouseUpEventHandler = (sener, e) => {
                            btnColorfulSwitch.IsSelected = !btnColorfulSwitch.IsSelected;
                            var state = btnColorfulSwitch.IsSelected ? "on" : "off";
                            waitPage.Start("");
                            new System.Threading.Thread(() =>
                            {
                                try
                                {
                                    var d = new Dictionary<string, string>();
                                    d.Add("on_off", state);
                                    DriverLayer.Control.Ins.SendWriteCommand(series, d);
                                    if (state == "on")
                                    {
                                        Application.RunOnMainThread(() =>
                                        {
                                            List<Button> updataList = new List<Button>();
                                            dicGroupButtons.TryGetValue(((Button)sener).Tag.ToString().Substring(0, 16), out updataList);
                                            foreach (var updataTemp in updataList)
                                            {
                                                updataTemp.IsSelected = false;
                                            }
                                            btnColorfulSwitch.IsSelected = true;
                                        });
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log($"序列控制异常:{ex.Message}");
                                }
                                finally
                                {
                                    Application.RunOnMainThread(() => {
                                        waitPage.Hide();
                                    });
                                }
                            })
                            { IsBackground = true }.Start();
                        };
                    }
                    Console.WriteLine("oid: " + oid);
                    dicGroupButtons.TryAdd(oid, groupButtons);
                    functionListView.AddChidren(new Button
                    {
                        Height = Application.GetRealHeight(8),
                        BackgroundColor = CSS_Color.DividingLineColor,
                    });
                }
            }
        }
    }
}
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -1112,7 +1112,8 @@
                                        string on_off = GetKeyValue("on_off", dicList);
                                        string brightness = GetKeyValue("brightness", dicList);
                                        string cct = GetKeyValue(FunctionAttributeKey.CCT, dicList);
                                        string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
                                        //自动化组控 炫彩功能
                                        //string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
                                        string rgb = GetKeyValue("rgb", dicList);
@@ -1138,19 +1139,18 @@
                                            stateStr += "," + Language.StringByID(StringId.ColorTemperature) + cct + "k";
                                        }
                                        if (!string.IsNullOrEmpty(colorful))
                                        {
                                            stateStr += "," + Language.StringByID(StringId.ColorfulFunction);
                                            if (colorful == "on")
                                            {
                                                stateStr += Language.StringByID(StringId.onLogic);
                                            }
                                            else if (colorful == "off")
                                            {
                                                stateStr += Language.StringByID(StringId.offLogic);
                                            }
                                        }
                                        //if (!string.IsNullOrEmpty(colorful))
                                        //{
                                        //    stateStr += "," + Language.StringByID(StringId.ColorfulFunction);
                                        //    if (colorful == "on")
                                        //    {
                                        //        stateStr += Language.StringByID(StringId.onLogic);
                                        //    }
                                        //    else if (colorful == "off")
                                        //    {
                                        //        stateStr += Language.StringByID(StringId.offLogic);
                                        //    }
                                        //}
                                        if (!string.IsNullOrEmpty(rgb) && rgb.Length > 6)
                                        {
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
@@ -548,10 +548,21 @@
            var perColorful = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
            if(perColorful != null)
            {
                if(perColorful.value == "on")
                if (perColorful.value == "on")
                {
                    sceneFunctionInfo += " " + Language.StringByID(StringId.HorseRaceLamp);
                }
                else
                    sceneFunctionInfo = Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
                {
                    if (sceneFunction.localFunction.spk == SPK.GroupControl)
                    {
                        sceneFunctionInfo += " " + Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
                    }
                    else
                    {
                        sceneFunctionInfo = Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
                    }
                }
            }
            return sceneFunctionInfo;
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
@@ -1905,13 +1905,13 @@
            if (sceneFunction.localFunction.spk == SPK.LightRGB || sceneFunction.localFunction.spk == SPK.GroupControl)
            {
                var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
                if (colorfulStatus != null)
                {
                    isColorful = true;
                    LoadColorfulRow(colorfulStatus);
                    isColorful = colorfulStatus.value == "on";
                }
                //var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
                //if (colorfulStatus != null)
                //{
                //    isColorful = true;
                //    LoadColorfulRow(colorfulStatus);
                //    isColorful = colorfulStatus.value == "on";
                //}
            }
            foreach (var attr in sceneFunction.status)
            {
@@ -1982,7 +1982,18 @@
            btnConfrim.MouseUpEventHandler = (sender, e) =>
            {
                if (sceneFunction.localFunction.spk == SPK.GroupControl) { }
                if (sceneFunction.localFunction.spk == SPK.GroupControl) {
                    var colorBegin = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulBegin);
                    if (colorBegin != null)
                    {
                        sceneFunction.status.Remove(colorBegin);
                    }
                    var colorEnd = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulEnd);
                    if (colorEnd != null)
                    {
                        sceneFunction.status.Remove(colorEnd);
                    }
                }
                else
                {
                    if (isOnStatus)
@@ -2053,6 +2064,7 @@
        void UpdataFunctionRow()
        {
            contentView.RemoveAll();
            for (var i =0;i< functionRowList.Count; i++)
            {
                try
@@ -2064,6 +2076,11 @@
                        {
                            if (view.Tag != null)
                            {
                                if (view.Tag.ToString() == FunctionAttributeKey.OnOff)
                                {
                                    contentView.AddChidren(view);
                                }
                                if (isOnStatus)
                                {
                                    if (view.Tag.ToString() != FunctionAttributeKey.OnOff)
@@ -3183,7 +3200,33 @@
        /// <param name="btn"></param>
        void LoadEditDialog_CCT(SceneFunctionStatus trait, Button btn)
        {
            if (trait.min == 0)
            {
                switch (trait.key)
                {
                    case FunctionAttributeKey.SetTemp:
                        trait.min = 16;
                        break;
                    case FunctionAttributeKey.CCT:
                        trait.min = 2700;
                        break;
                }
            }
            if (trait.max == 0)
            {
                switch (trait.key)
                {
                    case FunctionAttributeKey.SetTemp:
                        trait.max = 30;
                        break;
                    case FunctionAttributeKey.CCT:
                        trait.max = 6500;
                        break;
                }
            }
            double temp = trait.min;
            double.TryParse(trait.value, out temp);
            trait.value = temp.ToString();
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
@@ -92,7 +92,7 @@
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            if (isAdd)
            {
                new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView();
                new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView();
            }
            else
            {
@@ -115,7 +115,8 @@
                                        {
                                            if (pack.Code == StateCode.SUCCESS)
                                            {
                                                FunctionList.List.groupControls.Remove(groupControl);
                                                var delTemp = FunctionList.List.groupControls.Find((obj) => groupControl.sid == obj.sid);
                                                FunctionList.List.groupControls.Remove(delTemp);
                                                //list.Remove(groupControl);
                                                this.RemoveFromParent();
                                                delAction?.Invoke();
@@ -478,13 +479,15 @@
                    {
                        try
                        {
                            var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl);
                            //没有更新数据则直接退出
                            if (newEditDataString == editDataString)
                            {
                                this.RemoveFromParent();
                                return;
                            }
                            //var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl);
                            //var newEditDataString1 = Newtonsoft.Json.JsonConvert.SerializeObject(groupControlLightList);
                            //var newEditDataString2 = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl.sids);
                            ////没有更新数据则直接退出
                            //if (newEditDataString == editDataString && newEditDataString1 == newEditDataString2)
                            //{
                            //    this.RemoveFromParent();
                            //    return;
                            //}
                            groupControl.sids.Clear();
                            foreach (var light in groupControlLightList)
                            {
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs
@@ -21,14 +21,16 @@
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView_AddIcon("CombinedDimming",
                (s,c)=>{
            new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView_AddIcon("CombinedDimming",
                (s, c) =>
                {
                    try
                    {
                        var page = new AddGroupControlPage(null,
                            (newGC)=> {
                            (newGC) =>
                            {
                                ReadGroupControlList();
                            },()=> { });
                            }, () => { });
                        MainPage.BasePageView.AddChidren(page);
                        page.LoadPage();
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -49,7 +51,7 @@
            #region 
            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) });
            #endregion
@@ -60,7 +62,8 @@
        private void ReadGroupControlList()
        {
            new System.Threading.Thread(() => {
            new System.Threading.Thread(() =>
            {
                var pack = ApiUtlis.Ins.HttpRequest.GetGroupControlList();
                if (pack != null)
                {
@@ -68,10 +71,12 @@
                    {
                        try
                        {
                            var groupControlList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
                            FunctionList.List.groupControls.Clear();
                            FunctionList.List.groupControls = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
                            Application.RunOnMainThread(() =>
                            {
                                LoadGroupControlView(groupControlList);
                                LoadGroupControlView();
                            });
                        }
                        catch (Exception ex)
@@ -90,185 +95,171 @@
        }
        private void LoadGroupControlView(List<GroupControl> list)
        private void LoadGroupControlView()
        {
#if DEBUG
            if (list.Count == 0)
            contentView.RemoveAll();
            foreach (var groupControl in FunctionList.List.groupControls)
            {
                list.Add(new GroupControl()
                var functionRow = new RowLayout()
                {
                    name = "组合调光1",
                    roomIds = new List<string> {},
                    sid = "00000000000000001",
                    type = "light",
                });
                    Height = Application.GetRealHeight(65),
                    BackgroundColor = CSS_Color.MainBackgroundColor,
                    LineColor = 0x00000000
                };
                contentView.AddChidren(functionRow);
                list.Add(new GroupControl()
                var btnRight = new Button()
                {
                    name = "组合调光2",
                    roomIds = new List<string> { },//Room.CurrentSpatial.RoomList[0].roomId
                    sid = "00000000000000002",
                    type = "light",
                });
            }
                    X = Application.GetRealWidth(339),
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetMinRealAverage(16),
                    Height = Application.GetMinRealAverage(16),
                    UnSelectedImagePath = "Public/Right.png",
                };
                functionRow.AddChidren(btnRight);
#endif
            if (list.Count == 0)
            {
            }
            else
            {
                contentView.RemoveAll();
                foreach (var groupControl in list)
                var btnFunctionName = new Button()
                {
                    var functionRow = new RowLayout()
                    X = Application.GetRealWidth(16),
                    Y = Application.GetRealHeight(10),
                    Width = Application.GetRealWidth(308),
                    Height = Application.GetRealHeight(24),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    Text = groupControl.name,
                };
                functionRow.AddChidren(btnFunctionName);
                var btnFunctionLocationInfo = new Button()
                {
                    X = Application.GetRealWidth(16),
                    Y = btnFunctionName.Bottom,
                    Width = Application.GetRealWidth(308),
                    Height = Application.GetRealHeight(21),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextColor = CSS_Color.PromptingColor1,
                    Text = groupControl.GetRoomListName(),
                };
                functionRow.AddChidren(btnFunctionLocationInfo);
                functionRow.AddChidren(
                    new Button()
                    {
                        Height = Application.GetRealHeight(65),
                        BackgroundColor = CSS_Color.MainBackgroundColor,
                        LineColor = 0x00000000
                    };
                    contentView.AddChidren(functionRow);
                        Gravity = Gravity.CenterHorizontal,
                        Y = Application.GetRealHeight(64),
                        Height = Application.GetRealHeight(1),
                        Width = Application.GetRealWidth(343),
                        BackgroundColor = CSS_Color.DividingLineColor,
                    });
                    var btnRight = new Button()
                    {
                        X = Application.GetRealWidth(339),
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetMinRealAverage(16),
                        Height = Application.GetMinRealAverage(16),
                        UnSelectedImagePath = "Public/Right.png",
                    };
                    functionRow.AddChidren(btnRight);
                    var btnFunctionName = new Button()
                    {
                        X = Application.GetRealWidth(16),
                        Y = Application.GetRealHeight(10),
                        Width = Application.GetRealWidth(308),
                        Height = Application.GetRealHeight(24),
                        TextAlignment = TextAlignment.CenterLeft,
                        TextSize = CSS_FontSize.SubheadingFontSize,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        Text = groupControl.name,
                    };
                    functionRow.AddChidren(btnFunctionName);
                    var btnFunctionLocationInfo = new Button()
                    {
                        X = Application.GetRealWidth(16),
                        Y = btnFunctionName.Bottom,
                        Width = Application.GetRealWidth(308),
                        Height = Application.GetRealHeight(21),
                        TextAlignment = TextAlignment.CenterLeft,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        TextColor = CSS_Color.PromptingColor1,
                        Text = groupControl.GetRoomListName(),
                    };
                    functionRow.AddChidren(btnFunctionLocationInfo);
                    functionRow.AddChidren(
                        new Button()
                        {
                            Gravity = Gravity.CenterHorizontal,
                            Y = Application.GetRealHeight(64),
                            Height = Application.GetRealHeight(1),
                            Width = Application.GetRealWidth(343),
                            BackgroundColor = CSS_Color.DividingLineColor,
                        });
                    EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                        var page = new AddGroupControlPage(groupControl,
                           (newGC) => {
                               try
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    var page = new AddGroupControlPage(groupControl,
                       (newGC) =>
                       {
                           try
                           {
                               if (newGC != null)
                               {
                                   if (newGC != null)
                                   Application.RunOnMainThread(() =>
                                   {
                                       Application.RunOnMainThread(() =>
                                       {
                                           groupControl.roomIds = newGC.uids;
                                           btnFunctionLocationInfo.Text = newGC.GetUidListName();
                                       });
                                   }
                               }catch(Exception ex)
                               {
                                   MainPage.Log($"刷新群控房间信息异常:{ex.Message}");
                               }
                           },()=> {
                               LoadGroupControlView(FunctionList.List.groupControls);
                           });
                        MainPage.BasePageView.AddChidren(page);
                        page.LoadPage();
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    };
                    functionRow.MouseUpEventHandler = eventHandler;
                    btnRight.MouseUpEventHandler = eventHandler;
                    btnFunctionName.MouseUpEventHandler = eventHandler;
                    btnFunctionLocationInfo.MouseUpEventHandler = eventHandler;
                                           //groupControl.roomIds = newGC.roomIds;
                                           //groupControl.uids = newGC.uids;
                                           var localTemp = FunctionList.List.groupControls.Find((obj) => obj.deviceId == newGC.deviceId);
                                       localTemp.roomIds = newGC.roomIds;
                                       localTemp.uids = newGC.uids;
                                       localTemp.sids = newGC.sids;
                    var btnDelGroupControl = new Button()
                                           btnFunctionLocationInfo.Text = newGC.GetUidListName();
                                   });
                               }
                           }
                           catch (Exception ex)
                           {
                               MainPage.Log($"刷新群控房间信息异常:{ex.Message}");
                           }
                       }, () =>
                       {
                           LoadGroupControlView();
                       });
                    MainPage.BasePageView.AddChidren(page);
                    page.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                functionRow.MouseUpEventHandler = eventHandler;
                btnRight.MouseUpEventHandler = eventHandler;
                btnFunctionName.MouseUpEventHandler = eventHandler;
                btnFunctionLocationInfo.MouseUpEventHandler = eventHandler;
                var btnDelGroupControl = new Button()
                {
                    TextColor = CSS_Color.MainBackgroundColor,
                    BackgroundColor = CSS_Color.WarningColor,
                    TextID = StringId.Del,
                    TextAlignment = TextAlignment.Center,
                };
                functionRow.AddRightView(btnDelGroupControl);
                btnDelGroupControl.MouseUpEventHandler = (sender1, e1) =>
                {
                    var waitPage = new Loading();
                    this.AddChidren(waitPage);
                    waitPage.Start("");
                    new System.Threading.Thread(() =>
                    {
                        TextColor = CSS_Color.MainBackgroundColor,
                        BackgroundColor = CSS_Color.WarningColor,
                        TextID = StringId.Del,
                        TextAlignment = TextAlignment.Center,
                    };
                    functionRow.AddRightView(btnDelGroupControl);
                    btnDelGroupControl.MouseUpEventHandler = (sender1, e1) => {
                        var waitPage = new Loading();
                        this.AddChidren(waitPage);
                        waitPage.Start("");
                        new System.Threading.Thread(() =>
                        try
                        {
                            try
                            var pack = ApiUtlis.Ins.HttpRequest.DelGroupControl(groupControl.userDeviceGroupControlId);
                            if (pack != null)
                            {
                                var pack = ApiUtlis.Ins.HttpRequest.DelGroupControl(groupControl.userDeviceGroupControlId);
                                if (pack != null)
                                Application.RunOnMainThread(() =>
                                {
                                    Application.RunOnMainThread(() =>
                                    try
                                    {
                                        try
                                        if (pack.Code == StateCode.SUCCESS)
                                        {
                                            if (pack.Code == StateCode.SUCCESS)
                                            {
                                                list.Remove(groupControl);
                                                LoadGroupControlView(list);
                                            }
                                            else
                                            {
                                                IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                                            }
                                        }catch(Exception ex)
                                        {
                                            MainPage.Log($"刷新组控数据异常:{ex.Message}");
                                            var delTemp = FunctionList.List.groupControls.Find((obj) => groupControl.sid == obj.sid);
                                            FunctionList.List.groupControls.Remove(delTemp);
                                            LoadGroupControlView();
                                        }
                                    });
                                }
                            }catch(Exception ex)
                            {
                                MainPage.Log($"删除组控异常:{ex.Message}");
                            }
                            finally
                            {
                                Application.RunOnMainThread(() => {
                                    if (waitPage != null)
                                        else
                                        {
                                            IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        waitPage.Hide();
                                        waitPage.RemoveFromParent();
                                        waitPage = null;
                                        MainPage.Log($"刷新组控数据异常:{ex.Message}");
                                    }
                                });
                            }
                        })
                        { IsBackground = true }.Start();
                    };
                }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"删除组控异常:{ex.Message}");
                        }
                        finally
                        {
                            Application.RunOnMainThread(() =>
                            {
                                if (waitPage != null)
                                {
                                    waitPage.Hide();
                                    waitPage.RemoveFromParent();
                                    waitPage = null;
                                }
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                };
            }
        }
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -629,7 +629,7 @@
                        {
                            Y = btnResidenceManageIcon.Bottom,
                            Height = Application.GetRealHeight(29),
                            TextID = StringId.CombinedDimming,
                            TextID = StringId.GroupControl,
                            TextAlignment = TextAlignment.Center,
                            TextColor = CSS_Color.FirstLevelTitleColor,
                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs
@@ -41,6 +41,80 @@
            };
            bodyView.AddChidren(contentView);
            #region 炫彩开关
            contentView.AddChidren(new Button
            {
                Height = Application.GetRealHeight(10),
                BackgroundColor = CSS_Color.BackgroundColor,
            });
            var viewSwitch = new FrameLayout()
            {
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            contentView.AddChidren(viewSwitch);
            var btnSwitchText = new Button()
            {
                X = Application.GetRealWidth(16),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.CulorfulTest,
            };
            viewSwitch.AddChidren(btnSwitchText);
            var btnColorfulSwitch = new Button()
            {
                X = Application.GetRealWidth(314),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(48),
                Height = Application.GetMinRealAverage(36),
                UnSelectedImagePath = "Public/Switch.png",
                SelectedImagePath = "Public/SwitchOn.png",
                IsSelected = function.GetAttrState(FunctionAttributeKey.Colorful) == "on"
            };
            viewSwitch.AddChidren(btnColorfulSwitch);
            btnColorfulSwitch.MouseUpEventHandler = (sender, e) => {
                btnColorfulSwitch.IsSelected = !btnColorfulSwitch.IsSelected;
                new System.Threading.Thread(() =>
                {
                    try
                    {
                        var controlColorfulState = btnColorfulSwitch.IsSelected ? "on" : "off";
                        function.SetAttrState(FunctionAttributeKey.Colorful, controlColorfulState);
                        var d = new Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.Colorful, controlColorfulState);
                        if (controlColorfulState == "on")
                        {
                            var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
                            var sendColorString = color[0] + "," + color[1] + "," + color[2];
                            d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
                            color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
                            sendColorString = color[0] + "," + color[1] + "," + color[2];
                            d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
                            d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                        }
                        Control.Ins.SendWriteCommand(function, d);
                    }
                    catch (Exception ex)
                    {
                        MainPage.Log($"控制炫彩开关异常:{ex.Message}");
                    }
                })
                { IsBackground = true }.Start();
            };
            contentView.AddChidren(new Button
            {
                Height = Application.GetRealHeight(10),
                BackgroundColor = CSS_Color.BackgroundColor,
            });
            #endregion
            #region 起始颜色
            var startView = new FrameLayout()
            {
@@ -87,7 +161,7 @@
            btnStartColor.MouseUpEventHandler = (sender, e) => {
                Action<uint> action = (color) => {
                    btnStartColor.BackgroundColor = color;
                    function.SetAttrState(FunctionAttributeKey.ColorfulBegin, color);
                    //function.SetAttrState(FunctionAttributeKey.ColorfulBegin, color);
                };
                var rgbView = new ColorfulSettingPage(function, action,true);
                MainPage.BasePageView.AddChidren(rgbView);
@@ -197,6 +271,13 @@
            };
            workHoursView.AddChidren(btnWorkHours);
            var time = Convert.ToInt32( function.GetAttrState(FunctionAttributeKey.ColorfulTime));
            btnWorkHours.Text = time/ 360 + Language.StringByID(StringId.h);
            btnWorkHours.Text += time / 60 + Language.StringByID(StringId.m);
            btnWorkHours.Text += time % 60 + Language.StringByID(StringId.s);
            var waitPage = new Loading();
            this.AddChidren(waitPage);
@@ -211,11 +292,17 @@
                        {
                            LoadEditDialog(() =>
                            {
                                if(hour == 0 && minute == 0 && second == 0)
                                {
                                    new PublicAssmebly().TipMsg(StringId.Tip, StringId.TimeInvalid);
                                    return;
                                }
                                btnWorkHours.Text = hour + "时";
                                btnWorkHours.Text += minute + "分";
                                btnWorkHours.Text += second + "秒";
                                new System.Threading.Thread(() => {
                                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                                    var d = new Dictionary<string, string>();
                                    function.SetAttrState(FunctionAttributeKey.ColorfulTime, (hour * 360 + minute * 60 + second).ToString());
                                    d.Add(FunctionAttributeKey.ColorfulTime, (hour * 360 + minute * 60 + second).ToString());
                                    Control.Ins.SendWriteCommand(function, d);
                                }) { IsBackground = true }.Start();
@@ -235,8 +322,6 @@
            btnWorkHours.MouseUpEventHandler = eventHandler;
            workHoursView.MouseUpEventHandler = eventHandler;
            btnWorkHoursRight.MouseUpEventHandler = eventHandler;
            #endregion
HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
@@ -333,26 +333,26 @@
            btnConfrim.MouseUpEventHandler = (sender, e) =>
            {
                backAction?.Invoke(curColor) ;
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                var d = new System.Collections.Generic.Dictionary<string, string>();
                if (isSatrtColor)
                {
                    d.Add(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
                    function.SetAttrState(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
                    d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                    //var color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
                    //var sendColorString = color[0] + "," + color[1] + "," + color[2];
                    //d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
                    //d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                }
                else
                {
                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
                    d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                    //var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
                    //var sendColorString = color[0] + "," + color[1] + "," + color[2];
                    //d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
                    //d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                    d.Add(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
                    function.SetAttrState(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
                }
                //d.Add(FunctionAttributeKey.Colorful, "off");
                Control.Ins.SendWriteCommand(function, d);
                this.RemoveFromParent();
            };
HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using HDL_ON.Common;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
@@ -31,8 +33,15 @@
            }
        }
        public override void RemoveFromParent()
        {
            base.RemoveFromParent();
        }
        public void LoadPage(Button btnCollectionIcon, Button btnFunctionNameOut, Button btnFromFloorOut)
        {
            bodyView.RemoveAll();
            btnCollection_Out = btnCollectionIcon;
            btnFunctionName_Out = btnFunctionNameOut;
            btnFromFloor_Out = btnFromFloorOut;
@@ -91,9 +100,10 @@
            //};
            //回退刷新信息事件
            new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView_SettingIcon( () => {
            new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView_SettingIcon( () => {
                var page = new AddGroupControlPage(function,
                        (newGC) => {
                            try
@@ -102,9 +112,22 @@
                                {
                                    if (newGC != null)
                                    {
                                        btnFunctionName.Text = btnFunctionName_Out.Text = function.name;
                                        function.roomIds = newGC.uids;
                                        btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = newGC.GetUidListName();
                                        var localTemp = FunctionList.List.groupControls.Find((obj) => obj.deviceId == newGC.deviceId);
                                        if(localTemp!= null)
                                        {
                                            try
                                            {
                                                localTemp.sids = newGC.sids;
                                                localTemp.name = newGC.name;
                                                localTemp.roomIds = newGC.roomIds;
                                                localTemp.uids = newGC.uids;
                                            }
                                            catch { }
                                            function = newGC;
                                            btnFunctionName_Out.Text = function.name;
                                            btnFromFloor_Out.Text = function.GetRoomListName();
                                            LoadPage(btnCollection, btnFunctionName, btnFunctionName);
                                        }
                                    }
                                });
                            }
@@ -116,7 +139,7 @@
                            try
                            {
                                this.RemoveFromParent();
                                UI.HomePage.RefreshFunctionView();
                                UI.HomePage.RefreshGroupControlView();
                                UI.RoomPage.bodyView?.ReLoadPage();
                                UI.FunctionPage.bodyView?.ReLoadPage();
                            }
@@ -157,10 +180,12 @@
                        }
                    }
                    hadRGB = true;
                    hadDimming = true;
                }
                else if (temp.spk == SPK.LightCCT)
                {
                    hadCCT = true;
                    hadDimming = true;
                }
                else if (temp.spk == SPK.LightDimming)
                {
@@ -174,38 +199,17 @@
            }
            //属性设置区域
            var attrView = new VerticalScrolViewLayout()
            VerticalScrolViewLayout attrView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(52),
                Width = Application.GetRealWidth(343),
                ScrollEnabled = false,
            };
            //属性设置区域高度
            int attrViewHight = Application.GetRealHeight(18 + 22);
            controlView.AddChidren(attrView);
            attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) });
            if (hadRGB)
            {
                hadCCT = true;
                LoadRgbAttrView(hadCCT,hadColorful);
            }
            else if (hadCCT)
            {
                LoadCctAttrView(attrView);
            }
            else if (hadDimming)
            {
                LoadDimmingAttrView(attrView);
            }
            var btnSwitch = new Button()
            btnSwitch = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(466),
@@ -233,7 +237,59 @@
            };
            if (hadRGB)
            {
                LoadRgbAttrView(hadCCT,hadColorful);
            }
            else if (hadCCT)
            {
                LoadCctAttrView(attrView);
            }
            else if (hadDimming)
            {
                LoadDimmingAttrView(attrView);
            }
            else
            {
                attrView.AddChidren(new Button() { Height = Application.GetRealHeight(30) });
                var btnSwitchIcon = new Button()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Y = Application.GetRealHeight(102),
                    Width = Application.GetRealWidth(168),
                    Height = Application.GetRealWidth(288),
                    UnSelectedImagePath = "FunctionIcon/Light/RelayBg.png",
                    SelectedImagePath = "FunctionIcon/Light/RelayOnBg.png",
                    IsSelected = function.trait_on_off.curValue.ToString() == "on"
                };
                attrView.AddChidren(btnSwitchIcon);
                btnSwitchIcon.MouseUpEventHandler = (sender, e) => {
                    if (btnSwitchIcon.IsSelected)
                    {
                        btnSwitchIcon.IsSelected = btnSwitch.IsSelected = false;
                        var d = new Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.OnOff, "off");
                        function.Control(d);
                    }
                    else
                    {
                        btnSwitchIcon.IsSelected = btnSwitch.IsSelected = true;
                        var d = new Dictionary<string, string>();
                        d.Add(FunctionAttributeKey.OnOff, "on");
                        function.Control(d);
                    }
                };
                btnSwitch.MouseUpEventHandler += (sender, e) => {
                    btnSwitchIcon.IsSelected = btnSwitch.IsSelected;
                };
            }
        }
        Button btnSwitch;
        /// <summary>
        /// 加载调光属性设置控件
@@ -241,88 +297,100 @@
        /// <param name="attrView"></param>
        void LoadDimmingAttrView(VerticalScrolViewLayout attrView)
        {
            var dimmingView = new FrameLayout()
            {
                Height = Application.GetRealHeight(54 + 11)
            };
            attrView.AddChidren(dimmingView);
            #region 亮度调节
            attrView.AddChidren(new Button
            {
                Height = Application.GetRealHeight(50),
            });
            var dimmerView = new FrameLayout()
            {
                Height = Application.GetRealHeight(280)
            };
            attrView.AddChidren(dimmerView);
            var dimmerBar = new WaveSeekBarOn()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(168 - 40),
                Height = Application.GetRealHeight(288 - 16 - 16),
                BorderColor = 0x00000000,
                CornerRadius = Application.GetRealWidth(30),
                BorderWidth = 0,
                Progress = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)),
                IsProgressTextShow = false,
            };
            dimmerView.AddChidren(dimmerBar);
            var btnBrightnessText = new Button()
            {
                X = Application.GetRealWidth(35),
                Y = Application.GetRealHeight(1),
                Width = Application.GetRealWidth(224),
                Height = Application.GetRealHeight(25),
                TextAlignment = TextAlignment.CenterLeft,
                Gravity = Gravity.CenterHorizontal,
                Y = ((100 - Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100),
                Width = Application.GetRealWidth(56),
                Height = Application.GetRealWidth(46),
                UnSelectedImagePath = "FunctionIcon/Light/BrightnessBg.png",
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextID = StringId.Brightness,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                Text = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)) + "%",
            };
            btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + function.GetAttrState(FunctionAttributeKey.Brightness) + "%";
            dimmingView.AddChidren(btnBrightnessText);
            dimmerView.AddChidren(btnBrightnessText);
            var btnMinValuesText = new Button()
            {
                X = Application.GetRealWidth(35),
                Y = btnBrightnessText.Bottom,
                Width = Application.GetRealWidth(40),
                Height = Application.GetRealHeight(21),
                Text = "0%",
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            dimmingView.AddChidren(btnMinValuesText);
            var dimmerBar = new DiyImageSeekBar()
            {
                X = Application.GetRealWidth(45 + 10),
                Y = Application.GetRealHeight(11),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(54),
                SeekBarViewHeight = Application.GetRealHeight(8),
                ThumbImagePath = "Public/ThumbImage.png",
                ThumbImageHeight = Application.GetRealHeight(54),
                ProgressTextColor = CSS_Color.FirstLevelTitleColor,
                ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                ProgressBarColor = CSS_Color.AuxiliaryColor1,
                MaxValue = 100,
                SeekBarPadding = Application.GetRealWidth(20),
                IsProgressTextShow = false,
                ProgressChangeDelayTime = 0,
            };
            dimmingView.AddChidren(dimmerBar);
            dimmerBar.OnProgressChangedEvent = (sender, e) =>
            {
                btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%";
            };
            dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
            {
                btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%";
                var d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Brightness, e.ToString());
                function.Control(d);
            };
                if (e == 0 && lastBrightness != 0)
                {
                    btnSwitch.IsSelected = false;
                    lastBrightness = 0;
                }
                else
                {
                    if (lastBrightness == 0)
                        lastBrightness = e;
                    btnSwitch.IsSelected = true;
                }
                if (e == 0 || e == 100)
                {
                    var d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
                    function.Control(d);
                }
                else
                {
                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                    {
                        function.refreshTime = DateTime.Now;
                        new System.Threading.Thread(() =>
                        {
                            var d = new Dictionary<string, string>();
                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
                            function.Control(d);
                        })
                        { IsBackground = true }.Start();
                    }
                }
            var btnMaxValuesText = new Button()
            {
                X = dimmerBar.Right,
                Y = btnBrightnessText.Bottom,
                Width = Application.GetRealWidth(55),
                Height = Application.GetRealHeight(21),
                Text = "100%",
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
                btnBrightnessText.Text = dimmerBar.Progress + "%";
            };
            dimmingView.AddChidren(btnMaxValuesText);
            #endregion
            btnSwitch.MouseUpEventHandler += (sender, e) => {
                if (btnSwitch.IsSelected)
                {
                    dimmerBar.Progress = 100;
                }
                else
                {
                    dimmerBar.Progress = 0;
                }
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
                btnBrightnessText.Text = dimmerBar.Progress + "%";
            };
        }
        int lastBrightness = 0;
        /// <summary>
        /// 加载cct属性设置控件
@@ -330,6 +398,98 @@
        /// <param name="attrView"></param>
        void LoadCctAttrView(VerticalScrolViewLayout attrView)
        {
            attrView.AddChidren(new Button
            {
                Height = Application.GetRealHeight(20),
            });
            var dimmerView = new FrameLayout()
            {
                Height = Application.GetRealHeight(280)
            };
            attrView.AddChidren(dimmerView);
            var dimmerBar = new WaveSeekBarOn()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(168 - 40),
                Height = Application.GetRealHeight(288 - 16 - 16),
                BorderColor = 0x00000000,
                CornerRadius = Application.GetRealWidth(30),
                BorderWidth = 0,
                Progress = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)),
                IsProgressTextShow = false,
            };
            dimmerView.AddChidren(dimmerBar);
            var btnBrightnessText = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = ((100 - Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100),
                Width = Application.GetRealWidth(56),
                Height = Application.GetRealWidth(46),
                UnSelectedImagePath = "FunctionIcon/Light/BrightnessBg.png",
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                Text = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)) + "%",
            };
            dimmerView.AddChidren(btnBrightnessText);
            dimmerBar.OnProgressChangedEvent = (sender, e) =>
            {
                if (e == 0 && lastBrightness != 0)
                {
                    btnSwitch.IsSelected = false;
                    lastBrightness = 0;
                }
                else
                {
                    if (lastBrightness == 0)
                        lastBrightness = e;
                    btnSwitch.IsSelected = true;
                }
                if (e == 0 || e == 100)
                {
                    var d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
                    function.Control(d);
                }
                else
                {
                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                    {
                        function.refreshTime = DateTime.Now;
                        new System.Threading.Thread(() =>
                        {
                            var d = new Dictionary<string, string>();
                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
                            function.Control(d);
                        })
                        { IsBackground = true }.Start();
                    }
                }
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
                btnBrightnessText.Text = dimmerBar.Progress + "%";
            };
            btnSwitch.MouseUpEventHandler += (sender, e) => {
                if (btnSwitch.IsSelected)
                {
                    dimmerBar.Progress = 100;
                }
                else
                {
                    dimmerBar.Progress = 0;
                }
                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
                btnBrightnessText.Text = dimmerBar.Progress + "%";
            };
            //attrView.AddChidren(new Button() { Height = Application.GetRealHeight(10) });
            #region 色温
            var cctView = new FrameLayout()
            {
@@ -385,6 +545,7 @@
                Y = Application.GetRealHeight(11),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(54),
                Progress = 38,
            };
            barColorTemplatrue.MinValue = 27;
            barColorTemplatrue.MaxValue = 65;
@@ -490,6 +651,52 @@
            btnWhiteRound.Visible = false;
            framePickerBack.AddChidren(btnWhiteRound);
            //当前点击的【点】是否正确
            bool pointIsRight = false;
            //圆的半径(考虑边界,需要设置它的半径比较小一点)
            int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12);
            string rgbString = "255,255,255";
            var rgbTemp = new Light();
            colorPicker.MouseUpEventHandler = (sender2, e2) =>
            {
                var d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.RGB, rgbString);
                function.Control(d);
            };
            colorPicker.ColorChaged += (sender2, e2) =>
            {
                rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString();
                btnCurColor.BackgroundColor = (uint)(0xFF000000 + rgbTemp.GetRGBcolor(rgbString));
                var d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.RGB, rgbString);
                function.Control(d);
            };
            colorPicker.MouseDownEventHandler += (sender, e) =>
            {
                pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y);
                if (pointIsRight == false)
                {
                    //点的区域不是圆盘内
                    return;
                }
                //显示白点
                btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2;
                btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2;
                if (btnWhiteRound.Visible == false)
                {
                    btnWhiteRound.Visible = true;
                }
            };
            colorPicker.MouseMoveEventHandler += (sender, e) =>
            {
                //当鼠标点下事件处理
                colorPicker.MouseDownEventHandler(sender, e);
            };
            #region 亮度调节
            var btnBrightnessText = new Button()
            {
@@ -535,6 +742,43 @@
            };
            controlView.AddChidren(dimmerBar);
            dimmerBar.OnProgressChangedEvent = (sender, e) =>
            {
                if (e == 0 && lastBrightness != 0)
                {
                    btnSwitch.IsSelected = false;
                    lastBrightness = 0;
                }
                else
                {
                    if (lastBrightness == 0)
                        lastBrightness = e;
                    btnSwitch.IsSelected = true;
                }
                if (e == 0 || e == 100)
                {
                    var d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
                    function.Control(d);
                }
                else
                {
                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
                    {
                        function.refreshTime = DateTime.Now;
                        new System.Threading.Thread(() =>
                        {
                            var d = new Dictionary<string, string>();
                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
                            function.Control(d);
                        })
                        { IsBackground = true }.Start();
                    }
                }
            };
            var btnMaxValuesText = new Button()
            {
                X = dimmerBar.Right,
@@ -547,6 +791,17 @@
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            controlView.AddChidren(btnMaxValuesText);
            btnSwitch.MouseUpEventHandler += (sender, e) => {
                if (btnSwitch.IsSelected)
                {
                    dimmerBar.Progress = 100;
                }
                else
                {
                    dimmerBar.Progress = 0;
                }
            };
            #endregion
            int heightMore = 375 - magriHeight-20;
@@ -612,6 +867,7 @@
                };
                barColorTemplatrue.MinValue = 27;
                barColorTemplatrue.MaxValue = 65;
                barColorTemplatrue.Progress = 38;
                barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明
                barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000;
                barColorTemplatrue.SeekBarBackgroundColor = 0x00000000;
@@ -635,7 +891,7 @@
                //6500K
                var btnTempClolorMax = new Button();
                btnTempClolorMax.Y = btnTempClolorMin.Y;
                btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30);
                btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(15);
                btnTempClolorMax.Width = Application.GetRealWidth(54);
                btnTempClolorMax.Height = Application.GetRealHeight(21);
                btnTempClolorMax.Text = "6500K";
@@ -658,7 +914,7 @@
                var btnGradualChangeText = new Button()
                {
                    X = Application.GetRealWidth(35),
                    Y = Application.GetRealHeight(375 + heightMore - magriHeight),
                    Y = hadCCT ? Application.GetRealHeight(375 + heightMore - magriHeight) : Application.GetRealHeight(heightMore+10),
                    Width = Application.GetRealWidth(224),
                    Height = Application.GetRealHeight(21),
                    TextAlignment = TextAlignment.CenterLeft,
@@ -668,16 +924,17 @@
                };
                controlView.AddChidren(btnGradualChangeText);
                var btnGradualChangeMinValuesText = new Button()
                var btnColorfulEdit = new Button()
                {
                    X = Application.GetRealWidth(35),
                    Y = btnGradualChangeText.Bottom + Application.GetRealHeight(10),
                    Width = Application.GetRealWidth(22),
                    Height = Application.GetRealHeight(21),
                    UnSelectedImagePath = "Public/Edit.png",
                    Visible = false,
                };
                controlView.AddChidren(btnGradualChangeMinValuesText);
                btnGradualChangeMinValuesText.MouseUpEventHandler = (sender, e) => {
                controlView.AddChidren(btnColorfulEdit);
                btnColorfulEdit.MouseUpEventHandler = (sender, e) => {
                    var rgbView = new ColorfulInfoPage(function);
                    MainPage.BasePageView.AddChidren(rgbView);
                    rgbView.LoadPage();
@@ -686,29 +943,54 @@
                var barColorful = new FrameLayout()
                {
                    X = btnGradualChangeMinValuesText.Right + Application.GetRealWidth(15+5),
                    Y = Application.GetRealHeight(412 + heightMore - magriHeight),
                    X = btnColorfulEdit.Right + Application.GetRealWidth(15 + 5),
                    Width = Application.GetRealWidth(170),
                    //X = Application.GetRealWidth(35),
                    //Width = Application.GetRealWidth(170 + 41),
                    Y = hadCCT ? Application.GetRealHeight(412 + heightMore - magriHeight) : Application.GetRealHeight(heightMore + 50),
                    Height = Application.GetRealHeight(8),
                    BackgroundImagePath = "FunctionIcon/Light/ColorfulBar.png",
                };
                controlView.AddChidren(barColorful);
                var btnGradualChangeMaxValuesText = new Button()
                var btnColorfulSwitch = new Button()
                {
                    X = barColorful.Right + Application.GetRealWidth(8),
                    Y = btnGradualChangeText.Bottom + Application.GetRealHeight(10),
                    Width = Application.GetRealWidth(38),
                    Height = Application.GetRealHeight(24),
                    UnSelectedImagePath = "Public/Switch.png"
                    UnSelectedImagePath = "Public/Switch.png",
                    SelectedImagePath = "Public/SwitchOn.png"
                };
                controlView.AddChidren(btnGradualChangeMaxValuesText);
                controlView.AddChidren(btnColorfulSwitch);
                btnColorfulSwitch.MouseUpEventHandler = (sender, e) => {
                    btnColorfulSwitch.IsSelected = !btnColorfulSwitch.IsSelected;
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            var controlColorfulState = btnColorfulSwitch.IsSelected ? "on" : "off";
                            function.SetAttrState(FunctionAttributeKey.Colorful, controlColorfulState);
                            var d = new Dictionary<string, string>();
                            d.Add(FunctionAttributeKey.Colorful, controlColorfulState);
                            function.Control(d);
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"控制炫彩开关异常:{ex.Message}");
                        }
                    })
                    { IsBackground = true }.Start();
                };
                #endregion
            }
        }
@@ -742,5 +1024,9 @@
            return false;
        }
    }
}
HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
@@ -71,7 +71,7 @@
            #endregion
            #region   ---界面点击事件---
            playView.collectIconBtn.Visible = false;//先暂时隐藏收藏功能
            //playView.collectIconBtn.Visible = false;//先暂时隐藏收藏功能
            //收藏图标事件
            playView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -84,7 +84,7 @@
                {
                    A31MusicModel.Current.functionMusic.collect = false;
                }
                A31MusicModel.Current.functionMusic.CollectFunction();
            };
            ///切换播放模式点击事件;
            playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
@@ -194,7 +194,7 @@
            musicView.singerBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
            musicView.songNameBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
            musicView.musicNameBtn.Text = player.functionMusic.name;
            musicView.collectIconBtn.Visible = false;//先暂时隐藏收藏功能
            //musicView.collectIconBtn.Visible = false;//先暂时隐藏收藏功能
            ///收藏事件
            musicView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
            {
@@ -207,6 +207,7 @@
                {
                    player.functionMusic.collect = false;
                }
                player.functionMusic.CollectFunction();
            };
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
@@ -90,6 +90,21 @@
            bodyView.AddChidren(waitPage);
            waitPage.Start("");
            #endregion
            contentView.AddChidren(new Button()
            {
                Height = Application.GetRealHeight(8),
                BackgroundColor = CSS_Color.BackgroundColor,
            });
            var view = new VerticalScrolViewLayout()
            {
                Height = Application.GetRealHeight(300),
            };
            contentView.AddChidren(view);
            btnFaceUnlockSwitchIcon.MouseUpEventHandler = (sender, e) =>
            {
                waitPage.Start("");
@@ -110,6 +125,7 @@
                            {
                                //更新界面
                                btnFaceUnlockSwitchIcon.IsSelected = changeState;
                                loadSubView(view, faceUnlockSetup);
                            });
                        }
                        else
@@ -145,19 +161,7 @@
                })
                { IsBackground = true }.Start();
            };
            #endregion
            contentView.AddChidren(new Button()
            {
                Height = Application.GetRealHeight(8),
                BackgroundColor = CSS_Color.BackgroundColor,
            });
            var view = new VerticalScrolViewLayout()
            {
                Height = Application.GetRealHeight(300),
            };
            contentView.AddChidren(view);
            new System.Threading.Thread(() => {
                try
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
@@ -284,24 +284,27 @@
            recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png";
            recordFL.GetTextButton().TextID = StringId.lishijilu;
            //用户管理
            CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
            whiteFl.AddChidren(userManagerView);
            userManagerView.Y = heightY;
            userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
            userManagerView.AddImageView();
            userManagerView.AddTextButtonView();
            userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png";
            userManagerView.GetTextButton().TextID = StringId.UserManagement;
            if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
            {
                //用户管理
                CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
                whiteFl.AddChidren(userManagerView);
                userManagerView.Y = heightY;
                userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
                userManagerView.AddImageView();
                userManagerView.AddTextButtonView();
                userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png";
                userManagerView.GetTextButton().TextID = StringId.UserManagement;
            userManagerView.SetClickListener((fl, btnImage, btnText) => {
                var page = new VideoDoorlockUserListPage(device);
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                userManagerView.SetClickListener((fl, btnImage, btnText) =>
                {
                    var page = new VideoDoorlockUserListPage(device);
                    MainPage.BasePageView.AddChidren(page);
                    page.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
                });
            }
            #endregion
@@ -387,7 +390,29 @@
                //MainPage.BasePageView.AddChidren(historyPage);
                //historyPage.LoadPage();
                //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
                var waitPage = new Loading();
                this.AddChidren(waitPage);
                waitPage.Start("");
                new System.Threading.Thread(() =>
                {
                    try
                    {
                        Application.RunOnMainThread(() =>
                        {
                            CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
                        });
                    }catch(Exception ex)
                    {
                    }
                    finally
                    {
                        Application.RunOnMainThread(() => {
                            waitPage.Hide();
                        });
                    }
                })
                { IsBackground = true }.Start();
            });
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
@@ -12,17 +12,17 @@
        FrameLayout bodyView;
        Function device;
        /// <summary>
        /// 门铃系统音量
        /// 门锁系统音量
        /// </summary>
        int doorlockSystemSound = 0;
        DoorLockSystemSound doorLockSystemSound;
        /// <summary>
        /// 门铃音量
        /// </summary>
        int doorbelVol = 0;
        int doorbellVol = 0;
        public VideoDoorlockAudioSetupPage(Function function)
        {
            doorLockSystemSound = new DoorLockSystemSound();
            device = function;
            bodyView = this;
        }
@@ -74,7 +74,7 @@
            btnDoorlockSystemVolumeText.MouseUpEventHandler = (sender, e) =>
            {
                LoadEditDialog(StringId.DoorlockSystemVolume, 3-doorlockSystemSound, btnDoorlockSystemVolumeStateText);
                LoadEditDialog(StringId.DoorlockSystemVolume, btnDoorlockSystemVolumeStateText,true);
            };
            #endregion
@@ -124,7 +124,7 @@
            btnDoorbellVolumeText.MouseUpEventHandler = (sender, e) =>
            {
                LoadEditDialog(StringId.DoorbellVolume, doorbelVol, btnDoorbellVolumeStateText);
                LoadEditDialog(StringId.DoorbellVolume, btnDoorbellVolumeStateText,false);
            };
            #endregion
@@ -149,25 +149,21 @@
                        Application.RunOnMainThread(() =>
                        {
                            //更新界面
                            var doorLockSystemSound = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockSystemSound>(pack.Data.ToString());
                            doorLockSystemSound = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockSystemSound>(pack.Data.ToString());
                            if(doorLockSystemSound != null)
                            {
                                switch (doorLockSystemSound.sound)
                                {
                                    case 0:
                                        doorlockSystemSound = 0;
                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Mute;
                                        break;
                                    case 1:
                                        doorlockSystemSound = 1;
                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Low;
                                        break;
                                    case 2:
                                        doorlockSystemSound = 2;
                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Moderate;
                                        break;
                                    case 3:
                                        doorlockSystemSound = 3;
                                        btnDoorlockSystemVolumeStateText.TextID = StringId.High;
                                        break;
                                }
@@ -205,22 +201,22 @@
                            {
                                if (doorbellTone.volume == 0)
                                {
                                    doorbelVol = 3;
                                    doorbellVol = 0;
                                    btnDoorbellVolumeStateText.TextID = StringId.Mute;
                                }
                                else if (doorbellTone.volume > 0 && doorbellTone.volume < 35)
                                {
                                    doorbelVol = 2;
                                    doorbellVol = 1;
                                    btnDoorbellVolumeStateText.TextID = StringId.Low;
                                }
                                else if (doorbellTone.volume > 35 && doorbellTone.volume < 70)
                                {
                                    doorbelVol = 1;
                                    doorbellVol = 2;
                                    btnDoorbellVolumeStateText.TextID = StringId.Moderate;
                                }
                                else if (doorbellTone.volume > 70)
                                {
                                    doorbelVol = 0;
                                    doorbellVol = 3;
                                    btnDoorbellVolumeStateText.TextID = StringId.High;
                                }
                            }
@@ -271,10 +267,10 @@
        /// <summary>
        /// 加载功能属性数据选择弹窗
        /// </summary>
        void LoadEditDialog(int titleId, int index, Button btn)
        void LoadEditDialog(int titleId, Button btn,bool isDoorlockSystemVolume)
        {
            Button lastButton = new Button();
            var lastData = "";
            var lastText = "";
            Dialog dialog = new Dialog();
@@ -311,7 +307,7 @@
            {
                Gravity = Gravity.CenterHorizontal,
                TextAlignment = TextAlignment.Center,
                Width = Application.GetRealWidth(100),
                Width = Application.GetRealWidth(150),
                TextID = titleId,
                IsBold = true,
                TextColor = CSS_Color.FirstLevelTitleColor,
@@ -340,7 +336,7 @@
                TextID = StringId.Complete,
            };
            topView.AddChidren(btnConfrim);
            int hei = 1;
            int index = 1;
            var statusList = new List<string>
            {
                Language.StringByID(StringId.High),
@@ -353,11 +349,11 @@
            {
                var row = new FrameLayout()
                {
                    Y = Application.GetRealHeight(50 * hei),
                    Y = Application.GetRealHeight(50 * index),
                    Height = Application.GetRealHeight(50),
                };
                optionBaseView.AddChidren(row);
                if (statusList.Count > hei)
                if (statusList.Count > index)
                {
                    optionBaseView.AddChidren(new Button()
                    {
@@ -377,13 +373,76 @@
                    Height = Application.GetMinRealAverage(28),
                    UnSelectedImagePath = "Public/ChooseIcon.png",
                    SelectedImagePath = "Public/ChooseOnIcon.png",
                    Tag = index - 1,
                };
                row.AddChidren(btnChoose);
                if (index == hei - 1)
                if (isDoorlockSystemVolume) {//设置门锁系统音量
                    switch (doorLockSystemSound.sound)
                    {
                        case 0:
                            if (index == 3 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 1:
                            if (index == 2 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 2:
                            if (index == 1 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 3:
                            if (index == 0 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                    }
                }
                else//设置门铃音量
                {
                    lastButton = btnChoose;
                    btnChoose.IsSelected = true;
                    switch (doorbellVol)
                    {
                        case 0:
                            if (index == 3 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 1:
                            if (index == 2 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 2:
                            if (index == 1 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                        case 3:
                            if (index == 0 + 1)
                            {
                                lastButton = btnChoose;
                                btnChoose.IsSelected = true;
                            }
                            break;
                    }
                }
                var btnPropertyTitle = new Button()
                {
@@ -391,22 +450,24 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    Tag = hei-1,
                    Text = m
                };
                row.AddChidren(btnPropertyTitle);
                btnPropertyTitle.MouseUpEventHandler = (sender, e) => {
                    if (btnChoose.IsSelected)
                    {
                        return;
                    }
                    btnChoose.IsSelected = true;
                    if (lastButton != null)
                    {
                        lastButton.IsSelected = false;
                    }
                    lastButton = btnChoose;
                    lastData = btnPropertyTitle.Tag.ToString();
                    lastText = btnPropertyTitle.Text;
                };
                hei++;
                index++;
            }
@@ -423,13 +484,14 @@
            };
            btnConfrim.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
                if(titleId == StringId.DoorlockSystemVolume)
                var lastData = lastButton.Tag.ToString();
                if (isDoorlockSystemVolume)
                {
                    var waitPage = new Loading();
                    bodyView.AddChidren(waitPage);
                    waitPage.Start("");
                    new System.Threading.Thread(() => {
                        try
                        {
@@ -462,15 +524,19 @@
                                    switch (sound)
                                    {
                                        case 0:
                                            doorLockSystemSound.sound = 0;
                                            btn.TextID = StringId.Mute;
                                            break;
                                        case 1:
                                            doorLockSystemSound.sound = 1;
                                            btn.TextID = StringId.Low;
                                            break;
                                        case 2:
                                            doorLockSystemSound.sound = 2;
                                            btn.TextID = StringId.Moderate;
                                            break;
                                        case 3:
                                            doorLockSystemSound.sound = 3;
                                            btn.TextID = StringId.High;
                                            break;
                                    }
@@ -550,15 +616,19 @@
                                    switch (lastData)
                                    {
                                        case "0":
                                            doorbellVol = 3;
                                            btn.TextID = StringId.High;
                                            break;
                                        case "1":
                                            doorbellVol = 2;
                                            btn.TextID = StringId.Moderate;
                                            break;
                                        case "2":
                                            doorbellVol = 1;
                                            btn.TextID = StringId.Low;
                                            break;
                                        case "3":
                                            doorbellVol = 0;
                                            btn.TextID = StringId.Mute;
                                            break;
                                    }
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs
@@ -16,22 +16,92 @@
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.AudioSetup)).LoadTopView();
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.BatteryManagement)).LoadTopView();
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            var btn = new Button()
            var view1 = new FrameLayout()
            {
                Width = Application.GetRealWidth(343),
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(276),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                BackgroundImagePath = "FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png"//VideoDoorlockBatteryManagementBg
            };
            bodyView.AddChidren(view1);
            var btnTitle1 = new Button()
            {
                Width = Application.GetRealWidth(200),
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(64 + 24),
                Y = Application.GetRealHeight(16),
                IsMoreLines = true,
                TextAlignment = TextAlignment.TopLeft,
                TextSize = CSS_FontSize.TextFontSize,
                TextSize = CSS_FontSize.HeadlineFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Text = "门锁电源",
            };
            bodyView.AddChidren(btn);
            view1.AddChidren(btnTitle1);
            var btnMsg1 = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(57),
                Width = Application.GetRealWidth(213),
                Height = Application.GetRealHeight(200),
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                IsMoreLines = true,
                Text = "打开室内面板电池盖,取出锂电池进行充电。\r\n请使用 5V2A 适配器对锂电池进行充电。"
            };
            view1.AddChidren(btnMsg1);
            var view2 = new FrameLayout()
            {
                Y = Application.GetRealHeight(8) + view1.Bottom,
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Height = Application.GetRealHeight(170)
            };
            bodyView.AddChidren(view2);
            var btnTitle2 = new Button()
            {
                Width = Application.GetRealWidth(200),
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(16),
                IsMoreLines = true,
                TextAlignment = TextAlignment.TopLeft,
                TextSize = CSS_FontSize.HeadlineFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                Text = "低电量说明",
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            view2.AddChidren(btnTitle2);
            var btnMsg2 = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(57),
                Width = Application.GetRealWidth(213),
                Height = Application.GetRealHeight(110),
                TextAlignment = TextAlignment.TopLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                IsMoreLines = true,
                Text = "设备电量低时将自动关闭检测唤醒功能,人脸识别开锁为手动触发。\r\n 当电量低于极限值时,为保证应急开锁,设备将自动离线并仅支持开锁功能。"
            };
            view2.AddChidren(btnMsg2);
            if (Language.CurrentLanguage != "Chinese")
            {
                btnTitle1.Text = "Door lock power supply";
                btnMsg1.Text = "Open the indoor panel battery cover and remove the lithium battery for charging.\r\n" +
                    "Please use a 5V2A adapter to charge the lithium battery.";
                btnTitle2.Text = "Low battery description";
                btnMsg2.Text = "When the device's battery is low, the detection and wake-up function will be automatically turned off, and the facial recognition unlock will be manually triggered.\r\n" +
                    "When the battery level drops below the limit value, to ensure emergency unlocking, the device will automatically go offline and only support unlocking function.";
            }
        }
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
@@ -305,6 +305,7 @@
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextColor = CSS_Color.PromptingColor1,
                TextID = StringId.FaceUnlockNote,
                IsMoreLines = true,
            };
            automaitcTipView.AddChidren(btnAutomaitcNote);
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs
@@ -30,13 +30,28 @@
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            contentView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(667 - 70),
                Height = Application.GetRealHeight(607 - 70),
            };
            bodyView.AddChidren(contentView);
            var btnTip = new Button()
            {
                Y = Application.GetRealHeight(667 - 70),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(60),
                TextAlignment = TextAlignment.TopLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextColor = CSS_Color.TextualColor,
                TextID = StringId.VideoDoorlockManagerTip,
                IsMoreLines = true,
            };
            bodyView.AddChidren(btnTip);
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start("");
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs
@@ -18,7 +18,7 @@
        VerticalScrolViewLayout contentView;
        FrameLayout userPermissionsView;
        Button btnUserName;
        //Button btnUserName;
        Function device;
        VideoDoorlockUser doorlockUser;
@@ -48,6 +48,8 @@
            };
            bodyView.AddChidren(contentView);
            #region 用户名称
            var userNameView = new FrameLayout()
            {
@@ -75,7 +77,7 @@
            };
            userNameView.AddChidren(btnEditUserNameIcon);
            btnUserName = new Button()
            var btnUserName = new Button()
            {
                X = Application.GetRealWidth(100),
                Width = Application.GetRealWidth(230),
@@ -94,12 +96,82 @@
            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) });
            initOptionView(false);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                Action<string> callBack = (str) =>
                {
                    if (string.IsNullOrEmpty(str))
                    {
                        new Tip()
                        {
                            CloseTime = 1,
                            Text = Language.StringByID(StringId.UesrNameCannotBeEmpty),
                            Direction = AMPopTipDirection.None,
                        }.Show(bodyView);
                        return;
                    }
                    if (str == UserInfo.Current.userName)
                    {
                        return;
                    }
                    if (System.Text.Encoding.Default.GetBytes(str).Length > 20)
                    {
                        new Tip()
                        {
                            CloseTime = 1,
                            Text = Language.StringByID(StringId.LengthOutOfRange),
                            Direction = AMPopTipDirection.None,
                        }.Show(bodyView);
                        return;
                    }
                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            var resultObj = ApiUtlis.Ins.HttpRequest.EditDoorlockUserName(device.deviceId, doorlockUser.extUserId, str);
                            if (resultObj.Code == StateCode.SUCCESS)
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    btnUserName.Text = str;
                                });
                            }
                            else
                            {
                                //失败提示
                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                            }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"update user name error : {ex.Message}");
                        }
                        finally
                        {
                            Application.RunOnMainThread(() =>
                            {
                                waitPage.Hide();
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                };
                var pa = new PublicAssmebly();
                pa.entryMaxLength = 20;
                pa.LoadDialog_EditParater(StringId.ChangeName, "", callBack, StringId.UesrNameCannotBeEmpty, 0, new List<string>());
            };
            btnUserName.MouseUpEventHandler = eventHandler;
            btnEditUserNameIcon.MouseUpEventHandler = eventHandler;
            userNameView.MouseUpEventHandler = eventHandler;
        }
        void initOptionView(bool isEdit)
        {
            if(doorlockUser.faceCount == 0&&
                doorlockUser.faceCount == 0 &&
                doorlockUser.fingerCount == 0 &&
                doorlockUser.pwdCount == 0 &&
                doorlockUser.cardCount == 0)
            {
@@ -113,17 +185,17 @@
            int childrenViewHeight = Application.GetRealWidth(116);
            int permissionsViewHeight = Application.GetRealHeight(291 + 92);
            int permissionsViewHeight = Application.GetRealHeight(291 + 92 + 100);
            if (userPermissionsView!= null)
            {
                userPermissionsView.RemoveAll();
                if (isEdit)
                {
                    permissionsViewHeight = Application.GetRealHeight(391 + 50);
                    permissionsViewHeight = Application.GetRealHeight(391 + 50 + 100);
                    childrenViewHeight = Application.GetRealWidth(156);
                }
                userPermissionsView.Height = permissionsViewHeight;
                userPermissionsView.Height = permissionsViewHeight ;
            }
            else
            {
@@ -629,7 +701,7 @@
            var delUserView = new FrameLayout()
            {
                Y = unlockOptionView.Bottom,
                Height = Application.GetRealHeight(110),
                Height = Application.GetRealHeight(310),
                BackgroundColor = CSS_Color.BackgroundColor,
            };
            userPermissionsView.AddChidren(delUserView);
@@ -712,60 +784,7 @@
        /// </summary>
        void LoadEvent_EditUserName()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                Action<string> callBack = (str) =>
                {
                    if (string.IsNullOrEmpty(str))
                    {
                        new Tip()
                        {
                            CloseTime = 1,
                            Text = Language.StringByID(StringId.UesrNameCannotBeEmpty),
                            Direction = AMPopTipDirection.None,
                        }.Show(bodyView);
                        return;
                    }
                    if (str == UserInfo.Current.userName)
                    {
                        return;
                    }
                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            var resultObj = ApiUtlis.Ins.HttpRequest.EditDoorlockUserName(device.deviceId, doorlockUser.extUserId,str);
                            if (resultObj.Code == StateCode.SUCCESS)
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    btnUserName.Text = str;
                                });
                            }
                            else
                            {
                                //失败提示
                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                            }
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"update user name error : {ex.Message}");
                        }
                        finally
                        {
                            Application.RunOnMainThread(() =>
                            {
                                waitPage.Hide();
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                };
                new PublicAssmebly().LoadDialog_EditParater(StringId.ChangeName, doorlockUser.lockUserName, callBack, StringId.UesrNameCannotBeEmpty, 0, new System.Collections.Generic.List<string>());
            };
            btnUserName.MouseUpEventHandler = eventHandler;
            //btnUserName.MouseUpEventHandler = eventHandler;
        }
SiriIntents/Server/HttpUtil.cs
@@ -16,8 +16,8 @@
        /// 固定域名,正式环境
        /// 公共域名就近解析
        /// </summary>
        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
        const string APP_KEY = "HDL-HOME-APP-TEST";
        const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss";
        //public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm
SiriIntents/SiriIntents.csproj
@@ -18,7 +18,7 @@
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodesignKey>iPhone Developer</CodesignKey>
    <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <MtouchDebug>true</MtouchDebug>
    <MtouchNoSymbolStrip>true</MtouchNoSymbolStrip>
    <MtouchFastDev>true</MtouchFastDev>
@@ -28,6 +28,7 @@
    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
    <DeviceSpecificBuild>false</DeviceSpecificBuild>
    <MtouchVerbosity></MtouchVerbosity>
    <CodesignProvision>OnProSiri230605-1-Dev</CodesignProvision>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
    <DebugType>pdbonly</DebugType>
@@ -67,7 +68,7 @@
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodesignKey>iPhone Developer: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <DeviceSpecificBuild>true</DeviceSpecificBuild>
    <MtouchDebug>true</MtouchDebug>
    <MtouchNoSymbolStrip>true</MtouchNoSymbolStrip>
@@ -79,6 +80,7 @@
    <MtouchArch>ARM64</MtouchArch>
    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
    <MtouchVerbosity></MtouchVerbosity>
    <CodesignProvision>OnProSiri230630-1-Dev</CodesignProvision>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
SiriIntentsUI/SiriIntentsUI.csproj
@@ -18,7 +18,7 @@
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodesignKey>iPhone Developer</CodesignKey>
    <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <MtouchDebug>true</MtouchDebug>
    <MtouchNoSymbolStrip>true</MtouchNoSymbolStrip>
    <MtouchFastDev>true</MtouchFastDev>
@@ -29,6 +29,7 @@
    <DeviceSpecificBuild>false</DeviceSpecificBuild>
    <MtouchVerbosity></MtouchVerbosity>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <CodesignProvision>OnProSiriUI230605-1-Dev</CodesignProvision>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
    <DebugType>pdbonly</DebugType>
@@ -70,7 +71,7 @@
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodesignKey>iPhone Developer: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
    <DeviceSpecificBuild>true</DeviceSpecificBuild>
    <MtouchDebug>true</MtouchDebug>
    <MtouchNoSymbolStrip>true</MtouchNoSymbolStrip>
@@ -83,6 +84,7 @@
    <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
    <MtouchVerbosity></MtouchVerbosity>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <CodesignProvision>OnProSiriUI230630-1-Dev</CodesignProvision>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />