hxb
2021-03-05 84fa7c9665d9bed9aef79237be9c5eb57c49f13d
Merge branch 'CJL' into ez-test
1 文件已复制
126个文件已添加
42个文件已修改
1 文件已重命名
4058 ■■■■■ 已修改文件
DLL/IOS/EZSDK.IOS.dll 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Application.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/STB.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/air.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/custom.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/del.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/dvd.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/failed.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/fan.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/icon1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/icon2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/next.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/offline.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/online.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/projector.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/succeed.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/PirIcon/tv.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/libs/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/air.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/custom.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/del.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/fan.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/next.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/offline.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/online.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/projector.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/search.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/stb.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/PirIcon/tv.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/ApiUtlis.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/HDLCommon.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Mqtt/MqttClient.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewApiRes.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/DB_ResidenceData.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/DeviceFunction.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/CSS/CSS.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs 464 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DLL/IOS/EZSDK.IOS.dll
Binary files differ
HDL-ON_Android/Application.cs
@@ -57,7 +57,7 @@
            Manifest.Permission.Camera, Manifest.Permission.ProcessOutgoingCalls, Manifest.Permission.GetAccounts};
            //禁止屏幕长亮
            BaseActivity.KeepScreenON = false;
            //隐藏迪拜虚拟按键
            //隐藏虚拟按键
            BaseActivity.IsHideVirualButtons = true;
            //实现安卓返回按键
            BaseActivity.BackKeyAction = () => {
HDL-ON_Android/Assets/Language.ini
@@ -1164,6 +1164,67 @@
5047=你手机暂未安装"QQ音乐"{\r\n}请前往手机商场安装
6000=正常
6001=设备状态
6002=个
6003=当前红外遥控设备
6004=已添加遥控器
6005=空调
6006=电视
6007=风扇
6008=机顶盒
6009=DVD/EVD/VCD
6010=投影仪
6011=自定义
6012=红外遥控
6013=设备管理
6014=添加遥控器
6015=在线
6016=离线
6017=版本号
6018=请输入遥控器名称
6019=提示:遥控器创建后可在功能-电器分类{\r\n}查找使用
6020=推荐按键
6021=请输入按键名称
6022=下一步
6023=电源
6024=音量+
6025=音量-
6026=频道+
6027=频道-
6028=上
6029=下
6030=左
6031=右
6032=静音
6034=确认
6035=播放
6037=退出
6038=菜单
6039=暂停
6040=返回
6041=停止
6042=主页
6043=快进
6044=快退
6045=定时
6046=复制遥控功能
6047=对准遥控器中心按下相同按键
6048=智能遥控器
6049=添加按键
6050=*长按可进行自定义排序
6051=完成
6052=添加成功
6053=可到分类-功能-电器操作使用
6054=所属分类
6055=遥控器名称
6056=所属区域
6057=继续添加
6058=电器
6059=添加失败
6060=重试
7000=新建自动化
7001=编辑自动化
7002=如果
HDL-ON_Android/Assets/Phone/.DS_Store
Binary files differ
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png
HDL-ON_Android/Assets/Phone/PirIcon/STB.png
HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png
HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png
HDL-ON_Android/Assets/Phone/PirIcon/air.png
HDL-ON_Android/Assets/Phone/PirIcon/custom.png
HDL-ON_Android/Assets/Phone/PirIcon/del.png
HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png
HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png
HDL-ON_Android/Assets/Phone/PirIcon/dvd.png
HDL-ON_Android/Assets/Phone/PirIcon/failed.png
HDL-ON_Android/Assets/Phone/PirIcon/fan.png
HDL-ON_Android/Assets/Phone/PirIcon/icon1.png
HDL-ON_Android/Assets/Phone/PirIcon/icon2.png
HDL-ON_Android/Assets/Phone/PirIcon/next.png
HDL-ON_Android/Assets/Phone/PirIcon/offline.png
HDL-ON_Android/Assets/Phone/PirIcon/online.png
HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png
HDL-ON_Android/Assets/Phone/PirIcon/projector.png
HDL-ON_Android/Assets/Phone/PirIcon/search.png
HDL-ON_Android/Assets/Phone/PirIcon/succeed.png
HDL-ON_Android/Assets/Phone/PirIcon/tv.png
HDL-ON_Android/HDL-ON_Android.csproj
@@ -205,6 +205,8 @@
    <Folder Include="Other\" />
    <Folder Include="Other\JPush\" />
    <Folder Include="Assets\Phone\FunctionIcon\Electrical\WaterValve\" />
    <Folder Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\" />
    <Folder Include="Assets\Phone\PirIcon\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Xamarin.Android.Support.Design" Version="28.0.0.3" />
@@ -753,6 +755,58 @@
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorDoorIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorPirStateBgIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBlueIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1On.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2On.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerGrayIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1On.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2On.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIconOn.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIcon.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIconOn.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\air.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\custom.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\dvd.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\fan.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\Infraredtreasure.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\projector.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\search.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\tv.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\stb.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\offline.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\online.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\priequipment.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\addlbuton.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\del.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\delbuton.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\dropdown.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\adddevice.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\next.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\failed.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\icon1.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\icon2.png" />
    <AndroidAsset Include="Assets\Phone\PirIcon\succeed.png" />
  </ItemGroup>
  <ItemGroup>
    <AndroidNativeLibrary Include="libs\armeabi-v7a\libelianjni.so" />
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:versionCode="202102231" android:versionName="1.1.202102231" package="com.hdl.onpro">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202102252" android:versionName="1.1.202102252" package="com.hdl.onpro">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="26" />
    <!--  定位权限-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
HDL-ON_Android/libs/.DS_Store
Binary files differ
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -47,14 +47,14 @@
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <MtouchArch>ARM64</MtouchArch>
        <CodesignKey>iPhone Developer</CodesignKey>
        <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
        <MtouchDebug>true</MtouchDebug>
        <MtouchI18n>cjk</MtouchI18n>
        <MtouchLink>SdkOnly</MtouchLink>
        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
        <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
        <CodesignProvision>ComHdlOnProDevelopment20210116-2</CodesignProvision>
        <CodesignProvision>ComHdlOnProDevelopment20210225-1</CodesignProvision>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
        <DebugType>none</DebugType>
@@ -443,6 +443,7 @@
        <Folder Include="Resources\zh-Hans.lproj\" />
        <Folder Include="Resources\Phone\FunctionIcon\Electrical\WaterValve\" />
        <Folder Include="Resources\Phone\FunctionIcon\ArmSensor\" />
        <Folder Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\" />
    </ItemGroup>
    <ItemGroup>
        <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1007,6 +1008,55 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\PowerLowIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIconOn.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIconOn.png" />
      <BundleResource Include="Resources\Phone\LogicIcon\changesinoutdoor.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBlueIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerGrayIcon.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1On.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2On.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1On.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2On.png" />
      <BundleResource Include="Resources\Phone\PirIcon\fan.png" />
      <BundleResource Include="Resources\Phone\PirIcon\dvd.png" />
      <BundleResource Include="Resources\Phone\PirIcon\stb.png" />
      <BundleResource Include="Resources\Phone\PirIcon\tv.png" />
      <BundleResource Include="Resources\Phone\PirIcon\projector.png" />
      <BundleResource Include="Resources\Phone\PirIcon\air.png" />
      <BundleResource Include="Resources\Phone\PirIcon\custom.png" />
      <BundleResource Include="Resources\Phone\PirIcon\priequipment.png" />
      <BundleResource Include="Resources\Phone\PirIcon\offline.png" />
      <BundleResource Include="Resources\Phone\PirIcon\search.png" />
      <BundleResource Include="Resources\Phone\PirIcon\del.png" />
      <BundleResource Include="Resources\Phone\PirIcon\dropdown.png" />
      <BundleResource Include="Resources\Phone\PirIcon\addlbuton.png" />
      <BundleResource Include="Resources\Phone\PirIcon\delbuton.png" />
      <BundleResource Include="Resources\Phone\PirIcon\Infraredtreasure.png" />
      <BundleResource Include="Resources\Phone\PirIcon\online.png" />
      <BundleResource Include="Resources\Phone\PirIcon\adddevice.png" />
      <BundleResource Include="Resources\Phone\PirIcon\next.png" />
    </ItemGroup>
    <ItemGroup>
      <ITunesArtwork Include="iTunesArtwork" />
HDL-ON_iOS/Info.plist
@@ -102,9 +102,9 @@
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleLightContent</string>
    <key>CFBundleShortVersionString</key>
    <string>1.1.202102231</string>
    <string>1.1.202102242</string>
    <key>CFBundleVersion</key>
    <string>202102231</string>
    <string>202102242</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Use geographic location to provide services such as weather</string>
    <key>NSAppleMusicUsageDescription</key>
HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
@@ -141,6 +141,7 @@
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="vLh-9U-8RO"/>
                                </constraints>
                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
                                <connections>
@@ -165,6 +166,7 @@
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="DjM-dg-5en"/>
                                </constraints>
                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
                                <connections>
@@ -450,6 +452,7 @@
                                <constraints>
                                    <constraint firstAttribute="height" constant="34" id="FPO-BB-N1L"/>
                                </constraints>
                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
                            </textField>
@@ -912,7 +915,7 @@
    <inferredMetricsTieBreakers>
        <segue reference="9TP-S2-hhI"/>
        <segue reference="MFl-yy-ZsP"/>
        <segue reference="VYk-37-nb6"/>
        <segue reference="ikM-Zn-H8f"/>
    </inferredMetricsTieBreakers>
    <resources>
        <image name="addDevice_success" width="320" height="185"/>
HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
@@ -2025,10 +2025,11 @@
                        <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"/>
                                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="40" id="NLX-OK-XZ7"/>
                                </constraints>
                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits"/>
                            </textField>
@@ -2471,7 +2472,7 @@
    <inferredMetricsTieBreakers>
        <segue reference="Qls-Y0-o2u"/>
        <segue reference="X3Q-o5-p8V"/>
        <segue reference="q2I-Q5-CUY"/>
        <segue reference="9Tu-UR-Cms"/>
        <segue reference="vdt-wN-aOY"/>
    </inferredMetricsTieBreakers>
    <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
HDL-ON_iOS/Resources/Language.ini
@@ -402,6 +402,11 @@
417=Water Leakage
418=In Alarm
419=Normal
420=Hot Dry
421=Air Dry
422=Disinfect
423=Lighting
    
5000=Music
5001=Group
@@ -1068,6 +1073,10 @@
417=漏水
418=报警
419=正常
420=烘干
421=风干
422=消毒
423=照明
1000=室内湿度
@@ -1171,6 +1180,24 @@
5047=你手机暂未安装"QQ音乐"{\r\n}请前往手机商场安装
6000=正常
6001=设备状态
6002=个
6003=当前红外遥控设备
6004=已添加遥控器
6005=空调
6006=电视
6007=风扇
6008=机顶盒
6009=DVD/EVD/VCD
6010=投影仪
6011=自定义
6012=红外遥控
6013=设备管理
6014=添加遥控器
7000=新建自动化
7001=编辑自动化
7002=如果
HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store
Binary files differ
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store
Binary files differ
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png
HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png
HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png
HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png
HDL-ON_iOS/Resources/Phone/PirIcon/air.png
HDL-ON_iOS/Resources/Phone/PirIcon/custom.png
HDL-ON_iOS/Resources/Phone/PirIcon/del.png
HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png
HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png
HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png
HDL-ON_iOS/Resources/Phone/PirIcon/fan.png
HDL-ON_iOS/Resources/Phone/PirIcon/next.png
HDL-ON_iOS/Resources/Phone/PirIcon/offline.png
HDL-ON_iOS/Resources/Phone/PirIcon/online.png
HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png
HDL-ON_iOS/Resources/Phone/PirIcon/projector.png
HDL-ON_iOS/Resources/Phone/PirIcon/search.png
HDL-ON_iOS/Resources/Phone/PirIcon/stb.png
HDL-ON_iOS/Resources/Phone/PirIcon/tv.png
HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
@@ -23,7 +23,7 @@
"ad_restart_tip"="长按设备上的reset键10秒后松开,并等待大约30秒直到设备启动完成";
"ad_restart_done"="我已重启好";
"ad_get_device_info_msg"="正在查询设备信息,请稍后...";
"ad_already_added"="您已添加过此设备";
"ad_already_added"="此设备已被添加";
"ad_added_by_others"="此设备已被别人添加";
"get_info_fail"="查询失败,网络不给力";
"ad_input_manual"="手动输入";
HDL_ON/.DS_Store
Binary files differ
HDL_ON/Common/ApiUtlis.cs
@@ -159,6 +159,7 @@
                        {
                            deviceList = new DevcieApiPack();
                        }
                        string delFile = "";
                        if (FunctionList.List.GetDeviceFunctionList().Count > 0)
                        {
@@ -171,28 +172,37 @@
                                    continue;
                                }
                                var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
                                if (newFunction == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录
                                {
                                    FunctionList.List.DeleteFunction(localFunction);
                                }
                                else
                                {
                                    MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}");
                                    i++;
                                    //if (localFunction.modifyTime != newFunction.modifyTime)
                                //if (newFunction == null)//如果云端最新数据没有该条数据,则本地需要删掉该数据记录
                                    //{
                                    //    //可优化
                                    //    localFunction.name = newFunction.name;
                                    //    localFunction.collect = newFunction.collect;
                                    //    localFunction.modifyTime = newFunction.modifyTime;
                                    //    localFunction.roomIds = newFunction.roomIds;
                                    //    localFunction.bus = newFunction.bus;
                                    //    localFunction.SaveFunctionFile();
                                //    FunctionList.List.DeleteFunction(localFunction);
                                    //}
                                    localFunction = newFunction;
                                    localFunction.SaveFunctionFile();
                                    deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能
                                //else
                                //{
                                //    MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}");
                                //    i++;
                                //    //if (localFunction.modifyTime != newFunction.modifyTime)
                                //    //{
                                //    //    //可优化
                                //    //    localFunction.name = newFunction.name;
                                //    //    localFunction.collect = newFunction.collect;
                                //    //    localFunction.modifyTime = newFunction.modifyTime;
                                //    //    localFunction.roomIds = newFunction.roomIds;
                                //    //    localFunction.bus = newFunction.bus;
                                //    //    localFunction.SaveFunctionFile();
                                //    //}
                                //    localFunction = newFunction;
                                //    localFunction.SaveFunctionFile();
                                //    deviceList.list.Remove(newFunction);//操作完的数据清理掉,剩下的就是新增的功能
                                //}
                                if (delFile == localFunction.savePath)
                                {
                                    i++;
                                    continue;
                                }
                                delFile = localFunction.savePath;
                                FunctionList.List.DeleteFunction(localFunction);
                            }
HDL_ON/Common/HDLCommon.cs
@@ -310,6 +310,7 @@
                case "13375012446":
                case "13602944661":
                case "18778381374":
                case "18316672920":
                    return;
            }
@@ -383,7 +384,8 @@
            {
                //Dialog
                alarmPushConfirmDialog = null;
                Action backAction = () => {
                Action backAction = () =>
                {
                   
                };
                var skipPage = new MessageCenterPage();
@@ -488,5 +490,87 @@
            }
        }
        #endregion
        #region 跳转打开萤石云方法
        /// <summary>
        /// 获取子账号token并跳转设备列表页面
        /// </summary>
        /// <param name="bodyView"></param>
        public void Go2EZvizMonitor(FrameLayout bodyView)
        {
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(StringId.PleaseWait));
            new Thread(() =>
            {
                try
                {
                    //先获取萤石云子账号token
                    var result = new HttpServerRequest().EZGetChildToken();
                    if (result.Code == StateCode.SUCCESS)
                    {
                        var ezChildAccessToken = Newtonsoft.Json.JsonConvert.DeserializeObject<EZChildAccessToken>(result.Data.ToString());
                        Application.RunOnMainThread(() =>
                        {
                            if (!string.IsNullOrEmpty(ezChildAccessToken.accessToken))
                            {
#if __IOS__
                                //iOS
                                //1.设置所需河东的AccessToken和RefreshToken、域名地址
                                EZSDK.IOS.EZSDK.SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
                                EZSDK.IOS.EZSDK.SetRequestHttpsHost(OnAppConfig.Instance.RequestHttpsHost);
                                //2.设置萤石子账号的AccessToken到SDK
                                EZSDK.IOS.EZSDK.SetEZAccessToken(ezChildAccessToken.accessToken);
                                //3.打开摄像头设备列表页面
                                EZSDK.IOS.EZSDK.Go2EZvizMonitor();
#else
                                //Android
                                //1.设置所需河东的token、域名地址
                                //2.设置萤石子账号的token
                                //3.打开摄像头设备列表页面
                                ((BaseActivity)Shared.Application.Activity).SetCamera(b =>
                                {
                                    if (b)
                                    {
                                        Android.Content.Intent intent = new Android.Content.Intent();
                                        intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
                                        Shared.Application.Activity.StartActivity(intent);
                                    }
                                });
#endif
                            }
                        });
                    }
                    else
                    {
                        IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
                    }
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        #endregion
    }
}
HDL_ON/Common/R.cs
@@ -4,6 +4,10 @@
{
    public static class StringId
    {
        public const int Lightint = 433;
        public const int Disinfect = 422;
        public const int WindDry = 421;
        public const int HotDry = 420;
        public const int SensorNormalState = 419;
        public const int InAlarm = 418;
        public const int WaterLeakage = 417;
@@ -665,6 +669,69 @@
        public const int qqMsuicTip = 5047;
        public const int zhengchang = 6000;
        public const int shebeizhuangtai = 6001;
        public const int ge = 6002;
        public const int dangqianhongwaishebei = 6003;
        public const int yitianjiayaokongqi = 6004;
        public const int kongtiao = 6005;
        public const int dianshi = 6006;
        public const int fengshan = 6007;
        public const int jidinghe = 6008;
        public const int dvd = 6009;
        public const int touyingyi = 6010;
        public const int zidingyi = 6011;
        public const int hongwaiyaokong = 6012;
        public const int shebeigaunli = 6013;
        public const int tianjiayaokongqi = 6014;
        public const int zaixianhwb= 6015;
        public const int lixian = 6016;
        public const int banbenhao = 6017;
        public const int shuruyaokongqimingcheng = 6018;
        public const int fengleichazhao = 6019;
        public const int tuijiananjian = 6020;
        public const int anjianmingcheng = 6021;
        public const int xiayibu= 6022;
        public const int dianyuan = 6023;
        public const int yinliangjia = 6024;
        public const int yinliangjian = 6025;
        public const int pindaojia = 6026;
        public const int pindaojian = 6027;
        public const int shang = 6028;
        public const int xia = 6029;
        public const int zuo = 6030;
        public const int you = 6031;
        public const int jingyin = 6032;
        public const int queren = 6034;
        public const int bofang = 6035;
        public const int tuichu = 6037;
        public const int caidan = 6038;
        public const int zanting = 6039;
        public const int fanhui = 6040;
        public const int tingzhi = 6041;
        public const int zhuye = 6042;
        public const int kuaijin = 6043;
        public const int kuaitui = 6044;
        public const int dingshi = 6045;
        public const int fuzhiyaokonggongnneg = 6046;
        public const int duizhunanxiaanniu = 6047;
        public const int zhinengyaokongqi = 6048;
        public const int tianjiaanniu = 6049;
        public const int paixu = 6050;
        public const int wancheng = 6051;
        public const int tianjiachenggong = 6052;
        public const int kedaofenlei = 6053;
        public const int suoshufenlei = 6054;
        public const int yaokongqimingcheng = 6055;
        public const int suoshuquyu = 6056;
        public const int jixutianjia = 6057;
        public const int dianqi = 6058;
        public const int tianjiashibai = 6059;
        public const int chongshii = 6060;
        public const int newAutomation = 7000;
        public const int editAutomation = 7001;
        public const int ifCondition = 7002;
HDL_ON/DAL/DriverLayer/Control.cs
@@ -141,7 +141,7 @@
                    {
                        //修改主页连接状态
                        HomePage.LoadEvent_CheckLinkStatus();
                        MainPage.Log($"网关在线,刷新设备状态");
                        MainPage.Log($"网关局域网在线,刷新设备状态");
                        new System.Threading.Thread(() =>
                        {
                            System.Threading.Thread.Sleep(1000);
@@ -195,7 +195,7 @@
                        }
                        //修改主页连接状态
                        HomePage.LoadEvent_CheckLinkStatus();
                        MainPage.Log($"网关在线,刷新设备状态");
                        MainPage.Log($"网关云端在线,刷新设备状态");
                        new System.Threading.Thread(() =>
                        {
                            System.Threading.Thread.Sleep(1000);
@@ -682,7 +682,7 @@
                    }
                }
                MainPage.Log($"time 1 :{receiveObj.Topic}");
                MainPage.Log($"局域网信息: {receiveObj.Topic}");
                //验证有效数据长度
@@ -749,14 +749,6 @@
                        var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                        if (localFunction != null)
                        {
                            //var updateInfoString = $"更新设备:{localFunction.name}";
                            //foreach (var attr in updateTemp.status)
                            //{
                            //    updateInfoString += $"  key:{attr.key};value:{attr.value}";
                            //}
                            //MainPage.Log(updateInfoString);
                            //更新界面状态
                            Function localObj = null;
                            switch (localFunction.spk)
@@ -1029,6 +1021,11 @@
                                case SPK.ElectricTuyaFan:
                                case SPK.ElectricTuyaWeepRobot:
                                case SPK.ElectricTuyaWaterValve:
                                case SPK.SensorPir:
                                case SPK.SensorDoorWindow:
                                case SPK.SensorSmoke:
                                case SPK.SensorWater:
                                case SPK.ClothesHanger:
                                    //设备状态推送
                                    var myDevice = Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid,updateTemp.status);
                                    if (myDevice != null)
HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -323,6 +323,7 @@
                        RemoteMqttClient.UseConnectedHandler(async (e) =>
                        {
                            IfNeedReadAllDeviceStatus = true;
                            Control.Ins.GatewayOnline_Cloud = true;
                            Utlis.WriteLine($"============>Mqtt远程连接成功");
                            SendPushSignOut();
                        });
@@ -531,6 +532,23 @@
        static void ReceiveNotifySqueezeAsync(string mMes)
        {
            if (mMes == PushSignStr ) return;//是自己的登录推送不处理//或者当前不是远程链接状态
            //测试账号,不挤下线
            switch (UserInfo.Current.AccountString)
            {
                case "13415629083":
                case "18316120654":
                case "15622703419":
                case "18824864143":
                case "464027401@qq.com":
                case "2791308028@qq.com":
                case "13697499568":
                case "18666455392":
                case "13375012446":
                case "13602944661":
                case "18778381374":
                case "18316672920":
                    return;
            }
            if (!UserInfo.Current.IsLogin)
            {
HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2146,5 +2146,18 @@
        #endregion
        #region 萤石云SDK相关接口
        /// <summary>
        /// 河东获取萤石云子账号token的接口
        /// </summary>
        public ResponsePackNew EZGetChildToken()
        {
            Dictionary<string, object> d = new Dictionary<string, object>();
            //d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_EZ_GetChildToken, requestJson);
        }
        #endregion
    }
}
HDL_ON/DAL/Server/NewAPI.cs
@@ -469,6 +469,44 @@
        /// </summary>
        public const string Api_Post_GetBrandList = "/home-wisdom/app/product/brand/list";
        #region ■  -- 红外宝接口___________________________
        /// <summary>
        /// 红外宝设备定位
        /// </summary>
        public const string API_POST_Ir_DeviceFind = "/home-wisdom/app/device/ir/deviceFind";
        /// <summary>
        /// 红外宝下的遥控器列表
        /// </summary>
        public const string API_POST_Ir_List = ":/home-wisdom/app/device/ir/list";
        /// <summary>
        /// 遥控器红外码学习
        /// </summary>
        public const string API_POST_Ir_CodeStudy = "/home-wisdom/app/device/ir/codeStudy";
        /// <summary>
        ///红外宝红外码库试码
        /// </summary>
        public const string API_POST_Ir_CodeTest = "/home-wisdom/app/device/ir/codeTest";
        /// <summary>
        /// 红外宝遥控器添加
        /// </summary>
        public const string API_POST_Ir_Add = "/home-wisdom/app/device/ir/add";
        /// <summary>
        /// 遥控器自学按键删除
        /// </summary>
        public const string API_POST_Ir_CodeRemove = "/home-wisdom/app/device/ir/codeRemove";
        #endregion
        #endregion
        #region ■  -- 萤石SDK相关接口___________________________
        /// <summary>
        /// 河东获取萤石云子账号token的接口
        /// </summary>
        public const string API_POST_EZ_GetChildToken = "/home-wisdom/platform/childToken";
        #endregion
        #endregion
HDL_ON/DAL/Server/NewApiRes.cs
@@ -1466,6 +1466,23 @@
        public string messageType;
    }
    /// <summary>
    /// 萤石云子账号token
    /// </summary>
    [System.Serializable]
    public class EZChildAccessToken
    {
        /// <summary>
        /// token
        /// </summary>
        public string accessToken;
        /// <summary>
        ///  过期时间
        /// </summary>
        public string expireTime;
    }
    //#region 旧接口
    ///// <summary>
    ///// 
HDL_ON/Entity/DB_ResidenceData.cs
@@ -91,9 +91,9 @@
                                    ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
                                    ShowFunction.FloorHeating,ShowFunction.Music,
                                    ShowFunction.Electric,ShowFunction.Environmental,
                                    //ShowFunction.EnergyMonitoring,
                                    //ShowFunction.FreshAir,ShowFunction.DoorLock,
                                    //ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                    ShowFunction.EnergyMonitoring,
                                    ShowFunction.FreshAir,ShowFunction.DoorLock,
                                    ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                    ShowFunction.Sensor,ShowFunction.VideoIntercom
                                });
                            instance.SaveResidenceData();
HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs
New file
@@ -0,0 +1,9 @@
using System;
namespace HDL_ON.Entity
{
    public enum ClothsHangerEnum
    {
    }
}
HDL_ON/Entity/Function/DeviceFunction.cs
New file
@@ -0,0 +1,15 @@
using System;
namespace HDL_ON.Entity
{
    /// <summary>
    /// 设备功能
    /// </summary>
    public class DeviceFunction : Function
    {
        public DeviceFunction()
        {
        }
    }
}
HDL_ON/Entity/Function/Function.cs
@@ -23,6 +23,36 @@
        public string pageSize = "0";
    }
    /// <summary>
    /// 属性状态
    /// </summary>
    public class AttrState
    {
        /// <summary>
        /// 属性键名
        /// </summary>
        public string key;
        /// <summary>
        /// 属性的值列表
        /// </summary>
        public List<string> value = new List<string>();
        /// <summary>
        /// 最大值
        /// </summary>
        public int max = 100;
        /// <summary>
        /// 最小值
        /// </summary>
        public int min = 0;
        /// <summary>
        /// 数据类型
        /// </summary>
        public string data_type = "";
        /// <summary>
        /// 当前值
        /// </summary>
        public string curValue = "";
    }
    /// <summary>
    /// 功能类能满足数据使用要求,子类只是为了方便使用属性
@@ -32,6 +62,68 @@
        public Function()
        {
        }
        #region 优化区域 2021-02-25
        /// <summary>
        /// 获取属性列表
        /// </summary>
        /// <returns></returns>
        public List<string> GetAttributes()
        {
            var attrs = new List<string>();
            foreach(var attr in  attributes)
            {
                attrs.Add(attr.key);
            }
            return attrs;
        }
        /// <summary>
        /// 获取制定属性
        /// </summary>
        /// <returns></returns>
        public FunctionAttributes GetAttribute(string key)
        {
            var attr = attributes.Find((a) => a.key == key);
            return attr;
        }
        /// <summary>
        /// 获取属性状态
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetAttrState(string key)
        {
            var attrState = status.Find((s) => s.key == key.ToString());
            if(attrState == null)
            {
                return "";
            }
            return attrState.value;
        }
        /// <summary>
        /// 设置属性状态
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns>修改结果</returns>
        public bool SetAttrState(string key, string value)
        {
            var attrState = status.Find((s) => s.key == key.ToString());
            if (attrState == null)
            {
                return false;
            }
            else
            {
                attrState.value = value;
            }
            return true;
        }
        #endregion
        #region base info
        /// <summary>
@@ -55,7 +147,7 @@
        ///     09    安防
        /// 大类别    1bytes    (预留)
        /// 小类别    1byte    (预留)
        /// </summary>
        /// </summary>      “0001021599F98A04050300010000”
        public string sid = "0301011234567801012301230123";
        /// <summary>
        /// 备注
@@ -70,39 +162,6 @@
        /// 设备spk
        /// </summary>
        public string spk = "";
        ///// <summary>
        ///// 功能类别
        ///// 如:空调类、灯光类、窗帘类
        ///// </summary>
        //public FunctionCategory Spk_Prefix
        //{
        //    get
        //    {
        //        try
        //        {
        //            var _functionCategoryString = sid.Substring(16, 2);
        //            var _functionCategory = Convert.ToInt32(_functionCategoryString, 16);
        //            return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), _functionCategory);
        //        }
        //        catch (Exception ex)
        //        {
        //            MainPage.Log($"get FunctionCategory error : {ex.Message}");
        //            return FunctionCategory.UnKown;
        //        }
        //    }
        //}
        ///// <summary>
        ///// 功能类型
        ///// </summary>
        //public FunctionType spk
        //{
        //    get
        //    {
        //        var _functionTypeString = sid.Substring(16, 4);
        //        return (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16));
        //    }
        //}
        string spk_Prefix;
        /// <summary>
@@ -122,31 +181,6 @@
                return spk_Prefix;
            }
        }
        string spk_Suffix;
        ///// <summary>
        ///// spk后缀
        ///// 小类
        ///// 功能类型
        ///// </summary>
        //public string spk
        //{
        //    get
        //    {
        //        if (string.IsNullOrEmpty(spk_Suffix))
        //        {
        //            try
        //            {
        //                spk_Suffix = spk.Split(".")[1];
        //            }
        //            catch
        //            {
        //                spk_Suffix = "";
        //            }
        //        }
        //        return spk_Suffix;
        //    }
        //}
        /// <summary>
        /// A协议功能的特性
        /// 如:是AC功能:特性:on_off,mode,fan,temperature
@@ -198,12 +232,6 @@
        /// 云端数据修改的最后时间
        /// </summary>
        public string modifyTime = "";
        /// <summary>
        /// 删除标记
        /// 需要删除数据时,标记为:true
        /// 由云端删除成功之后,返回数据再清除本地数据
        /// </summary>
        public bool DeleteSign = false;
        #endregion
        /// <summary>
@@ -441,36 +469,6 @@
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 保存功能数据
        /// </summary>
        //public void SaveFunctionData(bool upSevser)
        //{
        //    if (upSevser)
        //    {
        //        new System.Threading.Thread(() =>
        //        {
        //            var pm = new HttpServerRequest();
        //            var pack = pm.UpdataDevcieInfo(this);
        //            if (pack.Code == StateCode.SUCCESS)
        //            {
        //                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
        //                FileUtlis.Files.WriteFileByBytes(savePath, ssd);
        //            }
        //            else
        //            {
        //                IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
        //            }
        //        })
        //        { IsBackground = true }.Start();
        //    }
        //    else
        //    {
        //        var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
        //        FileUtlis.Files.WriteFileByBytes(savePath, ssd);
        //    }
        //}
        /// <summary>
        /// 转换成场景功能对象
@@ -666,19 +664,6 @@
        /// 当前值
        /// </summary>
        public object curValue = new object();
        ///// <summary>
        ///// curValue的翻译值,最坏的结果也只会返回string.Empty
        ///// </summary>
        //public string realValue
        //{
        //    get
        //    {
        //        var myValue = curValue.ToString();
        //        //沙雕定义的object类型
        //        if (myValue.Contains("{") == true) { return string.Empty; }
        //        return myValue;
        //    }
        //}
    }
    /// <summary>
    /// 功能属性键名列表
@@ -738,6 +723,56 @@
        /// 状态,传感器
        /// </summary>
        public const string Status = "status";
        /// <summary>
        /// 电量状态
        /// </summary>
        public const string BatteryState = "battery_state";
        /// <summary>
        /// 烘干
        /// </summary>
        public const string HotDry = "hot_dry";
        /// <summary>
        /// 风干
        /// </summary>
        public const string WindDry = "wind_dry";
        /// <summary>
        /// 消毒
        /// </summary>
        public const string Disinfect = "disinfect";
        /// <summary>
        /// 上升下降
        /// </summary>
        public const string Position = "position";
        /// <summary>
        /// 进度
        /// </summary>
        public const string PositionPercent = "position_percent";
        /// <summary>
        /// 烘干时间
        /// </summary>
        public const string HotDryTime = "hot_dry_time";
        /// <summary>
        /// 烘干剩余时间
        /// </summary>
        public const string HotDryTimeLeft = "hot_dry_time_surplus";
        /// <summary>
        /// 风干时间
        /// </summary>
        public const string WindDryTime = "wind_dry_time";
        /// <summary>
        /// 风干剩余时间
        /// </summary>
        public const string WindDryTimeLeft = "wind_dry_time_surplus";
        /// <summary>
        /// 消毒时间
        /// </summary>
        public const string DisinfectTime = "disinfect_time";
        /// <summary>
        /// 消毒剩余时间
        /// </summary>
        public const string DisinfectTimeLeft = "disinfect_time_surplus";
        #region tuya
        /// <summary>
@@ -745,6 +780,8 @@
        /// </summary>
        public const string TuyaWaterTime = "countdown_1";
        #endregion
    }
    /// <summary>
    /// 设备功能oid
@@ -855,14 +892,6 @@
        /// </summary>
        public const string SensorTemperature = "sensor.temperature";
        /// <summary>
        /// (红外移动传感器)
        /// </summary>
        public const string SensorPir = "sensor.pir";
        /// <summary>
        /// (门窗传感器)
        /// </summary>
        public const string SensorDoorWindow = "sensor.doorwindow";
        /// <summary>
        /// (PM2.5传感器)
        /// </summary>
        public const string SensorPm25 = "sensor.pm25";
@@ -879,6 +908,14 @@
        /// </summary>
        public const string SensorHumidity = "sensor.humidity";
        /// <summary>
        /// (红外移动传感器)
        /// </summary>
        public const string SensorPir = "sensor.pir";
        /// <summary>
        /// (门窗传感器)
        /// </summary>
        public const string SensorDoorWindow = "sensor.doorwindow";
        /// <summary>
        /// 烟雾传感器
        /// </summary>
@@ -936,6 +973,10 @@
        /// 家电、涂鸦水阀
        /// </summary>
        public const string ElectricTuyaWaterValve = "electrical.koiGhMKwLf2ZP81g";
        /// <summary>
        /// 凉霸
        /// </summary>
        public const string ClothesHanger = "electrical.racks";
        /// <summary>
HDL_ON/Entity/FunctionList.cs
@@ -79,6 +79,10 @@
                {
                    waterValveList = new List<Function>();
                }
                if(clothesHangerList == null)
                {
                    clothesHangerList = new List<Function>();
                }
                var list = new List<Function>();
                list.AddRange(fans);
                list.AddRange(switchSockets);
@@ -86,6 +90,7 @@
                list.AddRange(airCleaners);
                list.AddRange(weepRobots);
                list.AddRange(waterValveList);
                list.AddRange(clothesHangerList);
                return list;
            }
        }
@@ -113,6 +118,10 @@
        /// 水阀列表
        /// </summary>
        public List<Function> waterValveList = new List<Function>();
        /// <summary>
        /// 凉霸列表
        /// </summary>
        public List<Function> clothesHangerList = new List<Function>();
        #endregion
        /// <summary>
@@ -157,14 +166,9 @@
                var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
                if (tempFunction == null)
                {
                    Common.FileUtlis.Files.DeleteFile(filePath);
                    FileUtlis.Files.DeleteFile(filePath);
                    return;
                }
                if (tempFunction.DeleteSign)
                {
                    //todo 删除云端数据 20201203--App不能删除功能数据
                }
                else
                {
                    switch (tempFunction.spk)
                    {
@@ -247,6 +251,11 @@
                            List.sensorsArm.Add(ser);
                            deviceFunctionList.Add(ser);
                            break;
                        case SPK.ClothesHanger:
                            var ch = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
                            List.clothesHangerList.Add(ch);
                            deviceFunctionList.Add(ch);
                            break;
                    }
                }
            }
@@ -328,12 +337,19 @@
            List.lights = new List<Light>();
            List.curtains = new List<Curtain>();
            List.floorHeatings = new List<FloorHeating>();
            List.tVs = new List<TV>();
            List.switchSockets = new List<SwitchSocket>();
            List.fans = new List<Fan>();
            List.sensorsEnvironmentalScience = new List<Sensor>();
            #region 家电
            List.fans = new List<Fan>();
            List.switchSockets = new List<SwitchSocket>();
            List.tVs = new List<TV>();
            List.airCleaners = new List<AirCleaner>();
            List.weepRobots = new List<WeepRobot>();
            List.waterValveList = new List<Function>();
            List.clothesHangerList = new List<Function>();
            #endregion
            List.scenes = new List<Scene>();
            List.deviceFunctionList = null;
            List.deviceFunctionList = new List<Function>();
            _FunctionList = null;
        }
@@ -554,7 +570,26 @@
                    List.tVs.Remove(List.tVs.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.ElectricFan:
                case SPK.ElectricTuyaFan:
                    List.fans.Remove(List.fans.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.ElectricTuyaAirCleaner:
                    List.airCleaners.Remove(List.airCleaners.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.ElectricTuyaWaterValve:
                    List.waterValveList.Remove(List.waterValveList.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.ElectricTuyaWeepRobot:
                    List.weepRobots.Remove(List.weepRobots.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.ClothesHanger:
                    List.clothesHangerList.Remove(List.clothesHangerList.Find((obj) => obj.deviceId == delTemp.deviceId));
                    break;
                case SPK.SensorSmoke:
                case SPK.SensorWater:
                case SPK.SensorDoorWindow:
                case SPK.SensorPir:
                    List.sensorsArm.Remove(List.sensorsArm.Find((obj)=>obj.deviceId == delTemp.deviceId));
                    break;
            }
            var removeTemp = deviceFunctionList.Find((obj) => obj.deviceId == delTemp.deviceId);
@@ -622,14 +657,22 @@
                        {
                            switch (function.Spk_Prefix)
                            {
                                case FunctionCategory.Light:
                                case FunctionCategory.Electric:
                                case FunctionCategory.Curtain:
                                case FunctionCategory.AC:
                                case FunctionCategory.FloorHeat:
                                    DriverLayer.Control.Ins.SendReadCommand(function);
                                    break;
                                case FunctionCategory.Music:
                                case FunctionCategory.DryContact:
                                    continue;
                            }
                            DriverLayer.Control.Ins.SendReadCommand(function);
                            //switch (function.Spk_Prefix)
                            //{
                            //    case FunctionCategory.Light:
                            //    case FunctionCategory.Electric:
                            //    case FunctionCategory.Curtain:
                            //    case FunctionCategory.AC:
                            //    case FunctionCategory.FloorHeat:
                            //    case FunctionCategory.Sensor:
                            //        DriverLayer.Control.Ins.SendReadCommand(function);
                            //        break;
                            //}
                        }
                    }
                    else
HDL_ON/HDL_ON.projitems
@@ -275,7 +275,6 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\WeatherCondition.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\1-test-\TestDialog.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\ThirdPartyBrandListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\EmptyClass.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\AddThirdPartyBrandListpage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Entity\Integratedbrand\IntegratedBrand.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\AirCleaner.cs" />
@@ -337,6 +336,25 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorWaterImmersionPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorDoorWinwsPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorSmokePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\DeviceFunction.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Entity\Enumerative\ClothsHangerEnum.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\PirMain.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\TopView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\BrandList.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\BrandListView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\DeviceSet.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\TipView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\SaveView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\Buttons.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\Pir.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\PirSend.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddControlComplete.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\PatchView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\Method.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\FailView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\ReplicationView.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)UI\" />
@@ -374,5 +392,7 @@
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\" />
    <Folder Include="$(MSBuildThisFileDirectory)Entity\Integratedbrand\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\" />
    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\" />
  </ItemGroup>
</Project>
HDL_ON/UI/.DS_Store
Binary files differ
HDL_ON/UI/CSS/CSS.cs
@@ -83,10 +83,9 @@
        public const uint TipBgColor1 = 0xE6FFFFFF;
        /// <summary>
        /// 连接状态提示
        /// 远程状态
        /// 0xFF67D569
        /// </summary>
        public const uint LinkTipRemote = 0xFF67D569;
        public const uint LinkTipLocal = 0xFF67D569;
        /// <summary>
        /// 连接状态提示
        /// 连接失败
@@ -111,6 +110,8 @@
        public const uint viewTrans60lucence = 0x60000000;
        public const uint viewTranslucence = 0x00000000;
        public const uint textTipColor = 0XFF798394;
        public const uint text1Color = 0XFF4E586A;
        #endregion
        #endregion
HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
        /// <summary>
        /// 版本号
        /// </summary>
        public static string VersionString = "1.1.0223";
        public static string VersionString = "1.1.0225";
        ///// <summary>
        ///// 客户端类型
        ///// </summary>
HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -144,6 +144,10 @@
                        doorwindowPage.ShowColltionButton = false;
                        doorwindowPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                    case SPK.ClothesHanger:
                        var clothesHangerpage = new ClothesHangerPage();
                        clothesHangerpage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                        break;
                }
            };
            return eventHandler;
HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
@@ -45,12 +45,24 @@
            {
                foreach (var attr in updateData)
                {
                    var localAttr = localDevice.status.Find((obj) => obj.key == attr.key);
                    if (localAttr != null)
                    var localAttr2 = localDevice.attributes.Find((obj) => obj.key == attr.key);
                    if (localAttr2 == null)
                    {
                        //本身它就没有这个属性,则不处理
                        continue;
                    }
                    //更改属性值
                    localAttr2.curValue = attr.value;
                    var localAttr = localDevice.status.Find((obj) => obj.key == attr.key);
                    if (localAttr == null)
                    {
                        //status是当前设备上报过的属性才会存在,也就是它的个数有可能和attributes不一致
                        localAttr = new AttributesStatus() { key = attr.key, value = attr.value };
                        localDevice.status.Add(localAttr);
                    }
                        //更改属性值
                        localAttr.value = attr.value;
                    }
                }
                //全部界面推送
                HdlFormLogic.Current.DeviceStatuPush(localDevice);
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -192,7 +192,7 @@
                //return;
                if (b)
                {
                    etAccount.Text = "13415629083";//tujie"18316120654";// "15622703419";// "18824864143";//"464027401@qq.com"; //"2791308028@qq.com";//13697499568
                    etAccount.Text = "18316672920";//hzx;// "13415629083"//cf;//tujie"18316120654";// "15622703419";// "18824864143";//"464027401@qq.com"; //"2791308028@qq.com";//13697499568
                }
                else
                {
HDL_ON/UI/UI2/.DS_Store
Binary files differ
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -831,6 +831,38 @@
                    };
                }
                else if (function.spk == SPK.ClothesHanger)
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Electrical/Curtain/ClothesHangerBlueIcon.png";
                    Button btnUp;
                    btnUp = new Button()
                    {
                        X = Application.GetRealWidth(84+3),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(38),
                        Height = Application.GetRealWidth(38),
                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png",
                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png",
                    };
                    view.AddChidren(btnUp);
                    Button btnDown;
                    btnDown = new Button()
                    {
                        X = btnUp.Right + Application.GetRealWidth(3),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(38),
                        Height = Application.GetRealWidth(38),
                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png",
                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png",
                    };
                    view.AddChidren(btnDown);
                    LoadEvent_ControlClothesHanger(function, btnUp, btnDown);
                }
                else
                {
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -33,13 +33,13 @@
            }
            else
            {
                if (Control.Ins.GatewayOnline_Cloud)
                if (Control.Ins.GatewayOnline_Local)
                {
                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipLocal;
                }
                else
                {
                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipRemote;
                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
                }
            }
        }
@@ -56,28 +56,6 @@
                    bodyView.CheckLinkStatus();
                }
            });
            //if (bodyView != null)
            //{
            //    Application.RunOnMainThread(() =>
            //    {
            //        if (Control.Ins.GatewayOnline)
            //        {
            //            if (Control.Ins.IsRemote)
            //            {
            //                bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
            //            }
            //            else
            //            {
            //                bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipRemote;
            //            }
            //        }
            //        else
            //        {
            //            bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipFail;
            //        }
            //    });
            //}
        }
        /// <summary>
@@ -356,7 +334,7 @@
                btnClose.IsSelected = false;
                curtain.trait_on_off.curValue = "off";
                curtain.percent = 0;
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add("on_off", curtain.trait_on_off.curValue.ToString());
                Control.Ins.SendWriteCommand(curtain, d);
            };
@@ -370,13 +348,45 @@
                btnOpen.IsSelected = false;
                curtain.trait_on_off.curValue = "on";
                curtain.percent = 100;
                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add("on_off", curtain.trait_on_off.curValue.ToString());
                Control.Ins.SendWriteCommand(curtain, d);
            };
        }
        /// <summary>
        /// 加载晾衣架控制事件
        /// </summary>
        void LoadEvent_ControlClothesHanger(Function function,Button btnUp,Button btnDown)
        {
            btnUp.MouseDownEventHandler = (sender, e) =>
            {
                btnUp.IsSelected = true;
            };
            btnUp.MouseUpEventHandler = (sender, e) =>
            {
                btnUp.IsSelected = false;
                function.SetAttrState(FunctionAttributeKey.Position, "up");
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "up");
                Control.Ins.SendWriteCommand(function, d);
            };
            btnDown.MouseDownEventHandler = (sender, e) =>
            {
                btnDown.IsSelected = true;
            };
            btnDown.MouseUpEventHandler = (sender, e) =>
            {
                btnDown.IsSelected = false;
                function.SetAttrState(FunctionAttributeKey.Position, "down");
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "down");
                Control.Ins.SendWriteCommand(function, d);
            };
        }
        /// <summary>
        /// 加载跳转信息中心页面
        /// </summary>
        void LoadEvent_GotoMessageCenterPage()
HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -488,13 +488,12 @@
                    case ShowFunction.Panel:
                        break;
                    case ShowFunction.SecurityMonitoring:
                        functionCount = 1;
                        break;
                    case ShowFunction.Sensor:
                        functionCount = FunctionList.List.sensorsArm.Count;
                        //functionOnCount = FunctionList.List.aCs.FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                        break;
                    case ShowFunction.VideoIntercom:
                        functionCount = 1;
                        break;
                }
@@ -552,6 +551,7 @@
                functionView.AddChidren(btnName);
                if (item != ShowFunction.Environmental && item != ShowFunction.Sensor && item != ShowFunction.VideoIntercom
                    && item != ShowFunction.SecurityMonitoring
                    && functionCount != 0)
                {
                    Button btnFunctionCount = new Button()
@@ -765,6 +765,10 @@
                        break;
                    case ShowFunction.SecurityMonitoring:
                        btnName.TextID = StringId.SecurityMonitoring;
                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                        {
                            HDLCommon.Current.Go2EZvizMonitor(bodyView);
                        };
                        break;
                    case ShowFunction.Sensor:
                        btnName.TextID = StringId.Sensor;
@@ -772,34 +776,11 @@
                        break;
                    case ShowFunction.VideoIntercom:
                        btnName.TextID = StringId.VideoIntercom;
                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                        {
#if __IOS__
                            EZSDK.IOS.EZSDK.Go2EZvizMonitor();
#else  //安卓摄像头
                            ((BaseActivity)Shared.Application.Activity).SetCamera(b =>
                            {
                                if (b)
                                {
                                    Android.Content.Intent intent = new Android.Content.Intent();
                                    var bundle = new Android.OS.Bundle();
                                    //传递name参数为tinyphp
                                    //bundle.PutString("Token", ezChileAccessToken.accessToken);
                                    bundle.PutString("Token", "ra.aamy8d1gabcnrz0jbbj4gjkpcpy55g0s-8z529x82uz-0jzly2o-g30muwagq");
                                    bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString);
                                    intent.PutExtras(bundle);
                                    intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
                                    Shared.Application.Activity.StartActivity(intent);
                                }
                            });
#endif
                        };
                        break;
                }
                //界面跳转--音乐跳转自己的界面--环境跳转自己的界面
                if (item != ShowFunction.Music && item != ShowFunction.Environmental && item != ShowFunction.VideoIntercom)
                if (item != ShowFunction.Music && item != ShowFunction.Environmental && item != ShowFunction.SecurityMonitoring)
                {
                    btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                    {
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -98,8 +98,28 @@
                            case SPK.SensorDoorWindow:
                                btnIcon.UnSelectedImagePath = "FunctionIcon/ArmSensor/ArmSensorDoorIcon.png";
                                break;
                            default:
                                break;
                        }
                        var powerLowTipAttr = function.status.Find((obj) => obj.key == FunctionAttributeKey.BatteryState);
                        if (powerLowTipAttr != null)
                        {
                            if (powerLowTipAttr.value.ToLower() == "low")
                            {
                                Button btnTipPowerLow = new Button()
                                {
                                    X = Application.GetRealWidth(307),
                                    Y = Application.GetRealHeight(25),
                                    Width = Application.GetRealWidth(24),
                                    Height = Application.GetRealWidth(24),
                                    UnSelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
                                    SelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
                                };
                                this.AddChidren(btnTipPowerLow);
                            }
                        }
                        break;
                    case FunctionCategory.Music:
                        btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicThinIcon.png";
@@ -110,7 +130,15 @@
            }
            else
            {
                if (function.spk == SPK.ClothesHanger)//晾衣架
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png";
                    ClothesHangerFragment();
                }
                else
                {
                #region 加载开关按钮
                /// <summary>
                /// 开关按钮
                /// </summary>
@@ -202,6 +230,7 @@
                        break;
                }
                #endregion
                }
            }
            LoadEvent_DivSkipEvent();
@@ -374,6 +403,38 @@
            LoadEvent_ControlCurtain(btnCurtainStop, btnCurtainOpen, btnCurtainClose, function as Curtain);
            #endregion
        }
        /// <summary>
        /// 加载晾衣架功能控制卡片
        /// </summary>
        void ClothesHangerFragment()
        {
            #region ClothesHanger
            var btnClothesHangerUp = new Button()
            {
                X = Application.GetRealWidth(233),
                Y = Application.GetRealHeight(58),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png",
            };
            bodyDiv.AddChidren(btnClothesHangerUp);
            var btnClothesHangerDown = new Button()
            {
                X = Application.GetRealWidth(303),
                Y = Application.GetRealHeight(58),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png",
            };
            bodyDiv.AddChidren(btnClothesHangerDown);
            LoadEvent_ControlClothesHanger(function, btnClothesHangerDown, btnClothesHangerUp);
            #endregion
        }
        /// <summary>
        /// 加载音乐功能控制卡片
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.Music;
@@ -196,12 +197,6 @@
                Control.Ins.SendWriteCommand(curtain, d);
            };
            //btnStop.MouseDownEventHandler = (sender, e) =>
            //{
            //    btnStop.IsSelected = true;
            //    btnClose.IsSelected = false;
            //    btnOpen.IsSelected = false;
            //};
            btnStop.MouseUpEventHandler = (sender, e) =>
            {
                btnStop.IsSelected = true;
@@ -227,6 +222,40 @@
        }
        #endregion
        /// <summary>
        /// 加载晾衣架控制事件
        /// </summary>
        void LoadEvent_ControlClothesHanger(Function function, Button btnUp, Button btnDown)
        {
            btnUp.MouseDownEventHandler = (sender, e) =>
            {
                btnUp.IsSelected = true;
            };
            btnUp.MouseUpEventHandler = (sender, e) =>
            {
                btnUp.IsSelected = false;
                function.SetAttrState(FunctionAttributeKey.Position, "up");
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "up");
                Control.Ins.SendWriteCommand(function, d);
            };
            btnDown.MouseDownEventHandler = (sender, e) =>
            {
                btnDown.IsSelected = true;
            };
            btnDown.MouseUpEventHandler = (sender, e) =>
            {
                btnDown.IsSelected = false;
                function.SetAttrState(FunctionAttributeKey.Position, "down");
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "down");
                Control.Ins.SendWriteCommand(function, d);
            };
        }
        #region 空调事件
        #endregion
HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store
Binary files differ
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -281,16 +281,22 @@
                            value = "off";
                        }
                        break;
                    case StringId.youren:
                    case StringId.kaiqi:
                        {
                    case StringId.youren: {
                            value = "true";
                        }
                        break;
                    case StringId.wuren:
                    case StringId.wuren: {
                            value = "false";
                        }
                        break;
                    case StringId.kaiqi:
                        {
                            value = "open";
                        }
                        break;
                    case StringId.bihe:
                        {
                            value = "false";
                            value = "close";
                        }
                        break;
                    case StringId.zaixian: {
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
@@ -260,9 +260,12 @@
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                var page = new ThirdPartyBrandListPage();
                // var page = new ThirdPartyBrandListPage();
                // MainPage.BasePageView.AddChidren(page);
                // page.LoadPage();
                var page = new UI2.PersonalCenter.PirDevice.PirMain();
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
                page.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            btnResidenceAddFunctionIcon.MouseUpEventHandler = eventHandler;
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs
New file
@@ -0,0 +1,179 @@
using System;
using System.Collections.Generic;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class AddButton : FrameLayout
    {
        public AddButton()
        {
            Tag = "Pir";
        }
        public void Show(Control control)
        {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
            FrameLayout editfLayout = new FrameLayout
            {
                Y = topView.frameLayout.Bottom,
                BackgroundColor = CSS.CSS_Color.textWhiteColor,
                Height = Application.GetRealHeight(152),
                Width = Application.GetRealWidth(375),
            };
            this.AddChidren(editfLayout);
            //线
            Button lineBtn = new Button
            {
                Y = Application.GetRealHeight(43),
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(375 - 16 * 2),
                Height = 1,
                BackgroundColor = CSS.CSS_Color.viewLine,
            };
            editfLayout.AddChidren(lineBtn);
            //请输入按键名称
            EditText editText = new EditText()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(375 - 16 * 2),
                Height = Application.GetRealHeight(44),
                PlaceholderText = Language.StringByID(StringId.anjianmingcheng),
                PlaceholderTextColor = CSS.CSS_Color.textCancelColor,
                TextColor = CSS.CSS_Color.textColor,
                TextSize = TextSize.text14,
                TextAlignment = TextAlignment.CenterLeft,
            };
            editfLayout.AddChidren(editText);
            //下一步
            Button saveBtn = new Button
            {
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Y = Application.GetRealHeight(92),
                X = Application.GetRealWidth(78),
                TextID = StringId.xiayibu,
                TextSize = TextSize.text16,
                TextColor = CSS.CSS_Color.textWhiteColor,
                TextAlignment = TextAlignment.Center,
                BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
                Radius = (uint)Application.GetRealHeight(22),
            };
            editfLayout.AddChidren(saveBtn);
            FrameLayout fLayout = new FrameLayout
            {
                Y = editfLayout.Bottom + Application.GetRealHeight(8),
                Height = Application.GetRealHeight(667 - 64 - 152 - 8),
                Width = Application.GetRealWidth(375),
                BackgroundColor = CSS.CSS_Color.textWhiteColor,
            };
            this.AddChidren(fLayout);
            //推荐按键
            Button titleBtn = new Button
            {
                Y = Application.GetRealHeight(12),
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(20),
                TextID = StringId.tuijiananjian,
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.text1Color,
                TextAlignment = TextAlignment.CenterLeft,
            };
            fLayout.AddChidren(titleBtn);
            //动态加载Button按钮父控件
            FrameLayout buttonFLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(32),
                Height = Application.GetRealHeight(667 - 64 - 152 - 8 - 12 - 20),
                Width = Application.GetRealWidth(375),
            };
            fLayout.AddChidren(buttonFLayout);
            #endregion
            View.Buttons buttons = new View.Buttons();
            var buttonNameList = buttons.GetList("默认按钮");
            buttons.AddButton(buttonFLayout, buttonNameList, (s) =>
            {
                editText.Text = s;
#if __Android__
                editText.SetSelectionEnd();
#endif
            });
            ///下一步的点击事件
            saveBtn.MouseUpEventHandler += (sender, e) =>
            {
                var texts = editText.Text.Trim();
                if (string.IsNullOrEmpty(editText.Text))
                {
                    //名称不能为空
                    return;
                }
                var butName = Pir.BuottonList.Find((c) => c.value == texts);
                if (butName != null)
                {
                    //名称已经存在
                    return;
                }
                //new引导界面
                View.ReplicationView replication = new View.ReplicationView();
                replication.Show();
                //添加数据对象
                ButtonObj buttonObj = new ButtonObj();
                buttonObj.Key = "key" + Pir.BuottonList.Count.ToString();
                buttonObj.value = texts;
                PirSend.CodeStudy(buttonObj, (responsePackNew) =>
                {
                    ///这里:监听MTTP推送下来主题,才知道是否添加成功
                    ///
                    //休眠是为显示引导界面
                      System.Threading.Thread.Sleep(5000);
                    //移除添加按钮引导界面
                    replication.RemView();
                    //if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
                    //{
                    var buttonName = Pir.BuottonList.Find((c) => c.value == buttonObj.value);
                    if (buttonName == null)
                    {
                        //添加数据
                        Pir.BuottonList.Add(buttonObj);
                    }
                    //移除添加按钮界面
                    this.RemoveFromParent();
                    for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
                    {
                        var view = MainPage.BasePageView.GetChildren(i);
                        if (view.GetType() == typeof(AddControl))
                        {
                            view.RemoveFromParent();
                        }
                    }
                    //加载数据界面
                    AddControl addControl = new AddControl();
                    MainPage.BasePageView.AddChidren(addControl);
                    addControl.Show(control);
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    //}
                    //else
                    //{
                    //    PirSend.Error(responsePackNew);
                    //}
                });
            };
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs
New file
@@ -0,0 +1,279 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class AddControl : FrameLayout
    {
        public AddControl()
        {
            Tag = "Pir";
        }
        public void Show(Control control)
        {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.zhinengyaokongqi;
            topView.topIconBtn.Visible = true;
            topView.topIconBtn.UnSelectedImagePath = "PirIcon/del.png";
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
            {
                this.RemoveFromParent();
            };
            #region 添加按钮
            FrameLayout addLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(84),
                Width = Application.GetRealWidth(TextSize.view375),
            };
            this.AddChidren(addLayout);
            Button addBtn = new Button
            {
                Width = Application.GetRealWidth(344),
                Height = Application.GetRealHeight(44),
                Y = Application.GetRealHeight(24),
                X = Application.GetRealWidth(16),
                TextID = StringId.tianjiaanniu,
                TextSize = TextSize.text16,
                TextColor = CSS.CSS_Color.btnSaveBackgroundColor,
                BorderColor = CSS.CSS_Color.btnSaveBackgroundColor,
                BorderWidth = 1,
                Radius = (uint)Application.GetRealHeight(22),
            };
            addLayout.AddChidren(addBtn);
            #endregion
            FrameLayout frameLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64 + 84),
                Height = Application.GetRealHeight(667 - 64 - 84),
                Width = Application.GetRealWidth(TextSize.view375),
            };
            this.AddChidren(frameLayout);
            #region 保存
            FrameLayout saveLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(667 - 104),
                Height = Application.GetRealHeight(104),
                Width = Application.GetRealWidth(TextSize.view375),
                BackgroundColor = CSS.CSS_Color.viewLine,
            };
            this.AddChidren(saveLayout);
            saveLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            Button paixuBtn = new Button
            {
                Width = Application.GetRealWidth(375 - 16 * 2),
                Height = Application.GetRealHeight(20),
                Y = Application.GetRealHeight(12),
                X = Application.GetRealWidth(16),
                TextID = StringId.paixu,
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textTipColor,
            };
            saveLayout.AddChidren(paixuBtn);
            Button saveBtn = new Button
            {
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealHeight(44),
                Y = paixuBtn.Bottom + Application.GetRealHeight(12),
                X = Application.GetRealWidth(78),
                TextID = StringId.save,
                TextSize = TextSize.text16,
                TextColor = CSS.CSS_Color.textWhiteColor,
                TextAlignment = TextAlignment.Center,
                BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
                Radius = (uint)Application.GetRealHeight(22),
            };
            saveLayout.AddChidren(saveBtn);
            #endregion
            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
            frameLayout.AddChidren(vv);
            RefreshView(vv, false);
            #endregion
            #region  界面点击事件
            //删除点击事件
            topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
            {
                topView.clickSetBtn.IsSelected = !topView.clickSetBtn.IsSelected;
                if (topView.clickSetBtn.IsSelected)
                {
                    topView.topIconBtn.UnSelectedImagePath = "";
                    topView.topIconBtn.Text = Language.StringByID(StringId.wancheng);
                    topView.topIconBtn.TextSize = TextSize.text14;
                    topView.topIconBtn.TextColor = CSS.CSS_Color.textColor;
                    RefreshView(vv, true);
                }
                else
                {
                    topView.topIconBtn.UnSelectedImagePath = "PirIcon/del.png";
                    topView.topIconBtn.Text = "";
                    RefreshView(vv, false);
                }
            };
            //添加按钮点击事件
            addBtn.MouseUpEventHandler += (sender, e) =>
            {
                AddButton addButton = new AddButton();
                MainPage.BasePageView.AddChidren(addButton);
                addButton.Show(control);
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            //保存点击事件
            saveBtn.MouseUpEventHandler += (sender, e) =>
            {
               //移除当前界面
                this.RemoveFromParent();
                //可能之前已经存在该界面
                for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
                {
                    var view = MainPage.BasePageView.GetChildren(i);
                    if (view.GetType() == typeof(AddControlComplete))
                    {
                        view.RemoveFromParent();
                    }
                }
                //MainPage.BasePageView.RemoveViewByTag("Pir");
                AddControlComplete addControlComplete = new AddControlComplete();
                MainPage.BasePageView.AddChidren(addControlComplete);
                addControlComplete.Show(control);
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            #endregion
        }
        /// <summary>
        /// 加载按钮控件View的方法
        /// </summary>
        /// <param name="vv">上下滑动控件</param>
        /// <param name="if_bool">表示是否显示删除图标</param>
        void RefreshView(VerticalScrolViewLayout vv, bool if_bool)
        {
            vv.RemoveAll();
            //定义一个变量记录行数
            int sum = 0;
            if (Pir.BuottonList.Count % 3 == 0)
            {
                sum = Pir.BuottonList.Count / 3;
            }
            else
            {
                sum = Pir.BuottonList.Count / 3 + 1;
            }
            //计算加载出来的数据需要的高度
            int h = 16 + sum * (16 + 44) + 104 + 76;
            int line = 0;
            //按钮的父控件
            var FLayout = new FrameLayout
            {
                Height = Application.GetRealWidth(h),
            };
            vv.AddChidren(FLayout);
            for (int i = 1, j = 0; i <= Pir.BuottonList.Count; i++, j++)
            {
                var nameObj = Pir.BuottonList[i - 1];
                //按钮
                var buttonNameBtn = new Button
                {
                    Y = Application.GetRealHeight(16 + line * (16 + 44)),
                    X = Application.GetRealWidth(16 + (16 + 104) * j),
                    Width = Application.GetRealWidth(104),
                    Height = Application.GetRealHeight(44),
                    Text = nameObj.value,
                    TextSize = TextSize.text16,
                    TextColor = CSS.CSS_Color.textColor,
                    TextAlignment = TextAlignment.Center,
                    Radius = (uint)Application.GetRealHeight(18),
                    BorderWidth = 1,
                    BorderColor = CSS.CSS_Color.textCancelColor,
                };
                FLayout.AddChidren(buttonNameBtn);
                //删除图标
                var delIconBtn = new Button
                {
                    UnSelectedImagePath = "PirIcon/delbuton.png",
                    Y = Application.GetRealHeight(12 + line * (16 + 44)),
                    X = Application.GetRealWidth((16 + 92) + (104 + 16) * j),
                    Width = Application.GetRealWidth(16),
                    Height = Application.GetRealWidth(16),
                    Tag = nameObj,
                };
                if (if_bool)
                {
                    FLayout.AddChidren(delIconBtn);
                }
                //删除图标的点击事件
                delIconBtn.MouseUpEventHandler += (sender, e) =>
                {
                    var obj = delIconBtn.Tag as ButtonObj;
                    //加载log
                    Loading loading = new Loading();
                    this.AddChidren(loading);
                    HDL_ON.DAL.Server.ResponsePackNew responsePackNew = null;
                    loading.Start();
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            //发送按键删除;
                            responsePackNew = PirSend.CodeRemove(obj);
                        }
                        catch { }
                        finally
                        {
                            Application.RunOnMainThread(() =>
                            {
                                loading.Hide();
                                if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
                                {
                                    ///这里:监听MTTP推送下来主题,才知道是否添加成功
                                    var buttonObj = Pir.BuottonList.Find((c) => c.value == obj.value);
                                    if (buttonObj != null)
                                    {
                                        Pir.BuottonList.Remove(buttonObj);
                                    }
                                    RefreshView(vv, true);
                                }
                                else {
                                    Method method = new Method();
                                    method.ErrorShow(responsePackNew);
                                }
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                };
                if (i % 3 == 0)
                {
                    //满一行重置j=0值;
                    j = -1;
                    line += 1;
                }
            }
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs
New file
@@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class AddControlComplete:FrameLayout
    {
        public AddControlComplete()
        {
            Tag = "Pir";
        }
        public void Show(Control control) {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
            FrameLayout fLayout = new FrameLayout
            {
                Y =Application.GetRealHeight(64),
                BackgroundColor = CSS.CSS_Color.textWhiteColor,
                Height = Application.GetRealHeight(224),
                Width = Application.GetRealWidth(375),
            };
            this.AddChidren(fLayout);
            //
            Button iconBtn = new Button
            {
                Y = Application.GetRealHeight(28),
                X = Application.GetRealWidth(137),
                Width = Application.GetRealWidth(102),
                Height = Application.GetRealWidth(102),
                UnSelectedImagePath = "PirIcon/succeed.png",
            };
            fLayout.AddChidren(iconBtn);
            //添加成功
            Button text1Btn = new Button
            {
                Width = Application.GetRealWidth(375-32),
                Height = Application.GetRealHeight(22),
                Y = Application.GetRealHeight(158),
                X = Application.GetRealWidth(16),
                TextID = StringId.tianjiachenggong,
                TextSize = TextSize.text16,
                TextColor = CSS.CSS_Color.btnSaveBackgroundColor,
                TextAlignment = TextAlignment.Center,
            };
            fLayout.AddChidren(text1Btn);
            //可到分类-功能-电器操作使用
            Button text2Btn = new Button
            {
                Width = Application.GetRealWidth(375 - 32),
                Height = Application.GetRealHeight(22),
                Y = Application.GetRealHeight(188),
                X = Application.GetRealWidth(16),
                TextID = StringId.kedaofenlei,
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textTipColor,
                TextAlignment = TextAlignment.Center,
            };
            fLayout.AddChidren(text2Btn);
            //所属分类
            View.PatchView fenlei = new View.PatchView();
            fenlei.frameLayout.Y = fLayout.Bottom+ Application.GetRealHeight(8);
            this.AddChidren(fenlei.FLayoutView(false));
            fenlei.btnText1.TextID = StringId.suoshufenlei;
            fenlei.btnText2.TextID = StringId.dianqi;
            //遥控器名称
            View.PatchView namePatchView = new View.PatchView();
            namePatchView.frameLayout.Y = fenlei.frameLayout.Bottom;
            this.AddChidren(namePatchView.FLayoutView());
            namePatchView.btnText1.TextID = StringId.yaokongqimingcheng;
            namePatchView.btnText2.Text = control.name;
            //所属区域
            View.PatchView quyuPatchView = new View.PatchView();
            quyuPatchView.frameLayout.Y = namePatchView.frameLayout.Bottom;
            this.AddChidren(quyuPatchView.FLayoutView());
            quyuPatchView.btnText1.TextID = StringId.suoshuquyu;
            quyuPatchView.btnText2.TextID = StringId.dianqi;
            //继续添加
            Button addBtn = new Button
            {
                Y = quyuPatchView.frameLayout.Bottom + Application.GetRealHeight(125),
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(375-32),
                Height = Application.GetRealHeight(20),
                TextID = StringId.jixutianjia,
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textConfirmColor,
                TextAlignment = TextAlignment.Center,
            };
            this.AddChidren(addBtn);
            //完成
            View.SaveView saveView = new View.SaveView();
            this.AddChidren(saveView.FLayoutView());
            saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            #endregion
            #region  界面点击事件
            //遥控器名称点击事件
            namePatchView.btnClick.MouseUpEventHandler += (sender,e) => { };
            //所属区域点击事件
            quyuPatchView.btnClick.MouseUpEventHandler += (sender, e) => { };
            //继续添加点击事件
            addBtn.MouseUpEventHandler += (sender, e) => {
                Method method = new Method();
                method.AddControl();
            };
            //完成点击事件
            saveView.btnClick.MouseUpEventHandler += (sender, e) => {
                MainPage.BasePageView.RemoveViewByTag("AddControl");
                MainPage.BasePageView.RemoveViewByTag("Pir");
            };
            #endregion
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs
copy from HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs copy to HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs
File was copied from HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
@@ -4,20 +4,21 @@
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI.UI2.Intelligence.Automation
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class EmptyClass : FrameLayout
    public class BrandList : FrameLayout
    {
        public BrandList()
        {
            Tag = "PirView";
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="list">表示该列表元素A-Z字母筛选显示出来</param>
        /// <param name="list6">表示该列表元素显示在list前面(该列表元素不做A-Z字母筛选),没有可以为list6=null</param>
        /// <param name="action">返回选中文本</param>
        public void Show(List<string> list, List<string> list6, Action<string> action)
        public void Show(List<string> list, List<string> list6)
        {
            //string text = "30";
            //byte[] bytes = new byte[text.Length / 2];
            //for (int i = 0, j = 0; i < bytes.Length; j += 2, i++)
@@ -27,8 +28,6 @@
            //}
            ////把byte数组转换成文字
            //string str = System.Text.Encoding.UTF8.GetString(bytes);
            var frameLayout = new FrameLayout
            {
                BackgroundColor = CSS.CSS_Color.viewTop,
@@ -59,7 +58,14 @@
                UnSelectedImagePath = "LogicIcon/back.png",
            };
            frameLayout.AddChidren(backBtn);
            backBtn.MouseUpEventHandler += (sen, e) =>
            var clickBackBtn = new Button
            {
                Width = Application.GetRealWidth(12+16+20),
                Height = Application.GetRealWidth(20+20),
                Y = Application.GetRealHeight(32),
            };
            frameLayout.AddChidren(clickBackBtn);
            clickBackBtn.MouseUpEventHandler += (sen, e) =>
            {
                this.RemoveFromParent();
            };
@@ -87,15 +93,6 @@
            this.AddChidren(fram);
            //var list11 = new List<string> {
            //   "爱你", "哎呦","埃及","哈弗换壳哈弗", "爱德华多v","俺几个疯了",
            //    "拜了", "巴士", "百夫",  "百合地理课你打算", "不度老骥伏枥", "比到九点",
            //    "车站","测试","此地", "才看见好得快","吃软饭","从看见二十多",
            //   "等待机会吧","的客户", "多喝点", "登记哦然后", "打电话",
            //     "恩肤霜看就看了", "饿死os","恶魔城","儿科联动", "恩六颗子弹拉拉裤洗澡了","发大学生发发",
            //    "真厉害i发多少", "知道你付款了发", "尬酒回复",  "改进的话", "天天速度回答", "太好了开车",
            //    "减肥的看过","桡出口处那","如果觉得", "很舒服的","吃软饭","从看见二十多",
            //   "龙卷风亏大发","去好看", "多喝点", "好浪费好", "打电话"};
            if (list == null)
            {
                list = new List<string>();
@@ -105,10 +102,7 @@
                list6 = new List<string>();
            }
            var list1 = GetDateList(list);
            list1.Add("1");
            list1.InsertRange(0, list6);
            var vv = new VerticalScrolViewLayout();
            fram.AddChidren(vv);
@@ -125,10 +119,9 @@
                        listStr.Add(s);
                    }
                }
                RefreshLayout(vv, listStr, action);
                RefreshLayout(vv, listStr);
            };
            #region A-Z
@@ -183,11 +176,7 @@
            }
            #endregion
            RefreshLayout(vv, list1,action);
            RefreshLayout(vv, list1);
        }
        /// <summary>
@@ -195,7 +184,7 @@
        /// </summary>
        /// <param name="vv">父控件</param>
        /// <param name="list">显示列表</param>
        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list,Action<string> action)
        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list)
        {
            vv.RemoveAll();
            foreach (var str in list)
@@ -235,10 +224,10 @@
                vv.AddChidren(rowLayout);
                clickBtn.MouseUpEventHandler += (sen, e) =>
                {
                    //找到索引值
                    var index = list.IndexOf(clickBtn.Tag.ToString());
                    ////找到索引值
                    //var index = list.IndexOf(clickBtn.Tag.ToString());
                    this.RemoveFromParent();
                    //this.RemoveFromParent();
                };
            }
@@ -261,7 +250,6 @@
                return false;
            }
        }
        /// <summary>
        /// 获取显示列表
        /// </summary>
@@ -300,7 +288,6 @@
            }
            return list;
        }
        /// <summary>
        /// 获取A-Z字母列表
        /// </summary>
@@ -321,7 +308,6 @@
            }
            return list;
        }
        /// <summary>
        /// 获取汉字首字母
        /// </summary>
@@ -346,34 +332,7 @@
                iCnChar = i1 * 256 + i2;
            }
            //expresstion
            //table of the constant list
            // 'A'; //45217..45252
            // 'B'; //45253..45760
            // 'C'; //45761..46317
            // 'D'; //46318..46825
            // 'E'; //46826..47009
            // 'F'; //47010..47296
            // 'G'; //47297..47613
            // 'H'; //47614..48118
            // 'J'; //48119..49061
            // 'K'; //49062..49323
            // 'L'; //49324..49895
            // 'M'; //49896..50370
            // 'N'; //50371..50613
            // 'O'; //50614..50621
            // 'P'; //50622..50905
            // 'Q'; //50906..51386
            // 'R'; //51387..51445
            // 'S'; //51446..52217
            // 'T'; //52218..52697
            //没有U,V
            // 'W'; //52698..52979
            // 'X'; //52980..53640
            // 'Y'; //53689..54480
            // 'Z'; //54481..55289
            // iCnChar match the constant 
            if ((iCnChar >= 45217) && (iCnChar <= 45252))
@@ -473,3 +432,4 @@
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs
New file
@@ -0,0 +1,244 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class DeviceSet : FrameLayout
    {
        public DeviceSet()
        {
            Tag = "PirView";
        }
        public void Show() {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.shebeigaunli;
            topView.topIconBtn.Visible = true;
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
            vv.Height = Application.GetRealHeight(667 - 64);
            vv.Y = Application.GetRealHeight(64);
            this.AddChidren(vv);
            #endregion
            int a = 3;
            int b = 3;
            for (int i = 0; i < b; i++)
            {
                #region 红外宝图标 版本号 名称 状态
                FrameLayout fLayout = new FrameLayout
                {
                    Width = Application.GetRealWidth(375),
                    Height = Application.GetRealHeight(12+92+(50* a)),
                };
                vv.AddChidren(fLayout);
                //红外宝显示父控件
                FrameLayout devfLayout = new FrameLayout
                {
                    Y = Application.GetRealHeight(12),
                    X = Application.GetRealWidth(16),
                    Width = Application.GetRealWidth(375-16*2),
                    Height = Application.GetRealHeight(92 + (50 * a)),
                    BackgroundColor = CSS.CSS_Color.view,
                    Radius = (uint)Application.GetRealHeight(12),
                };
                fLayout.AddChidren(devfLayout);
                //红外宝图标
                Button priequipmentBtn = new Button
                {
                    Y=Application.GetRealHeight(16),
                    X = Application.GetRealWidth(5),
                    Width = Application.GetRealWidth(60),
                    Height = Application.GetRealWidth(60),
                    UnSelectedImagePath = "PirIcon/priequipment.png",
                    TextAlignment = TextAlignment.Center,
                };
                devfLayout.AddChidren(priequipmentBtn);
                //红外宝名称
                Button deviceNameBtn = new Button
                {
                    Y=Application.GetRealHeight(16),
                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
                    Width = Application.GetRealWidth(120),
                    Height = Application.GetRealHeight(20),
                    Text = "红外宝A"+i.ToString(),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = TextSize.text14,
                    TextColor = CSS.CSS_Color.textColor,
                    IsBold = true,
                };
                devfLayout.AddChidren(deviceNameBtn);
                //版本号
                Button versionBtn = new Button
                {
                    Y = deviceNameBtn.Bottom+ Application.GetRealHeight(4),
                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
                    Width = Application.GetRealWidth(120),
                    Height = Application.GetRealHeight(17),
                    Text = "版本号v1.3.5",
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = TextSize.text12,
                    TextColor = CSS.CSS_Color.textCancelColor,
                };
                devfLayout.AddChidren(versionBtn);
                // 5/10
                Button geBtn = new Button
                {
                    Y = versionBtn.Bottom + Application.GetRealHeight(2),
                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
                    Width = Application.GetRealWidth(120),
                    Height = Application.GetRealHeight(17),
                    Text = "2",
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = TextSize.text12,
                    TextColor = CSS.CSS_Color.textConfirmColor,
                };
                devfLayout.AddChidren(geBtn);
                geBtn.Width = geBtn.GetTextWidth();
                // 5/10
                Button sumBtn = new Button
                {
                    Y = versionBtn.Bottom + Application.GetRealHeight(2),
                    X = geBtn.Right,
                    Width = Application.GetRealWidth(20),
                    Height = Application.GetRealHeight(17),
                    Text ="/10",
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = TextSize.text12,
                    TextColor = CSS.CSS_Color.textCancelColor,
                };
                devfLayout.AddChidren(sumBtn);
                //状态图标
                Button stateIconBtn = new Button
                {
                    Y =Application.GetRealHeight(23),
                    X = Application.GetRealWidth(291),
                    Width = Application.GetRealWidth(8),
                    Height = Application.GetRealWidth(8),
                    UnSelectedImagePath = "PirIcon/online.png",
                };
                devfLayout.AddChidren(stateIconBtn);
                //红外宝状态(在线-离线)
                Button stateTextBtn = new Button
                {
                    Y = Application.GetRealHeight(18),
                    X = Application.GetRealWidth(303),
                    Width = Application.GetRealWidth(30),
                    Height = Application.GetRealHeight(17),
                    TextID=StringId.zaixianhwb,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = TextSize.text12,
                    TextColor = 0xFF67D569,// CSS.CSS_Color.textColor,
                    IsBold=true,
                };
                devfLayout.AddChidren(stateTextBtn);
                //线
                Button lineBtn = new Button
                {
                    Y = Application.GetRealHeight(92)-1,
                    X = Application.GetRealWidth(16),
                    Width = Application.GetRealWidth(343-16*2),
                    Height =1,
                    BackgroundColor = CSS.CSS_Color.viewLine,
                };
                devfLayout.AddChidren(lineBtn);
                if (b - 1 == i)
                {
                    //最后一个后面增加间隔背景
                    vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(20) });
                }
                #endregion
                for (int j = 0; j < a; j++) {
                    RowLayout funControlRow = new RowLayout
                    {
                        Y = Application.GetRealHeight(92 + (50 * j)),
                        Width = Application.GetRealWidth(375 - 16 * 2),
                        Height = Application.GetRealHeight(50),
                        LineColor = CSS.CSS_Color.textWhiteColor,
                        SubViewWidth=Application.GetRealWidth(68),
                    };
                    devfLayout.AddChidren(funControlRow);
                    //遥控器名称
                    Button nameBtn = new Button
                    {
                        X = Application.GetRealWidth(16),
                        Width = Application.GetRealWidth(150),
                        Height = Application.GetRealHeight(20),
                        Text =j.ToString(),
                        TextAlignment=TextAlignment.CenterLeft,
                        TextSize = TextSize.text14,
                        TextColor = CSS.CSS_Color.textColor,
                        Gravity=Gravity.CenterVertical,
                    };
                    funControlRow.AddChidren(nameBtn);
                    //遥控器区域
                    Button areaBtn = new Button
                    {
                        X=Application.GetRealWidth(311+16-(40+100)),
                        Width = Application.GetRealWidth(100),
                        Height = Application.GetRealHeight(17),
                        Text = j.ToString(),
                        TextAlignment = TextAlignment.CenterRight,
                        TextSize = TextSize.text12,
                        TextColor = CSS.CSS_Color.textCancelColor,
                        Gravity =Gravity.CenterVertical,
                    };
                    funControlRow.AddChidren(areaBtn);
                    //下一级图标
                    Button nextIconBtn = new Button
                    {
                        X = Application.GetRealWidth(295+16),
                        Width = Application.GetRealWidth(16),
                        Height = Application.GetRealWidth(16),
                        UnSelectedImagePath = "PirIcon/next.png",
                        Gravity = Gravity.CenterVertical,
                    };
                    funControlRow.AddChidren(nextIconBtn);
                    //删除
                    Button delBtn = new Button
                    {
                        Width = Application.GetRealWidth(50),
                        Height = Application.GetRealHeight(22),
                        TextID = StringId.Del,
                        TextAlignment = TextAlignment.Center,
                        TextSize = TextSize.text16,
                        TextColor = CSS.CSS_Color.textWhiteColor,
                        IsBold=true,
                        BackgroundColor= CSS.CSS_Color.textRedColor,
                    };
                    funControlRow.AddRightView(delBtn);
                    //线
                    Button line1Btn = new Button
                    {
                        Y = Application.GetRealHeight(50 - 2),
                        X = Application.GetRealWidth(16),
                        Width = Application.GetRealWidth(311),
                        Height = 1,
                        BackgroundColor = CSS.CSS_Color.viewLine,
                    };
                    funControlRow.AddChidren(line1Btn);
                    if (j == a - 1)
                    {
                        //最后改变一个线的颜色
                        line1Btn.BackgroundColor = CSS.CSS_Color.viewTranslucence;
                        funControlRow.LineColor = CSS.CSS_Color.viewTranslucence;
                    }
                    delBtn.MouseUpEventHandler += (sender,e) => {
                    };
                }
            }
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs
New file
@@ -0,0 +1,101 @@
using System;
using HDL_ON.DAL.Server;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class Method
    {
        /// <summary>
        /// 添加遥控器的方法
        /// </summary>
        public void AddControl()
        {
            View.TipView tipView = new View.TipView();
            tipView.InputBox("", (s, dialog) =>
            {
                ///清除之前列表数据
                Pir.BuottonList.Clear();
                if (!string.IsNullOrEmpty(s))
                {
                    Control control = new Control();
                    control.name = s;
                    control.type = "learn";
                    ThreadAddControl(control,dialog);
                }
            },false);
        }
        /// <summary>
        /// 发送遥控器命令方法
        /// </summary>
        /// <param name="control"></param>
        /// <param name="dialog"></param>
        public void ThreadAddControl(Control control, Dialog dialog) {
            DAL.Server.ResponsePackNew responsePackNew = null;
            Loading loading = new Loading();
            dialog.AddChidren(loading);
            loading.Start();
            new System.Threading.Thread(() =>
            {
                try
                {
                    responsePackNew = PirSend.Add(control);
                }
                catch { }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        loading.Hide();
                        //if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
                        //{
                            ///这里:监听MTTP推送下来主题,才知道是否添加成功
                            dialog.Close();//添加成功关闭弹窗
                            AddButton addButton = new AddButton();
                            MainPage.BasePageView.AddChidren(addButton);
                            addButton.Show(control);
                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                            //监听Mqtt推送下来状态码做提示
                            //View.FailView failView = new View.FailView();
                            //failView.ShouError((view) => {
                            //    view.Close();
                            //    ThreadAddControl(control, dialog);
                            //});
                        //}
                        //else
                        //{
                        //    ErrorShow(responsePackNew);
                        //}
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 错误码提示
        /// </summary>
        /// <param name="responsePackNew"></param>
        public  void ErrorShow(ResponsePackNew responsePackNew)
        {
            if (responsePackNew != null && responsePackNew.Code == "14005")
            {
                new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.gatewayNotOnline));
            }
            else
            {
                new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.saveFail));
            }
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs
New file
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class Pir
    {
        /// <summary>
        /// 添加按键列表
        /// </summary>
        public static List<ButtonObj> BuottonList = new List<ButtonObj>();
    }
    public class ButtonObj
    {
        public string Key = string.Empty;
        /// <summary>
        /// #app 显示的文字
        /// </summary>
        public string value = string.Empty;
    }
    public class Control
    {
        /// <summary>
        /// 红外宝设备Id
        /// </summary>
        public string deviceId = "0";
        /// <summary>
        /// 红外遥控器名称
        /// </summary>
        public string name = "0";
        /// <summary>
        /// 红外遥控器spk
        /// </summary>
        public string spk = "ir.module";
        /// <summary>
        /// library=库类型, learn=不需要额外追加属性
        /// </summary>
        public string type = "learn";
        /// <summary>
        /// 码组号
        /// </summary>
        public string group_id = "12";
        /// <summary>
        /// 红外码
        /// </summary>
        public List<string> library = new List<string>();
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs
New file
@@ -0,0 +1,339 @@
using System;
using System.Collections.Generic;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class PirMain : FrameLayout
    {
        public PirMain()
        {
            Tag = "PirView";
        }
        public void Show()
        {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.hongwaiyaokong;
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
            FrameLayout middFLayout = new FrameLayout();
            middFLayout.Y = Application.GetRealHeight(64);
            middFLayout.Height = Application.GetRealHeight(667 - 64);
            this.AddChidren(middFLayout);
            FrameLayout pirDeviceFLayout = new FrameLayout();
            pirDeviceFLayout.Y = Application.GetRealHeight(12);
            pirDeviceFLayout.X = Application.GetRealWidth(16);
            pirDeviceFLayout.Width = Application.GetRealWidth(343);
            pirDeviceFLayout.Height = Application.GetRealHeight(187);
            pirDeviceFLayout.BackgroundColor = CSS.CSS_Color.view;
            pirDeviceFLayout.Radius = (uint)Application.GetRealHeight(12);
            middFLayout.AddChidren(pirDeviceFLayout);
            //设备管理
            Button text1Btn = new Button
            {
                Y = Application.GetRealHeight(11),
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(120),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textConfirmColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.shebeigaunli,
                IsBold=true,
            };
            pirDeviceFLayout.AddChidren(text1Btn);
            Button pirIcon = new Button
            {
                Y = Application.GetRealHeight(47),
                X = Application.GetRealWidth(28),
                Width = Application.GetRealWidth(66),
                Height = Application.GetRealWidth(66),
                UnSelectedImagePath = "PirIcon/Infraredtreasure.png",
            };
            pirDeviceFLayout.AddChidren(pirIcon);
            //mini智能遥控器
            Button text2Btn = new Button
            {
                Y = Application.GetRealHeight(70),
                X = Application.GetRealWidth(112),
                Width = Application.GetRealWidth(120),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textTipColor,
                TextAlignment = TextAlignment.CenterLeft,
                Text = "mini智能遥控器",
            };
            pirDeviceFLayout.AddChidren(text2Btn);
            //
            Button numberDeviceBtn = new Button
            {
                Y = Application.GetRealHeight(137),
                X = Application.GetRealWidth(32),
                Width = Application.GetRealWidth(100),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textColor,
                TextAlignment = TextAlignment.CenterLeft,
                Text = "1" + Language.StringByID(StringId.ge),
                IsBold = true,
            };
            pirDeviceFLayout.AddChidren(numberDeviceBtn);
            //当前红外遥控设备
            Button numberDeviceTextBtn = new Button
            {
                Y = numberDeviceBtn.Bottom + Application.GetRealHeight(4),
                X = Application.GetRealWidth(32),
                Width = Application.GetRealWidth(100),
                Height = Application.GetRealHeight(14),
                TextSize = TextSize.text10,
                TextColor = CSS.CSS_Color.textCancelColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.dangqianhongwaishebei,
            };
            pirDeviceFLayout.AddChidren(numberDeviceTextBtn);
            //
            Button currDeviceNumberControlBtn = new Button
            {
                Y = Application.GetRealHeight(137),
                X = Application.GetRealWidth(198),
                Width = Application.GetRealWidth(80),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textColor,
                TextAlignment = TextAlignment.CenterLeft,
                Text = "1" + Language.StringByID(StringId.ge),
                IsBold = true,
            };
            pirDeviceFLayout.AddChidren(currDeviceNumberControlBtn);
            //已添加遥控器
            Button currDeviceNumberControlTextBtn = new Button
            {
                Y = currDeviceNumberControlBtn.Bottom + Application.GetRealHeight(4),
                X = Application.GetRealWidth(198),
                Width = Application.GetRealWidth(80),
                Height = Application.GetRealHeight(14),
                TextSize = TextSize.text10,
                TextColor = CSS.CSS_Color.textCancelColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.yitianjiayaokongqi,
            };
            pirDeviceFLayout.AddChidren(currDeviceNumberControlTextBtn);
            ///红外宝点击事件
            FrameLayout clickFLayout = new FrameLayout();
            pirDeviceFLayout.AddChidren(clickFLayout);
            clickFLayout.MouseUpEventHandler += (sender,e) => {
                DeviceSet deviceSet = new DeviceSet();
                MainPage.BasePageView.AddChidren(deviceSet);
                deviceSet.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            FrameLayout deviceListFLayout = new FrameLayout();
            deviceListFLayout.Y = pirDeviceFLayout.Bottom + Application.GetRealHeight(12);
            deviceListFLayout.X = Application.GetRealWidth(16);
            deviceListFLayout.Width = Application.GetRealWidth(343);
            deviceListFLayout.Height = Application.GetRealHeight(328);
            deviceListFLayout.BackgroundColor = CSS.CSS_Color.view;
            deviceListFLayout.Radius = (uint)Application.GetRealHeight(12);
            middFLayout.AddChidren(deviceListFLayout);
            ///添加遥控器
            Button text3Btn = new Button
            {
                Y = Application.GetRealHeight(11),
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(100),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textConfirmColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = StringId.tianjiayaokongqi,
                IsBold = true,
            };
            deviceListFLayout.AddChidren(text3Btn);
            ///红外宝名称
            Button deviceNameBtn= new Button
            {
                Y = Application.GetRealHeight(13),
                X = Application.GetRealWidth(161),
                Width = Application.GetRealWidth(150),
                Height = Application.GetRealHeight(17),
                TextSize = TextSize.text12,
                TextColor = CSS.CSS_Color.textColor,
                TextAlignment = TextAlignment.CenterRight,
                Text = "mini智能遥控器",
            };
            deviceListFLayout.AddChidren(deviceNameBtn);
            //下拉图标
            var dropdownIconBtn = new Button
            {
                Y = Application.GetRealHeight(13),
                X = Application.GetRealWidth(343-8-16),
                Width = Application.GetRealWidth(16),
                Height = Application.GetRealWidth(16),
                UnSelectedImagePath = "PirIcon/dropdown.png",
            };
            deviceListFLayout.AddChidren(dropdownIconBtn);
            #endregion
            int line = 0;
            for (int i = 1, j = 0; i <= 7; i++, j++)
            {
                var currpirdeviceFLayout = new FrameLayout
                {
                    Width = Application.GetRealWidth(80),
                    Height = Application.GetRealWidth(80),
                    X = Application.GetRealWidth(26 + (80 + 25) * j),
                    Y = Application.GetRealHeight(52 + (80 + 12) * line),
                };
                deviceListFLayout.AddChidren(currpirdeviceFLayout);
                var deviceIconBtn = new Button
                {
                    Y = Application.GetRealHeight(8),
                    X = Application.GetRealWidth(20),
                    Width = Application.GetRealWidth(40),
                    Height = Application.GetRealWidth(40),
                    UnSelectedImagePath = "PirIcon/Infraredtreasure.png",
                };
                currpirdeviceFLayout.AddChidren(deviceIconBtn);
                var iconNameBtn = new Button
                {
                    Y = deviceIconBtn.Bottom+Application.GetRealHeight(8),
                    Width = Application.GetRealWidth(80),
                    Height = Application.GetRealHeight(17),
                    TextSize = TextSize.text12,
                    TextColor = CSS.CSS_Color.TextualColor,
                    TextAlignment = TextAlignment.Center,
                };
                currpirdeviceFLayout.AddChidren(iconNameBtn);
                var clickBtn = new Button { Tag = i };
                currpirdeviceFLayout.AddChidren(clickBtn);
                if (i % 3 == 0)
                {
                    //满一行重置j=0值;
                    j = -1;
                    line += 1;
                }
                GetIconAndText(i, deviceIconBtn, iconNameBtn);
                clickBtn.MouseUpEventHandler += (sender, e) =>
                {
                    //1=空调;2=电视;3=风扇;4=机顶盒;5=DVD/EVD/VCD;6=投影仪;7=自定义;
                    int if_value =int.Parse(clickBtn.Tag.ToString());
                    var list11 = new List<string> {
                       "爱你", "哎呦","埃及","哈弗换壳哈弗", "爱德华多v","俺几个疯了",
                        "拜了", "巴士", "百夫",  "百合地理课你打算", "不度老骥伏枥", "比到九点",
                        "车站","测试","此地", "才看见好得快","吃软饭","从看见二十多",
                       "等待机会吧","的客户", "多喝点", "登记哦然后", "打电话",
                         "恩肤霜看就看了", "饿死os","恶魔城","儿科联动", "恩六颗子弹拉拉裤洗澡了","发大学生发发",
                        "真厉害i发多少", "知道你付款了发", "尬酒回复",  "改进的话", "天天速度回答", "太好了开车",
                        "减肥的看过","桡出口处那","如果觉得", "很舒服的","吃软饭","从看见二十多",
                       "龙卷风亏大发","去好看", "多喝点", "好浪费好", "打电话"};
                    System.Threading.Tasks.Task.Run(() =>
                    {
                        Application.RunOnMainThread(() =>
                        {
                            switch (if_value)
                            {
                                case 1:
                                    {
                                    }
                                    break;
                                case 2:
                                    {
                                    }
                                    break;
                                case 3:
                                    {
                                    }
                                    break;
                                case 4:
                                    {
                                    }
                                    break;
                                case 5:
                                    {
                                    }
                                    break;
                                case 6:
                                    {
                                    }
                                    break;
                                case 7:
                                    {
                                        Method method = new Method();
                                        method.AddControl();
                                    }
                                    break;
                            }
                            //BrandList brandList = new BrandList();
                            //MainPage.BasePageView.AddChidren(brandList);
                            //brandList.Show(list11, null);
                            //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                        });
                    });
                };
            }
        }
        /// <summary>
        /// 设置图片和备注
        /// </summary>
        /// <param name="index">索引值</param>
        /// <param name="deviceIconBtn">图标Btn</param>
        /// <param name="deviceNameBtn">设备备注Btn</param>
        private void GetIconAndText(int index,Button deviceIconBtn, Button deviceNameBtn) {
            string iconPath = "";
            int deviceNameIndex=0;
            switch (index)
            {
                case 1: {
                        iconPath = "PirIcon/air.png";
                        deviceNameIndex = StringId.kongtiao;
                    } break;
                case 2: {
                        iconPath = "PirIcon/tv.png";
                        deviceNameIndex = StringId.dianshi;
                    } break;
                case 3: {
                        iconPath = "PirIcon/fan.png";
                        deviceNameIndex = StringId.fengshan;
                    } break;
                case 4: {
                        iconPath = "PirIcon/stb.png";
                        deviceNameIndex = StringId.jidinghe;
                    } break;
                case 5: {
                        iconPath = "PirIcon/dvd.png";
                        deviceNameIndex = StringId.dvd;
                    } break;
                case 6: {
                        iconPath = "PirIcon/projector.png";
                        deviceNameIndex = StringId.touyingyi;
                    } break;
                case 7: {
                        iconPath = "PirIcon/custom.png";
                        deviceNameIndex = StringId.zidingyi;
                    } break;
            }
            deviceIconBtn.UnSelectedImagePath = iconPath;
            deviceNameBtn.TextID = deviceNameIndex;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
New file
@@ -0,0 +1,175 @@
using System;
using System.IO;
using System.Net;
using HDL_ON.DAL.Server;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
{
    public class PirSend
    {
        /// <summary>
        /// 住宅ID
        /// </summary>
        public static string HomeId
        {
            get
            {
                return Entity.DB_ResidenceData.Instance.CurrentRegion.RegionID;
            }
        }
        /// <summary>
        /// 是否为其他主用户分享过来的住宅
        /// </summary>
        public static bool IsOthreShare
        {
            get
            {
                return Entity.DB_ResidenceData.Instance.CurrentRegion.IsOthreShare;
            }
        }
        /// <summary>
        /// 遥控器添加
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew Add(Control control)
        {
            var jObject = new JObject { };
            jObject.Add("homeId", HomeId);
            jObject.Add("deviceId", control.deviceId);
            jObject.Add("name", control.name);
            jObject.Add("spk", "ir.module");
            jObject.Add("type", control.type);
            if (control.type == "library")
            {
                //jObject.Add("group_id", "123");
                var libraryjay = new JArray { };
                for (int i = 0; i < control.library.Count; i++)
                {
                    libraryjay.Add(control.library[i]);
                }
                jObject.Add("library", libraryjay);
            }
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_Add);
            return responsePackNew;
        }
        /// <summary>
        /// 红外码学习
        /// </summary>
        /// <returns></returns>
        public static void CodeStudy(ButtonObj buttonObj, Action<ResponsePackNew> action)
        {
            //var whichDayJson = jay["whichDay"].ToString();
            //var whichDayAry = Newtonsoft.Json.Linq.JArray.Parse(whichDayJson);
            //for (int b = 0; b < whichDayAry.Count; b++)
            //{
            //    var days = whichDayAry[b].ToString();
            //    timer.whichDay.Add(int.Parse(days));
            //}
            var job = new JObject { };
            job.Add("key", buttonObj.Key);
            job.Add("data_type", "string");
            var valuejArray = new JArray { };
            valuejArray.Add(buttonObj.value);
            job.Add("value", valuejArray);
            var jArray = new JArray { };
            jArray.Add(job);
            var jObject = new JObject { { "homeId", HomeId }, { "deviceId", "0" }, { "attributes", jArray } };
            ResponsePackNew responsePackNew = null;
            new System.Threading.Thread(() =>
            {
                try
                {
                    //发送红外码学习命令
                    responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_CodeStudy);
                }
                catch { }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        action(responsePackNew);
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 自学按键删除
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew CodeRemove(ButtonObj buttonObj)
        {
            var job = new JObject { };
            job.Add("key", buttonObj.Key);
            job.Add("data_type", "string");
            var valuejArray = new JArray { };
            valuejArray.Add(buttonObj.value);
            job.Add("value", valuejArray);
            var jArray = new JArray { };
            jArray.Add(job);
            var jObject = new JObject { { "homeId", HomeId }, { "deviceId", "0" }, { "attributes", jArray } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_CodeRemove);
            return responsePackNew;
        }
        /// <summary>
        /// 获取逻辑
        /// </summary>
        /// <param name="listIdList">逻辑ID列表</param>
        /// <returns></returns>
        public static ResponsePackNew GetLogic(List<string> listIdList)
        {
            var jArray = new JArray { };
            for (int i = 0; i < listIdList.Count; i++)
            {
                jArray.Add(listIdList[i]);
            }
            var jObject = new JObject { { "userLogicIds", jArray } };
            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info);
            //如果是token过期则刷新token
            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
            {
                RefreshToken();
                GetLogic(listIdList);
            }
            return responsePackNew;
        }
        /// <summary>
        ///请求服务器(与住宅有关:例如;homeId)
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 20)
        {
            var requestJson = HttpUtil.GetSignRequestJson(o);
            return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
        }
        /// <summary>
        /// 请求服务器
        /// </summary>
        /// <returns></returns>
        public static ResponsePackNew RequestServer(object o, string api_Url)
        {
            var requestJson = HttpUtil.GetSignRequestJson(o);
            return HttpUtil.RequestHttpsPost(api_Url, requestJson);
        }
        /// <summary>
        /// 刷新Token
        /// </summary>
        public static void RefreshToken()
        {
            IMessageCommon.Current.StartRefreshToken();
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs
File was renamed from HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
@@ -4,9 +4,9 @@
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI.UI2.Intelligence.Automation
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class EmptyClass : FrameLayout
    public class BrandListView : FrameLayout
    {
        /// <summary>
        /// 
@@ -16,8 +16,6 @@
        /// <param name="action">返回选中文本</param>
        public void Show(List<string> list, List<string> list6, Action<string> action) 
        {
            //string text = "30";
            //byte[] bytes = new byte[text.Length / 2];
            //for (int i = 0, j = 0; i < bytes.Length; j += 2, i++)
@@ -27,8 +25,6 @@
            //}
            ////把byte数组转换成文字
            //string str = System.Text.Encoding.UTF8.GetString(bytes);
            var frameLayout = new FrameLayout
            {
                BackgroundColor = CSS.CSS_Color.viewTop,
@@ -59,7 +55,14 @@
                UnSelectedImagePath = "LogicIcon/back.png",
            };
            frameLayout.AddChidren(backBtn);
            backBtn.MouseUpEventHandler += (sen, e) =>
            var clickBackBtn = new Button
            {
                Width = Application.GetRealWidth(12 + 16 + 20),
                Height = Application.GetRealWidth(20 + 20),
                Y = Application.GetRealHeight(32),
            };
            frameLayout.AddChidren(clickBackBtn);
            clickBackBtn.MouseUpEventHandler += (sen, e) =>
            {
                this.RemoveFromParent();
            };
@@ -86,16 +89,6 @@
            };
            this.AddChidren(fram);
            //var list11 = new List<string> {
            //   "爱你", "哎呦","埃及","哈弗换壳哈弗", "爱德华多v","俺几个疯了",
            //    "拜了", "巴士", "百夫",  "百合地理课你打算", "不度老骥伏枥", "比到九点",
            //    "车站","测试","此地", "才看见好得快","吃软饭","从看见二十多",
            //   "等待机会吧","的客户", "多喝点", "登记哦然后", "打电话",
            //     "恩肤霜看就看了", "饿死os","恶魔城","儿科联动", "恩六颗子弹拉拉裤洗澡了","发大学生发发",
            //    "真厉害i发多少", "知道你付款了发", "尬酒回复",  "改进的话", "天天速度回答", "太好了开车",
            //    "减肥的看过","桡出口处那","如果觉得", "很舒服的","吃软饭","从看见二十多",
            //   "龙卷风亏大发","去好看", "多喝点", "好浪费好", "打电话"};
            if (list == null)
            {
                list = new List<string>();
@@ -105,7 +98,6 @@
                list6 = new List<string>();
            }
            var list1 = GetDateList(list);
            list1.Add("1");
            list1.InsertRange(0, list6);
@@ -236,8 +228,8 @@
                clickBtn.MouseUpEventHandler += (sen, e) =>
                {
                    //找到索引值
                    var index = list.IndexOf(clickBtn.Tag.ToString());
                    //var index = list.IndexOf();
                    action(clickBtn.Tag.ToString());
                    this.RemoveFromParent();
                };
@@ -261,7 +253,6 @@
                return false;
            }
        }
        /// <summary>
        /// 获取显示列表
        /// </summary>
@@ -300,7 +291,6 @@
            }
            return list;
        }
        /// <summary>
        /// 获取A-Z字母列表
        /// </summary>
@@ -321,7 +311,6 @@
            }
            return list;
        }
        /// <summary>
        /// 获取汉字首字母
        /// </summary>
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs
New file
@@ -0,0 +1,102 @@
using System;
using System.Collections.Generic;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class Buttons
    {
        /// <summary>
        /// 动态加载按钮列表
        /// </summary>
        /// <param name="buttonFLayout">父控件</param>
        /// <param name="buttonList">数据列表</param>
        /// <param name="action">回调</param>
        /// <param name="line">表示多少行</param>
        /// <param name="line">表示一行加载多少个按钮</param>
        public void AddButton(FrameLayout buttonFLayout, List<string> buttonList, Action<string> action, int line = 7, int sum = 3)
        {
            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
            buttonFLayout.AddChidren(vv);
            for (int i = 0; i < line; i++)
            {
                var currFLayout = new FrameLayout { Height = Application.GetRealHeight(16 + 44) };
                vv.AddChidren(currFLayout);
                for (int a = i * sum + 1, b = 0; a <= buttonList.Count; a++, b++)
                {
                    var name = buttonList[a - 1];
                    var nameBtn = new Button
                    {
                        Y = Application.GetRealHeight(16),
                        X = Application.GetRealWidth(24 + (98 + 16) * b),
                        // Gravity=Gravity.CenterVertical,
                        Width = Application.GetRealWidth(98),
                        Height = Application.GetRealHeight(44),
                        Text = name,
                        TextSize = TextSize.text16,
                        TextColor = CSS.CSS_Color.textColor,
                        TextAlignment = TextAlignment.Center,
                        Radius = (uint)Application.GetRealHeight(8),
                        BorderWidth = 1,
                        BorderColor = CSS.CSS_Color.textCancelColor,
                    };
                    currFLayout.AddChidren(nameBtn);
                    nameBtn.MouseUpEventHandler += (sender, e) =>
                    {
                        action(nameBtn.Text);
                    };
                    if (a % sum == 0)
                    {
                        break;
                    }
                }
                if (i == line - 1)
                {
                    //最后一个元素后面加一个20高度间隔
                    vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(20) });
                }
            }
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="tag">标记值</param>
        /// <returns></returns>
        public List<string> GetList(string tag)
        {
            List<string> list = new List<string>();
            switch (tag)
            {
                case "默认按钮":
                    {
                        list.Add(Language.StringByID(StringId.dianyuan));
                        list.Add(Language.StringByID(StringId.yinliangjia));
                        list.Add(Language.StringByID(StringId.yinliangjian));
                        list.Add(Language.StringByID(StringId.pindaojia));
                        list.Add(Language.StringByID(StringId.pindaojian));
                        list.Add(Language.StringByID(StringId.shang));
                        list.Add(Language.StringByID(StringId.xia));
                        list.Add(Language.StringByID(StringId.zuo));
                        list.Add(Language.StringByID(StringId.you));
                        list.Add(Language.StringByID(StringId.jingyin));
                        list.Add(Language.StringByID(StringId.queren));
                        list.Add(Language.StringByID(StringId.bofang));
                        list.Add(Language.StringByID(StringId.xiayibu));
                        list.Add(Language.StringByID(StringId.tuichu));
                        list.Add(Language.StringByID(StringId.caidan));
                        list.Add(Language.StringByID(StringId.zanting));
                        list.Add(Language.StringByID(StringId.fanhui));
                        list.Add(Language.StringByID(StringId.tingzhi));
                        list.Add(Language.StringByID(StringId.zhuye));
                        list.Add(Language.StringByID(StringId.kuaijin));
                        list.Add(Language.StringByID(StringId.kuaitui));
                        list.Add(Language.StringByID(StringId.dingshi));
                    }
                    break;
            }
            return list;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs
New file
@@ -0,0 +1,65 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class FailView
    {
        public void ShouError(Action<Dialog> action)
        {
            Dialog dialog = new Dialog();
            #region 界面布局
            dialog.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
            dialog.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { dialog.Close(); };
            FrameLayout fLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64),
                BackgroundColor = CSS.CSS_Color.textWhiteColor,
                Height = Application.GetRealHeight(667-64),
                Width = Application.GetRealWidth(375),
            };
            dialog.AddChidren(fLayout);
            //图标
            Button iconBtn = new Button
            {
                Y = Application.GetRealHeight(106),
                X = Application.GetRealWidth(98),
                Width = Application.GetRealWidth(180),
                Height = Application.GetRealWidth(180),
                UnSelectedImagePath = "PirIcon/failed.png",
            };
            fLayout.AddChidren(iconBtn);
            //添加失败
            Button text1Btn = new Button
            {
                Width = Application.GetRealWidth(375 - 32),
                Height = Application.GetRealHeight(22),
                Y = Application.GetRealHeight(302),
                X = Application.GetRealWidth(16),
                TextID = StringId.tianjiashibai,
                TextSize = TextSize.text16,
                TextColor = CSS.CSS_Color.textRedColor,
                TextAlignment = TextAlignment.Center,
            };
            fLayout.AddChidren(text1Btn);
            //重试
            View.SaveView saveView = new View.SaveView();
            dialog.AddChidren(saveView.FLayoutView());
            saveView.btnSave.TextID = StringId.chongshii;
            saveView.frameLayout.BackgroundColor = CSS.CSS_Color.viewLine;
            saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            dialog.Show();
            saveView.btnClick.MouseUpEventHandler += (sender,e) => {
                action(dialog);
            };
            #endregion
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs
New file
@@ -0,0 +1,96 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class PatchView
    {
        /// <summary>
        /// 主控件View
        /// </summary>
        public FrameLayout frameLayout = new FrameLayout
        {
            Height = Application.GetRealHeight(44),
            BackgroundColor = CSS.CSS_Color.textWhiteColor,
        };
        /// <summary>
        /// 文本描述1
        /// </summary>
        public Button btnText1 = new Button
        {
            X = Application.GetRealWidth(16),
            Width = Application.GetRealWidth(300),
            Height = Application.GetRealHeight(20),
            TextColor = CSS.CSS_Color.textColor,
            TextSize = TextSize.text14,
            Gravity = Gravity.CenterVertical,
            TextAlignment = TextAlignment.CenterLeft,
        };
        /// <summary>
        /// 文本描述2
        /// </summary>
        public Button btnText2 = new Button
        {
            X = Application.GetRealWidth(375 - 40 - 150),
            Width = Application.GetRealWidth(150),
            Height = Application.GetRealHeight(20),
            TextColor = CSS.CSS_Color.textTipColor,
            TextSize = TextSize.text14,
            Gravity = Gravity.CenterVertical,
            TextAlignment = TextAlignment.CenterRight,
        };
        /// <summary>
        /// 图标
        /// </summary>
        public Button btnNextIcon = new Button
        {
            Width = Application.GetRealWidth(16),
            Height = Application.GetRealWidth(16),
            UnSelectedImagePath = "PirIcon/next.png",
            X = Application.GetRealWidth(343),
            Gravity = Gravity.CenterVertical,
        };
        /// <summary>
        /// 线
        /// </summary>
        public Button btnLine = new Button
        {
            Width = Application.GetRealWidth(343),
            X = Application.GetRealWidth(16),
            Height = 1,
            BackgroundColor = CSS.CSS_Color.viewLine,
        };
        public Button btnClick = new Button
        {
            Height = Application.GetRealHeight(44),
        };
        /// <summary>
        /// View的方法
        /// </summary>
        /// <returns></returns>
        public FrameLayout FLayoutView(bool if_bool = true)
        {
            frameLayout.AddChidren(btnText1);
            frameLayout.AddChidren(btnText2);
            if (if_bool)
            {
                btnText2.X = Application.GetRealWidth(375 - 40 - 150);
                frameLayout.AddChidren(btnNextIcon);
            }
            else
            {
                btnText2.X = Application.GetRealWidth(375 - 16 - 150);
            }
            btnLine.Y = frameLayout.Height - 1;
            frameLayout.AddChidren(btnLine);
            frameLayout.AddChidren(btnClick);
            return frameLayout;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs
New file
@@ -0,0 +1,69 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class ReplicationView
    {
        Dialog dialog = new Dialog();
        /// <summary>
        ///
        /// </summary>
        public void Show()
        {
            #region 界面布局
            dialog.BackgroundColor = CSS.CSS_Color.viewMiddle;
            PirDevice.View.TopView topView = new View.TopView();
            topView.topNameBtn.TextID = StringId.fuzhiyaokonggongnneg;
            dialog.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { dialog.Close();};
            FrameLayout frameLayout = new FrameLayout();
            frameLayout.Height = Application.GetRealHeight(667 - 64);
            frameLayout.Y = Application.GetRealHeight(64);
           // frameLayout.BackgroundColor = CSS.CSS_Color.textWhiteColor;
            dialog.AddChidren(frameLayout);
            var textBtn = new Button
            {
                Y = Application.GetRealHeight(24),
                X = Application.GetRealWidth(10),
                Width = Application.GetRealWidth(375 - 20),
                Height = Application.GetRealHeight(20),
                TextSize = TextSize.text14,
                TextColor = CSS.CSS_Color.textColor,
                TextAlignment = TextAlignment.Center,
                TextID = StringId.duizhunanxiaanniu,
            };
            frameLayout.AddChidren(textBtn);
            var icon1Btn = new Button
            {
                Y = Application.GetRealHeight(91),
                X = Application.GetRealWidth((375 - 149) / 2),
                Width = Application.GetRealWidth(149),
                Height = Application.GetRealHeight(95),
                UnSelectedImagePath = "PirIcon/icon1.png",
            };
            frameLayout.AddChidren(icon1Btn);
            var icon2Btn = new Button
            {
                Y = Application.GetRealHeight(289),
                X = Application.GetRealWidth(122),
                Width = Application.GetRealWidth(182),
                Height = Application.GetRealHeight(314),
                UnSelectedImagePath = "PirIcon/icon2.png",
            };
            frameLayout.AddChidren(icon2Btn);
            dialog.Show();
            #endregion
        }
        /// <summary>
        /// 移除当前界面
        /// </summary>
        public void RemView() {
            dialog.Close();
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs
New file
@@ -0,0 +1,52 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class SaveView
    {
        /// <summary>
        /// 主控件View
        /// </summary>
        public FrameLayout frameLayout = new FrameLayout
        {
            Y = Application.GetRealHeight(TextSize.view667 - 76),
            Height = Application.GetRealHeight(76),
            Width = Application.GetRealWidth(TextSize.view375),
            Gravity = Gravity.BottomCenter,//置底的属性
            BackgroundColor = CSS.CSS_Color.view,
        };
        /// <summary>
        /// 保存
        /// </summary>
        public Button btnSave = new Button
        {
            Width = Application.GetRealWidth(220),
            Height = Application.GetRealHeight(44),
            Y = Application.GetRealHeight(12),
            X = Application.GetRealWidth(78),
            TextID = StringId.save,
            TextSize = TextSize.text16,
            TextColor = CSS.CSS_Color.textWhiteColor,
            TextAlignment = TextAlignment.Center,
            BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
            Radius = (uint)Application.GetRealHeight(22),
        };
        public Button btnClick = new Button
        {
            Height = Application.GetRealHeight(76),
        };
        /// <summary>
        /// 保存
        /// </summary>
        /// <returns></returns>
        public FrameLayout FLayoutView()
        {
            frameLayout.AddChidren(btnSave);
            frameLayout.AddChidren(btnClick);
            return frameLayout;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs
New file
@@ -0,0 +1,179 @@
using System;
using System.Collections.Generic;
using HDL_ON.UI.CSS;
using HDL_ON.UI.Music;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class TipView
    {
        /// <summary>
        /// 大框圆角值
        /// </summary>
        public int RradiusFrameLayout = 15;
        /// <summary>
        /// 小框圆角值
        /// </summary>
        public int radiusEditFrameLayout = 4;
        /// <summary>
        /// 输入框
        /// </summary>
        /// <param name="confirmAction">回调函数</param>
        public void InputBox(string tnputEditTxet, Action<string, Dialog> confirmAction,bool if_bool=true)
        {
            Dialog dialog = new Dialog()
            {
                BackgroundColor = MusicColor.PopupBackgroundColor,
            };
            FrameLayout whiteView = new FrameLayout()
            {
                //Gravity = Gravity.Center,
                X = Application.GetRealWidth(53),
                Y = Application.GetRealHeight(264),
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(201),
                BackgroundColor = MusicColor.WhiteColor,
                BorderColor = 0x00000000,
                BorderWidth = 0,
                Radius = (uint)Application.GetRealHeight(RradiusFrameLayout),
            };
            dialog.AddChidren(whiteView);
            Button btnTitle = new Button()
            {
                Y = Application.GetRealHeight(20),
                X = Application.GetRealWidth(35),
                Height = Application.GetRealHeight(22),
                Width = Application.GetRealWidth(200),
                TextColor = MusicColor.SelectedColor,
                TextSize = TextSize.Text16,
                TextAlignment = TextAlignment.Center,
                TextID = StringId.shuruyaokongqimingcheng,
            };
            whiteView.AddChidren(btnTitle);
            FrameLayout editBjView = new FrameLayout()
            {
                // Gravity = Gravity.CenterHorizontal,
                Y = btnTitle.Bottom + Application.GetRealHeight(16),
                X = Application.GetRealWidth(24),
                Width = Application.GetRealWidth(222),
                Height = Application.GetRealHeight(40),
                BackgroundColor = MusicColor.ViewColor,
                BorderColor = 0x00000000,
                BorderWidth = 0,
                Radius = (uint)Application.GetMinRealAverage(radiusEditFrameLayout),
            };
            whiteView.AddChidren(editBjView);
            EditText editText = new EditText()
            {
                X = Application.GetRealWidth(12),
                Y = Application.GetRealHeight(10),
                Width = Application.GetRealWidth(160),
                Height = Application.GetRealHeight(20),
                Text = tnputEditTxet,
                TextColor = MusicColor.TextColor,
                TextSize = TextSize.Text14,
                TextAlignment = TextAlignment.CenterLeft,
            };
            editBjView.AddChidren(editText);
            Button clearIconBtn = new Button
            {
                X = Application.GetRealWidth(194),
                Y = Application.GetRealHeight(8),
                Width = Application.GetRealWidth(24),
                Height = Application.GetRealWidth(24),
                UnSelectedImagePath = "MusicIcon/clear.png",
            };
            editBjView.AddChidren(clearIconBtn);
            clearIconBtn.MouseUpEventHandler += (sender, e) =>
            {
                editText.Text = "";
            };
            Button btnTipText = new Button
            {
                X = Application.GetRealWidth(24),
                Y = editBjView.Bottom + Application.GetRealHeight(12),
                Width = Application.GetRealWidth(211),
                Height = Application.GetRealHeight(35),
                Text = Language.StringByID(StringId.fengleichazhao).Replace("{\\r\\n}", "\r\n"),
                IsMoreLines = true,
                TextColor = MusicColor.MusicNoTxetColor,
                TextSize = TextSize.Text12,
                TextAlignment = TextAlignment.CenterLeft,
            };
            whiteView.AddChidren(btnTipText);
             Button btnLine = new Button()
            {
                Y = whiteView.Height -Application.GetRealHeight(44 + 1),
                Height = Application.GetRealHeight(1),
                BackgroundColor = MusicColor.LineColor,
            };
            whiteView.AddChidren(btnLine);
            Button btnCancel = new Button()
            {
                Y = btnLine.Bottom,
                Width = Application.GetRealWidth(135),
                Height = Application.GetRealHeight(44),
                TextAlignment = TextAlignment.Center,
                TextColor = MusicColor.TextCancelColor,
                TextSize = TextSize.Text16,
                TextID = StringId.cancelMusic,
                Gravity = Gravity.BottomLeft,
            };
            whiteView.AddChidren(btnCancel);
            btnCancel.SetCornerWithSameRadius(Application.GetRealHeight(RradiusFrameLayout), HDLUtils.RectCornerBottomLeft);
            Button btnConfirm = new Button()
            {
                X = btnCancel.Right,
                Y = btnLine.Bottom,
                Width = Application.GetRealWidth(135),
                Height = Application.GetRealHeight(44),
                TextAlignment = TextAlignment.Center,
                TextColor = MusicColor.WhiteColor,
                IsBold = true,
                TextSize = TextSize.Text16,
                TextID = StringId.confirmMusic,
                BackgroundColor = MusicColor.SelectedColor,
                Gravity = Gravity.BottomRight,
            };
            whiteView.AddChidren(btnConfirm);
            btnConfirm.SetCornerWithSameRadius(Application.GetRealHeight(RradiusFrameLayout), HDLUtils.RectCornerBottomRight);
            dialog.Show();
            btnCancel.MouseUpEventHandler += (sender, e) =>
            {
                dialog.Close();
            };
            btnConfirm.MouseUpEventHandler += (sender, e) =>
            {
                if (string.IsNullOrEmpty(editText.Text.Trim()))
                {
                    return;
                }
                confirmAction(editText.Text.Trim(), dialog);
                if (if_bool) {
                    dialog.Close();
                }
            };
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs
New file
@@ -0,0 +1,87 @@
using System;
using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
using Shared;
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
{
    public class TopView
    {
        #region 最上面那块控件
        /// <summary>
        /// 最上面块View
        /// </summary>
        public FrameLayout frameLayout = new FrameLayout
        {
            BackgroundColor = CSS.CSS_Color.viewTop,
            Height = Application.GetRealHeight(64),
            Width = Application.GetRealWidth(375),
        };
        /// <summary>
        /// 标题Btn
        /// </summary>
        public Button topNameBtn = new Button
        {
            TextSize = TextSize.text18,
            TextColor = CSS.CSS_Color.textColor,
            Width = Application.GetRealWidth(TextSize.view375 - 60 - 60),
            Height = Application.GetRealHeight(25),
            Y = Application.GetRealHeight(30),
            X = Application.GetRealWidth(60)
        };
        /// <summary>
        /// 后退Btn
        /// </summary>
        public Button backBtn = new Button
        {
            Width = Application.GetRealWidth(12),
            Height = Application.GetRealWidth(20),
            X = Application.GetRealWidth(TextSize.left16),
            Y = Application.GetRealHeight(32),
            UnSelectedImagePath = "LogicIcon/back.png",
        };
        /// <summary>
        /// 图标Btn
        /// </summary>
        public Button topIconBtn = new Button
        {
            Y = Application.GetRealHeight(29),
            X = Application.GetRealWidth(337),
            Width = Application.GetRealWidth(28),
            Height = Application.GetRealWidth(28),
            UnSelectedImagePath = "PirIcon/adddevice.png",
            Visible = false,
        };
        /// <summary>
        /// 增加热键大小Btn
        /// </summary>
        public Button clickBackBtn = new Button
        {
            Width = Application.GetRealWidth(16 + 12 + 16),
            Height = Application.GetRealHeight(64),
        };
        /// <summary>
        /// 设置图标增加热键大小
        /// </summary>
        public Button clickSetBtn = new Button
        {
            X = Application.GetRealWidth(337 - 37),
            Width = Application.GetRealWidth(28 + 37),
            Height = Application.GetRealWidth(28 + 7 + 29),
        };
        /// <summary>
        /// 最上面的那块方法
        /// </summary>
        /// <returns></returns>
        public FrameLayout FLayoutView()
        {
            frameLayout.AddChidren(topNameBtn);
            frameLayout.AddChidren(backBtn);
            frameLayout.AddChidren(topIconBtn);
            frameLayout.AddChidren(clickBackBtn);
            frameLayout.AddChidren(clickSetBtn);
            return frameLayout;
        }
        #endregion
    }
}
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs
@@ -40,6 +40,12 @@
            this.RefreshNowDeviceStatuMemory(this.device);
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                DriverLayer.Control.Ins.SendReadCommand(device);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
@@ -111,7 +117,7 @@
                var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                if (temp != null)
                {
                    if (temp.value == "true")
                    if (temp.value == "open")
                    {
                        btnIcon.IsSelected = true;
                        btnSuctionView.TextID = StringId.Open;
@@ -136,11 +142,27 @@
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            foreach (var data in i_LocalDevice.status)
            {
                //开关
                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
            }
            //foreach (var data in i_LocalDevice.status)
            //{
            //    if (data.key == FunctionAttributeKey.Status)
            //    {
            //        Application.RunOnMainThread(() =>
            //        {
            //            if (data.value.ToLower() == "open")
            //            {
            //                this.btnIcon.IsSelected = true;
            //                this.btnSuctionView.IsSelected = true;
            //                this.btnSuctionView.TextID = StringId.Open;
            //            }
            //            else
            //            {
            //                this.btnIcon.IsSelected = false;
            //                this.btnSuctionView.IsSelected = false;
            //                this.btnSuctionView.TextID = StringId.Close;
            //            }
            //        });
            //    }
            //}
        }
        #endregion
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs
@@ -40,6 +40,12 @@
            this.RefreshNowDeviceStatuMemory(this.device);
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                DriverLayer.Control.Ins.SendReadCommand(device);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
@@ -111,7 +117,7 @@
                var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                if (temp != null)
                {
                    if (temp.value == "true")
                    if (temp.value == "alarm")
                    {
                        btnIcon.IsSelected = true;
                        btnSuctionView.TextID = StringId.InAlarm;
@@ -136,11 +142,24 @@
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            foreach (var data in i_LocalDevice.status)
            {
                //开关
                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
            }
            //foreach (var data in i_LocalDevice.status)
            //{
            //    if (data.key == "status")
            //    {
            //        if (data.value.ToLower() == "alarm")
            //        {
            //            this.btnIcon.IsSelected = true;
            //            this.btnSuctionView.IsSelected = true;
            //            this.btnSuctionView.TextID = StringId.InAlarm;
            //        }
            //        else
            //        {
            //            this.btnIcon.IsSelected = false;
            //            this.btnSuctionView.IsSelected = false;
            //            this.btnSuctionView.TextID = StringId.SensorNormalState;
            //        }
            //    }
            //}
        }
        #endregion
HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs
@@ -40,6 +40,12 @@
            this.RefreshNowDeviceStatuMemory(this.device);
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                DriverLayer.Control.Ins.SendReadCommand(device);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
@@ -111,7 +117,7 @@
                var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                if (temp != null)
                {
                    if (temp.value == "true")
                    if (temp.value == "alarm")
                    {
                        btnIcon.IsSelected = true;
                        btnSuctionView.TextID = StringId.WaterLeakage;
@@ -136,11 +142,21 @@
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            foreach (var data in i_LocalDevice.status)
            {
                //开关
                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
            }
            //foreach (var data in i_LocalDevice.status)
            //{
            //    if (data.value.ToLower() == "alarm")
            //    {
            //        this.btnIcon.IsSelected = true;
            //        this.btnSuctionView.IsSelected = true;
            //        this.btnSuctionView.TextID = StringId.WaterLeakage;
            //    }
            //    else
            //    {
            //        this.btnIcon.IsSelected = false;
            //        this.btnSuctionView.IsSelected = false;
            //        this.btnSuctionView.TextID = StringId.SensorNormalState;
            //    }
            //}
        }
        #endregion
HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
@@ -1,21 +1,475 @@
using System;
using Shared;
using Shared;
using HDL_ON.Stan;
using HDL_ON.UI.CSS;
using HDL_ON.Entity;
using System.Collections.Generic;
using System;
using HDL_ON.DriverLayer;
namespace HDL_ON.UI
{
    /// <summary>
    /// 晾衣架界面
    /// </summary>
    public class ClothesHangerPage : FrameLayout
    public class ClothesHangerPage : DeviceFunctionCardCommonForm
    {
        public ClothesHangerPage()
        #region ■ 变量声明___________________________
        /// <summary>
        /// 图标
        /// </summary>
        private Button btnIcon = null;
        /// <summary>
        /// 上升
        /// </summary>
        Button btnUp;
        /// <summary>
        /// 停止
        /// </summary>
        Button btnStop;
        /// <summary>
        /// 下降
        /// </summary>
        Button btnDown;
        /// <summary>
        /// 烘干控件
        /// </summary>
        ClothesHangerControl hotDryView;
        /// <summary>
        /// 风干控件
        /// </summary>
        ClothesHangerControl windDryView;
        /// <summary>
        /// 消毒控件
        /// </summary>
        ClothesHangerControl disinfectView;
        /// <summary>
        /// 照明控件
        /// </summary>
        ClothesHangerControl lightingView;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 初始化白色区域的内容
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.ShowColltionButton = false;
            base.SetTitleText(Language.StringByID(StringId.Electric));
            //初始化第一个索引页的内容
            this.InitFrameWhiteContent1();
            //刷新当前设备的状态缓存
            this.RefreshNowDeviceStatuMemory(this.device);
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                Control.Ins.SendReadCommand(device);
            })
            { IsBackground = true }.Start();
        }
        public void LoadPage()
        /// <summary>
        /// 初始化第一个索引页的内容
        /// </summary>
        private void InitFrameWhiteContent1()
        {
            btnIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(85),
                Width = Application.GetRealWidth(195),
                Height = Application.GetRealHeight(121),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnIcon);
            #region 上升 停止 下降
            btnUp = new Button()
            {
                X = Application.GetRealWidth(42),
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnUp);
            btnStop = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnStop);
            btnDown = new Button()
            {
                X = Application.GetRealWidth(257),
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnDown);
            #endregion
            #region 菜单
            var menu = new List<string>() {
                FunctionAttributeKey.HotDry,
                FunctionAttributeKey.WindDry,
                FunctionAttributeKey.Disinfect,
                FunctionAttributeKey.OnOff
            };
            int index = 0;
            List<string> attrs = device.GetAttributes();
            hotDryView = new ClothesHangerControl(
                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png",
                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png",
                            Language.StringByID(StringId.HotDry),
                            device.GetAttrState(FunctionAttributeKey.HotDryTimeLeft));
            hotDryView.X = 0;
            hotDryView.Y = Application.GetRealHeight(304);
            hotDryView.Width = Application.GetRealWidth(96);
            hotDryView.Height = Application.GetRealHeight(74);//28 29 14 3
            if (attrs.Contains(menu[0]))
            {
                FrameWhiteCentet1.AddChidren(hotDryView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                    device.SetAttrState(FunctionAttributeKey.HotDry, "true");
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.HotDry, "true");
                    Control.Ins.SendWriteCommand(device, d);
                };
                hotDryView.SetThouchEvent(eventHandler);
                index++;
        }
            windDryView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png",
                                Language.StringByID(StringId.WindDry),
                                device.GetAttrState(FunctionAttributeKey.WindDryTimeLeft));
            windDryView.Y = Application.GetRealHeight(304);
            windDryView.Width = Application.GetRealWidth(96);
            windDryView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[1]))
            {
                if(index == 1)
                {
                    windDryView.Gravity = Gravity.CenterHorizontal;
                }
                FrameWhiteCentet1.AddChidren(windDryView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                    device.SetAttrState(FunctionAttributeKey.WindDry, "true");
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.WindDry, "true");
                    Control.Ins.SendWriteCommand(device, d);
                };
                windDryView.SetThouchEvent(eventHandler);
                index++;
            }
            disinfectView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png",
                                Language.StringByID(StringId.Disinfect),
                                device.GetAttrState(FunctionAttributeKey.DisinfectTimeLeft));
            disinfectView.Y = Application.GetRealHeight(304);
            disinfectView.Width = Application.GetRealWidth(96);
            disinfectView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[2]))
            {
                if(index == 1)
                {
                    disinfectView.Gravity = Gravity.CenterHorizontal;
                }
                else if (index == 2)
                {
                    disinfectView.X = Application.GetRealWidth(266 - 33);
                }
                FrameWhiteCentet1.AddChidren(disinfectView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                    device.SetAttrState(FunctionAttributeKey.Disinfect, "true");
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Disinfect, "true");
                    Control.Ins.SendWriteCommand(device, d);
                };
                disinfectView.SetThouchEvent(eventHandler);
                index++;
            }
            lightingView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png",
                                Language.StringByID(StringId.Lighting),
                                "");
            lightingView.Width = Application.GetRealWidth(96);
            lightingView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[3]))
            {
                if(index >2)
                {
                    lightingView.Y = Application.GetRealHeight(409);
                }else
                {
                    lightingView.Y = Application.GetRealHeight(304);
                    if (index == 1)
                    {
                        lightingView.Gravity = Gravity.CenterHorizontal;
                    }
                    else if (index == 2)
                    {
                        lightingView.X = Application.GetRealWidth(266 - 33);
                    }
                }
                FrameWhiteCentet1.AddChidren(lightingView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                    string onoff = lightingView.Lighting ? "off" : "on";
                    device.SetAttrState(FunctionAttributeKey.OnOff, onoff);
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.OnOff, onoff);
                    Control.Ins.SendWriteCommand(device, d);
                };
                lightingView.SetThouchEvent(eventHandler);
                index++;
            }
            #endregion
        }
        #endregion
        #region ■ 设备状态反馈_______________________
        /// <summary>
        /// 设备状态反馈
        /// </summary>
        /// <param name="i_LocalDevice"></param>
        public override void DeviceStatuPush(Function i_LocalDevice)
        {
            //不是同一个东西
            if (this.device.sid != i_LocalDevice.sid) { return; }
            //刷新当前设备的状态缓存
            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
            //刷新界面状态
            this.RefreshFormStatu();
        }
        #endregion
        #region ■ 发送各种命令_______________________
        #endregion
        #region ■ 刷新界面状态_______________________
        /// <summary>
        /// 刷新界面状态
        /// </summary>
        private void RefreshFormStatu()
        {
            Application.RunOnMainThread(() => {
                btnIcon.IsSelected = true;
                #region 点亮文本
                var hotDryTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.HotDry);
                if (hotDryTemp != null)
                {
                    hotDryView.SetViewStatus(hotDryTemp.value == "true");
                }
                var windDryTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.WindDry);
                if (windDryTemp != null)
                {
                    windDryView.SetViewStatus(windDryTemp.value == "true");
                }
                var disinfectTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Disinfect);
                if (disinfectTemp != null)
                {
                    disinfectView.SetViewStatus(disinfectTemp.value == "true");
                }
                var lightTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.OnOff);
                if (lightTemp != null)
                {
                    lightingView.SetViewStatus(lightTemp.value == "on");
                }
                #endregion
                #region 修改时间
                var hotDryTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.HotDryTimeLeft);
                if (hotDryTimeLeftTemp != null)
                {
                    hotDryView.ChangeTime(hotDryTimeLeftTemp.value);
                }
                var windDryTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.WindDryTimeLeft);
                if (windDryTimeLeftTemp != null)
                {
                    windDryView.ChangeTime(windDryTimeLeftTemp.value);
                }
                var disinfectTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.DisinfectTimeLeft);
                if (disinfectTimeLeftTemp != null)
                {
                    disinfectView.ChangeTime(disinfectTimeLeftTemp.value);
                }
                #endregion
            });
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 刷新当前设备的状态缓存
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            foreach (var data in i_LocalDevice.status)
            {
                //开关
                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
            }
        }
        #endregion
    }
    public class ClothesHangerControl : FrameLayout
    {
        private Button btnIcon;
        private Button btnTitle;
        private Button btnTime;
        /// <summary>
        /// 控件是否点亮
        /// </summary>
        public bool Lighting = false;
        public ClothesHangerControl(string iconPath1, string iconPath2,string title,string time)
        {
            btnIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = iconPath1,
                SelectedImagePath = iconPath2,
            };
            this.AddChidren(btnIcon);
            btnTitle = new Button()
            {
                Gravity = Gravity.Center,
                Text = title,
                Height = Application.GetRealHeight(42),
                TextColor = CSS_Color.TextualColor,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            this.AddChidren(btnTitle);
            btnTime = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = btnTitle.Bottom,
                Height = Application.GetRealHeight(32),
                Text = time,
                TextColor = 0x00000000,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
            };
            this.AddChidren(btnTime);
        }
        /// <summary>
        /// 修改显示时间
        /// </summary>
        /// <param name="newTime"></param>
        public void ChangeTime (string newTime)
        {
            if(newTime == "0")
            {
                newTime = "";
            }
            int time = 0;
            int.TryParse(newTime, out time);
            time = time * 60;
            if (countdownThread == null)
            {
                countdownThread = new System.Threading.Thread(() => {
                    while(true)
                    {
                        if(time>1)
                        {
                            Application.RunOnMainThread(() =>
                            {
                                btnTime.Text = new TimeSpan(0, 0, time).ToString();
                            });
                            System.Threading.Thread.Sleep(1000);
                            time--;
                        }else
                        {
                            Application.RunOnMainThread(() =>
                            {
                                btnTime.Text = "";
                            });
                        }
                    }
                }) { IsBackground = true };
                countdownThread.Start();
            }
        }
        public void SetViewStatus(bool state)
        {
            btnIcon.IsSelected = btnTitle.IsSelected = btnTime.IsSelected = Lighting = state;
        }
        public bool GetViewState()
        {
            return Lighting;
        }
        /// <summary>
        /// 设置点击事件
        /// </summary>
        public void SetThouchEvent(EventHandler<MouseEventArgs> eventHandler)
        {
            btnIcon.MouseUpEventHandler = eventHandler;
            btnTime.MouseUpEventHandler = eventHandler;
            btnTitle.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// 倒计时线程
        /// </summary>
        System.Threading.Thread countdownThread;
    }
}
HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
@@ -70,6 +70,7 @@
                    //Control.Send(CommandType_A.write, this.fan);
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add("on_off", fan.trait_on_off.curValue.ToString());
                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                    Control.Ins.SendWriteCommand(fan, d);
                })
                { IsBackground = true }.Start();
@@ -84,6 +85,7 @@
                    //Control.Send(CommandType_A.write, this.fan);
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add("on_off", fan.trait_on_off.curValue.ToString());
                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                    Control.Ins.SendWriteCommand(fan, d);
                })
                { IsBackground = true }.Start();
@@ -97,6 +99,7 @@
                    //Control.Send(CommandType_A.write, this.fan);
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add("on_off", fan.trait_on_off.curValue.ToString());
                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                    Control.Ins.SendWriteCommand(fan, d);
                })
                { IsBackground = true }.Start();
HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs
old mode 100755 new mode 100644
@@ -42,7 +42,7 @@
            frameBack.AddChidren(rowTime);
            btnCaption = rowTime.AddLeftCaption(Language.StringByID(StringId.TotalCleaningTime), 200);
            btnCaption.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
            rowTime.AddMostRightView((robotData.CleanTime / 60) + "min", 100);
            rowTime.AddMostRightView((robotData.CleanTime) + "min", 100);
        }
        #endregion
HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
@@ -170,6 +170,7 @@
            btnVoiceIcon.X = btnChargeIcon.Right + Application.GetRealWidth(50);
            btnVoiceIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Voice.png";
            btnVoiceIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/VoiceSelect.png";
            btnVoiceIcon.IsSelected = true;
            FrameWhiteCentet1.AddChidren(btnVoiceIcon);
            btnVoiceIcon.ButtonClickEvent += (sender, e) =>
            {
@@ -280,7 +281,7 @@
            //吸力1档
            var iconPath = this.weepRobotData.Suction == "quiet" ? "FunctionIcon/Electrical/WeepRobot/SuctionSelect.png" : "FunctionIcon/Electrical/WeepRobot/Suction.png";
            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionOneGear), iconPath, this.weepRobotData.Suction == "strong", () =>
            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionOneGear), iconPath, this.weepRobotData.Suction == "quiet", () =>
            {
                frameBack.Close();
                //发送吸力命令
@@ -298,7 +299,7 @@
            //吸力3档
            iconPath = this.weepRobotData.Suction == "strong" ? "FunctionIcon/Electrical/WeepRobot/SuctionSelect.png" : "FunctionIcon/Electrical/WeepRobot/Suction.png";
            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionThreeGear), iconPath, this.weepRobotData.Suction == "quiet", () =>
            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionThreeGear), iconPath, this.weepRobotData.Suction == "strong", () =>
            {
                frameBack.Close();
                //发送吸力命令
@@ -476,12 +477,12 @@
            //如果是清扫状态
            if (this.weepRobotData.Cleaning == true)
            {
                //吸力调节不可用
                this.btnSuctionIcon.IsSelected = false;
                this.btnSuctionIcon.CanClick = false;
                //吸力调节可用
                this.btnSuctionIcon.IsSelected = true;
                this.btnSuctionIcon.CanClick = true;
                //声音不可用
                this.btnVoiceIcon.IsSelected = false;
                this.btnVoiceIcon.CanClick = false;
                //this.btnVoiceIcon.IsSelected = false;
                //this.btnVoiceIcon.CanClick = false;
                //清扫模式不可用
                this.btnModeIcon.IsSelected = false;
                this.btnModeIcon.CanClick = false;
@@ -494,12 +495,12 @@
            }
            else
            {
                //吸力调节可用
                this.btnSuctionIcon.IsSelected = true;
                this.btnSuctionIcon.CanClick = true;
                //吸力调节不可用
                this.btnSuctionIcon.IsSelected = false;
                this.btnSuctionIcon.CanClick = false;
                //声音可用
                this.btnVoiceIcon.IsSelected = true;
                this.btnVoiceIcon.CanClick = true;
                //this.btnVoiceIcon.IsSelected = true;
                //this.btnVoiceIcon.CanClick = true;
                //清扫模式可用
                this.btnModeIcon.IsSelected = true;
                this.btnModeIcon.CanClick = true;
@@ -560,8 +561,9 @@
        /// </summary>
        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
        {
            foreach (var data in i_LocalDevice.status)
            for (int i = 0; i < i_LocalDevice.status.Count; i++)
            {
                var data = i_LocalDevice.status[i];
                //开关
                if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
                //寻找机器
@@ -651,7 +653,7 @@
            /// <summary>
            /// 是否处于清扫中
            /// </summary>
            public bool Cleaning = true;
            public bool Cleaning = false;
            /// <summary>
            /// 寻找机器
            /// </summary>
@@ -705,7 +707,7 @@
            /// </summary>
            public int Filter = 0;
            /// <summary>
            /// 清扫时间(0-432000)
            /// 清扫时间(0-432000) 单位为分钟
            /// </summary>
            public int CleanTime = 0;
            /// <summary>