wjc
2023-04-11 e74f8bfbe6c52f220deef5fc99a53c3a7872808d
Merge branch 'Dev-Wxr' into wjc
1个文件已添加
33个文件已修改
2890 ■■■■■ 已修改文件
HDL-ON_Android/Assets/Language.ini 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Resources/Resource.designer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/ApiUtlis.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/Utlis/FloorSelectPopupDialog.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control_TcpClient.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Mqtt/MqttClient.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpUtil.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewApiRes.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/DiySelectPopupDialog.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionPage.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs 1188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage.cs 585 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/LightScene/AddLightScene.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SiriIntents/Server/HttpUtil.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ys/ys.csproj 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
                        }
#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();
                        ////===================场景==========================
                        //new System.Threading.Thread(() =>
                        //{
                        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
                    {
                        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,6 +565,19 @@
            new System.Threading.Thread(() =>
            {
                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
                {
                if (collect)
                {
                    result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
@@ -572,6 +585,7 @@
                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
@@ -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,6 +326,13 @@
                        new PublicAssmebly().TipMsg(StringId.Tip, StringId.PlsEntryGroupName);
                        return;
                    }
                    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)
@@ -326,8 +351,9 @@
                    }
                    try
                    {
                        var http = new HttpServerRequest();
                        var pack = http.AddGroupControl(new List<GroupControl>() { groupControl });
                            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)
@@ -346,12 +372,115 @@
                        MainPage.Log($"新增群控异常:{ex.Message}");
                    }
                }
                    else
                    {
                        try
                        {
                            var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl);
                            //没有更新数据则直接退出
                            if (newEditDataString == editDataString)
                            {
                                this.RemoveFromParent();
                                return;
                            }
                            var pack = Common.ApiUtlis.Ins.HttpRequest.EditGroupControl(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}");
                        }
                    }
                }
            };
            #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,10 +44,24 @@
            };
            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();
                var pack = ApiUtlis.Ins.HttpRequest.GetGroupControlList();
                if(pack != null)
                {
                    if(pack.Code == StateCode.SUCCESS  )
@@ -54,7 +69,10 @@
                        try
                        {
                            var groupControlList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
                            Application.RunOnMainThread(() =>
                            {
                            LoadGroupControlView(groupControlList);
                            });
                        }
                        catch (Exception ex)
                        {
@@ -66,21 +84,38 @@
                        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 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 += ",";
                }
                roomNameList += findRoom.floorName + "-" + findRoom.roomName;
            }
            if (roomNameList == "")
                    if (pack.Code == StateCode.SUCCESS)
            {
                roomNameList = Language.StringByID(StringId.WholeZone);
                        //DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl.
            }
            return roomNameList;
                    else
                    {
                        MainPage.Log($"群控控制失败,Code: {pack.Code}");
                    }
                }
            }
            catch (Exception ex){
                MainPage.Log($"群控控制失败: {ex.Message}");
            }
        }
    }
@@ -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" />