HDL-ON_Android/Assets/Language.ini
@@ -585,7 +585,7 @@ 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices @@ -951,23 +951,6 @@ 6000=Rename 6001=Please enter a name 6002=Xiaodu 6003=aispeech 6004="Unbind requires a third-party APP for operation", "transfer to a third-party APP" 6005=Unbind 6006=Smart speaker 6007=Control content 6008=Failed to upload data 6009=Failed to configure data 6010="There is no speaker yet,", "Please go to the third-party APP to bind the smart speaker." 6011=Modification of remarks is unsuccessful! 6012=Do you want to unbind? 6013=Unbinding... 6014=transfer to third-party APP 6015=Add speakers 7000=Create automation 7001=Edit automation @@ -1152,9 +1135,6 @@ 8511=User Education 8512=Serial number 8513=Model @@ -1860,6 +1840,7 @@ 598=选择群控设备 599=请输入组名称 600=添加组合调光 601=请选择两个以上的设备 @@ -2412,9 +2393,6 @@ 8511=用户人员 8512=序列号 8513=型号 @@ -3116,6 +3094,7 @@ 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices @@ -3378,6 +3357,8 @@ 5045=Основная громкость 5046=Регулировка громкости 5047=Сервис"QQ music" не установлен на вашем мобильном телефоне, пожалуйста, перейдите в центр приложений. 5048= Progressive cycle 5049=Single play 6000=Нормальный 6001=Состояние устройства @@ -3477,23 +3458,6 @@ 6000=Переименовать 6001=Пожалуйста, введите название 6002=марка Xiaodu 6003=Распознаватель речи 6004="Для отмены привязки требуется стороннее приложение ", "передать в стороннее приложение" 6005=Отвязать 6006=Умный динамик 6007=Управление содержимым 6008=Не удалось загрузить данные 6009=Не удалось настроить данные 6010="Динамик еще не установлен", "Пожалуйста, перейдите в стороннее приложение, чтобы привязать смарт динамик". 6011=Изменение примечаний не удалось! 6012=Вы хотите отменить привязку? 6013=Отвязывание... 6014=переход в стороннее приложение 6015=Добавить динамики 7000=Создать автоматизацию @@ -3651,6 +3615,34 @@ 7152=Покинуть или прибыть 7153=Покинуть 7154=Прибыть 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model @@ -4351,6 +4343,7 @@ 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices 2532=Visitor Invitation Record @@ -4612,6 +4605,8 @@ 5045=Volumen general 5046=Ajustar volumen 5047="QQ music" no se ha instalado en su teléfono celular, proceda en el Centro de aplicaciones. 5048= Progressive cycle 5049=Single play 6000=Normal 6001=Estado del dispositivo @@ -4707,22 +4702,7 @@ 6093=El dispositivo no esta en linea 6094=El dispositivo de puerta de enlace no existe 6095=Mas de 30 botondes de adición 6000=Renombrar 6001=Introduzca el nombre 6002=Xiaodu 6003=aispeech 6004=El sistema está en mantenimiento ~ Inténtelo de nuevo más tarde ~ 6005=Desvinculado 6006=Altavoz inteligente 6007=Controlar contenido 6008=Error al cagar datos 6009=Error al configurar datos 6010="Todavía no hay altavoz", "Vaya a la aplicación de terceros para vincular el altavoz inteligente". 6011=La modificación de los comentarios no tiene éxito 6012=Quieres desvincularte? 6013=Desvinculación 6014=transferir a app de terceros 6015=Añadir altavoces 7000=Crear automatización 7001=Etidar automatización 7002=Si @@ -4878,6 +4858,35 @@ 7152=Dejar o Arrivar a un lugar 7153=Salir 7154=Llegar 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model 9000=Inicio sesión con un nuevo número de teléfono celular 9001=Inicie sesión con una nueva dirección de correo eléctrónico 9002=Nuevo numero de celular revisado @@ -5570,6 +5579,30 @@ 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices 2532=Visitor Invitation Record 2533=Visitor management 2534=Visitor Invitation 2535=Record 2536=*After you initiate the visitor certificate, you can unlock the door by password or swipe the code freely within the validity period you set. Please share the certificate carefully. 2537=Input phone number of the visitor 2538=Input 6-digits temporary password 2539=Random Generation 2540=After confirmation, the visitor QR code will be generated, and the 6-digit dynamic digital password SMS will also be sent to the visitor mobile phone. 2541=Are you sure to delete visitor credentials? 2542=Long press the QR code to save the QR code to the album 2543=QR code is invalid 2544=Generate Visitor Credentials 2545=Cancle Visitor Credentials 2546=Visitor QR Code 2547=Phone Number 2548=Please enter a correct phone number 2549=Please select a effective time 2550=Please select a expire time 2551=Temporary password is invalid 1000=Влажност в стаята @@ -5810,6 +5843,8 @@ 5045=Сила на основния звук 5046=Регулиране на звука 5047="„QQ Music“ не е инсталиран на вашия мобилен телефон{\r\n}Моля, инсталирайте го. 5048= Progressive cycle 5049=Single play 6000=Нормално 6001=Състояние на устройството @@ -5910,22 +5945,6 @@ 6000=Преименуване 6001=Моля, въведете име 6002=Xiaodu 6003=aispeech 6004="Отвързването изисква приложение на трета страна за работа", "прехвърляне към приложение на трета страна" 6005=Отвързано 6006=Умен високоговорител 6007=Контрол на съдържанието 6008=Неуспешно качване на данни 6009=Неуспешно конфигуриране на данните 6010="Все още няма високоговорител,", "Моля, отидете в приложението на трета страна, за да свържете интелигентния високоговорител." 6011=Промяната на забележките е неуспешна! 6012=Искате ли да отвържете? 6013=Отвързване... 6014=прехвърляне към приложение на трета страна 6015=Добавете високоговорители 7000=Нова автоматизация @@ -6083,6 +6102,34 @@ 7152=Тръгнете или пристигнете на място 7153=Напускане 7154=Пристигане 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model HDL-ON_Android/HDL-ON_Android.csproj
@@ -411,6 +411,7 @@ <AndroidAsset Include="Assets\h5\static\img\coal-save-ic.6c5fd125.png" /> <AndroidAsset Include="Assets\h5\static\font\SourceHanSansCN-Normal.otf" /> <AndroidAsset Include="Assets\Phone\MusicIcon\currentPlayList.png" /> <AndroidAsset Include="Assets\Phone\PersonalCenter\CombinedDimmingIcon.png" /> <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\OneOpenLock.png" /> <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\RTV.png" /> <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\UnLocked.png" /> HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202303221"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.7" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202304111"> <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" /> <!--友盟--> <!--<uses-sdk android:minSdkVersion="8"></uses-sdk>--> HDL-ON_Android/Resources/Resource.designer.cs
@@ -14,7 +14,7 @@ { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "12.2.8.165")] public partial class Resource { HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -68,7 +68,7 @@ <WarningLevel>4</WarningLevel> <CodesignEntitlements>Entitlements.plist</CodesignEntitlements> <MtouchArch>ARM64</MtouchArch> <CodesignKey>iPhone Distribution: HDL Automation Co., Ltd (BVTA78PRYA)</CodesignKey> <CodesignKey>Apple Distribution: HDL Automation Co., Ltd (BVTA78PRYA)</CodesignKey> <MtouchLink>SdkOnly</MtouchLink> <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs> <MtouchI18n>cjk</MtouchI18n> @@ -1544,6 +1544,8 @@ <BundleResource Include="Resources\h5\static\img\equal-plant-ic.7ef6befa.png" /> <BundleResource Include="Resources\h5\static\img\coal-save-ic.6c5fd125.png" /> <BundleResource Include="Resources\h5\static\font\SourceHanSansCN-Normal.otf" /> <BundleResource Include="Resources\Phone\MusicIcon\currentPlayList.png" /> <BundleResource Include="Resources\Phone\PersonalCenter\CombinedDimmingIcon.png" /> <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\Redistribution.png" /> <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorLock.png" /> <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\OneOpenLock.png" /> HDL-ON_iOS/Info.plist
@@ -144,5 +144,7 @@ <string>LC Video will be use</string> <key>NSLocationWhenInUseUsageDescription</key> <string>EZ video will be use</string> <key>UILaunchStoryboardName</key> <string>LaunchScreen</string> </dict> </plist> HDL-ON_iOS/Resources/Language.ini
@@ -580,6 +580,13 @@ 593=Face photo 594=Please enter member name 595=Delete 596=Group Name 597=Please enter 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices 2532=Visitor Invitation Record @@ -943,23 +950,6 @@ 6000=Rename 6001=Please enter a name 6002=Xiaodu 6003=aispeech 6004="Unbind requires a third-party APP for operation", "transfer to a third-party APP" 6005=Unbind 6006=Smart speaker 6007=Control content 6008=Failed to upload data 6009=Failed to configure data 6010="There is no speaker yet,", "Please go to the third-party APP to bind the smart speaker." 6011=Modification of remarks is unsuccessful! 6012=Do you want to unbind? 6013=Unbinding... 6014=transfer to third-party APP 6015=Add speakers 7000=Create automation @@ -1845,6 +1835,12 @@ 593=人脸照片 594=请输入成员名称 595=删除人脸数据 596=组名称 597=请输入 598=选择群控设备 599=请输入组名称 600=添加组合调光 601=请选择两个以上的设备 @@ -2383,6 +2379,7 @@ 7167=总控开关 7168=PM10 8501=视频门锁 8502=电量 8503=当前门已关 @@ -2396,6 +2393,13 @@ 8511=用户人员 8512=序列号 8513=型号 @@ -3085,6 +3089,12 @@ 593=Face photo 594=Please enter member name 595=Delete 596=Group Name 597=Please enter 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices @@ -3347,6 +3357,8 @@ 5045=Основная громкость 5046=Регулировка громкости 5047=Сервис"QQ music" не установлен на вашем мобильном телефоне, пожалуйста, перейдите в центр приложений. 5048= Progressive cycle 5049=Single play 6000=Нормальный 6001=Состояние устройства @@ -3446,23 +3458,6 @@ 6000=Переименовать 6001=Пожалуйста, введите название 6002=марка Xiaodu 6003=Распознаватель речи 6004="Для отмены привязки требуется стороннее приложение ", "передать в стороннее приложение" 6005=Отвязать 6006=Умный динамик 6007=Управление содержимым 6008=Не удалось загрузить данные 6009=Не удалось настроить данные 6010="Динамик еще не установлен", "Пожалуйста, перейдите в стороннее приложение, чтобы привязать смарт динамик". 6011=Изменение примечаний не удалось! 6012=Вы хотите отменить привязку? 6013=Отвязывание... 6014=переход в стороннее приложение 6015=Добавить динамики 7000=Создать автоматизацию @@ -3620,6 +3615,34 @@ 7152=Покинуть или прибыть 7153=Покинуть 7154=Прибыть 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model @@ -4315,7 +4338,12 @@ 593=Face photo 594=Please enter member name 595=Delete 596=Group Name 597=Please enter 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices 2532=Visitor Invitation Record @@ -4577,6 +4605,8 @@ 5045=Volumen general 5046=Ajustar volumen 5047="QQ music" no se ha instalado en su teléfono celular, proceda en el Centro de aplicaciones. 5048= Progressive cycle 5049=Single play 6000=Normal 6001=Estado del dispositivo @@ -4672,22 +4702,7 @@ 6093=El dispositivo no esta en linea 6094=El dispositivo de puerta de enlace no existe 6095=Mas de 30 botondes de adición 6000=Renombrar 6001=Introduzca el nombre 6002=Xiaodu 6003=aispeech 6004=El sistema está en mantenimiento ~ Inténtelo de nuevo más tarde ~ 6005=Desvinculado 6006=Altavoz inteligente 6007=Controlar contenido 6008=Error al cagar datos 6009=Error al configurar datos 6010="Todavía no hay altavoz", "Vaya a la aplicación de terceros para vincular el altavoz inteligente". 6011=La modificación de los comentarios no tiene éxito 6012=Quieres desvincularte? 6013=Desvinculación 6014=transferir a app de terceros 6015=Añadir altavoces 7000=Crear automatización 7001=Etidar automatización 7002=Si @@ -4843,6 +4858,35 @@ 7152=Dejar o Arrivar a un lugar 7153=Salir 7154=Llegar 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model 9000=Inicio sesión con un nuevo número de teléfono celular 9001=Inicie sesión con una nueva dirección de correo eléctrónico 9002=Nuevo numero de celular revisado @@ -5530,6 +5574,35 @@ 593=Face photo 594=Please enter member name 595=Delete 596=Group Name 597=Please enter 598=Select device 599=Please input name 600=Add combined dimming 601=Please select two or more devices 2532=Visitor Invitation Record 2533=Visitor management 2534=Visitor Invitation 2535=Record 2536=*After you initiate the visitor certificate, you can unlock the door by password or swipe the code freely within the validity period you set. Please share the certificate carefully. 2537=Input phone number of the visitor 2538=Input 6-digits temporary password 2539=Random Generation 2540=After confirmation, the visitor QR code will be generated, and the 6-digit dynamic digital password SMS will also be sent to the visitor mobile phone. 2541=Are you sure to delete visitor credentials? 2542=Long press the QR code to save the QR code to the album 2543=QR code is invalid 2544=Generate Visitor Credentials 2545=Cancle Visitor Credentials 2546=Visitor QR Code 2547=Phone Number 2548=Please enter a correct phone number 2549=Please select a effective time 2550=Please select a expire time 2551=Temporary password is invalid 1000=Влажност в стаята @@ -5770,6 +5843,8 @@ 5045=Сила на основния звук 5046=Регулиране на звука 5047="„QQ Music“ не е инсталиран на вашия мобилен телефон{\r\n}Моля, инсталирайте го. 5048= Progressive cycle 5049=Single play 6000=Нормално 6001=Състояние на устройството @@ -5870,22 +5945,6 @@ 6000=Преименуване 6001=Моля, въведете име 6002=Xiaodu 6003=aispeech 6004="Отвързването изисква приложение на трета страна за работа", "прехвърляне към приложение на трета страна" 6005=Отвързано 6006=Умен високоговорител 6007=Контрол на съдържанието 6008=Неуспешно качване на данни 6009=Неуспешно конфигуриране на данните 6010="Все още няма високоговорител,", "Моля, отидете в приложението на трета страна, за да свържете интелигентния високоговорител." 6011=Промяната на забележките е неуспешна! 6012=Искате ли да отвържете? 6013=Отвързване... 6014=прехвърляне към приложение на трета страна 6015=Добавете високоговорители 7000=Нова автоматизация @@ -6043,6 +6102,34 @@ 7152=Тръгнете или пристигнете на място 7153=Напускане 7154=Пристигане 7155=Distress/Normal 7156=Distress 7157=whether to unlock 7158=Is 7159=Fall in the alarm 7160=Someone called the police 7161=Warning tone 7162=Face to open the door 7163=Video call 7164=Manipulator 7165=Area intrusion alarm 7166=Camera 7167=Main switch 7168=PM10 8501=Video door lock 8502=Electric quantity 8503=The door is now closed 8504=The door is not closed 8505=RVC 8506=One click to open the lock 8507=Temporary password 8508=History 8509=Fluorite video door lock 8510=Call from the doorbell 8511=User Education 8512=Serial number 8513=Model HDL_ON/Common/ApiUtlis.cs
@@ -349,12 +349,77 @@ complateDevice = true; MainPage.Log($"============设备============完成" + FunctionList.List.Functions.Count); } //}) //{ IsBackground = true }.Start(); ////===================场景========================== //new System.Threading.Thread(() => //{ #if DEBUG DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl = true; #endif if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { var pack = Ins.HttpRequest.GetGroupControlList(); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { try { var groupControlList = JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString()); var readSidList = new List<string>(); foreach(var temp in groupControlList) { FunctionList.List.groupControls.Clear(); readSidList.Add(temp.userDeviceGroupControlId); if (readSidList.Count >= 20) { var data = Ins.httpRequest.GetGroupControInfo(readSidList); if(data != null) { if(data.Code == StateCode.SUCCESS) { var groupControlInfoList = JsonConvert.DeserializeObject<List<GroupControl>>(data.Data.ToString()); FunctionList.List.groupControls.AddRange(groupControlInfoList); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } readSidList.Clear(); } } if (readSidList.Count > 0) { var data = Ins.httpRequest.GetGroupControInfo(readSidList); if (data != null) { if (data.Code == StateCode.SUCCESS) { var groupControlInfoList = JsonConvert.DeserializeObject<List<GroupControl>>(data.Data.ToString()); FunctionList.List.groupControls.AddRange(groupControlInfoList); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } readSidList.Clear(); } } catch (Exception ex) { MainPage.Log($"读取组控列表失败:{ex.Message}"); } } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } } //}) //{ IsBackground = true }.Start(); try { HDL_ON/Common/R.cs
@@ -4,7 +4,10 @@ { public static class StringId { /// <summary> /// 请选择2个以上的设备 /// </summary> public const int PlsSelectMoreData = 601; /// <summary> /// 添加组合调光 /// </summary> HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs
@@ -131,7 +131,7 @@ /// <param name="i_listAllFun">全部的设备列表,需要手动指定</param> /// <param name="SelectEvent">根据选择的条件,筛选之后的设备列表(第一个参数是选择的UID,不管有没有用,总之先返回)</param> /// <param name="i_defultSelectId">默认哪个为选择状态</param> public void ShowDeviceFunctionView(Button btnFloor, List<Function> i_listAllFun, Action<string, List<Function>> SelectEvent, string i_defultSelectId = null) public void ShowDeviceFunctionView(Button btnFloor, List<Function> i_listAllFun, Action<string, List<Function>> SelectEvent, string i_defultSelectId = null, int offsetY = 0) { //清缓存 this.ClearMemory(); @@ -155,7 +155,7 @@ SelectEvent?.Invoke(this.nowShowSelectId, listDevice); SelectEvent = null; }, i_defultSelectId); }, i_defultSelectId, offsetY); } /// <summary> HDL_ON/Common/Utlis/FloorSelectPopupDialog.cs
@@ -30,7 +30,7 @@ /// </summary> /// <param name="selectAction">回调选中事件,回调选中的uid</param> /// <param name="selectTag">设置选中的tga标记</param> public void ShowView(Action<string> selectAction, string selectTag = DiySelectPopupDialog.ALLSELECT) public void ShowView(Action<string> selectAction, string selectTag = DiySelectPopupDialog.ALLSELECT, int offsetY = 0) { //楼层集合数据 var floorList = SpatialInfo.CurrentSpatial.FloorList; @@ -54,7 +54,7 @@ } //弹窗一级联动选择窗口 var roomSelectPopupDialog = new DiySelectPopupDialog(); roomSelectPopupDialog.ShowView(mFirstList, null, selectAction, selectTag); roomSelectPopupDialog.ShowView(mFirstList, null, selectAction, selectTag,offsetY); } else { @@ -80,7 +80,7 @@ } //弹窗二级联动选择窗口 var roomSelectPopupDialog = new DiySelectPopupDialog(); roomSelectPopupDialog.ShowView(mFirstList, mSecondList, selectAction, selectTag); roomSelectPopupDialog.ShowView(mFirstList, mSecondList, selectAction, selectTag,offsetY); } HDL_ON/DAL/DriverLayer/Control.cs
@@ -1175,11 +1175,62 @@ } /// <summary> /// 更新设备状态 /// A协议数据 /// </summary> /// <param name="updateBytes"></param> public void UpdataGroupControlStatus(string revString, byte[] usefulBytes, bool isCloudData = false) { var temp = JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); if (temp != null) { Control_Udp.ReceiveRepeatManager(temp.id, usefulBytes); var allLocalFuntion = FunctionList.List.groupControls; foreach (var updateTemp in temp.objects) { try { var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); if (localFunction == null) { continue; } MainPage.Log($"收到数据:{revString}"); foreach (var attr in updateTemp.status) { localFunction.time_stamp = temp.time_stamp; localFunction.SetAttrState(attr.key, attr.value); } //更新界面状态 switch (localFunction.spk) { case SPK.ElectricEnergy: EnergyMainPage.UpdataStatus(localFunction); break; } HomePage.UpdataFunctionStates(localFunction); RoomPage.UpdataStates(localFunction); FunctionPage.UpdataStates(localFunction); ClassificationPage.UpdataInfo(localFunction); } catch (Exception ex) { MainPage.Log($"A协议更新状态异常:{ex.Message}"); } } } } /// <summary> /// 更新设备状态 /// A协议数据 /// </summary> public void UpdataFunctionStatus(string revString, byte[] usefulBytes, bool isCloudData = false) { ////test 云端连接成功时,不适用本地数据更新 @@ -1231,11 +1282,16 @@ } } if (SPK.MusicSpkList().Contains(localFunction.spk)) { MainPage.Log($"音乐收到数据:{revString}"); } //if (SPK.MusicSpkList().Contains(localFunction.spk)) //{ // if (updateTemp.status.Count < 3) // { // ///是音乐功能的 // ///上报属性少3条不做处理 // return; // } //} MainPage.Log($"收到数据:{revString}"); foreach (var attr in updateTemp.status) { localFunction.time_stamp = temp.time_stamp; HDL_ON/DAL/DriverLayer/Control_TcpClient.cs
@@ -295,7 +295,10 @@ } finally { heartBeatThread = null; if (heartBeatThread != null) { heartBeatThread = null; } HeartBeat(); } } HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -204,6 +204,12 @@ Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/irCodeStudyDone/up", QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce }; //App订阅群控状态主题 var groupControlStatus = new MqttTopicFilter() { Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/device/group/control/property/send", QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce }; #region 数据更新推送主题 @@ -262,6 +268,11 @@ topicFilterPush2, topicAlinkStatus ,mqttkeyChange, deviceOnlinePush, securityStatusChange}); //订阅群控状态 if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { await RemoteMqttClient.SubscribeAsync(groupControlStatus); } if (result.Items[0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0) { isSubscribeSuccess = true; @@ -563,11 +574,18 @@ } } #endregion //群控状态 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/device/group/control/property/send") { var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey); var revString = Encoding.UTF8.GetString(bytes); MainPage.Log($"mqtt 群控状态更新:{revString}"); Control.Ins.UpdataGroupControlStatus(revString, null, true); } //A网关设备状态-包含涂鸦设备 //Tag 网络状态解析 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/property/send") { var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey); var revString = Encoding.UTF8.GetString(bytes); MainPage.Log($"mqtt 状态更新:{revString}"); HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -3203,13 +3203,39 @@ var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetGroupControlListByHome, requestJson); return pack; } /// <summary> /// 获取群控详情 /// </summary> public ResponsePackNew GetGroupControInfo(string userDeviceGroupControlIds) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); var ids = new List<string>() { userDeviceGroupControlIds, }; d.Add("userDeviceGroupControlIds", ids); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetGroupControlInfos, requestJson); return pack; } /// <summary> /// 获取群控详情 /// </summary> public ResponsePackNew GetGroupControInfo(List<string> ids) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("userDeviceGroupControlIds", ids); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetGroupControlInfos, requestJson); return pack; } /// <summary> /// 添加群控列表 /// </summary> /// <param name="spk"></param> /// <returns></returns> public ResponsePackNew AddGroupControl(List<GroupControl> groupControls) { Dictionary<string, object> d = new Dictionary<string, object>(); @@ -3217,7 +3243,81 @@ d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId); d.Add("infos", groupControls); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetGroupControlListByHome, requestJson); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_AddGroupControl, requestJson); return pack; } /// <summary> /// 添加群控列表 /// </summary> public ResponsePackNew DelGroupControl(string groupControlId) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("userDeviceGroupControlIds", new List<string>() { groupControlId }); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_DeleteGroupControl, requestJson); return pack; } /// <summary> /// 编辑群控列表 /// </summary> /// <param name="spk"></param> /// <returns></returns> public ResponsePackNew EditGroupControl(List<GroupControl> groupControls) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("infos", groupControls); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_AddGroupControl, requestJson); return pack; } /// <summary> /// 群控控制 /// </summary> public ResponsePackNew ControlGroupControl(string userDeviceGroupControlId, Dictionary<string, object> pair) { var d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("userDeviceGroupControlId", userDeviceGroupControlId); List<Dictionary<string, object>> dd = new List<Dictionary<string, object>>(); dd.Add(pair); d.Add("status",dd); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_ControlGroupControl, requestJson); return pack; } /// <summary> /// 收藏群控 /// </summary> public ResponsePackNew CollectGroupControl(string groupControlId) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("userDeviceGroupControlIds", new List<string>() { groupControlId }); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_CollectGroupControl, requestJson); return pack; } /// <summary> /// 取消收藏群控 /// </summary> public ResponsePackNew CancelCollectGroupControl(string groupControlId) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("userDeviceGroupControlIds", new List<string>() { groupControlId }); var requestJson = HttpUtil.GetSignRequestJson(d); var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_CancelCollectGroupControl, requestJson); return pack; } HDL_ON/DAL/Server/HttpUtil.cs
@@ -238,7 +238,19 @@ } else { HDL_ON.Utlis.WriteLine($"接口异常:{requestFullUrl} \r\n"+response.ErrorMessage); HDL_ON.Utlis.WriteLine($"接口异常:{requestFullUrl} \r\n"+response.Content); if(response.Content!= null) { try { var pack = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePackNew>(response.Content); if (pack != null) { return pack; } } catch { } } return new ResponsePackNew() { Code = StateCode.NETWORK_ERROR }; } HDL_ON/DAL/Server/NewApiRes.cs
@@ -633,6 +633,11 @@ /// </summary> public bool gatewayStatus; /// <summary> /// 是否支持群控 /// </summary> public bool isSupportGroupControl = false; ///// <summary> ///// ///// </summary> HDL_ON/Entity/Function/Function.cs
@@ -565,13 +565,27 @@ new System.Threading.Thread(() => { if (collect) { result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code; if (spk == SPK.GroupControl) { var groupControl = FunctionList.List.groupControls.Find((obj) => obj.sid == sid); if (collect) { result = ApiUtlis.Ins.HttpRequest.CollectGroupControl(groupControl.userDeviceGroupControlId).Code; } else { result = ApiUtlis.Ins.HttpRequest.CancelCollectGroupControl(groupControl.userDeviceGroupControlId).Code; } } else { result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code; if (collect) { result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code; } else { result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code; } } //提示错误 if (result != StateCode.SUCCESS) @@ -1360,6 +1374,10 @@ public static class SPK { /// <summary> /// 群控(自定义) /// </summary> public const string GroupControl = "GroupControl"; /// <summary> /// 通用开关 /// </summary> public const string OtherCommon = "other.common"; @@ -1508,7 +1526,7 @@ public const string HvacAC = "hvac.ac"; /// <summary> /// 毛细管空调 /// </summary> /// </summaryc public const string HvacCac = "hvac.cac"; /// <summary> HDL_ON/Entity/FunctionList.cs
@@ -56,6 +56,12 @@ /// </summary> public List<Function> Functions = new List<Function>(); /// <summary> /// 群控列表 /// </summary> public List<GroupControl> groupControls = new List<GroupControl>(); /// <summary> /// 机械臂列表 /// </summary> /// <returns></returns> HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs
@@ -131,10 +131,6 @@ /// 交付链接 /// </summary> public string deliverUrl; /// <summary> /// 是否支持群控 /// </summary> public bool isSupportGroupControl = false; } } HDL_ON/HDL_ON.projitems
@@ -544,6 +544,13 @@ <Compile Include="$(MSBuildThisFileDirectory)Entity\ResponseEntity\FreeviewMemberInfo.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\CombinedDimming\GroupChooseRoomPage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\CombinedDimming\AddGroupControlPage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideDoorLockSend.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\StackTraceLog.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\ObjectClass.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\CommonMethod.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorLockPage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorLockListPage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Light\GroupControlPage.cs" /> </ItemGroup> <ItemGroup> <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" /> HDL_ON/UI/UI0-Public/DiySelectPopupDialog.cs
@@ -70,7 +70,7 @@ /// <param name="mSecondList">二级数据集合</param> /// <param name="SelectAction">选择回调事件</param> /// <param name="selectTagId"></param> public void ShowView(List<RoomCellInfo> mFirstList, List<List<RoomCellInfo>> mSecondList, Action<string> SelectAction, string selectTagId = ALLSELECT) public void ShowView(List<RoomCellInfo> mFirstList, List<List<RoomCellInfo>> mSecondList, Action<string> SelectAction, string selectTagId = ALLSELECT, int offsetY = 0) { if (mFirstList == null) { @@ -109,7 +109,7 @@ } //View显示 ShowDoubleBaseView(); ShowDoubleBaseView(offsetY); //数据内容填充 RefreshDoubleBaseView(); //选中效果 @@ -206,7 +206,7 @@ /// <summary> /// 显示二级view /// </summary> void ShowDoubleBaseView() void ShowDoubleBaseView(int offsetY = 0) { bodyView.BackgroundColor = CSS_Color.DialogTransparentColor1; this.AddChidren(bodyView); @@ -218,7 +218,7 @@ BackView = new FrameLayout() { X = Application.GetRealWidth(10), Y = Application.GetRealHeight(104), Y = Application.GetRealHeight(104+ offsetY), Width = Application.GetRealWidth(283), Height = Application.GetRealWidth(242), }; HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -725,7 +725,7 @@ { int index = 0; var list = FunctionList.List.GetDeviceFunctionList(); list.AddRange(FunctionList.List.groupControls);//加入群控 foreach (var function in list) { //音乐模块有主从关系,需要特殊处理 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -78,7 +78,10 @@ } btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png"; if(function.spk == SPK.GroupControl) { btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/lightswitch.png"; } if (SPK.CurtainSpkList().Contains(function.spk)) {//窗帘没有开关按钮 CurtainFragment(); HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -405,6 +405,17 @@ /// </summary> void LoadEvent_DivSkipEvent() { if (function.spk == SPK.GroupControl) { EventHandler<MouseEventArgs> handler = (sender, e) => { var dialog = new GroupControlPage(FunctionList.List.groupControls.Find((obj) => obj.sid == function.sid)); dialog.ShowDialog(); }; this.MouseUpEventHandler = handler; btnName.MouseUpEventHandler = handler; btnFromFloor.MouseUpEventHandler = handler; return; } var eventHandler = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollectionIcon, btnName, btnFromFloor, UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.room,this.action); this.MouseUpEventHandler = eventHandler; btnName.MouseUpEventHandler = eventHandler; HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -39,7 +39,7 @@ { bodyView.BackgroundColor = CSS_Color.BackgroundColor; if (titleId == StringId.Lights && !DB_ResidenceData.Instance.CurrentRegion.isSupportGroupControl) if (titleId == StringId.Lights && !DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { Action action = () => { @@ -142,6 +142,9 @@ if (titleId == StringId.Lights) { functionList.AddRange(FunctionList.List.GetLightList()); functionList.AddRange(FunctionList.List.groupControls); var lightScene = FunctionList.List.scenes.FindAll((obj) => obj.sceneType == SceneType.LightScene); foreach (var scene in lightScene) HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
@@ -51,19 +51,35 @@ /// 回调刷新 /// </summary> Action backActon; /// <summary> /// 是否新增群控 /// </summary> bool isAdd = true; /// <summary> /// 编辑的组控数据 /// </summary> string editDataString = ""; GroupControl groupControl; GroupControlType groupControlType = new GroupControlType(); public AddGroupControlPage(List<Function> functions, GroupControl groupControl, Action action) public AddGroupControlPage(GroupControl groupControl, Action action) { bodyView = this; groupControlLightList = functions; if(groupControl == null) { this.groupControl = new GroupControl(); } else { isAdd = false; this.groupControl = groupControl; editDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl); } groupControlLightList = new List<Function>(); backActon = action; lightList = FunctionList.List.GetLightList(); this.groupControl = groupControl; } public void LoadPage() @@ -105,6 +121,7 @@ TextSize = CSS_FontSize.TextFontSize, TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.TextualColor, PlaceholderTextColor = CSS_Color.PromptingColor1, }; groupNameView.AddChidren(etGroupName); @@ -160,6 +177,7 @@ locationMagtView.AddChidren(btnLocationInfoRight); EventHandler<MouseEventArgs> eventHandler = (sender, e) => { Application.HideSoftInput(); //修改功能所属房间之后的回调事件 Action chooseRoomBackAction = () => { try @@ -173,8 +191,8 @@ view.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; btnLocationInfoRight.MouseUpEventHandler = eventHandler; btnLocationValues.MouseUpEventHandler = eventHandler; btnLocationInfoRight.MouseUpEventHandler = eventHandler; btnLocationValues.MouseUpEventHandler = eventHandler; //locationMagtView.AddChidren( @@ -266,7 +284,6 @@ bodyView.AddChidren(functionListView); LoadLightRow(lightList); functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(10), @@ -296,6 +313,7 @@ TextSize = CSS_FontSize.SubheadingFontSize, SelectedTextColor = CSS_Color.MainBackgroundColor, SelectedBackgroundColor = CSS_Color.MainColor, IsSelected = !isAdd }; bottomView.AddChidren(btnConfrim); btnConfrim.MouseUpEventHandler = (sender, e) => { @@ -308,50 +326,161 @@ new PublicAssmebly().TipMsg(StringId.Tip, StringId.PlsEntryGroupName); return; } groupControl.name = name; groupControl.sids.Clear(); foreach (var light in groupControlLightList) if (groupControlLightList.Count < 2) { new PublicAssmebly().TipMsg(StringId.Tip, StringId.PlsSelectMoreData); return; } if (isAdd) { groupControl.name = name; groupControl.sids.Clear(); foreach (var light in groupControlLightList) { try { var gc = new GroupControlFunction(); gc.sid = light.sid; gc.spk = light.spk; groupControl.sids.Add(gc); } catch (Exception ex) { MainPage.Log($"新增群控转换数据异常:{ex.Message}"); } } try { var gc = new GroupControlFunction(); gc.sid = light.sid; gc.spk = light.spk; groupControl.sids.Add(gc); groupControl.type = groupControlType.type; groupControl.sid = groupControl.NewGroupControlSid(); var pack = Common.ApiUtlis.Ins.HttpRequest.AddGroupControl(new List<GroupControl>() { groupControl }); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { backActon?.Invoke(); this.RemoveFromParent(); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } } catch (Exception ex) { MainPage.Log($"新增群控转换数据异常:{ex.Message}"); MainPage.Log($"新增群控异常:{ex.Message}"); } } try else { var http = new HttpServerRequest(); var pack = http.AddGroupControl(new List<GroupControl>() { groupControl }); if (pack != null) try { if(pack.Code == StateCode.SUCCESS) var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl); //没有更新数据则直接退出 if (newEditDataString == editDataString) { backActon?.Invoke(); this.RemoveFromParent(); return; } else var pack = Common.ApiUtlis.Ins.HttpRequest.EditGroupControl(new List<GroupControl>() { groupControl }); if (pack != null) { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); if (pack.Code == StateCode.SUCCESS) { backActon?.Invoke(); this.RemoveFromParent(); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } } } catch (Exception ex) { MainPage.Log($"新增群控异常:{ex.Message}"); catch (Exception ex) { MainPage.Log($"编辑群控异常:{ex.Message}"); } } } }; #endregion //加载功能筛选组件 LoadDialog_ChangeFloor(); new Thread(() => { if (isAdd) { var pack = Common.ApiUtlis.Ins.HttpRequest.GetGroupControlTypes("light.switch"); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { try { var groupControlTypes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControlType>>(pack.Data.ToString()); if (groupControlTypes != null && groupControlTypes.Count > 0) { groupControlType = groupControlTypes[0]; Application.RunOnMainThread(() => { LoadLightRow(lightList); }); } } catch (Exception ex) { MainPage.Log($"读取组控类型失败:{ex.Message}"); } } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } } else { var pack = Common.ApiUtlis.Ins.HttpRequest.GetGroupControInfo(groupControl.userDeviceGroupControlId); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { try { var groupControlTemps = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString()); if (groupControlTemps != null && groupControlTemps.Count > 0) { groupControl = groupControlTemps[0]; Application.RunOnMainThread(() => { LoadLightRow(lightList); }); } } catch (Exception ex) { MainPage.Log($"读取组控信息失败:{ex.Message}"); } } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } } }) { IsBackground = true }.Start(); if (!isAdd) { etGroupName.Text = groupControl.name; btnLocationValues.Text = groupControl.GetRoomListName(); } } /// <summary> @@ -392,7 +521,6 @@ var functionDiv = new LightRow(function) { Gravity = Gravity.CenterHorizontal, //Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(62), BorderColor = 0x00FFFFFF, BorderWidth = 1, @@ -419,6 +547,10 @@ btnConfrim.IsSelected = false; } }; if (groupControl.sids.Find((obj) => obj.sid == function.sid) != null) { groupControlLightList.Add(function); } functionDiv.LoadDiv(groupControlLightList, setAction); functionListView.AddChidren(functionDiv); @@ -476,6 +608,7 @@ string nowSelectId = null; btnFloor.MouseUpEventHandler += (sender, e) => { Application.HideSoftInput(); //显示下拉列表 var form = new FloorRoomSelectPopupView(); form.ShowDeviceFunctionView(btnFloor, this.lightList, (selectId, listFunc) => @@ -498,1044 +631,11 @@ nowSelectId = selectId; //重新加载界面 LoadLightRow(listFunc); }, nowSelectId); }, nowSelectId,100); }; } } //public class LightRow : FrameLayout //{ // #region 区域控件 // static FrameLayout bodyDiv; // /// <summary> // /// 功能/场景icon // /// </summary> // Button btnIcon; // /// <summary> // /// 功能名称/场景名称 // /// </summary> // Button btnName; // /// <summary> // /// 楼层信息显示按钮 // /// </summary> // Button btnFromFloor; // /// <summary> // /// 选中按钮 // /// </summary> // Button btnSelect; // #endregion // #region 区域变量 // Function function; // #endregion // public LightRow(Function func) // { // bodyDiv = this; // bodyDiv.Tag = func.sid; // function = func; // } // /// <summary> // /// 加载控制卡片区域 // /// </summary> // public void LoadDiv(List<Function> functions, Action action) // { // btnIcon = new Button() // { // X = Application.GetRealWidth(10), // Y = Application.GetRealHeight(15), // Width = Application.GetRealWidth(32), // Height = Application.GetRealWidth(32), // UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png" // }; // bodyDiv.AddChidren(btnIcon); // btnName = new Button() // { // X = Application.GetRealWidth(8 + 10 + 32), // Y = Application.GetRealHeight(10), // Width = Application.GetRealWidth(200), // Height = Application.GetRealHeight(24), // Text = function.name, // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.FirstLevelTitleColor, // TextSize = CSS_FontSize.TextFontSize, // }; // bodyDiv.AddChidren(btnName); // btnFromFloor = new Button() // { // X = Application.GetRealWidth(8 + 10 + 32), // Y = Application.GetRealHeight(10 + 24), // Width = Application.GetRealWidth(200), // Height = Application.GetRealHeight(18), // Text = function.GetRoomListName(), // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.PromptingColor1, // TextSize = CSS_FontSize.PromptFontSize_FirstLevel, // }; // bodyDiv.AddChidren(btnFromFloor); // btnSelect = new Button() // { // X = Application.GetRealWidth(303), // Gravity = Gravity.CenterVertical, // Width = Application.GetRealWidth(32), // Height = Application.GetRealWidth(32), // UnSelectedImagePath = "FunctionIcon/Light/LightScene/CheckIcon.png", // SelectedImagePath = "FunctionIcon/Light/LightScene/CheckOnIcon.png", // IsSelected = functions.Find((obj) => obj.deviceId == function.deviceId) != null // }; // bodyDiv.AddChidren(btnSelect); // btnSelect.MouseUpEventHandler = (sender, e) => { // btnSelect.IsSelected = !btnSelect.IsSelected; // if (btnSelect.IsSelected) // { // var addTemp = functions.Find((obj) => obj.deviceId == function.deviceId); // if (addTemp == null) // { // functions.Add(function); // } // } // else // { // var removeTemp = functions.Find((obj) => obj.deviceId == function.deviceId); // if (removeTemp != null) // { // functions.Remove(removeTemp); // } // } // ///刷新界面 // if (functions.Count == 0 || functions.Count == 1) // { // action(); // } // }; // } //} ///// <summary> ///// 灯光场景编辑弹窗 ///// </summary> //public class LightSceneEditDialog : Dialog //{ // Dictionary<string, string> d = new Dictionary<string, string>(); // List<Function> listSwitch = new List<Function>(); // List<Function> lightDimming = new List<Function>(); // List<Function> lightCCT = new List<Function>(); // List<Function> lightRGB = new List<Function>(); // /// <summary> // /// 传入的灯光列表 // /// 加入场景控制功能列表 // /// </summary> // List<Function> lights; // /// <summary> // /// 临时灯光对象 // /// 处理灯光方法 // /// </summary> // Light tempLight = new Light(); // //发送数据收集 // Dictionary<string, string> commandDic = new Dictionary<string, string>(); // Scene scene; // Action<Scene> backAction; // public LightSceneEditDialog(List<Function> functions, Scene inParScene, Action<Scene> action) // { // lights = functions; // scene = inParScene; // backAction = action; // } // public void ShowDialog() // { // commandDic.Clear(); // commandDic.Add(FunctionAttributeKey.OnOff, "off"); // listSwitch = lights.FindAll((obj) => obj.spk == SPK.LightSwitch); // lightDimming = lights.FindAll((obj) => obj.spk == SPK.LightDimming); // lightCCT = lights.FindAll((obj) => obj.spk == SPK.LightCCT); // lightRGB = lights.FindAll((obj) => obj.spk == SPK.LightRGB); // var hadDimming = lightDimming.Count > 0; // var hadCCT = lightCCT.Count > 0; // var hadRGB = lightRGB.Count > 0; // if (hadRGB) // { // commandDic.Add(FunctionAttributeKey.RGB, lightRGB[0].GetAttrState(FunctionAttributeKey.RGB)); // commandDic.Add(FunctionAttributeKey.Brightness, lightRGB[0].GetAttrState(FunctionAttributeKey.Brightness)); // } // if (hadCCT) // { // commandDic.Add(FunctionAttributeKey.CCT, lightCCT[0].GetAttrState(FunctionAttributeKey.CCT)); // if (!commandDic.ContainsKey(FunctionAttributeKey.Brightness)) // { // commandDic.Add(FunctionAttributeKey.Brightness, lightCCT[0].GetAttrState(FunctionAttributeKey.Brightness)); // } // } // if (hadDimming) // { // if (!commandDic.ContainsKey(FunctionAttributeKey.Brightness)) // { // commandDic.Add(FunctionAttributeKey.Brightness, lightDimming[0].GetAttrState(FunctionAttributeKey.Brightness)); // } // } // var bodyView = new FrameLayout(); // this.AddChidren(bodyView); // bodyView.MouseUpEventHandler = (sender, e) => { // this.Close(); // }; // var contentView = new FrameLayout() // { // BackgroundColor = CSS_Color.MainBackgroundColor, // Width = Application.GetRealWidth(343), // Radius = (uint)Application.GetRealWidth(12), // }; // bodyView.AddChidren(contentView); // #region 标题区 // var titleView = new FrameLayout() // { // Width = Application.GetRealWidth(343), // Height = Application.GetRealHeight(52), // }; // contentView.AddChidren(titleView); // var btnTitle = new Button() // { // Height = Application.GetRealHeight(52), // Gravity = Gravity.Center, // TextSize = CSS_FontSize.SubheadingFontSize, // TextColor = CSS_Color.MainColor, // TextID = StringId.CombinedDimming, // TextAlignment = TextAlignment.Center, // }; // if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 // { // btnTitle.Width = Application.GetRealWidth(197); // btnTitle.IsMoreLines = true; // } // else // { // btnTitle.Width = btnTitle.GetTextWidth() + Application.GetRealWidth(10); // btnTitle.IsMoreLines = false; // } // titleView.AddChidren(btnTitle); // var btnEditIcon = new Button() // { // Width = Application.GetRealWidth(24), // Height = Application.GetRealWidth(24), // X = Application.GetRealWidth(12) + btnTitle.Right, // Gravity = Gravity.CenterVertical, // UnSelectedImagePath = "Public/Edit.png", // }; // if (string.IsNullOrEmpty(scene.userSceneId)) // { // titleView.AddChidren(btnEditIcon); // } // else // { // btnTitle.Text = scene.name; // btnTitle.Width = btnTitle.GetTextWidth() + Application.GetRealWidth(10); // btnTitle.Gravity = Gravity.Center; // } // Action<string> callBack = (str) => // { // //名称不能为空 // if (string.IsNullOrEmpty(str)) // { // new Tip() // { // CloseTime = 1, // Text = Language.StringByID(StringId.NameCannotBeEmpty), // Direction = AMPopTipDirection.None, // }.Show(bodyView); // return; // } // btnTitle.Text = str; // scene.name = str; // if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 // { // btnTitle.Width = Application.GetRealWidth(197); // } // else // { // btnTitle.Width = btnTitle.GetTextWidth(); // } // }; // EventHandler<MouseEventArgs> eventHandler = (sender, e) => // { // List<string> sceneNameList = new List<string>(); // foreach (var tempScene in FunctionList.List.scenes) // { // sceneNameList.Add(tempScene.name); // } // new PublicAssmebly().LoadDialog_EditParater(StringId.SceneName, scene.name, callBack, StringId.SceneNameCannotBeEmpty, StringId.SceneNameAlreadyExists, sceneNameList); // }; // btnTitle.MouseUpEventHandler = eventHandler; // btnEditIcon.MouseUpEventHandler = eventHandler; // titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); // #endregion // //var dimmingLight = lights.Find((obj) => obj.spk == SPK.LightDimming); // //var cctLight = lights.Find((obj) => obj.spk == SPK.LightCCT); // //var rgbLight = lights.Find((obj) => obj.spk == SPK.LightRGB); // var dimmingLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightDimming); // var cctLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightCCT); // var rgbLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightRGB); // var brightnessValue = 0; // var cctValue = 27; // //if(rgbLight!= null) // //{ // // int.TryParse(rgbLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); // //} // //if (cctLight != null) // //{ // // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); // // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); // //} // //if(dimmingLight!=null) // //{ // // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out brightnessValue); // //} // //属性设置区域 // var attrView = new VerticalScrolViewLayout() // { // Y = Application.GetRealHeight(52), // Width = Application.GetRealWidth(343), // ScrollEnabled = false, // }; // //属性设置区域高度 // int attrViewHight = Application.GetRealHeight(18 + 22); // //只有继电器 // if (!hadDimming && !hadCCT && !hadRGB) // { // attrViewHight += Application.GetRealHeight(50); // attrView.Height = attrViewHight; // contentView.AddChidren(attrView); // attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); // var view = new FrameLayout() // { // Width = Application.GetRealWidth(343), // Height = Application.GetRealHeight(50), // }; // attrView.AddChidren(view); // var btnClose = new Button() // { // X = Application.GetRealWidth(50), // Gravity = Gravity.CenterVertical, // Width = Application.GetRealWidth(98), // Height = Application.GetRealHeight(40), // TextColor = CSS_Color.TextualColor, // SelectedBackgroundColor = CSS_Color.MainColor, // SelectedTextColor = CSS_Color.MainBackgroundColor, // BackgroundColor = CSS_Color.DividingLineColor, // TextID = StringId.OFF, // TextSize = CSS_FontSize.TextFontSize, // Radius = (uint)Application.GetRealWidth(5), // IsSelected = true, // //BorderWidth = 1, // //BorderColor = 0x00000000 // }; // view.AddChidren(btnClose); // var btnOpen = new Button() // { // X = Application.GetRealWidth(100 + 98), // Gravity = Gravity.CenterVertical, // Width = Application.GetRealWidth(98), // Height = Application.GetRealHeight(40), // TextColor = CSS_Color.TextualColor, // SelectedBackgroundColor = CSS_Color.MainColor, // SelectedTextColor = CSS_Color.MainBackgroundColor, // BackgroundColor = CSS_Color.DividingLineColor, // TextID = StringId.On, // TextSize = CSS_FontSize.TextFontSize, // Radius = (uint)Application.GetRealWidth(5), // }; // view.AddChidren(btnOpen); // btnClose.MouseUpEventHandler = (sender, e) => // { // btnClose.IsSelected = true; // btnOpen.IsSelected = false; // commandDic[FunctionAttributeKey.OnOff] = "off"; // d.Clear(); // d.Add(FunctionAttributeKey.OnOff, "off"); // foreach (var light in lights) // { // Control.Ins.SendWriteCommand(light, d); // } // }; // btnOpen.MouseUpEventHandler = (sender, e) => // { // btnClose.IsSelected = false; // btnOpen.IsSelected = true; // commandDic[FunctionAttributeKey.OnOff] = "on"; // d.Clear(); // d.Add(FunctionAttributeKey.OnOff, "on"); // foreach (var light in lights) // { // Control.Ins.SendWriteCommand(light, d); // } // }; // } // else // { // if (hadRGB) // { // attrViewHight += Application.GetRealHeight(248); // hadDimming = true; // } // if (hadCCT) // { // attrViewHight += Application.GetRealHeight(54 + 11); // hadDimming = true; // } // if (hadDimming) // { // attrViewHight += Application.GetRealHeight(54 + 11); // } // attrView.Height = attrViewHight; // contentView.AddChidren(attrView); // attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); // if (hadDimming) // { // LoadDimmingAttrView(attrView); // } // if (hadCCT) // { // LoadCctAttrView(attrView); // } // if (hadRGB) // { // LoadRgbAttrView(attrView); // } // } // contentView.Height = Application.GetRealHeight(52 + 44) + attrViewHight; // contentView.Gravity = Gravity.Center; // #region bottom View // var bottomView = new FrameLayout() // { // Y = Application.GetRealHeight(52) + attrViewHight, // Height = Application.GetRealHeight(46), // }; // contentView.AddChidren(bottomView); // bottomView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor }); // if (string.IsNullOrEmpty(scene.userSceneId)) // { // var btnCacel = new Button() // { // Width = Application.GetRealWidth(172), // Height = Application.GetRealHeight(44), // TextAlignment = TextAlignment.Center, // TextSize = CSS_FontSize.SubheadingFontSize, // TextColor = CSS_Color.TextualColor, // TextID = StringId.Cancel, // }; // bottomView.AddChidren(btnCacel); // var btnSave = new Button() // { // X = Application.GetRealWidth(172), // Width = Application.GetRealWidth(172), // Height = Application.GetRealHeight(46), // BackgroundColor = CSS_Color.MainColor, // TextColor = CSS_Color.MainBackgroundColor, // TextAlignment = TextAlignment.Center, // TextSize = CSS_FontSize.SubheadingFontSize, // TextID = StringId.Save // }; // bottomView.AddChidren(btnSave); // //例:右下圆角 大小为50 // int mRectCornerID = HDLUtils.RectCornerBottomRight; // btnSave.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); // btnCacel.MouseUpEventHandler = (sender, e) => // { // this.Close(); // //var waitPage = new Loading(); // //MainPage.BaseView.AddChidren(waitPage); // //waitPage.Start(Language.StringByID(StringId.PleaseWait)); // //new Thread(() => // //{ // // try // // { // // foreach (var light in lights) // // { // // Dictionary<string, string> sendDate = new Dictionary<string, string>(); // // //赋值场景功能数据 // // foreach (var attr in light.GetAttributes()) // // { // // if (commandDic.ContainsKey(attr)) // // { // // try // // { // // sendDate.Add(attr, commandDic[attr]); // // } // // catch { } // // } // // } // // Control.Ins.SendWriteCommand(light, sendDate); // // Thread.Sleep(50); // // } // // } // // catch // // { } // // finally // // { // // Application.RunOnMainThread(() => // // { // // waitPage.Hide(); // // new PublicAssmebly().TipMsgAutoClose("组合控制已执行", true); // // if (waitPage != null) // // { // // //backAction(null); // // waitPage.RemoveFromParent(); // // } // // }); // // } // //}) // //{ IsBackground = true }.Start(); // }; // btnSave.MouseUpEventHandler = (sender, e) => // { // if (string.IsNullOrEmpty(scene.name)) // { // new Tip() // { // CloseTime = 1, // Text = Language.StringByID(StringId.NameCannotBeEmpty), // Direction = AMPopTipDirection.None, // }.Show(bodyView); // return; // } // foreach (var tempRoom in FunctionList.List.scenes) // { // if (scene.name == tempRoom.name) // { // new PublicAssmebly().TipMsg(StringId.Tip, StringId.NameAlreadyExists); // return; // } // } // var waitPage = new Loading(); // MainPage.BaseView.AddChidren(waitPage); // waitPage.Start(Language.StringByID(StringId.PleaseWait)); // new Thread(() => // { // try // { // var serverScene = new Scene(); // for (int i = 0; i < lights.Count; i++) // { // var light = lights[i]; // //赋值场景功能数据 // foreach (var attr in light.GetAttributes()) // { // if (commandDic.ContainsKey(attr)) // { // try // { // light.SetAttrState(attr, commandDic[attr]); // } // catch { } // } // } // //转换场景的功能对象 // var sceneFunction = light.ConvertSceneFunction(); // //查询有没有存在 // var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); // //赋值 // if (temp != null) // { // temp = sceneFunction; // } // else // { // scene.functions.Add(sceneFunction); // } // } // var result = FunctionList.List.AddScene(scene, out serverScene); // Application.RunOnMainThread(() => // { // if (result == StateCode.SUCCESS) // { // scene.userSceneId = serverScene.userSceneId; // FunctionList.List.scenes.Add(scene); // backAction?.Invoke(scene); // this.Close(); // } // else // { // if (result == "124005") // IMessageCommon.Current.ShowErrorInfoAlter(Language.StringByID(StringId.GatewayOffline)); // else // IMessageCommon.Current.ShowErrorInfoAlter(result); // } // }); // } // catch { } // finally // { // Application.RunOnMainThread(() => // { // waitPage.Hide(); // waitPage.RemoveFromParent(); // }); // } // }) // { IsBackground = true, Priority = ThreadPriority.AboveNormal }.Start(); // }; // } // else // { // var btnCacel = new Button() // { // Height = Application.GetRealHeight(44), // TextAlignment = TextAlignment.Center, // TextSize = CSS_FontSize.SubheadingFontSize, // TextColor = CSS_Color.TextualColor, // TextID = StringId.Close, // }; // bottomView.AddChidren(btnCacel); // //例:右下圆角 大小为50 // //int mRectCornerID = HDLUtils.RectCornerBottomRight; // //btnSave.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); // btnCacel.MouseUpEventHandler = (sender, e) => // { // this.Close(); // }; // } // #endregion // this.Show(); // } // /// <summary> // /// 加载调光属性设置控件 // /// </summary> // /// <param name="attrView"></param> // void LoadDimmingAttrView(VerticalScrolViewLayout attrView) // { // string briValue = ""; // commandDic.TryGetValue(FunctionAttributeKey.Brightness, out briValue); // var dimmingView = new FrameLayout() // { // Height = Application.GetRealHeight(54 + 11) // }; // attrView.AddChidren(dimmingView); // #region 亮度调节 // var btnBrightnessText = new Button() // { // X = Application.GetRealWidth(35), // Y = Application.GetRealHeight(1), // Width = Application.GetRealWidth(224), // Height = Application.GetRealHeight(25), // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.FirstLevelTitleColor, // TextSize = CSS_FontSize.PromptFontSize_FirstLevel, // TextID = StringId.Brightness, // }; // btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + commandDic[FunctionAttributeKey.Brightness] + "%"; // dimmingView.AddChidren(btnBrightnessText); // var btnMinValuesText = new Button() // { // X = Application.GetRealWidth(35), // Y = btnBrightnessText.Bottom, // Width = Application.GetRealWidth(40), // Height = Application.GetRealHeight(21), // Text = "0%", // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.PromptingColor1, // TextSize = CSS_FontSize.PromptFontSize_FirstLevel, // }; // dimmingView.AddChidren(btnMinValuesText); // var dimmerBar = new DiyImageSeekBar() // { // X = Application.GetRealWidth(45 + 10), // Y = Application.GetRealHeight(11), // Width = Application.GetRealWidth(220), // Height = Application.GetRealHeight(54), // SeekBarViewHeight = Application.GetRealHeight(8), // ThumbImagePath = "Public/ThumbImage.png", // ThumbImageHeight = Application.GetRealHeight(54), // ProgressTextColor = CSS_Color.FirstLevelTitleColor, // ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, // ProgressBarColor = CSS_Color.AuxiliaryColor1, // MaxValue = 100, // Progress = Convert.ToInt32(commandDic[FunctionAttributeKey.Brightness]), // SeekBarPadding = Application.GetRealWidth(20), // IsProgressTextShow = false, // ProgressChangeDelayTime = 0, // }; // dimmingView.AddChidren(dimmerBar); // dimmerBar.OnProgressChangedEvent = (sender, e) => { // btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; // }; // dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { // commandDic[FunctionAttributeKey.Brightness] = dimmerBar.Progress.ToString(); // btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; // foreach (var light in lights) // { // if (light.spk == SPK.LightSwitch) // { // d.Clear(); // d.Add(FunctionAttributeKey.OnOff, e > 0 ? "on" : "off"); // Control.Ins.SendWriteCommand(light, d); // } // else // { // d.Clear(); // d.Add(FunctionAttributeKey.Brightness, e.ToString()); // Control.Ins.SendWriteCommand(light, d); // } // } // }; // var btnMaxValuesText = new Button() // { // X = dimmerBar.Right, // Y = btnBrightnessText.Bottom, // Width = Application.GetRealWidth(55), // Height = Application.GetRealHeight(21), // Text = "100%", // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.PromptingColor1, // TextSize = CSS_FontSize.PromptFontSize_FirstLevel, // }; // dimmingView.AddChidren(btnMaxValuesText); // #endregion // } // /// <summary> // /// 加载cct属性设置控件 // /// </summary> // /// <param name="attrView"></param> // void LoadCctAttrView(VerticalScrolViewLayout attrView) // { // #region 色温 // string valueStr = "2700"; // commandDic.TryGetValue(FunctionAttributeKey.CCT, out valueStr); // int value = Convert.ToInt32(valueStr) / 100; // var cctView = new FrameLayout() // { // Height = Application.GetRealHeight(54 + 11) // }; // attrView.AddChidren(cctView); // //色温 // var btnTempClolor = new Button(); // btnTempClolor.X = Application.GetRealWidth(35); // btnTempClolor.Y = Application.GetRealHeight(1); // btnTempClolor.Width = Application.GetRealWidth(224); // btnTempClolor.Height = Application.GetRealHeight(21); // btnTempClolor.TextAlignment = TextAlignment.CenterLeft; // btnTempClolor.TextColor = CSS_Color.FirstLevelTitleColor; // btnTempClolor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; // btnTempClolor.TextID = StringId.ColorTemperature; // cctView.AddChidren(btnTempClolor); // //2700K // var btnTempClolorMin = new Button() // { // X = Application.GetRealWidth(35), // Y = btnTempClolor.Bottom, // Width = Application.GetRealWidth(40), // Height = Application.GetRealHeight(21), // }; // btnTempClolorMin.Width = Application.GetRealWidth(54); // btnTempClolorMin.Height = Application.GetRealHeight(21); // btnTempClolorMin.Text = "2700K"; // btnTempClolorMin.TextAlignment = TextAlignment.CenterLeft; // btnTempClolorMin.TextColor = CSS_Color.PromptingColor1; // btnTempClolorMin.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; // cctView.AddChidren(btnTempClolorMin); // //滑动条的背景图片 // var btnColorTemplatrueBack = new Button() // { // X = Application.GetRealWidth(55 + 22 + 15), // Y = Application.GetRealHeight(11), // Width = Application.GetRealWidth(180), // Height = Application.GetRealHeight(54), // }; // btnColorTemplatrueBack.UnSelectedImagePath = "FunctionIcon/Light/ColorTemperatureBar.png"; // btnColorTemplatrueBack.Height = Application.GetRealHeight(8); // btnColorTemplatrueBack.Gravity = Gravity.CenterHorizontal; // cctView.AddChidren(btnColorTemplatrueBack); // //滑动条控件 // var barColorTemplatrue = new CCTSeekBarControl() // { // X = Application.GetRealWidth(55 + 22), // Y = Application.GetRealHeight(11), // Width = Application.GetRealWidth(220), // Height = Application.GetRealHeight(54), // }; // barColorTemplatrue.MinValue = 27; // barColorTemplatrue.MaxValue = 65; // barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明 // barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000; // barColorTemplatrue.SeekBarBackgroundColor = 0x00000000; // cctView.AddChidren(barColorTemplatrue); // barColorTemplatrue.Y = btnTempClolorMin.Y - (barColorTemplatrue.Height - btnTempClolorMin.Height) / 2; // barColorTemplatrue.Progress = value; // //设置初始值 // btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); // barColorTemplatrue.OnProgressChangedEvent = (sender, e) => // { // btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); // }; // barColorTemplatrue.OnStopTrackingTouchEvent = (sender, e) => // { // commandDic[FunctionAttributeKey.CCT] = (barColorTemplatrue.Progress * 100).ToString(); // d.Clear(); // d.Add(FunctionAttributeKey.CCT, (barColorTemplatrue.Progress * 100).ToString()); // foreach (var light in lightCCT) // { // if (light.spk == SPK.LightCCT) // { // Control.Ins.SendWriteCommand(light, d); // } // } // }; // //变更背景图的Y轴坐标 // btnColorTemplatrueBack.Y = barColorTemplatrue.Y + (barColorTemplatrue.Height - btnColorTemplatrueBack.Height) / 2; // //6500K // var btnTempClolorMax = new Button(); // btnTempClolorMax.Y = btnTempClolorMin.Y; // btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30); // btnTempClolorMax.Width = Application.GetRealWidth(54); // btnTempClolorMax.Height = Application.GetRealHeight(21); // btnTempClolorMax.Text = "6500K"; // btnTempClolorMax.TextAlignment = TextAlignment.CenterRight; // btnTempClolorMax.TextColor = CSS_Color.PromptingColor1; // btnTempClolorMax.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; // cctView.AddChidren(btnTempClolorMax); // #endregion // } // /// <summary> // /// 加载rgb属性设置控件 // /// </summary> // /// <param name="attrView"></param> // void LoadRgbAttrView(VerticalScrolViewLayout attrView) // { // #region RGB // string value = "255,255,255"; // commandDic.TryGetValue(FunctionAttributeKey.RGB, out value); // var rgbView = new FrameLayout() // { // Height = Application.GetRealHeight(248) // }; // attrView.AddChidren(rgbView); // var btnCurColor = new Button() // { // X = Application.GetRealWidth(24), // Y = Application.GetRealHeight(10), // Width = Application.GetMinRealAverage(24), // Height = Application.GetMinRealAverage(24), // Radius = (uint)Application.GetMinRealAverage(8), // BorderColor = CSS_Color.PromptingColor2, // BorderWidth = 1, // BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(commandDic[FunctionAttributeKey.RGB])) // }; // rgbView.AddChidren(btnCurColor); // //色盘的桌布控件(限制那个白色滑动球使用) // var framePickerBack = new FrameLayout(); // framePickerBack.Gravity = Gravity.CenterHorizontal; // framePickerBack.Y = Application.GetRealHeight(20); // framePickerBack.Width = Application.GetMinRealAverage(198); // framePickerBack.Height = Application.GetMinRealAverage(198); // rgbView.AddChidren(framePickerBack); // var colorPicker = new ColorPicker() // { // ColorImagePath = "FunctionIcon/Light/ColorWheel.png", // }; // framePickerBack.AddChidren(colorPicker); // //白点控件 // var btnWhiteRound = new Button(); // btnWhiteRound.Width = Application.GetRealWidth(24); // btnWhiteRound.Height = Application.GetRealWidth(24); // btnWhiteRound.UnSelectedImagePath = "FunctionIcon/Light/ColorWheelTip.png"; // btnWhiteRound.Visible = false; // framePickerBack.AddChidren(btnWhiteRound); // //当前点击的【点】是否正确 // bool pointIsRight = false; // //圆的半径(考虑边界,需要设置它的半径比较小一点) // int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); // colorPicker.MouseUpEventHandler = (sender2, e) => { // d.Clear(); // d.Add(FunctionAttributeKey.RGB, commandDic[FunctionAttributeKey.RGB]); // foreach (var light in lightCCT) // { // if (light.spk == SPK.LightCCT) // { // Control.Ins.SendWriteCommand(light, d); // } // } // }; // colorPicker.ColorChaged += (sender2, e2) => { // string rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); // commandDic[FunctionAttributeKey.RGB] = rgbString; // btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); // foreach (var rgbTemp in lightRGB) // { // rgbTemp.SetAttrState(FunctionAttributeKey.RGB, rgbString); // } // }; // colorPicker.MouseDownEventHandler += (sender, e) => // { // pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); // if (pointIsRight == false) // { // //点的区域不是圆盘内 // return; // } // //显示白点 // btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; // btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; // if (btnWhiteRound.Visible == false) // { // btnWhiteRound.Visible = true; // } // }; // colorPicker.MouseUpEventHandler = (sender, e) => { // foreach (var rgbTemp in lightRGB) // { // Dictionary<string, string> d = new Dictionary<string, string>(); // d.Add(FunctionAttributeKey.RGB, tempLight.GetRGBcolorString(rgbTemp)); // Control.Ins.SendWriteCommand(rgbTemp, d, false, 0); // } // }; // colorPicker.MouseMoveEventHandler += (sender, e) => // { // //当鼠标点下事件处理 // colorPicker.MouseDownEventHandler(sender, e); // }; // #endregion // } // /// <summary> // /// 检测点击点 // /// </summary> // /// <param name="circleR">圆的半径</param> // /// <param name="circleX">圆心X轴</param> // /// <param name="circleY">圆心Y轴</param> // /// <param name="pointX">点击点的X轴</param> // /// <param name="pointY">点击点的Y轴</param> // /// <returns></returns> // private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) // { // int dwidth = circleX - pointX; // if (dwidth < 0) { dwidth *= -1; } // int dHeight = circleY - pointY; // if (dHeight < 0) { dHeight *= -1; } // //根据三角函数,求三角形的斜边长 // int dlength = dwidth * dwidth + dHeight * dHeight; // //半径长度(不开方,所以是按平方算) // circleR *= circleR; // if (dlength < circleR) // { // //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) // return true; // } // return false; // } //} } HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs
@@ -1,5 +1,6 @@ using System; using System.Collections.Generic; using HDL_ON.Common; using HDL_ON.DAL.Server; using HDL_ON.Entity; using HDL_ON.UI.CSS; @@ -24,9 +25,9 @@ (s,c)=>{ try { var page = new AddGroupControlPage(new System.Collections.Generic.List<Function>(),new GroupControl(), var page = new AddGroupControlPage(null, ()=> { ReadGroupControlList(); }); MainPage.BasePageView.AddChidren(page); page.LoadPage(); @@ -43,18 +44,35 @@ }; bodyView.AddChidren(contentView); ReadGroupControlList(); #region contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) }); #endregion } /// <summary> /// 读取组控数据 /// </summary> private void ReadGroupControlList() { new System.Threading.Thread(() => { var http = new HttpServerRequest(); var pack = http.GetGroupControlList(); if(pack != null) var pack = ApiUtlis.Ins.HttpRequest.GetGroupControlList(); if (pack != null) { if(pack.Code == StateCode.SUCCESS ) if (pack.Code == StateCode.SUCCESS) { try { var groupControlList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString()); LoadGroupControlView(groupControlList); Application.RunOnMainThread(() => { LoadGroupControlView(groupControlList); }); } catch (Exception ex) { @@ -66,22 +84,39 @@ IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } }) { IsBackground = true }.Start(); #region contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) }); #endregion }) { IsBackground = true }.Start(); } private void LoadGroupControlView(List<GroupControl> list) { if(list.Count == 0) #if DEBUG if (list.Count == 0) { list.Add(new GroupControl() { name = "组合调光1", roomIds = new List<string> { Room.CurrentSpatial.RoomList[0].roomId }, sid = "00000000000000001", type = "light", uids = new List<string>() { Room.CurrentSpatial.RoomList[0].uid }, }); list.Add(new GroupControl() { name = "组合调光2", roomIds = new List<string> { Room.CurrentSpatial.RoomList[0].roomId }, sid = "00000000000000002", type = "light", uids = new List<string>() { Room.CurrentSpatial.RoomList[0].uid }, }); } #endif if (list.Count == 0) { } @@ -89,14 +124,25 @@ { contentView.RemoveAll(); foreach (var function in list) foreach (var groupControl in list) { var functionRow = new FrameLayout() var functionRow = new RowLayout() { Height = Application.GetRealHeight(65), BackgroundColor = CSS_Color.MainBackgroundColor, LineColor = 0x00000000 }; contentView.AddChidren(functionRow); var btnRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; functionRow.AddChidren(btnRight); var btnFunctionName = new Button() { @@ -107,7 +153,7 @@ TextAlignment = TextAlignment.CenterLeft, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Text = function.name, Text = groupControl.name, }; functionRow.AddChidren(btnFunctionName); @@ -120,7 +166,7 @@ TextAlignment = TextAlignment.CenterLeft, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextColor = CSS_Color.PromptingColor1, Text = function.GetRoomListName(), Text = groupControl.GetRoomListName(), }; functionRow.AddChidren(btnFunctionLocationInfo); @@ -136,6 +182,77 @@ BackgroundColor = CSS_Color.DividingLineColor, }); EventHandler<MouseEventArgs> eventHandler = (sender, e) => { var page = new AddGroupControlPage(groupControl, () => { }); MainPage.BasePageView.AddChidren(page); page.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; functionRow.MouseUpEventHandler = eventHandler; btnRight.MouseUpEventHandler = eventHandler; btnFunctionName.MouseUpEventHandler = eventHandler; btnFunctionLocationInfo.MouseUpEventHandler = eventHandler; var btnDelGroupControl = new Button() { TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.WarningColor, TextID = StringId.Del, TextAlignment = TextAlignment.Center, }; functionRow.AddRightView(btnDelGroupControl); btnDelGroupControl.MouseUpEventHandler = (sender1, e1) => { var waitPage = new Loading(); this.AddChidren(waitPage); waitPage.Start(""); new System.Threading.Thread(() => { try { var pack = ApiUtlis.Ins.HttpRequest.DelGroupControl(groupControl.userDeviceGroupControlId); if (pack != null) { Application.RunOnMainThread(() => { try { if (pack.Code == StateCode.SUCCESS) { list.Remove(groupControl); LoadGroupControlView(list); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } }catch(Exception ex) { MainPage.Log($"刷新组控数据异常:{ex.Message}"); } }); } }catch(Exception ex) { MainPage.Log($"删除组控异常:{ex.Message}"); } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.Hide(); waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }.Start(); }; } } HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs
@@ -1,22 +1,79 @@ using System; using System.Collections.Generic; using HDL_ON.Common; using HDL_ON.DAL.Server; using Shared; namespace HDL_ON.Entity { public class GroupControl public class GroupControl : Function { public GroupControl() { spk = "GroupControl"; } /// <summary> /// 群控ID /// </summary> public string userDeviceGroupControlId = string.Empty; /// <summary> /// 群控sid /// </summary> public string sid = string.Empty; //public string sid = string.Empty; /// <summary> /// 生成群控sid /// </summary> public string NewGroupControlSid() { string sceneId = ""; try { string sOidBeginsWith = "000101";//厂商 + 通讯方式 DateTime dt = DateTime.Now; DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1)); long m = (long)((dt - startTime).TotalMilliseconds / 10); string sTimeSpan = "00000000"; byte[] arry = new byte[4]; arry[0] = (byte)(m & 0xFF); arry[1] = (byte)((m & 0xFF00) >> 8); arry[2] = (byte)((m & 0xFF0000) >> 16); arry[3] = (byte)((m >> 24) & 0xFF); sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2"); if (sTimeSpan.Length >= 8) { sTimeSpan = sTimeSpan.Substring(0, 8); } else { sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8); //sTimeSpan = "00000000"; } sceneId = sOidBeginsWith + sTimeSpan; sceneId += "AA"; sceneId += "AA01"; int maxId = 1; Random random = new Random(Guid.NewGuid().GetHashCode()); maxId = random.Next(10); sceneId += (maxId + 1).ToString("X4"); sceneId += "0000"; } catch { return sceneId; } return sceneId; } /// <summary> /// 群控名称 /// </summary> public string name = string.Empty; //public string name = string.Empty; /// <summary> /// 群控类型 /// </summary> @@ -25,39 +82,69 @@ /// 房间uid /// </summary> public List<String> uids = new List<string>(); public List<String> roomIds = new List<string>(); //public List<String> roomIds = new List<string>(); /// <summary> /// 群控功能sid配置 /// </summary> public List<GroupControlFunction> sids = new List<GroupControlFunction>(); ///// <summary> ///// 获取设备添加到房间的房间名称 ///// </summary> ///// <returns></returns> //public string GetRoomListName() //{ // string roomNameList = ""; // foreach (var roomId in roomIds) // { // var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId); // if (findRoom == null) // { // continue; // } // if (roomNameList != "") // { // roomNameList += ","; // } // roomNameList += findRoom.floorName + "-" + findRoom.roomName; // } // if (roomNameList == "") // { // roomNameList = Language.StringByID(StringId.WholeZone); // } // return roomNameList; //} /// <summary> /// 获取设备添加到房间的房间名称 /// 群控控制 /// </summary> /// <returns></returns> public string GetRoomListName() /// <param name="pairs"></param> public void Control(Dictionary<string,object> pairs) { string roomNameList = ""; foreach (var roomId in roomIds) try { var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId); if (findRoom == null) var controlValues = new Dictionary<string, object>(); foreach(var p in pairs) { continue; controlValues.Add("key", p.Key); controlValues.Add("value", p.Value); } if (roomNameList != "") var pack = ApiUtlis.Ins.HttpRequest.ControlGroupControl(userDeviceGroupControlId, controlValues); if (pack != null) { roomNameList += ","; if (pack.Code == StateCode.SUCCESS) { //DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl. } else { MainPage.Log($"群控控制失败,Code: {pack.Code}"); } } roomNameList += findRoom.floorName + "-" + findRoom.roomName; } if (roomNameList == "") { roomNameList = Language.StringByID(StringId.WholeZone); catch (Exception ex){ MainPage.Log($"群控控制失败: {ex.Message}"); } return roomNameList; } } @@ -71,6 +158,29 @@ /// 功能spk /// </summary> public string spk = string.Empty; } public class GroupControlType { /// <summary> /// 类型 /// </summary> public string type = string.Empty; /// <summary> /// 类型名称 /// </summary> public string typeName = string.Empty; /// <summary> /// 群控支持的spk /// </summary> public List<string> spks = new List<string>(); /// <summary> /// 群控支持的spk属性 /// </summary> public List<string> spkAttrs = new List<string>(); } } HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -164,6 +164,7 @@ bodyView = this; bodyView.BackgroundColor = CSS_Color.BackgroundColor; } public void LoadView() { #region 个人信息 @@ -296,7 +297,7 @@ #region 住宅信息区域 if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare && DB_ResidenceData.Instance.GatewayType == 1 && DB_ResidenceData.Instance.CurrentRegion.isSupportGroupControl) && DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { residenceInfoView = new FrameLayout() { @@ -586,7 +587,7 @@ residenceAddFunctionView.AddChidren(btnResidenceAddFunctionText); #endregion if (DB_ResidenceData.Instance.CurrentRegion.isSupportGroupControl) if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { residenceFunctionCount++; #region ---组合调光 HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage.cs
New file @@ -0,0 +1,585 @@ using System; using System.Collections.Generic; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { /// <summary> /// 灯光场景编辑弹窗 /// </summary> public class GroupControlPage : Dialog { GroupControl group; public GroupControlPage(GroupControl groupControl) { group = groupControl; if(group == null) { group = new GroupControl(); } } public void ShowDialog() { var hadDimming = false; var hadCCT = false; var hadRGB = false; foreach (var temp in group.sids) { if (temp.spk == SPK.LightRGB) { hadRGB = true; } else if (temp.spk == SPK.LightCCT) { hadCCT = true; }else if (temp.spk == SPK.LightDimming) { hadDimming = true; } if(hadDimming && hadCCT && hadRGB) { break; } } var bodyView = new FrameLayout(); this.AddChidren(bodyView); //bodyView.MouseUpEventHandler = (sender, e) => //{ // this.Close(); //}; var contentView = new FrameLayout() { BackgroundColor = CSS_Color.MainBackgroundColor, Width = Application.GetRealWidth(343), Radius = (uint)Application.GetRealWidth(12), }; bodyView.AddChidren(contentView); #region 标题区 var titleView = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(52), }; contentView.AddChidren(titleView); var btnTitle = new Button() { Height = Application.GetRealHeight(52), Gravity = Gravity.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.MainColor, TextID = StringId.CombinedDimming, TextAlignment = TextAlignment.Center, }; if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 { btnTitle.Width = Application.GetRealWidth(197); btnTitle.IsMoreLines = true; } else { btnTitle.Width = btnTitle.GetTextWidth() + Application.GetRealWidth(10); btnTitle.IsMoreLines = false; } titleView.AddChidren(btnTitle); var btnEditIcon = new Button() { Width = Application.GetRealWidth(24), Height = Application.GetRealWidth(24), X = Application.GetRealWidth(12) + btnTitle.Right, Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Public/Edit.png", }; btnTitle.Text = group.name; btnTitle.Width = btnTitle.GetTextWidth() + Application.GetRealWidth(10); btnTitle.Gravity = Gravity.Center; titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); #endregion //属性设置区域 var attrView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(52), Width = Application.GetRealWidth(343), ScrollEnabled = false, }; //属性设置区域高度 int attrViewHight = Application.GetRealHeight(18 + 22); //只有继电器 if (!hadDimming && !hadCCT && !hadRGB) { attrViewHight += Application.GetRealHeight(50); attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); var view = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), }; attrView.AddChidren(view); var btnClose = new Button() { X = Application.GetRealWidth(50), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.OFF, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), IsSelected = true, //BorderWidth = 1, //BorderColor = 0x00000000 }; view.AddChidren(btnClose); var btnOpen = new Button() { X = Application.GetRealWidth(100 + 98), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.On, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), }; view.AddChidren(btnOpen); btnClose.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = true; btnOpen.IsSelected = false; var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.OnOff, "off"); group.Control(d); }; btnOpen.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = false; btnOpen.IsSelected = true; var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.OnOff, "on"); group.Control(d); }; } else { if (hadRGB) { attrViewHight += Application.GetRealHeight(248); hadDimming = true; } if (hadCCT) { attrViewHight += Application.GetRealHeight(54 + 11); hadDimming = true; } if (hadDimming) { attrViewHight += Application.GetRealHeight(54 + 11); } attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); if (hadDimming) { LoadDimmingAttrView(attrView); } if (hadCCT) { LoadCctAttrView(attrView); } if (hadRGB) { LoadRgbAttrView(attrView); } } contentView.Height = Application.GetRealHeight(52 + 44) + attrViewHight; contentView.Gravity = Gravity.Center; var bottomView = new FrameLayout() { Y = Application.GetRealHeight(52) + attrViewHight, Height = Application.GetRealHeight(46), }; contentView.AddChidren(bottomView); bottomView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor }); var btnCloseDialog = new Button() { TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, TextID = StringId.Close, TextSize = CSS_FontSize.SubheadingFontSize, }; bottomView.AddChidren(btnCloseDialog); btnCloseDialog.MouseUpEventHandler = (sender, e) => { this.Close(); }; this.Show(); } /// <summary> /// 加载调光属性设置控件 /// </summary> /// <param name="attrView"></param> void LoadDimmingAttrView(VerticalScrolViewLayout attrView) { var dimmingView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(dimmingView); #region 亮度调节 var btnBrightnessText = new Button() { X = Application.GetRealWidth(35), Y = Application.GetRealHeight(1), Width = Application.GetRealWidth(224), Height = Application.GetRealHeight(25), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextID = StringId.Brightness, }; btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + group.GetAttrState(FunctionAttributeKey.Brightness) + "%"; dimmingView.AddChidren(btnBrightnessText); var btnMinValuesText = new Button() { X = Application.GetRealWidth(35), Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), Text = "0%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMinValuesText); var dimmerBar = new DiyImageSeekBar() { X = Application.GetRealWidth(45 + 10), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, ProgressBarColor = CSS_Color.AuxiliaryColor1, MaxValue = 100, SeekBarPadding = Application.GetRealWidth(20), IsProgressTextShow = false, ProgressChangeDelayTime = 0, }; dimmingView.AddChidren(dimmerBar); dimmerBar.OnProgressChangedEvent = (sender, e) => { btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; }; dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.Brightness, e.ToString()); group.Control(d); }; var btnMaxValuesText = new Button() { X = dimmerBar.Right, Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(55), Height = Application.GetRealHeight(21), Text = "100%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMaxValuesText); #endregion } /// <summary> /// 加载cct属性设置控件 /// </summary> /// <param name="attrView"></param> void LoadCctAttrView(VerticalScrolViewLayout attrView) { #region 色温 var cctView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(cctView); //色温 var btnTempClolor = new Button(); btnTempClolor.X = Application.GetRealWidth(35); btnTempClolor.Y = Application.GetRealHeight(1); btnTempClolor.Width = Application.GetRealWidth(224); btnTempClolor.Height = Application.GetRealHeight(21); btnTempClolor.TextAlignment = TextAlignment.CenterLeft; btnTempClolor.TextColor = CSS_Color.FirstLevelTitleColor; btnTempClolor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; btnTempClolor.TextID = StringId.ColorTemperature; cctView.AddChidren(btnTempClolor); //2700K var btnTempClolorMin = new Button() { X = Application.GetRealWidth(35), Y = btnTempClolor.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), }; btnTempClolorMin.Width = Application.GetRealWidth(54); btnTempClolorMin.Height = Application.GetRealHeight(21); btnTempClolorMin.Text = "2700K"; btnTempClolorMin.TextAlignment = TextAlignment.CenterLeft; btnTempClolorMin.TextColor = CSS_Color.PromptingColor1; btnTempClolorMin.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMin); //滑动条的背景图片 var btnColorTemplatrueBack = new Button() { X = Application.GetRealWidth(55 + 22 + 15), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(54), }; btnColorTemplatrueBack.UnSelectedImagePath = "FunctionIcon/Light/ColorTemperatureBar.png"; btnColorTemplatrueBack.Height = Application.GetRealHeight(8); btnColorTemplatrueBack.Gravity = Gravity.CenterHorizontal; cctView.AddChidren(btnColorTemplatrueBack); //滑动条控件 var barColorTemplatrue = new CCTSeekBarControl() { X = Application.GetRealWidth(55 + 22), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), }; barColorTemplatrue.MinValue = 27; barColorTemplatrue.MaxValue = 65; barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明 barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000; barColorTemplatrue.SeekBarBackgroundColor = 0x00000000; cctView.AddChidren(barColorTemplatrue); barColorTemplatrue.Y = btnTempClolorMin.Y - (barColorTemplatrue.Height - btnTempClolorMin.Height) / 2; //设置初始值 btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); barColorTemplatrue.OnProgressChangedEvent = (sender, e) => { btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); }; barColorTemplatrue.OnStopTrackingTouchEvent = (sender, e) => { var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.CCT, (barColorTemplatrue.Progress * 100).ToString()); group.Control(d); }; //变更背景图的Y轴坐标 btnColorTemplatrueBack.Y = barColorTemplatrue.Y + (barColorTemplatrue.Height - btnColorTemplatrueBack.Height) / 2; //6500K var btnTempClolorMax = new Button(); btnTempClolorMax.Y = btnTempClolorMin.Y; btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30); btnTempClolorMax.Width = Application.GetRealWidth(54); btnTempClolorMax.Height = Application.GetRealHeight(21); btnTempClolorMax.Text = "6500K"; btnTempClolorMax.TextAlignment = TextAlignment.CenterRight; btnTempClolorMax.TextColor = CSS_Color.PromptingColor1; btnTempClolorMax.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMax); #endregion } /// <summary> /// 加载rgb属性设置控件 /// </summary> /// <param name="attrView"></param> void LoadRgbAttrView(VerticalScrolViewLayout attrView) { #region RGB var rgbView = new FrameLayout() { Height = Application.GetRealHeight(248) }; attrView.AddChidren(rgbView); var btnCurColor = new Button() { X = Application.GetRealWidth(24), Y = Application.GetRealHeight(10), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), Radius = (uint)Application.GetMinRealAverage(8), BorderColor = CSS_Color.PromptingColor2, BorderWidth = 1, //BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(commandDic[FunctionAttributeKey.RGB])) }; rgbView.AddChidren(btnCurColor); //色盘的桌布控件(限制那个白色滑动球使用) var framePickerBack = new FrameLayout(); framePickerBack.Gravity = Gravity.CenterHorizontal; framePickerBack.Y = Application.GetRealHeight(20); framePickerBack.Width = Application.GetMinRealAverage(198); framePickerBack.Height = Application.GetMinRealAverage(198); rgbView.AddChidren(framePickerBack); var colorPicker = new ColorPicker() { ColorImagePath = "FunctionIcon/Light/ColorWheel.png", }; framePickerBack.AddChidren(colorPicker); //白点控件 var btnWhiteRound = new Button(); btnWhiteRound.Width = Application.GetRealWidth(24); btnWhiteRound.Height = Application.GetRealWidth(24); btnWhiteRound.UnSelectedImagePath = "FunctionIcon/Light/ColorWheelTip.png"; btnWhiteRound.Visible = false; framePickerBack.AddChidren(btnWhiteRound); //当前点击的【点】是否正确 bool pointIsRight = false; //圆的半径(考虑边界,需要设置它的半径比较小一点) int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); string rgbString = "255,255,255"; var rgbTemp = new Light(); colorPicker.MouseUpEventHandler = (sender2, e2) => { var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.RGB, rgbString); group.Control(d); }; colorPicker.ColorChaged += (sender2, e2) => { rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); btnCurColor.BackgroundColor = (uint)(0xFF000000 + rgbTemp.GetRGBcolor(rgbString)); var d = new Dictionary<string, object>(); d.Add(FunctionAttributeKey.RGB, rgbString); group.Control(d); }; colorPicker.MouseDownEventHandler += (sender, e) => { pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); if (pointIsRight == false) { //点的区域不是圆盘内 return; } //显示白点 btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; if (btnWhiteRound.Visible == false) { btnWhiteRound.Visible = true; } }; colorPicker.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); }; #endregion } /// <summary> /// 检测点击点 /// </summary> /// <param name="circleR">圆的半径</param> /// <param name="circleX">圆心X轴</param> /// <param name="circleY">圆心Y轴</param> /// <param name="pointX">点击点的X轴</param> /// <param name="pointY">点击点的Y轴</param> /// <returns></returns> private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) { int dwidth = circleX - pointX; if (dwidth < 0) { dwidth *= -1; } int dHeight = circleY - pointY; if (dHeight < 0) { dHeight *= -1; } //根据三角函数,求三角形的斜边长 int dlength = dwidth * dwidth + dHeight * dHeight; //半径长度(不开方,所以是按平方算) circleR *= circleR; if (dlength < circleR) { //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) return true; } return false; } } } HDL_ON/UI/UI2/FuntionControlView/Light/LightScene/AddLightScene.cs
@@ -421,13 +421,14 @@ SelectedImagePath = "FunctionIcon/Light/LightScene/CheckOnIcon.png", IsSelected = functions.Find((obj) => obj.deviceId == function.deviceId) != null }; if (DB_ResidenceData.Instance.CurrentRegion.isSupportGroupControl) if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl) { btnSelect.X = Application.GetRealWidth(323); } bodyDiv.AddChidren(btnSelect); btnSelect.MouseUpEventHandler = (sender, e) => { Application.HideSoftInput(); btnSelect.IsSelected = !btnSelect.IsSelected; if(btnSelect.IsSelected) { SiriIntents/Server/HttpUtil.cs
@@ -16,8 +16,8 @@ /// 固定域名,正式环境 /// 公共域名就近解析 /// </summary> //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com"; public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com"; //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com"; const string APP_KEY = "HDL-HOME-APP-TEST"; const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"; //public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm ys/ys.csproj
@@ -54,6 +54,11 @@ <TransformFile Include="Transforms\EnumMethods.xml" /> </ItemGroup> <ItemGroup> <PackageReference Include="Square.OkHttp3"> <Version>3.8.0</Version> </PackageReference> </ItemGroup> <ItemGroup> <LibraryProjectZip Include="Jars\hdl_ezvizsdk.aar" /> </ItemGroup> <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Bindings.targets" />