From 489d3bd60ad7dc2fecb398b09cf4c52df16f0fc2 Mon Sep 17 00:00:00 2001
From: Davin <591807572@qq.com>
Date: 星期三, 26 七月 2023 15:55:30 +0800
Subject: [PATCH] Merge branch 'Dev-Branch' of http://59.41.255.150:6688/r/~wxr/OnPro into Dev-Branch

---
 SiriIntents/SiriIntents.csproj                                                              |    2 
 HDL-ON_Android/Properties/AndroidManifest.xml                                               |    2 
 HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs                               |   20 
 HDL-ON_Android/Assets/Language.ini                                                          |   38 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs        |    7 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs                 |   17 
 HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png                              |    0 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                                |   59 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs                           |   38 
 HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs                                  |   27 
 HDL_ON/Common/ApiUtlis.cs                                                                   |   17 
 HDL_ON/UI/UI2/2-Classification/RoomPage.cs                                                  |    2 
 HDL_ON/DAL/Mqtt/MqttClient.cs                                                               |   43 
 HDL_ON/HDL_ON.projitems                                                                     |    1 
 HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs                                        |    2 
 HDL-ON_Android/HDL-ON_Android.csproj                                                        |    3 
 HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs                                                     |  170 --
 HDL-ON_iOS/Info.plist                                                                       |    4 
 HDL_ON/Common/HDLCommon.cs                                                                  |    1 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs                                      |    2 
 HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs                                  |    4 
 HDL_ON/UI/UI0-Public/PublicAssmebly.cs                                                      |    9 
 HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs                               |  504 ++++++++--
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png               |    0 
 HDL_ON/UI/UI1-Login/LoginPage.cs                                                            |    4 
 SiriIntents/Server/HttpUtil.cs                                                              |    4 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs                     |   28 
 HDL_ON/Entity/DB_ResidenceData.cs                                                           |    4 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                                        |   59 
 HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs                   |  315 +++---
 HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png                               |    0 
 HDL_ON/Entity/Function/Function.cs                                                          |   24 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs                                        |    2 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs                              |   53 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs                         |   59 
 HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs                                         |    3 
 HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs                                                     |    2 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                                   |   10 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                                        |  551 +++++++----
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs                              |   46 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs                                          |   15 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs               |  130 ++
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs |    1 
 HDL-ON_iOS/Resources/Language.ini                                                           |   38 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png                          |    0 
 HDL_ON/UI/MainPage.cs                                                                       |    6 
 SiriIntentsUI/SiriIntentsUI.csproj                                                          |    2 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png                |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png                 |    0 
 HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs                                    |  184 ++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png                           |    0 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs              |  141 +-
 HDL_ON/DAL/Server/NewAPI.cs                                                                 |    4 
 HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs                       |   21 
 HDL_ON/Common/R.cs                                                                          |   32 
 56 files changed, 1,792 insertions(+), 918 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 659b4f9..75c5e2b 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -665,6 +665,13 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
+
 
 
 
@@ -2002,8 +2009,17 @@
 676=涓�
 677=楂�
 678=褰撳墠鐢ㄦ埛鏁版嵁宸叉竻绌猴紝鍗冲皢杩斿洖涓婁竴椤点��
-679=缇ゆ帶
+679=缁勬帶
 680=鐐僵寮�鍏�
+681=鑷姩鐐僵娴嬭瘯
+682=缇ょ粍
+683=璇ユ椂闂存棤鏁�
+684=闀垮害瓒呭嚭鑼冨洿
+685=娉細鐢ㄦ埛绠$悊浠呭彲瀵瑰凡娣诲姞鐢ㄦ埛杩涜绠$悊銆傚闇�娣诲姞鏂扮敤鎴凤紝璇峰墠寰�閿佺杩涜鐩稿叧鎿嶄綔銆�
+
+
+
+
 
 
 
@@ -3342,6 +3358,12 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
 
 
 
@@ -4676,7 +4698,11 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
-
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
 
 
 
@@ -5999,6 +6025,14 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
+
+
 
 
 
diff --git a/HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png b/HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png
new file mode 100644
index 0000000..a183c95
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/Classification/Room/HomePagebg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
index 53eeb27..cc8383a 100644
--- a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
index b923744..90b408e 100644
--- a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
index 42639bb..a7714e4 100644
--- a/HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index 18122bc..68b87db 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -401,7 +401,6 @@
     <AndroidAsset Include="Assets\Phone\LogicIcon\selectlocation.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\ColorfulBar.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
-    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_white.png" />
     <AndroidAsset Include="Assets\h5\index.html" />
     <AndroidAsset Include="Assets\h5\static\index.63b34199.css" />
     <AndroidAsset Include="Assets\h5\static\images\coal-save-ic.png" />
@@ -456,6 +455,8 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\VideoDoorlockBatteryManagementBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\groupControl_white.png" />
+    <AndroidAsset Include="Assets\Phone\Classification\Room\HomePagebg.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index dc840b6..b773372 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.8.1" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202307061">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="2.0.0" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202307261">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<uses-permission android:name="android.permission.RECEIVE_SMS" />
 	<!--鍙嬬洘-->
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 45e9310..0db5cb8 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -59,7 +59,7 @@
         <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
 <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-<CodesignProvision>OnPro230605-1-Dev</CodesignProvision>
+<CodesignProvision>OnPro230630-1-Dev</CodesignProvision>
     </PropertyGroup>
     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
         <DebugType>none</DebugType>
@@ -96,9 +96,6 @@
         <Reference Include="HDL.Shared.IOS.ScanQRCode">
           <HintPath>..\DLL\IOS\HDL.Shared.IOS.ScanQRCode.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS">
-          <HintPath>..\DLL\Shared.IOS.dll</HintPath>
-        </Reference>
         <Reference Include="Shared.IOS.HDLLinphoneSDK">
           <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
         </Reference>
@@ -116,6 +113,9 @@
         </Reference>
         <Reference Include="EZSDK.IOS">
           <HintPath>..\DLL\IOS\EZSDK.IOS.dll</HintPath>
+        </Reference>
+        <Reference Include="Shared.IOS">
+          <HintPath>..\DLL\Shared.IOS.dll</HintPath>
         </Reference>
     </ItemGroup>
     <ItemGroup>
@@ -1562,6 +1562,32 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\Light\ColorfulBar.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_white.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockUserManager.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\groupControl.png" />
+      <BundleResource Include="Resources\Phone\LogicIcon\SeriesIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordOnIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintOnIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcOnIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceOnIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\peephole.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\securityipcamez.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_blue.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_white.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\FaceUnlockImage.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\VideoDoorlockBatteryManagementBg.png" />
+      <BundleResource Include="Resources\Phone\Classification\Room\HomePagebg.png" />
       <BundleResource Include="Resources\h5\index.html" />
       <BundleResource Include="Resources\h5\static\index.63b34199.css" />
       <BundleResource Include="Resources\h5\static\images\coal-save-ic.png" />
@@ -1591,31 +1617,6 @@
       <BundleResource Include="Resources\h5\static\img\equal-plant-ic.7ef6befa.png" />
       <BundleResource Include="Resources\h5\static\img\coal-save-ic.6c5fd125.png" />
       <BundleResource Include="Resources\h5\static\font\SourceHanSansCN-Normal.otf" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockUserManager.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\groupControl.png" />
-      <BundleResource Include="Resources\Phone\LogicIcon\SeriesIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\DigitalPasswordOnIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FingerprintOnIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\NfcOnIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceOnIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\UserRightsManagement\FaceIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\peephole.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\securityipcamez.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_blue.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\AutomaitcTriggerIcon_white.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\FaceUnlockImage.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HorseRaceLampIcon.png" />
-      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\VideoDoorlockBatteryManagementBg.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index 3edb6dd..922dbd4 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -11,7 +11,7 @@
 	<key>CFBundleName</key>
 	<string>On Pro</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.8.1</string>
+	<string>1.9.0</string>
 	<key>CFBundleURLTypes</key>
 	<array>
 		<dict>
@@ -36,7 +36,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.8.1</string>
+	<string>1.9.0</string>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
 		<string>weixinULAPI</string>
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 659b4f9..75c5e2b 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -665,6 +665,13 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
+
 
 
 
@@ -2002,8 +2009,17 @@
 676=涓�
 677=楂�
 678=褰撳墠鐢ㄦ埛鏁版嵁宸叉竻绌猴紝鍗冲皢杩斿洖涓婁竴椤点��
-679=缇ゆ帶
+679=缁勬帶
 680=鐐僵寮�鍏�
+681=鑷姩鐐僵娴嬭瘯
+682=缇ょ粍
+683=璇ユ椂闂存棤鏁�
+684=闀垮害瓒呭嚭鑼冨洿
+685=娉細鐢ㄦ埛绠$悊浠呭彲瀵瑰凡娣诲姞鐢ㄦ埛杩涜绠$悊銆傚闇�娣诲姞鏂扮敤鎴凤紝璇峰墠寰�閿佺杩涜鐩稿叧鎿嶄綔銆�
+
+
+
+
 
 
 
@@ -3342,6 +3358,12 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
 
 
 
@@ -4676,7 +4698,11 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
-
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
 
 
 
@@ -5999,6 +6025,14 @@
 678=Current user data has been cleared, about to return to the previous page.
 679=Group control
 680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+
+
+
 
 
 
diff --git a/HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png b/HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png
new file mode 100644
index 0000000..a183c95
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Classification/Room/HomePagebg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
index 53eeb27..cc8383a 100644
--- a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
index b923744..90b408e 100644
--- a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
index 42639bb..a7714e4 100644
--- a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Music/MusicPlayOnIcon.png
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index e0a8a6a..e6f4a51 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -104,6 +104,11 @@
                 code = Ins.HttpRequest.RefreshToken();
                 if (code != StateCode.SUCCESS)
                 {
+                    if (waitPage != null)
+                    {
+                        waitPage.RemoveFromParent();
+                        waitPage = null;
+                    }
                     MainPage.Log($"鍒锋柊token澶辫触");
                     return;
                 }
@@ -112,6 +117,11 @@
                 code = Ins.HttpRequest.GetHomePager();
                 if (code != StateCode.SUCCESS)
                 {
+                    if (waitPage != null)
+                    {
+                        waitPage.RemoveFromParent();
+                        waitPage = null;
+                    }
                     MainPage.Log($"鍒锋柊浣忓畢淇℃伅澶辫触");
                     return;
                 }
@@ -120,6 +130,11 @@
                 code = Ins.HttpRequest.GetUserInfo();
                 if (code != StateCode.SUCCESS)
                 {
+                    if (waitPage != null)
+                    {
+                        waitPage.RemoveFromParent();
+                        waitPage = null;
+                    }
                     MainPage.Log($"鍒锋柊涓汉淇℃伅澶辫触");
                     return;
                 }
@@ -178,7 +193,7 @@
                                 FunctionList.List.ClearDatas();
                                 //MainPage.Log($"============璁惧============寮�濮�" + FunctionList.List.Functions.Count);
                                 //MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
-                                //MainPage.Log($"sid鍒楄〃鑾峰彇====" + deviceResult.Data.ToString());
+                                MainPage.Log($"sid鍒楄〃鑾峰彇====" + deviceResult.Data.ToString());
                                 var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                 if (deviceList == null)
                                 {
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index 0007c02..24e612e 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -469,6 +469,7 @@
                 case "464027401@qq.com":
                 case "13580507523":
                 case "15626203746":
+                case "18316672920":
                     return;
             }
 
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index a809493..aaf50ae 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -5,12 +5,39 @@
     public static class StringId
     {
 
+
+
+
+
+
+
+        /// <summary>
+        /// 娉細鐢ㄦ埛绠$悊浠呭彲瀵瑰凡娣诲姞鐢ㄦ埛杩涜绠$悊銆傚闇�娣诲姞鏂扮敤鎴凤紝璇峰墠寰�閿佺杩涜鐩稿叧鎿嶄綔銆�
+        /// </summary>
+        public const int VideoDoorlockManagerTip = 685;
+        /// <summary>
+        /// 闀垮害瓒呭嚭鑼冨洿
+        /// </summary>
+        public const int LengthOutOfRange = 684;
+        /// <summary>
+        /// 璇ユ椂闂存棤鏁�
+        /// </summary>
+        public const int TimeInvalid = 683;
+        //public const int 
+        /// <summary>
+        /// 缇ょ粍锛堣窇椹伅鍒嗙粍锛�
+        /// </summary>
+        public const int HorseRaceLampGroup = 682;
+        /// <summary>
+        /// 鑷姩鐐僵娴嬭瘯
+        /// </summary>
+        public const int CulorfulTest = 681;
         /// <summary>
         /// 鐐僵寮�鍏�
         /// </summary>
         public const int ColorfulSwitch = 680;
         /// <summary>
-        /// 缇ゆ帶
+        /// 缁勬帶
         /// </summary>
         public const int GroupControl = 679;
         /// <summary>
@@ -3459,7 +3486,8 @@
         /// RGB鑹茬洏
         /// </summary>
         public const int rgbsepan = 7172;
-        
+       
+
 
 
         /// <summary>
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 0358a57..f4e129f 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -491,48 +491,6 @@
                                 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appDeviceRefresh/up")
                                 {
                                     MainPage.Log("璁惧鏁版嵁鍒锋柊閫氱煡");
-                                    var deviceResult = new HttpServerRequest().GetDeviceList();
-                                    if (deviceResult.Code == StateCode.SUCCESS)
-                                    {
-                                        MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
-                                        var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
-                                        if (deviceList == null)
-                                        {
-                                            deviceList = new DevcieApiPack();
-                                        }
-                                        string delFile = "";
-                                        if (FunctionList.List.GetDeviceFunctionList().Count > 0)
-                                        {
-                                            for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
-                                            {
-                                                var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
-                                                if (SPK.MusicSpkList().Contains(localFunction.spk))
-                                                {
-                                                    i++;
-                                                    continue;
-                                                }
-                                                var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
-
-                                                if (delFile == localFunction.savePath)
-                                                {
-                                                    i++;
-                                                    continue;
-                                                }
-                                                delFile = localFunction.savePath;
-                                                FunctionList.List.DeleteFunction(localFunction);
-                                            }
-                                        }
-                                        //澶勭悊鍓╀笅鐨勬柊澧炲姛鑳�
-                                        foreach (var newFunction in deviceList.list)
-                                        {
-                                            newFunction.SaveFunctionFile();
-                                            FunctionList.List.IniFunctionList(newFunction.savePath);
-                                        }
-                                    }
-                                    else
-                                    {
-                                        MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁澶辫触:Code:{deviceResult.Code};  Msg:{deviceResult.message}");
-                                    }
                                 }
                                 //缃戝叧瀵嗛挜鍙樺寲
                                 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/custom/mqtt/secret/change")
@@ -879,6 +837,7 @@
             //娴嬭瘯璐﹀彿锛屼笉鎸や笅绾�
             switch (UserInfo.Current.userMobileInfo)
             {
+                case "18316672920":
                 case "15626203746":
                 case "464027401@qq.com":
                     return;
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index 975830e..2eca374 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -902,9 +902,9 @@
         public const string Api_Post_GetDoorlockUserList = "/home-wisdom/platform/yingshi/lock/user/list";
 
         /// <summary>
-        /// 鏇存敼闂ㄩ攣鐢ㄦ埛澶囨敞鍚�
+        /// 鏇存敼闂ㄩ攣鐢ㄦ埛澶囨敞鍚� 
         /// </summary>
-        public const string Api_Post_setDoorUserRemark = "/home-wisdom/platform/yingshi/lock/user/list";
+        public const string Api_Post_setDoorUserRemark = "/home-wisdom/platform/yingshi/lock/setDoorUserRemark";
         /// <summary>
         /// 鍒犻櫎鐢ㄦ埛鏁板瓧瀵嗙爜
         /// </summary>
diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
index c5bd54b..aebb3a8 100644
--- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -234,7 +234,7 @@
                 //鍏堟竻绌哄懠鍙拰鐩戣璁惧淇℃伅
                 if (clearCallInfo)
                 {
-                    InitCallInfo(null);
+                    //InitCallInfo(null);//閫犳垚鎺ユ敹鍛煎彨鏃跺紑閿佸紑閿佸紓甯�
                 }
 
                 HDLSipInfo mHDLSipInfo = GetHDLSipInfo(mHDLCallVideoInfo.HomeId);
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index 8b5e4cb..3fe97ad 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -96,7 +96,7 @@
                     {
                         instance = new DB_ResidenceData();
                         instance.SaveResidenceData();
-                        instance.residenceImage = "Classification/Room/Roombg.png";
+                        instance.residenceImage = "Classification/Room/HomePagebg.png";
                         instance.HomeGateway = new HomeGatewayInfo()
                         {
                             homeId = "1396717478877241345",
@@ -135,7 +135,7 @@
                         instance = new DB_ResidenceData { };
                         return instance;
                     }
-                    instance.residenceImage = "Classification/Room/Roombg.png";
+                    instance.residenceImage = "Classification/Room/HomePagebg.png";
                     //鍒濆鍖栦綇瀹呭姛鑳芥暟鎹�
                     SpatialInfo.CurrentSpatial.InitRoomListFunctions();
 
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 8f4f3c3..8e8602b 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -803,25 +803,27 @@
             var list = new List<FunctionAttributes>();
             if (spk == SPK.GroupControl)
             {
-                var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
-                if (gc != null)
+                lock (list)
                 {
-                    foreach (var temp in gc.sids)
+                    var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
+                    if (gc != null)
                     {
-                        var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
-                        if (light != null)
+                        foreach (var temp in gc.sids)
                         {
-                            foreach (var attr in light.attributes)
+                            var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
+                            if (light != null)
                             {
-                                if (list.Find((obj) => obj.key == attr.key) == null)
+                                foreach (var attr in light.attributes)
                                 {
-                                    list.Add(attr);
+                                    if (list.Find((obj) => obj.key == attr.key) == null)
+                                    {
+                                        list.Add(attr);
+                                    }
                                 }
                             }
                         }
                     }
                 }
-
             }
             else
             {
@@ -1142,6 +1144,10 @@
         /// 褰撳墠鍊�
         /// </summary>
         public object curValue = new object();
+        /// <summary>
+        /// 灞炴�у崟浣�
+        /// </summary>
+        public string unit=string.Empty;
     }
 
     /// <summary>
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 544dd99..f946b7e 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -561,6 +561,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockFaceUnlockHelpPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockAudioSetupPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockBatteryManagementPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\2-Classification\SeriesFunctionListPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index 9ba4beb..6f43aa2 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string VersionString = "1.8.1";
+        public static string VersionString = "2.0.0";
         ///// <summary>
         ///// 瀹㈡埛绔被鍨�
         ///// </summary>
@@ -121,7 +121,8 @@
             SPK.AirSwitch,
             SPK.PanelSocket,SPK.ElectricSocket,
             SPK.MechanicalArm,SPK.IpCam_Imou,
-            SPK.GroupControl
+            SPK.GroupControl,
+            SPK.AvMusic,SPK.MusicStandard
         };
 
 
@@ -620,6 +621,7 @@
 #if DEBUG
             if (msg.Contains("鏀跺埌鏁版嵁")
                 || msg.Contains("鍙戦��")
+                || msg.Contains("鎺ユ敹鍒版帹閫�")
 
                 )
                 Console.WriteLine(msg);
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmebly.cs b/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
index fd6cc65..526a60f 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
@@ -11,12 +11,16 @@
 {
     public partial class PublicAssmebly
     {
+        public Button btnTip;
+
+        public int entryMaxLength = 40;
+        //public Action entrylistener;
 
         void EditParaterEvent(Button btnConfirm, int errorId_IsNullOrEmpty, int errorId_ContainsPar, List<string> list, EditText editText, Action<string> callBackAction,
             FrameLayout contentView, Button btnLine, Button btnCancel, FrameLayout editView, Dialog dialog, int titleId)
         {
 
-            var btnTip = new Button()
+            btnTip = new Button()
             {
                 X = editView.X,
                 Y = editView.Bottom,
@@ -151,13 +155,14 @@
 
             etParater.TextChangeEventHandler = (sender, e) =>
             {
-                if (etParater.Text.Length > 20)
+                if (System.Text.Encoding.Default.GetBytes(etParater.Text).Length > entryMaxLength)
                 {
                     etParater.Text = etParater.Text.Remove(20);
 
 #if __ANDROID__
                     etParater.SetSelectionEnd();
 #endif
+                    //entrylistener?.Invoke();
                 }
             };
 
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 3488b00..96dd1af 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -157,11 +157,11 @@
                         break;
                     case SPK.MusicStandard:
                     case SPK.AvMusic:
-                        //Music.A31MusicModel.Current= new Music.A31MusicModel { functionMusic = function };//褰撳墠鎾斁鍣�
-                        //var a31PlayMusicPage = new Music.A31PlayMusicPage();
-                        //MainPage.BasePageView.AddChidren(a31PlayMusicPage);
-                        //a31PlayMusicPage.Show();
-                        //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        Music.A31MusicModel.Current = new Music.A31MusicModel { functionMusic = function };//褰撳墠鎾斁鍣�
+                        var a31PlayMusicPage = new Music.A31PlayMusicPage();
+                        MainPage.BasePageView.AddChidren(a31PlayMusicPage);
+                        a31PlayMusicPage.Show();
+                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                         break;
                     case SPK.LightCCT:
                         var TureView = new ColorTureLampPage(function);
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index 1200b13..c5cfa1d 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -312,7 +312,6 @@
                     //etAccount.Text = "13143792049";
                     etAccount.Text = "18688414428";//澶╂渤3妤�
                     //etAccount.Text = "18244942707";
-                    //etAccount.Text = "12345678904";
                     //etAccount.Text = "13418062953";
                     etAccount.Text = "13138683659";
                     //etAccount.Text = "15217626103";
@@ -320,12 +319,13 @@
                     //etAccount.Text = "18321091245";
                     //etAccount.Text = "13751916353";
                     etAccount.Text = "13549566666";
-                    etAccount.Text = "18316672920";
                     etAccount.Text = "support7@hdlautomation.com";
                     etAccount.Text = "13375012446";//娴嬭瘯鏈嶅姟鍣�
                     etAccount.Text = "15855403939";
                     etAccount.Text = "15006564444";
                     etAccount.Text = "13580507523";
+                    //etAccount.Text = "12345678904";//2.0 娴嬭瘯  钀ょ煶
+                    etAccount.Text = "18316672920";
                 }
                 else
                 {
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index a7fd938..255f9f7 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -70,19 +70,20 @@
         /// <summary>
         /// 鍒囨崲鏄剧ず鍔熻兘绫诲瀷鍖哄煙
         /// </summary>
-        FrameLayout changeView;
-        /// <summary>
-        /// 鍒囨崲鏄剧ず璁惧鍔熻兘鎸夐挳
-        /// </summary>
-        Button btnChangeFunction;
-        /// <summary>
-        /// 鍒囨崲鏄剧ず鍦烘櫙鍔熻兘鎸夐挳
-        /// </summary>
-        Button btnChangeScene;
-        /// <summary>
-        /// 鍒囨崲鏄剧ず鍦虹粍鎺ф寜閽�
-        /// </summary>
-        Button btnChangeGroupControl;
+        FrameLayout changeBaseView;
+        //FrameLayout changeView;
+        ///// <summary>
+        ///// 鍒囨崲鏄剧ず璁惧鍔熻兘鎸夐挳
+        ///// </summary>
+        //Button btnChangeFunction;
+        ///// <summary>
+        ///// 鍒囨崲鏄剧ず鍦烘櫙鍔熻兘鎸夐挳
+        ///// </summary>
+        //Button btnChangeScene;
+        ///// <summary>
+        ///// 鍒囨崲鏄剧ず鍦虹粍鎺ф寜閽�
+        ///// </summary>
+        //Button btnChangeGroupControl;
         /// <summary>
         /// 鍔熻兘鏄剧ず鍖哄煙
         /// </summary>
@@ -116,11 +117,11 @@
 #endregion
 
 #region 鎶ヨ淇℃伅
-        Button btnMsgBg;
-        Button btnMsgTime;
-        Button btnMsg;
+        //Button btnMsgBg;
+        //Button btnMsgTime;
+        //Button btnMsg;
         Button btnMsgIcon;
-#endregion
+        #endregion
 
         public HomePage()
         {
@@ -164,14 +165,14 @@
                 };
                 topView = new FrameLayout()
                 {
-                    Height = Application.GetRealHeight(216),
+                    Height = Application.GetRealHeight(113),//216),
                     BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                 };
                 bodyView.AddChidren(topView);
 #else
                 VerticalRefreshLayout refreshLayout = new VerticalRefreshLayout()
                 {
-                    Height = Application.GetRealHeight(216),
+                    Height = Application.GetRealHeight(113),//216),
                     BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                 };
                 bodyView.AddChidren(refreshLayout);
@@ -184,7 +185,7 @@
                 };
                 topView = new FrameLayout()
                 {
-                    Height = Application.GetRealHeight(216),
+                    Height = Application.GetRealHeight(113),//216),
                 };
                 refreshLayout.AddChidren(topView);
 #endif
@@ -508,57 +509,57 @@
 
 
 #region msg
-                FrameLayout msgView;
-                msgView = new FrameLayout()
-                {
-                    Y = Application.GetRealHeight(164),
-                    Gravity = Gravity.CenterHorizontal,
-                    Width = Application.GetRealWidth(343),
-                    Height = Application.GetRealHeight(28),
-                };
-                topView.AddChidren(msgView);
+                //FrameLayout msgView;
+                //msgView = new FrameLayout()
+                //{
+                //    Y = Application.GetRealHeight(164),
+                //    Gravity = Gravity.CenterHorizontal,
+                //    Width = Application.GetRealWidth(343),
+                //    Height = Application.GetRealHeight(28),
+                //};
+                //topView.AddChidren(msgView);
 
-                btnMsgBg = new Button()
-                {
-                    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
-                    Alpha = 0.4f,
-                };
-                msgView.AddChidren(btnMsgBg);
+                //btnMsgBg = new Button()
+                //{
+                //    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
+                //    Alpha = 0.4f,
+                //};
+                //msgView.AddChidren(btnMsgBg);
 
 
                 btnMsgIcon = new Button()
                 {
-                    X = Application.GetRealWidth(12),
-                    Gravity = Gravity.CenterVertical,
+                    X = Application.GetRealWidth(290),
+                    Y = Application.GetRealHeight(35),
                     Width = Application.GetMinRealAverage(24),
                     Height = Application.GetMinRealAverage(24),
                     UnSelectedImagePath = "Collection/MsgIcon.png",
                     SelectedImagePath = "Collection/MsgIconTip.png",
                 };
-                msgView.AddChidren(btnMsgIcon);
+                topView.AddChidren(btnMsgIcon);
 
 
-                btnMsg = new Button()
-                {
-                    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
-                    Width = Application.GetRealWidth(240),
-                    Text = "...",
-                    TextColor = CSS_Color.MainBackgroundColor,
-                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                    TextAlignment = TextAlignment.CenterLeft,
-                };
-                msgView.AddChidren(btnMsg);
+                //btnMsg = new Button()
+                //{
+                //    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
+                //    Width = Application.GetRealWidth(240),
+                //    Text = "...",
+                //    TextColor = CSS_Color.MainBackgroundColor,
+                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                //    TextAlignment = TextAlignment.CenterLeft,
+                //};
+                //msgView.AddChidren(btnMsg);
 
 
-                btnMsgTime = new Button()
-                {
-                    X = Application.GetRealWidth(299),
-                    Width = Application.GetRealWidth(44),
-                    Text = "00:00",
-                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                    TextAlignment = TextAlignment.CenterLeft,
-                };
-                msgView.AddChidren(btnMsgTime);
+                //btnMsgTime = new Button()
+                //{
+                //    X = Application.GetRealWidth(299),
+                //    Width = Application.GetRealWidth(44),
+                //    Text = "00:00",
+                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                //    TextAlignment = TextAlignment.CenterLeft,
+                //};
+                //msgView.AddChidren(btnMsgTime);
 
                 LoadEvent_GotoMessageCenterPage();
 
@@ -570,134 +571,12 @@
 
                 bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
 
-                if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
-                {
-                    changeView = new FrameLayout()
-                    {
-                        //Y = Application.GetRealHeight(20) + topView.Bottom,
-                        Gravity = Gravity.CenterHorizontal,
-                        Width = Application.GetRealWidth(334),
-                        Height = Application.GetRealHeight(62),
-                        BackgroundImagePath = "Collection/ChangeViewbg.png",
-                    };
-                    bodyView.AddChidren(changeView);
+                loadNavView();
 
-                    btnChangeFunction = new Button()
-                    {
-                        X = Application.GetRealWidth(10),
-                        Width = Application.GetRealWidth(114 - 10),
-                        TextID = StringId.Functions,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.HeadlineFontSize,
-                        TextAlignment = TextAlignment.Center,
-                        IsSelected = true,
-                        IsBold = true,
-                    };
-                    changeView.AddChidren(btnChangeFunction);
-
-                    Button btnLine = new Button()
-                    {
-                        X = btnChangeFunction.Right,
-                        Gravity = Gravity.CenterVertical,
-                        Width = Application.GetRealWidth(1),
-                        Height = Application.GetRealHeight(14),
-                        BackgroundColor = CSS_Color.PromptingColor1,
-                    };
-                    changeView.AddChidren(btnLine);
-
-                    btnChangeScene = new Button()
-                    {
-                        X = btnLine.Right,
-                        Width = Application.GetRealWidth(114 - 10),
-                        TextID = StringId.Scenes,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.TextFontSize,
-                        TextAlignment = TextAlignment.Center,
-                    };
-                    changeView.AddChidren(btnChangeScene);
-
-                    Button btnLine2 = new Button()
-                    {
-                        X = btnChangeScene.Right,
-                        Gravity = Gravity.CenterVertical,
-                        Width = Application.GetRealWidth(1),
-                        Height = Application.GetRealHeight(14),
-                        BackgroundColor = CSS_Color.PromptingColor1,
-                    };
-                    changeView.AddChidren(btnLine2);
-
-                    btnChangeGroupControl = new Button()
-                    {
-                        X = btnLine2.Right,
-                        Width = Application.GetRealWidth(114 - 10),
-                        TextID = StringId.GroupControl,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.TextFontSize,
-                        TextAlignment = TextAlignment.Center,
-                    };
-                    changeView.AddChidren(btnChangeGroupControl);
-                }
-                else
-                {
-                    changeView = new FrameLayout()
-                    {
-                        //Y = Application.GetRealHeight(20) + topView.Bottom,
-                        Gravity = Gravity.CenterHorizontal,
-                        Width = Application.GetRealWidth(230),
-                        Height = Application.GetRealHeight(62),
-                        BackgroundImagePath = "Collection/ChangeViewbg.png",
-                    };
-                    bodyView.AddChidren(changeView);
-
-                    btnChangeFunction = new Button()
-                    {
-                        X = Application.GetRealWidth(10),
-                        Width = Application.GetRealWidth(114 - 10),
-                        TextID = StringId.Functions,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.HeadlineFontSize,
-                        TextAlignment = TextAlignment.Center,
-                        IsSelected = true,
-                        IsBold = true,
-                    };
-                    changeView.AddChidren(btnChangeFunction);
-
-                    Button btnLine = new Button()
-                    {
-                        X = btnChangeFunction.Right,
-                        Gravity = Gravity.CenterVertical,
-                        Width = Application.GetRealWidth(1),
-                        Height = Application.GetRealHeight(14),
-                        BackgroundColor = CSS_Color.PromptingColor1,
-                    };
-                    changeView.AddChidren(btnLine);
-
-                    btnChangeScene = new Button()
-                    {
-                        X = btnLine.Right,
-                        Width = Application.GetRealWidth(114 - 10),
-                        TextID = StringId.Scenes,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.TextFontSize,
-                        TextAlignment = TextAlignment.Center,
-                    };
-                    changeView.AddChidren(btnChangeScene);
-                }
                 #endregion
 
                 #region ContextView
-                contentView = new PageLayout()
-                {
-                    //Y = changeView.Bottom,
-                    Height = Application.GetRealHeight(310 + 30 + 10), //20涓鸿秴鍑洪儴鍒�
-                    IsShowPoint = false,
-                };
-                bodyView.AddChidren(contentView);
+
 
                 functionViews = new List<FrameLayout>();
 
@@ -712,6 +591,295 @@
 
 
         }
+
+        void loadNavView()
+        {
+            if(changeBaseView == null)
+            {
+                changeBaseView = new FrameLayout()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Height = Application.GetRealHeight(62),
+                };
+                bodyView.AddChidren(changeBaseView);
+            }
+            else
+            {
+                changeBaseView.RemoveAll();
+            }
+
+            if (contentView == null)
+            {
+                contentView = new PageLayout()
+                {
+                    Height = Application.GetRealHeight(310 + 30 + 10 + 100), //20涓鸿秴鍑洪儴鍒�
+                    IsShowPoint = false,
+                };
+                bodyView.AddChidren(contentView);
+            }
+
+            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl && FunctionList.List.groupControls.Count > 0)
+            {
+                var changeView = new FrameLayout()
+                {
+                    //Y = Application.GetRealHeight(20) + topView.Bottom,
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(334),
+                    Height = Application.GetRealHeight(62),
+                    BackgroundImagePath = "Collection/ChangeViewbg.png",
+                };
+                changeBaseView.AddChidren(changeView);
+
+                var btnChangeFunction = new Button()
+                {
+                    X = Application.GetRealWidth(10),
+                    Width = Application.GetRealWidth(114 - 10),
+                    TextID = StringId.Functions,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.HeadlineFontSize,
+                    TextAlignment = TextAlignment.Center,
+                    IsSelected = true,
+                    IsBold = true,
+                };
+                changeView.AddChidren(btnChangeFunction);
+
+                Button btnLine = new Button()
+                {
+                    X = btnChangeFunction.Right,
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(1),
+                    Height = Application.GetRealHeight(14),
+                    BackgroundColor = CSS_Color.PromptingColor1,
+                };
+                changeView.AddChidren(btnLine);
+
+                var btnChangeScene = new Button()
+                {
+                    X = btnLine.Right,
+                    Width = Application.GetRealWidth(114 - 10),
+                    TextID = StringId.Scenes,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextAlignment = TextAlignment.Center,
+                };
+                changeView.AddChidren(btnChangeScene);
+
+                Button btnLine2 = new Button()
+                {
+                    X = btnChangeScene.Right,
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(1),
+                    Height = Application.GetRealHeight(14),
+                    BackgroundColor = CSS_Color.PromptingColor1,
+                };
+                changeView.AddChidren(btnLine2);
+
+                var btnChangeGroupControl = new Button()
+                {
+                    X = btnLine2.Right,
+                    Width = Application.GetRealWidth(114 - 10),
+                    TextID = StringId.GroupControl,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextAlignment = TextAlignment.Center,
+                };
+                changeView.AddChidren(btnChangeGroupControl);
+
+
+
+                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
+                    btnChangeFunction.IsSelected = false;
+                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeFunction.IsBold = false;
+                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeScene.IsSelected = false;
+                    btnChangeScene.IsBold = false;
+                    btnChangeGroupControl.IsSelected = true;
+                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                    btnChangeGroupControl.IsBold = true;
+                    CurShowTypeContent = 2;
+                    contentView.PageIndex = 2;
+                };
+
+                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
+                    btnChangeFunction.IsSelected = true;
+                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                    btnChangeFunction.IsBold = true;
+                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeScene.IsSelected = false;
+                    btnChangeScene.IsBold = false;
+                    CurShowTypeContent = 0;
+                    contentView.PageIndex = 0;
+
+                    btnChangeGroupControl.IsSelected = false;
+                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeGroupControl.IsBold = false;
+                };
+                btnChangeScene.MouseUpEventHandler = (sender, e) => {
+                    btnChangeScene.IsSelected = true;
+                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                    btnChangeScene.IsBold = true;
+                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeFunction.IsSelected = false;
+                    btnChangeFunction.IsBold = false;
+                    CurShowTypeContent = 1;
+                    contentView.PageIndex = 1;
+
+                    btnChangeGroupControl.IsSelected = false;
+                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeGroupControl.IsBold = false;
+                };
+
+                contentView.PageChange = (sender, e) =>
+                {
+                    if (contentView.PageIndex == 0)
+                    {
+                        btnChangeFunction.IsSelected = true;
+                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                        btnChangeFunction.IsBold = true;
+                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeScene.IsSelected = false;
+                        btnChangeScene.IsBold = false;
+                        btnChangeGroupControl.IsSelected = false;
+                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeGroupControl.IsBold = false;
+                    }
+                    else if (contentView.PageIndex == 1)
+                    {
+                        btnChangeScene.IsSelected = true;
+                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                        btnChangeScene.IsBold = true;
+                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeFunction.IsSelected = false;
+                        btnChangeFunction.IsBold = false;
+                        btnChangeGroupControl.IsSelected = false;
+                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeGroupControl.IsBold = false;
+                    }
+                    else if (contentView.PageIndex == 2)
+                    {
+                        btnChangeFunction.IsSelected = false;
+                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeFunction.IsBold = false;
+                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeScene.IsSelected = false;
+                        btnChangeScene.IsBold = false;
+                        btnChangeGroupControl.IsSelected = true;
+                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                        btnChangeGroupControl.IsBold = true;
+                    }
+                };
+
+
+            }
+            else
+            {
+                var changeView = new FrameLayout()
+                {
+                    //Y = Application.GetRealHeight(20) + topView.Bottom,
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(230),
+                    Height = Application.GetRealHeight(62),
+                    BackgroundImagePath = "Collection/ChangeViewbg.png",
+                };
+                changeBaseView.AddChidren(changeView);
+
+                var btnChangeFunction = new Button()
+                {
+                    X = Application.GetRealWidth(10),
+                    Width = Application.GetRealWidth(114 - 10),
+                    TextID = StringId.Functions,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.HeadlineFontSize,
+                    TextAlignment = TextAlignment.Center,
+                    IsSelected = true,
+                    IsBold = true,
+                };
+                changeView.AddChidren(btnChangeFunction);
+
+                Button btnLine = new Button()
+                {
+                    X = btnChangeFunction.Right,
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(1),
+                    Height = Application.GetRealHeight(14),
+                    BackgroundColor = CSS_Color.PromptingColor1,
+                };
+                changeView.AddChidren(btnLine);
+
+                var btnChangeScene = new Button()
+                {
+                    X = btnLine.Right,
+                    Width = Application.GetRealWidth(114 - 10),
+                    TextID = StringId.Scenes,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextAlignment = TextAlignment.Center,
+                };
+                changeView.AddChidren(btnChangeScene);
+
+
+                btnChangeFunction.MouseUpEventHandler = (sender, e) =>
+                {
+
+                    btnChangeFunction.IsSelected = true;
+                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                    btnChangeFunction.IsBold = true;
+                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeScene.IsSelected = false;
+                    btnChangeScene.IsBold = false;
+                    CurShowTypeContent = 0;
+                    contentView.PageIndex = 0;
+                };
+
+                btnChangeScene.MouseUpEventHandler = (sender, e) =>
+                {
+                    btnChangeScene.IsSelected = true;
+                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                    btnChangeScene.IsBold = true;
+                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                    btnChangeFunction.IsSelected = false;
+                    btnChangeFunction.IsBold = false;
+                    CurShowTypeContent = 1;
+                    contentView.PageIndex = 1;
+                };
+
+                contentView.PageChange = (sender, e) =>
+                {
+                    if (contentView.PageIndex == 0)
+                    {
+                        btnChangeFunction.IsSelected = true;
+                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                        btnChangeFunction.IsBold = true;
+                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeScene.IsSelected = false;
+                        btnChangeScene.IsBold = false;
+                    }
+                    else if (contentView.PageIndex == 1)
+                    {
+                        btnChangeScene.IsSelected = true;
+                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
+                        btnChangeScene.IsBold = true;
+                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
+                        btnChangeFunction.IsSelected = false;
+                        btnChangeFunction.IsBold = false;
+                    }
+                };
+
+
+
+            }
+
+
+            contentView.PageIndex = CurShowTypeContent;
+
+        }
+
         /// <summary>
         /// 鍔犺浇鍐呭鍖哄煙
         /// </summary>
@@ -736,8 +904,10 @@
                         {
                             if (contentView == null)
                             {
+                                waitPage.Hide();
                                 return;
                             }
+                            loadNavView();
                             contentView.RemoveAll();
                             deviceFunctionView = new VerticalScrolViewLayout();
                             contentView.AddChidren(deviceFunctionView);
@@ -745,7 +915,6 @@
                             sceneFunctionView = new VerticalScrolViewLayout();
                             contentView.AddChidren(sceneFunctionView);
                             LoadSceneFunctionControlZone();
-                            contentView.PageIndex = CurShowTypeContent;
                             if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                             {
                                 gcFunctionView = new VerticalScrolViewLayout();
@@ -759,6 +928,7 @@
                             GetUnreadPushMessages();
                             RegisterGetPushMessageAction();
 
+                            contentView.PageIndex = CurShowTypeContent;
                             if (waitPage != null)
                             {
                                 waitPage.RemoveFromParent();
@@ -819,11 +989,11 @@
                 foreach (var function in list)
                 {
                     //闊充箰妯″潡鏈変富浠庡叧绯伙紝闇�瑕佺壒娈婂鐞�
-                    if (SPK.MusicSpkList().Contains( function.spk))
-                    {
-                        continue;
-                    }
-                    else
+                    //if (SPK.MusicSpkList().Contains( function.spk))
+                    //{
+                    //    continue;
+                    //}
+                    //else
                     {
                         if (!function.collect)
                             continue;
@@ -917,6 +1087,7 @@
         /// </summary>
         void LoadGroupControlFunctionControlZone()
         {
+
             #region ContextView
             gcFunctionView.RemoveAll();
             functionViews.Clear();
@@ -964,7 +1135,7 @@
                 if (index == 0)
                 {
                     var view = new FrameLayout();
-                    deviceFunctionView.AddChidren(view);
+                    gcFunctionView.AddChidren(view);
 
                     var btnNoCollectionBg = new Button()
                     {
@@ -1284,7 +1455,7 @@
                 {
                     btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicIcon.png";
                     btnIcon.SelectedImagePath = "FunctionIcon/Music/MusicOnIcon.png";
-                    btnCollection.Visible = false;
+                    //btnCollection.Visible = false;
                     Button btnPower;
                     btnPower = new Button()
                     {
@@ -1431,7 +1602,7 @@
                 btnName.MouseUpEventHandler = skipControlPageEvent;
                 btnIcon.MouseUpEventHandler = skipControlPageEvent;
                 btnState.MouseUpEventHandler = skipControlPageEvent;
-                //涓嶉渶瑕佹洿鏂扮姸鎬佺殑鍔ㄨ兘鍒楄〃
+                //涓嶉渶瑕佹洿鏂扮姸鎬佺殑鍔熻兘鍒楄〃
                 if(!SPK.NotStatusSpkList.Contains(function.spk) || function.spk != SPK.IpCam_Imou)
                 {
                     UpdataFunctionStates(function);
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
index 7fc68a1..649b4c8 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -238,6 +238,25 @@
         }
 
         /// <summary>
+        /// 鏇存柊鍔熻兘缁勬帶涓婚〉
+        /// </summary>
+        public static void RefreshGroupControlView()
+        {
+            if (bodyView != null)
+            {
+
+                if (FunctionList.List.groupControls.Count == 0)
+                {
+                    bodyView.loadNavView();
+                    bodyView.contentView.PageIndex = 0;
+                }
+                bodyView.LoadGroupControlFunctionControlZone();
+            }
+        }
+
+
+
+        /// <summary>
         /// 鏇存柊杩炴帴鐘舵�佸浘鏍�
         /// </summary>
         void CheckLinkStatus()
@@ -325,137 +344,9 @@
         /// </summary>
         void LoadEvent_ChangeShowedFunctionType()
         {
-            btnChangeFunction.MouseUpEventHandler = (sender, e) =>
+           
+            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl && FunctionList.List.groupControls.Count>0)
             {
-                
-                btnChangeFunction.IsSelected = true;
-                btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                btnChangeFunction.IsBold = true;
-                btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                btnChangeScene.IsSelected = false;
-                btnChangeScene.IsBold = false;
-                CurShowTypeContent = 0;
-                contentView.PageIndex = 0;
-            };
-
-            btnChangeScene.MouseUpEventHandler = (sender, e) =>
-            {
-                btnChangeScene.IsSelected = true;
-                btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                btnChangeScene.IsBold = true;
-                btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                btnChangeFunction.IsSelected = false;
-                btnChangeFunction.IsBold = false;
-                CurShowTypeContent = 1;
-                contentView.PageIndex = 1;
-            };
-
-            contentView.PageChange = (sender, e) =>
-            {
-                if (contentView.PageIndex == 0)
-                {
-                    btnChangeFunction.IsSelected = true;
-                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                    btnChangeFunction.IsBold = true;
-                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeScene.IsSelected = false;
-                    btnChangeScene.IsBold = false;
-                }
-                else if (contentView.PageIndex == 1)
-                {
-                    btnChangeScene.IsSelected = true;
-                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                    btnChangeScene.IsBold = true;
-                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeFunction.IsSelected = false;
-                    btnChangeFunction.IsBold = false;
-                }
-            };
-
-            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
-            {
-                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
-                    btnChangeFunction.IsSelected = false;
-                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeFunction.IsBold = false;
-                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeScene.IsSelected = false;
-                    btnChangeScene.IsBold = false;
-                    btnChangeGroupControl.IsSelected = true;
-                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                    btnChangeGroupControl.IsBold = true;
-                    CurShowTypeContent = 2;
-                    contentView.PageIndex = 2;
-                };
-
-                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
-                    btnChangeFunction.IsSelected = true;
-                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                    btnChangeFunction.IsBold = true;
-                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeScene.IsSelected = false;
-                    btnChangeScene.IsBold = false;
-                    CurShowTypeContent = 0;
-                    contentView.PageIndex = 0;
-
-                    btnChangeGroupControl.IsSelected = false;
-                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeGroupControl.IsBold = false;
-                };
-                btnChangeScene.MouseUpEventHandler = (sender, e) => {
-                    btnChangeScene.IsSelected = true;
-                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                    btnChangeScene.IsBold = true;
-                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeFunction.IsSelected = false;
-                    btnChangeFunction.IsBold = false;
-                    CurShowTypeContent = 1;
-                    contentView.PageIndex = 1;
-
-                    btnChangeGroupControl.IsSelected = false;
-                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
-                    btnChangeGroupControl.IsBold = false;
-                };
-
-                contentView.PageChange = (sender, e) =>
-                {
-                    if (contentView.PageIndex == 0)
-                    {
-                        btnChangeFunction.IsSelected = true;
-                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                        btnChangeFunction.IsBold = true;
-                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeScene.IsSelected = false;
-                        btnChangeScene.IsBold = false;
-                        btnChangeGroupControl.IsSelected = false;
-                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeGroupControl.IsBold = false;
-                    }
-                    else if (contentView.PageIndex == 1)
-                    {
-                        btnChangeScene.IsSelected = true;
-                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                        btnChangeScene.IsBold = true;
-                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeFunction.IsSelected = false;
-                        btnChangeFunction.IsBold = false;
-                        btnChangeGroupControl.IsSelected = false;
-                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeGroupControl.IsBold = false;
-                    }
-                    else if (contentView.PageIndex == 2)
-                    {
-                        btnChangeFunction.IsSelected = false;
-                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeFunction.IsBold = false;
-                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
-                        btnChangeScene.IsSelected = false;
-                        btnChangeScene.IsBold = false;
-                        btnChangeGroupControl.IsSelected = true;
-                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
-                        btnChangeGroupControl.IsBold = true;
-                    }
-                };
 
             }
         }
@@ -699,6 +590,11 @@
                     //    }
                     //    Control.Ins.SendWriteCommand(function, d);
                     //}
+                    else if (function.spk == SPK.GroupControl)
+                    {
+                        d.Add("on_off", function.trait_on_off.curValue.ToString());
+                        (function as GroupControl).Control(d);
+                    }
                     else
                     {
                         d.Add("on_off", function.trait_on_off.curValue.ToString());
@@ -888,9 +784,9 @@
                 skipPage.LoadPage(backAction);
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
             };
-            btnMsgBg.MouseUpEventHandler = eventHandler;
-            btnMsgTime.MouseUpEventHandler = eventHandler;
-            btnMsg.MouseUpEventHandler = eventHandler;
+            //btnMsgBg.MouseUpEventHandler = eventHandler;
+            //btnMsgTime.MouseUpEventHandler = eventHandler;
+            //btnMsg.MouseUpEventHandler = eventHandler;
             btnMsgIcon.MouseUpEventHandler = eventHandler;
         }
 
@@ -975,8 +871,8 @@
         void ShowMesBtnState(PushMessageInfo pushMessageInfo, bool allRead)
         {
             if (bodyView == null) return;
-            btnMsg.Text = pushMessageInfo.messageTitle + ": " + pushMessageInfo.messageContent;
-            btnMsgTime.Text = GetUnixToDateTime(pushMessageInfo.createTime);
+            //btnMsg.Text = pushMessageInfo.messageTitle + ": " + pushMessageInfo.messageContent;
+            //btnMsgTime.Text = GetUnixToDateTime(pushMessageInfo.createTime);
             btnMsgIcon.IsSelected = !allRead;
         }
 
@@ -986,8 +882,8 @@
         void ResetMesBtnRead()
         {
             if (bodyView == null) return;
-            btnMsg.Text = "...";
-            btnMsgTime.Text = "00:00";
+            //btnMsg.Text = "...";
+            //btnMsgTime.Text = "00:00";
             btnMsgIcon.IsSelected = false;
         }
 
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index dae33b1..c75fe65 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -672,7 +672,7 @@
                 {
                     case ShowFunction.Series:
                         functionCount = FunctionList.List.GetSeries().Count;
-                        functionOnCount = FunctionList.List.GetSeries().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
+                        //functionOnCount = FunctionList.List.GetSeries().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                         break;
                     case ShowFunction.IpCam:
                         functionCount = FunctionList.List.GetIpCamImouList().Count;
@@ -844,21 +844,29 @@
                         TextAlignment = TextAlignment.CenterLeft,
                         Text = "/" + functionCount,
                     };
-                    functionView.AddChidren(btnFunctionCount);
-                    Button btnOpenCount = new Button()
+                    if (item == ShowFunction.Series)
                     {
-                        X = Application.GetRealWidth(16),
-                        Y = btnName.Bottom,
-                        Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
-                        Height = Application.GetRealHeight(24),
-                        TextColor = CSS_Color.MainColor,
-                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                        TextAlignment = TextAlignment.CenterLeft,
-                        Text = functionOnCount.ToString(),
-                        Tag = item + "_onCount",
-                        BorderWidth = 0,
-                    };
-                    functionView.AddChidren(btnOpenCount);
+                        btnFunctionCount.Text = functionCount.ToString();
+                    }
+                    functionView.AddChidren(btnFunctionCount);
+
+                    if (item != ShowFunction.Series)
+                    {
+                        Button btnOpenCount = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            Y = btnName.Bottom,
+                            Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
+                            Height = Application.GetRealHeight(24),
+                            TextColor = CSS_Color.MainColor,
+                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            Text = functionOnCount.ToString(),
+                            Tag = item + "_onCount",
+                            BorderWidth = 0,
+                        };
+                        functionView.AddChidren(btnOpenCount);
+                    }
                 }
 
 
@@ -876,6 +884,12 @@
                     case ShowFunction.Series:
                         btnName.TextID = StringId.HorseRaceLamp;
                         functionPageTitleId = StringId.HorseRaceLamp;
+                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) => {
+                            var page2 = new UI2.Classification.SeriesFunctionListPage();
+                            MainPage.BasePageView.AddChidren(page2);
+                            page2.LoadPage();
+                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        };
                         break;
                     case ShowFunction.Light:
                         #region Light
@@ -1196,8 +1210,9 @@
                     && item != ShowFunction.SecurityMonitoring
                     && item != ShowFunction.DoorLock
                     && ShowFunction.EnergyMonitoring != item
-                    && ShowFunction.VideoIntercom != item &&
-                    ShowFunction.SecurityCenter != item
+                    && ShowFunction.VideoIntercom != item
+                    && ShowFunction.SecurityCenter != item
+                    && ShowFunction.Series != item
                     && ShowFunction.Acst != item)
                 {
                     btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
@@ -1437,13 +1452,13 @@
 
                     Inverter.Ins.H5Page.JSToNativeAction = (dictionary) =>
                     {
-                        //var jObj = dictionary;
-                        //JObject jObj = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(dictionary));
-
+#if __IOS__
+                        JObject jObj = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(dictionary));
+#else
                         var valuePairs = "";
                         dictionary.TryGetValue("method", out valuePairs);
                         JObject jObj = JObject.Parse(valuePairs);
-
+#endif
 
                         if (!jObj.ContainsKey("method") || !jObj.ContainsKey("data"))
                         {
@@ -1496,7 +1511,7 @@
 
             s1View.Height = s2View.Height = functionContentView.Height = functionContentViewHeight + Application.GetRealWidth(40);
 
-            #endregion
+#endregion
         }
 
        
diff --git a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
index 5158ff5..9d374a2 100644
--- a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
@@ -1,5 +1,6 @@
 锘�
 using System;
+using System.Collections.Generic;
 using HDL_ON.Entity;
 using HDL_ON.UI.CSS;
 using Shared;
@@ -89,6 +90,7 @@
 
             var list = room.GetRoomFunctions(false);
 
+
             foreach (var function in list)
             {
                 if (MainPage.RoomNotSupportFunctionList.Contains(function.spk))
diff --git a/HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs b/HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs
new file mode 100644
index 0000000..e9b11a2
--- /dev/null
+++ b/HDL_ON/UI/UI2/2-Classification/SeriesFunctionListPage.cs
@@ -0,0 +1,184 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI.UI2.Classification
+{
+    /// <summary>
+    /// 璺戦┈鐏〉闈�
+    /// 搴忓垪椤甸潰
+    /// </summary>
+    public class SeriesFunctionListPage : FrameLayout
+    {
+        FrameLayout bodyView;
+        public SeriesFunctionListPage()
+        {
+            bodyView = this;
+        }
+
+        public void LoadPage()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.HorseRaceLamp)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+            var functionListView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(603 - 12),
+            };
+            bodyView.AddChidren(functionListView);
+
+            var waitPage = new Loading();
+            bodyView.AddChidren(waitPage);
+            waitPage.Hide();
+
+            Dictionary<string, List<Button>> dicGroupButtons = new Dictionary<string, List<Button>>();
+
+            List<string> oidList = new List<string>();
+           
+            foreach(var rgb in FunctionList.List.GetLightList())
+            {
+                //if(rgb.spk == SPK.LightRGB)
+                {
+                    var oid = rgb.sid.Substring(0, 16);
+                    if (oidList.Contains(oid))
+                    {
+                        continue;
+                    }
+                    var seriesList = FunctionList.List.GetSeries().FindAll((obj) => obj.sid.StartsWith(oid));
+                    if (seriesList.Count == 0)
+                    {
+                        continue;
+                    }
+                    oidList.Add(oid);
+                    var list = new List<Function>();
+                    List<Button> groupButtons = new List<Button>();
+                    list.AddRange(seriesList);
+                    var groupView = new VerticalScrolViewLayout()
+                    {
+                        Height = Application.GetRealHeight(44 + 51 * list.Count),
+                        BackgroundColor = CSS_Color.MainBackgroundColor,
+                        ScrollEnabled = false,
+                    };
+                    functionListView.AddChidren(groupView);
+
+                    #region title
+                    var titleView = new FrameLayout()
+                    {
+                        Height = Application.GetRealHeight(44),
+                    };
+                    groupView.AddChidren(titleView);
+
+                    var btnTitle = new Button()
+                    {
+                        X = Application.GetRealWidth(16),
+                        TextSize = CSS_FontSize.SubheadingFontSize,
+                        TextAlignment = TextAlignment.CenterLeft,
+                        TextColor = CSS_Color.MainColor,
+                        Text =Language.StringByID( StringId.HorseRaceLampGroup )+ " "+ oidList.Count.ToString(),
+                    };
+                    if(Language.CurrentLanguage == "Chinese")
+                    {
+                        btnTitle.Text = Language.StringByID(StringId.HorseRaceLampGroup) + oidList.Count.ToString();
+                    }
+                    titleView.AddChidren(btnTitle);
+
+                    #endregion
+
+                    foreach (var series in list)
+                    {
+                        groupView.AddChidren(new Button
+                        {
+                            Height = 1,
+                            BackgroundColor = CSS_Color.DividingLineColor,
+                        });
+
+                        var rgbColorfulView = new FrameLayout()
+                        {
+                            Height = Application.GetRealHeight(50),
+                        };
+                        groupView.AddChidren(rgbColorfulView);
+
+                        var btnRgbColorfulTitle = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            TextAlignment = TextAlignment.CenterLeft,
+                            TextSize = CSS_FontSize.TextFontSize,
+                            TextColor = CSS_Color.FirstLevelTitleColor,
+                            Text = series.name == rgb.name ? Language.StringByID(StringId.AutomaticColoring) : series.name,
+                        };
+                        rgbColorfulView.AddChidren(btnRgbColorfulTitle);
+
+                        var btnColorfulSwitch = new Button()
+                        {
+                            X = Application.GetRealWidth(320),
+                            Gravity = Gravity.CenterVertical,
+                            Width = Application.GetMinRealAverage(48),
+                            Height = Application.GetMinRealAverage(36),
+                            UnSelectedImagePath = "Public/Switch.png",
+                            SelectedImagePath = "Public/SwitchOn.png",
+                            Tag = series.sid,
+                        };
+                        rgbColorfulView.AddChidren(btnColorfulSwitch);
+
+                        groupButtons.Add(btnColorfulSwitch);
+
+                        btnColorfulSwitch.MouseUpEventHandler = (sener, e) => {
+                            btnColorfulSwitch.IsSelected = !btnColorfulSwitch.IsSelected;
+                            var state = btnColorfulSwitch.IsSelected ? "on" : "off";
+                            waitPage.Start("");
+                            new System.Threading.Thread(() =>
+                            {
+                                try
+                                {
+                                    var d = new Dictionary<string, string>();
+                                    d.Add("on_off", state);
+                                    DriverLayer.Control.Ins.SendWriteCommand(series, d);
+                                    if (state == "on")
+                                    {
+                                        Application.RunOnMainThread(() =>
+                                        {
+                                            List<Button> updataList = new List<Button>();
+                                            dicGroupButtons.TryGetValue(((Button)sener).Tag.ToString().Substring(0, 16), out updataList);
+                                            foreach (var updataTemp in updataList)
+                                            {
+                                                updataTemp.IsSelected = false;
+                                            }
+                                            btnColorfulSwitch.IsSelected = true;
+                                        });
+                                    }
+                                }
+                                catch (Exception ex)
+                                {
+                                    MainPage.Log($"搴忓垪鎺у埗寮傚父锛歿ex.Message}");
+                                }
+                                finally
+                                {
+                                    Application.RunOnMainThread(() => {
+                                        waitPage.Hide();
+                                    });
+                                }
+                            })
+                            { IsBackground = true }.Start();
+                        };
+
+
+                    }
+                    Console.WriteLine("oid: " + oid);
+                    dicGroupButtons.TryAdd(oid, groupButtons);
+
+                    functionListView.AddChidren(new Button
+                    {
+                        Height = Application.GetRealHeight(8),
+                        BackgroundColor = CSS_Color.DividingLineColor,
+                    });
+
+                }
+            }
+
+        }
+
+
+    }
+}
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index affe59a..a0ddf37 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -699,7 +699,7 @@
                 case SPK.Peephole:
                     LogicView.FunTypeView viewPeephole = new LogicView.FunTypeView();
                     viewPeephole.btnText.TextID = StringId.ActivityDetection;
-                    viewPeephole.btnText.Name = Language.StringByID(StringId.shipinmensuo);
+                    //viewPeephole.btnText.Name = Language.StringByID(StringId.shipinmensuo);
                     fLayout.AddChidren(viewPeephole.FLayoutView());
                     viewPeephole.btnClick.MouseUpEventHandler += (sender, e) =>
                     {
@@ -715,7 +715,7 @@
                 case SPK.Ev_Ipcam:
                     LogicView.FunTypeView viewEzIpcam = new LogicView.FunTypeView();
                     viewEzIpcam.btnText.TextID = StringId.ActivityDetection;
-                    viewEzIpcam.btnText.Name = Language.StringByID(StringId.shipinmensuo);
+                    //viewEzIpcam.btnText.Name = Language.StringByID(StringId.shipinmensuo);
                     fLayout.AddChidren(viewEzIpcam.FLayoutView());
                     viewEzIpcam.btnClick.MouseUpEventHandler += (sender, e) =>
                     {
@@ -784,12 +784,14 @@
                     //鐚溂-浜轰綋鎰熷簲鍛婅
                     inputDevice.condition_type = "9";
                     inputDevice.identifier = this.identifier;
+                    inputDevice.condition = new List<Dictionary<string, string>>();
                 }
                 else if(device.spk == SPK.Ev_Ipcam)
                 {
                     //钀ょ煶鎽勫儚澶�-绉诲姩鐩戞祴鍛婅
                     inputDevice.condition_type = "9";
                     inputDevice.identifier = this.identifier;
+                    inputDevice.condition = new List<Dictionary<string, string>>();
                 }
                 else if (device.spk == SPK.VideoDoorLock)
                 {
@@ -1357,7 +1359,32 @@
                 //鏈夋暟鎹噸鏂拌祴鍊�
                 dicSateteList.AddRange(dicList);
             }
-            InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4,"");
+            //浜嬩欢涓撶敤
+            switch (device.spk)
+            {
+                case SPK.IpCam_Imou:
+                    {
+                        if (inputs.identifier == "ipcam_region_alram_event")
+                        {
+                            button1.Text = Language.StringByID(StringId.shi);
+                        }
+
+                    }
+                    break;
+                case SPK.Peephole:
+                    if (inputs.identifier == "pir_event")
+                    {
+                        button1.Text = Language.StringByID(StringId.shi );
+                    }
+                    break;
+                case SPK.Ev_Ipcam:
+                    if (inputs.identifier == "motiondetect_event")
+                    {
+                        button1.Text = Language.StringByID(StringId.shi);
+                    }
+                    break;
+            }
+            InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4, "");
         }
         /// <summary>
         /// 娣诲姞閫変腑鏁版嵁
@@ -1492,7 +1519,10 @@
         /// <returns></returns>
         public bool IsContainsAll(List<Dictionary<string, string>> dictionaryA, List<Dictionary<string, string>> dictionaryB)
         {
-
+            if (dictionaryA.Count == 0 || dictionaryB.Count == 0) {
+                //钀ょ煶鐚溂锛屾憚鍍忓ご锛屽ぇ鍗庢憚鍍忓ご鍙湁浜嬩欢锛屾病鏈夎緭鍏ユ潯浠�
+                return true;
+            }
             for (int i = 0; i < dictionaryA.Count; i++)
             {
                 var dic = dictionaryA[i];
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index 86821a9..1d787cb 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -460,7 +460,7 @@
                                     break;
                                 case SPK.IpCam_Imou:
                                     {
-                                        if (inputCondition.identifier == "door_caipcam_region_alram_eventll_cloud_event")
+                                        if (inputCondition.identifier == "ipcam_region_alram_event")
                                         {
                                             inputView.btnState.Text = Language.StringByID(StringId.quyuruqingaojing);
                                         }
@@ -468,9 +468,15 @@
                                     }
                                     break;
                                 case SPK.Ev_Ipcam:
+                                    if (inputCondition.identifier == "motiondetect_event")
+                                    {
+                                        inputView.btnState.Text = Language.StringByID(StringId.shi);
+                                    }
+                                    break;
+                                case SPK.Peephole:
                                     if (inputCondition.identifier == "pir_event")
                                     {
-                                        inputView.btnState.Text = Language.StringByID(StringId.On);
+                                        inputView.btnState.Text = Language.StringByID(StringId.shi);
                                     }
                                     break;
                                 case SPK.SensorPirHold:
@@ -1112,7 +1118,8 @@
                                         string on_off = GetKeyValue("on_off", dicList);
                                         string brightness = GetKeyValue("brightness", dicList);
                                         string cct = GetKeyValue(FunctionAttributeKey.CCT, dicList);
-                                        string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
+                                        //鑷姩鍖栫粍鎺� 鐐僵鍔熻兘
+                                        //string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
                                         string rgb = GetKeyValue("rgb", dicList);
 
 
@@ -1138,19 +1145,18 @@
                                             stateStr += "," + Language.StringByID(StringId.ColorTemperature) + cct + "k";
                                         }
 
-                                        if (!string.IsNullOrEmpty(colorful))
-                                        {
-                                            stateStr += "," + Language.StringByID(StringId.ColorfulFunction);
-                                            if (colorful == "on")
-                                            {
-                                                stateStr += Language.StringByID(StringId.onLogic);
-                                            }
-                                            else if (colorful == "off")
-                                            {
-                                                stateStr += Language.StringByID(StringId.offLogic);
-                                            }
-
-                                        }
+                                        //if (!string.IsNullOrEmpty(colorful))
+                                        //{
+                                        //    stateStr += "," + Language.StringByID(StringId.ColorfulFunction);
+                                        //    if (colorful == "on")
+                                        //    {
+                                        //        stateStr += Language.StringByID(StringId.onLogic);
+                                        //    }
+                                        //    else if (colorful == "off")
+                                        //    {
+                                        //        stateStr += Language.StringByID(StringId.offLogic);
+                                        //    }
+                                        //}
 
                                         if (!string.IsNullOrEmpty(rgb) && rgb.Length > 6)
                                         {
@@ -2182,7 +2188,7 @@
                         }
                     }
                     break;
-              
+
                 case SPK.SensorGas:
                 case SPK.SensorSmoke:
                     {
@@ -2409,6 +2415,8 @@
                         button1.Tag = tag;
                     }
                     break;
+               
+
                 case SPK.MusicStandard:
                 case SPK.AvMusic:
                     {
@@ -2506,9 +2514,9 @@
         public string GetTemperatureUnit(Entity.Function device)
         {
             string unit = string.Empty;
-            if (device.GetAttribute("temperature_type") != null && device.GetAttribute("temperature_type").value.Count > 0)
+            if (device.GetAttribute("temperature_type") != null)
             {
-                unit = device.GetAttribute("temperature_type").value[0];
+                unit = device.GetAttribute("temperature_type").unit;
             }
             if (string.IsNullOrEmpty(unit))
             {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index 7472d73..5d331cd 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -1223,7 +1223,7 @@
                       // new Entity.Function { sid = "1234567899", name = "闂ㄧ浼犳劅鍣�", spk = Entity.SPK.SensorDoorWindow },
                       //  new Entity.Function { sid = "12345678991234", name = "HDL鏈烘鎵�", spk = Entity.SPK.MechanicalArm },
                       //    new Entity.Function { sid = "123456789912345", name = "娴锋浖鏈烘鎵�", spk = Entity.SPK.MechanicalArm },
-                              new Entity.Function { sid = "123456789912345668", name = "AC", spk = Entity.SPK.AcIr },
+                              new Entity.Function { sid = "12345678991234566844", name = "澶у崕鎽勫儚澶�", spk = Entity.SPK.IpCam_Imou },
                                  new Entity.Function { sid = "12345678991234567", name = "RGB", spk = Entity.SPK.LightRGB },
                                   new Entity.Function { sid = "123456789912345678", name = "RGBW", spk = Entity.SPK.LightRGBW },
             };
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
index 9bc1eb7..a161414 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
@@ -548,10 +548,21 @@
             var perColorful = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
             if(perColorful != null)
             {
-                if(perColorful.value == "on")
+                if (perColorful.value == "on")
+                {
                     sceneFunctionInfo += " " + Language.StringByID(StringId.HorseRaceLamp);
+                }
                 else
-                    sceneFunctionInfo = Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
+                {
+                    if (sceneFunction.localFunction.spk == SPK.GroupControl)
+                    {
+                        sceneFunctionInfo += " " + Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
+                    }
+                    else
+                    {
+                        sceneFunctionInfo = Language.StringByID(StringId.Close) + " " + Language.StringByID(StringId.HorseRaceLamp);
+                    }
+                }
             }
 
             return sceneFunctionInfo;
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
index 60f9806..08bfede 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
@@ -1905,13 +1905,13 @@
 
             if (sceneFunction.localFunction.spk == SPK.LightRGB || sceneFunction.localFunction.spk == SPK.GroupControl)
             {
-                var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
-                if (colorfulStatus != null)
-                {
-                    isColorful = true;
-                    LoadColorfulRow(colorfulStatus);
-                    isColorful = colorfulStatus.value == "on";
-                }
+                //var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
+                //if (colorfulStatus != null)
+                //{
+                //    isColorful = true;
+                //    LoadColorfulRow(colorfulStatus);
+                //    isColorful = colorfulStatus.value == "on";
+                //}
             }
             foreach (var attr in sceneFunction.status)
             {
@@ -1982,7 +1982,18 @@
 
             btnConfrim.MouseUpEventHandler = (sender, e) =>
             {
-                if (sceneFunction.localFunction.spk == SPK.GroupControl) { }
+                if (sceneFunction.localFunction.spk == SPK.GroupControl) {
+                    var colorBegin = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulBegin);
+                    if (colorBegin != null)
+                    {
+                        sceneFunction.status.Remove(colorBegin);
+                    }
+                    var colorEnd = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulEnd);
+                    if (colorEnd != null)
+                    {
+                        sceneFunction.status.Remove(colorEnd);
+                    }
+                }
                 else
                 {
                     if (isOnStatus)
@@ -3189,7 +3200,33 @@
         /// <param name="btn"></param>
         void LoadEditDialog_CCT(SceneFunctionStatus trait, Button btn)
         {
+            if (trait.min == 0)
+            {
+                switch (trait.key)
+                {
+                    case FunctionAttributeKey.SetTemp:
+                        trait.min = 16;
+                        break;
+                    case FunctionAttributeKey.CCT:
+                        trait.min = 2700;
+                        break;
+                }
+            }
+            if (trait.max == 0)
+            {
+                switch (trait.key)
+                {
+                    case FunctionAttributeKey.SetTemp:
+                        trait.max = 30;
+                        break;
+                    case FunctionAttributeKey.CCT:
+                        trait.max = 6500;
+                        break;
+                }
+            }
+
             double temp = trait.min;
+          
             double.TryParse(trait.value, out temp);
             trait.value = temp.ToString();
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
index 3d6cb2f..b5f70fd 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
@@ -92,7 +92,7 @@
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
             if (isAdd)
             {
-                new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView();
+                new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView();
             }
             else
             {
@@ -115,7 +115,8 @@
                                         {
                                             if (pack.Code == StateCode.SUCCESS)
                                             {
-                                                FunctionList.List.groupControls.Remove(groupControl);
+                                                var delTemp = FunctionList.List.groupControls.Find((obj) => groupControl.sid == obj.sid);
+                                                FunctionList.List.groupControls.Remove(delTemp);
                                                 //list.Remove(groupControl);
                                                 this.RemoveFromParent();
                                                 delAction?.Invoke();
@@ -478,13 +479,15 @@
                     {
                         try
                         {
-                            var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl);
-                            //娌℃湁鏇存柊鏁版嵁鍒欑洿鎺ラ��鍑�
-                            if (newEditDataString == editDataString)
-                            {
-                                this.RemoveFromParent();
-                                return;
-                            }
+                            //var newEditDataString = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl);
+                            //var newEditDataString1 = Newtonsoft.Json.JsonConvert.SerializeObject(groupControlLightList);
+                            //var newEditDataString2 = Newtonsoft.Json.JsonConvert.SerializeObject(this.groupControl.sids);
+                            ////娌℃湁鏇存柊鏁版嵁鍒欑洿鎺ラ��鍑�
+                            //if (newEditDataString == editDataString && newEditDataString1 == newEditDataString2)
+                            //{
+                            //    this.RemoveFromParent();
+                            //    return;
+                            //}
                             groupControl.sids.Clear();
                             foreach (var light in groupControlLightList)
                             {
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs
index c4b2d1b..2aaa1dd 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/CombinedDimmingListPage.cs
@@ -21,14 +21,16 @@
         public void LoadPage()
         {
 
-            new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView_AddIcon("CombinedDimming",
-                (s,c)=>{
+            new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView_AddIcon("CombinedDimming",
+                (s, c) =>
+                {
                     try
                     {
                         var page = new AddGroupControlPage(null,
-                            (newGC)=> {
+                            (newGC) =>
+                            {
                                 ReadGroupControlList();
-                            },()=> { });
+                            }, () => { });
                         MainPage.BasePageView.AddChidren(page);
                         page.LoadPage();
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -49,7 +51,7 @@
             #region 
             contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) });
 
-            
+
 
             #endregion
 
@@ -60,7 +62,8 @@
         private void ReadGroupControlList()
         {
 
-            new System.Threading.Thread(() => {
+            new System.Threading.Thread(() =>
+            {
                 var pack = ApiUtlis.Ins.HttpRequest.GetGroupControlList();
                 if (pack != null)
                 {
@@ -68,10 +71,12 @@
                     {
                         try
                         {
-                            var groupControlList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
+                            FunctionList.List.groupControls.Clear();
+                            FunctionList.List.groupControls = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
+
                             Application.RunOnMainThread(() =>
                             {
-                                LoadGroupControlView(groupControlList);
+                                LoadGroupControlView();
                             });
                         }
                         catch (Exception ex)
@@ -90,185 +95,171 @@
         }
 
 
-        private void LoadGroupControlView(List<GroupControl> list)
+        private void LoadGroupControlView()
         {
-#if DEBUG
-            if (list.Count == 0)
+            contentView.RemoveAll();
+
+            foreach (var groupControl in FunctionList.List.groupControls)
             {
-                list.Add(new GroupControl()
+                var functionRow = new RowLayout()
                 {
-                    name = "缁勫悎璋冨厜1",
-                    roomIds = new List<string> {},
-                    sid = "00000000000000001",
-                    type = "light",
-                });
+                    Height = Application.GetRealHeight(65),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                    LineColor = 0x00000000
+                };
+                contentView.AddChidren(functionRow);
 
-                list.Add(new GroupControl()
+                var btnRight = new Button()
                 {
-                    name = "缁勫悎璋冨厜2",
-                    roomIds = new List<string> { },//Room.CurrentSpatial.RoomList[0].roomId 
-                    sid = "00000000000000002",
-                    type = "light",
-                });
-            }
+                    X = Application.GetRealWidth(339),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetMinRealAverage(16),
+                    Height = Application.GetMinRealAverage(16),
+                    UnSelectedImagePath = "Public/Right.png",
+                };
+                functionRow.AddChidren(btnRight);
 
-#endif
-
-            if (list.Count == 0)
-            {
-
-            }
-            else
-            {
-                contentView.RemoveAll();
-
-                foreach (var groupControl in list)
+                var btnFunctionName = new Button()
                 {
-                    var functionRow = new RowLayout()
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealHeight(10),
+                    Width = Application.GetRealWidth(308),
+                    Height = Application.GetRealHeight(24),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = CSS_FontSize.SubheadingFontSize,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    Text = groupControl.name,
+                };
+                functionRow.AddChidren(btnFunctionName);
+
+                var btnFunctionLocationInfo = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = btnFunctionName.Bottom,
+                    Width = Application.GetRealWidth(308),
+                    Height = Application.GetRealHeight(21),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                    TextColor = CSS_Color.PromptingColor1,
+                    Text = groupControl.GetRoomListName(),
+                };
+                functionRow.AddChidren(btnFunctionLocationInfo);
+
+
+
+                functionRow.AddChidren(
+                    new Button()
                     {
-                        Height = Application.GetRealHeight(65),
-                        BackgroundColor = CSS_Color.MainBackgroundColor,
-                        LineColor = 0x00000000
-                    };
-                    contentView.AddChidren(functionRow);
+                        Gravity = Gravity.CenterHorizontal,
+                        Y = Application.GetRealHeight(64),
+                        Height = Application.GetRealHeight(1),
+                        Width = Application.GetRealWidth(343),
+                        BackgroundColor = CSS_Color.DividingLineColor,
+                    });
 
-                    var btnRight = new Button()
-                    {
-                        X = Application.GetRealWidth(339),
-                        Gravity = Gravity.CenterVertical,
-                        Width = Application.GetMinRealAverage(16),
-                        Height = Application.GetMinRealAverage(16),
-                        UnSelectedImagePath = "Public/Right.png",
-                    };
-                    functionRow.AddChidren(btnRight);
-
-                    var btnFunctionName = new Button()
-                    {
-                        X = Application.GetRealWidth(16),
-                        Y = Application.GetRealHeight(10),
-                        Width = Application.GetRealWidth(308),
-                        Height = Application.GetRealHeight(24),
-                        TextAlignment = TextAlignment.CenterLeft,
-                        TextSize = CSS_FontSize.SubheadingFontSize,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        Text = groupControl.name,
-                    };
-                    functionRow.AddChidren(btnFunctionName);
-
-                    var btnFunctionLocationInfo = new Button()
-                    {
-                        X = Application.GetRealWidth(16),
-                        Y = btnFunctionName.Bottom,
-                        Width = Application.GetRealWidth(308),
-                        Height = Application.GetRealHeight(21),
-                        TextAlignment = TextAlignment.CenterLeft,
-                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                        TextColor = CSS_Color.PromptingColor1,
-                        Text = groupControl.GetRoomListName(),
-                    };
-                    functionRow.AddChidren(btnFunctionLocationInfo);
-
-
-
-                    functionRow.AddChidren(
-                        new Button()
-                        {
-                            Gravity = Gravity.CenterHorizontal,
-                            Y = Application.GetRealHeight(64),
-                            Height = Application.GetRealHeight(1),
-                            Width = Application.GetRealWidth(343),
-                            BackgroundColor = CSS_Color.DividingLineColor,
-                        });
-
-                    EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
-                        var page = new AddGroupControlPage(groupControl,
-                           (newGC) => {
-                               try
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    var page = new AddGroupControlPage(groupControl,
+                       (newGC) =>
+                       {
+                           try
+                           {
+                               if (newGC != null)
                                {
-                                   if (newGC != null)
+                                   Application.RunOnMainThread(() =>
                                    {
-                                       Application.RunOnMainThread(() =>
-                                       {
-                                           groupControl.roomIds = newGC.uids;
-                                           btnFunctionLocationInfo.Text = newGC.GetUidListName();
-                                       });
-                                   }
-                               }catch(Exception ex)
-                               {
-                                   MainPage.Log($"鍒锋柊缇ゆ帶鎴块棿淇℃伅寮傚父:{ex.Message}");
-                               }
-                           },()=> {
-                               LoadGroupControlView(FunctionList.List.groupControls);
-                           });
-                        MainPage.BasePageView.AddChidren(page);
-                        page.LoadPage();
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    };
-                    functionRow.MouseUpEventHandler = eventHandler;
-                    btnRight.MouseUpEventHandler = eventHandler;
-                    btnFunctionName.MouseUpEventHandler = eventHandler;
-                    btnFunctionLocationInfo.MouseUpEventHandler = eventHandler;
+                                           //groupControl.roomIds = newGC.roomIds;
+                                           //groupControl.uids = newGC.uids;
+                                           var localTemp = FunctionList.List.groupControls.Find((obj) => obj.deviceId == newGC.deviceId);
+                                       localTemp.roomIds = newGC.roomIds;
+                                       localTemp.uids = newGC.uids;
+                                       localTemp.sids = newGC.sids;
 
-                    var btnDelGroupControl = new Button()
+                                           btnFunctionLocationInfo.Text = newGC.GetUidListName();
+                                   });
+                               }
+                           }
+                           catch (Exception ex)
+                           {
+                               MainPage.Log($"鍒锋柊缇ゆ帶鎴块棿淇℃伅寮傚父:{ex.Message}");
+                           }
+                       }, () =>
+                       {
+                           LoadGroupControlView();
+                       });
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+                functionRow.MouseUpEventHandler = eventHandler;
+                btnRight.MouseUpEventHandler = eventHandler;
+                btnFunctionName.MouseUpEventHandler = eventHandler;
+                btnFunctionLocationInfo.MouseUpEventHandler = eventHandler;
+
+                var btnDelGroupControl = new Button()
+                {
+                    TextColor = CSS_Color.MainBackgroundColor,
+                    BackgroundColor = CSS_Color.WarningColor,
+                    TextID = StringId.Del,
+                    TextAlignment = TextAlignment.Center,
+                };
+                functionRow.AddRightView(btnDelGroupControl);
+                btnDelGroupControl.MouseUpEventHandler = (sender1, e1) =>
+                {
+                    var waitPage = new Loading();
+                    this.AddChidren(waitPage);
+                    waitPage.Start("");
+                    new System.Threading.Thread(() =>
                     {
-                        TextColor = CSS_Color.MainBackgroundColor,
-                        BackgroundColor = CSS_Color.WarningColor,
-                        TextID = StringId.Del,
-                        TextAlignment = TextAlignment.Center,
-                    };
-                    functionRow.AddRightView(btnDelGroupControl);
-                    btnDelGroupControl.MouseUpEventHandler = (sender1, e1) => {
-                        var waitPage = new Loading();
-                        this.AddChidren(waitPage);
-                        waitPage.Start("");
-                        new System.Threading.Thread(() =>
+                        try
                         {
-                            try
+                            var pack = ApiUtlis.Ins.HttpRequest.DelGroupControl(groupControl.userDeviceGroupControlId);
+                            if (pack != null)
                             {
-                                var pack = ApiUtlis.Ins.HttpRequest.DelGroupControl(groupControl.userDeviceGroupControlId);
-                                if (pack != null)
+                                Application.RunOnMainThread(() =>
                                 {
-                                    Application.RunOnMainThread(() =>
+                                    try
                                     {
-                                        try
+                                        if (pack.Code == StateCode.SUCCESS)
                                         {
-                                            if (pack.Code == StateCode.SUCCESS)
-                                            {
-                                                list.Remove(groupControl);
-                                                LoadGroupControlView(list);
-                                            }
-                                            else
-                                            {
-                                                IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
-                                            }
-                                        }catch(Exception ex)
-                                        {
-                                            MainPage.Log($"鍒锋柊缁勬帶鏁版嵁寮傚父:{ex.Message}");
+                                            var delTemp = FunctionList.List.groupControls.Find((obj) => groupControl.sid == obj.sid);
+                                            FunctionList.List.groupControls.Remove(delTemp);
+                                            LoadGroupControlView();
                                         }
-                                    });
-                                }
-                            }catch(Exception ex)
-                            {
-                                MainPage.Log($"鍒犻櫎缁勬帶寮傚父:{ex.Message}");
-                            }
-                            finally
-                            {
-                                Application.RunOnMainThread(() => {
-                                    if (waitPage != null)
+                                        else
+                                        {
+                                            IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
+                                        }
+                                    }
+                                    catch (Exception ex)
                                     {
-                                        waitPage.Hide();
-                                        waitPage.RemoveFromParent();
-                                        waitPage = null;
+                                        MainPage.Log($"鍒锋柊缁勬帶鏁版嵁寮傚父:{ex.Message}");
                                     }
                                 });
                             }
-                        })
-                        { IsBackground = true }.Start();
-                    };
-
-                }
+                        }
+                        catch (Exception ex)
+                        {
+                            MainPage.Log($"鍒犻櫎缁勬帶寮傚父:{ex.Message}");
+                        }
+                        finally
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                if (waitPage != null)
+                                {
+                                    waitPage.Hide();
+                                    waitPage.RemoveFromParent();
+                                    waitPage = null;
+                                }
+                            });
+                        }
+                    })
+                    { IsBackground = true }.Start();
+                };
 
             }
+
         }
 
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
index 60d72bc..a7cd03f 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -629,7 +629,7 @@
                         {
                             Y = btnResidenceManageIcon.Bottom,
                             Height = Application.GetRealHeight(29),
-                            TextID = StringId.CombinedDimming,
+                            TextID = StringId.GroupControl,
                             TextAlignment = TextAlignment.Center,
                             TextColor = CSS_Color.FirstLevelTitleColor,
                             TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs
index 2fd1ff6..9a24099 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulInfoPage.cs
@@ -61,7 +61,7 @@
                 TextAlignment = TextAlignment.CenterLeft,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
-                TextID = StringId.ColorfulFunction,
+                TextID = StringId.CulorfulTest,
             };
             viewSwitch.AddChidren(btnSwitchText);
 
@@ -106,6 +106,12 @@
                 })
                 { IsBackground = true }.Start();
             };
+
+            contentView.AddChidren(new Button
+            {
+                Height = Application.GetRealHeight(10),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            });
 
             #endregion
 
@@ -155,7 +161,7 @@
             btnStartColor.MouseUpEventHandler = (sender, e) => {
                 Action<uint> action = (color) => {
                     btnStartColor.BackgroundColor = color;
-                    function.SetAttrState(FunctionAttributeKey.ColorfulBegin, color);
+                    //function.SetAttrState(FunctionAttributeKey.ColorfulBegin, color);
                 };
                 var rgbView = new ColorfulSettingPage(function, action,true);
                 MainPage.BasePageView.AddChidren(rgbView);
@@ -265,6 +271,13 @@
             };
             workHoursView.AddChidren(btnWorkHours);
 
+            var time = Convert.ToInt32( function.GetAttrState(FunctionAttributeKey.ColorfulTime));
+
+
+            btnWorkHours.Text = time/ 360 + Language.StringByID(StringId.h);
+            btnWorkHours.Text += time / 60 + Language.StringByID(StringId.m);
+            btnWorkHours.Text += time % 60 + Language.StringByID(StringId.s);
+
             var waitPage = new Loading();
             this.AddChidren(waitPage);
 
@@ -279,11 +292,17 @@
                         {
                             LoadEditDialog(() =>
                             {
+                                if(hour == 0 && minute == 0 && second == 0)
+                                {
+                                    new PublicAssmebly().TipMsg(StringId.Tip, StringId.TimeInvalid);
+                                    return;
+                                }
                                 btnWorkHours.Text = hour + "鏃�";
                                 btnWorkHours.Text += minute + "鍒�";
                                 btnWorkHours.Text += second + "绉�";
                                 new System.Threading.Thread(() => {
-                                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                                    var d = new Dictionary<string, string>();
+                                    function.SetAttrState(FunctionAttributeKey.ColorfulTime, (hour * 360 + minute * 60 + second).ToString());
                                     d.Add(FunctionAttributeKey.ColorfulTime, (hour * 360 + minute * 60 + second).ToString());
                                     Control.Ins.SendWriteCommand(function, d);
                                 }) { IsBackground = true }.Start();
@@ -303,8 +322,6 @@
             btnWorkHours.MouseUpEventHandler = eventHandler;
             workHoursView.MouseUpEventHandler = eventHandler;
             btnWorkHoursRight.MouseUpEventHandler = eventHandler;
-
-
             #endregion
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
index 8bb2a15..eaec6ee 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
@@ -333,26 +333,26 @@
             btnConfrim.MouseUpEventHandler = (sender, e) =>
             {
                 backAction?.Invoke(curColor) ;
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                var d = new System.Collections.Generic.Dictionary<string, string>();
                 if (isSatrtColor)
                 {
                     d.Add(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
                     function.SetAttrState(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
-                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
-                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
-                    d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
-                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
-
+                    //var color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
+                    //var sendColorString = color[0] + "," + color[1] + "," + color[2];
+                    //d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
+                    //d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                 }
                 else
                 {
-                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
-                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
-                    d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
-                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
+                    //var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
+                    //var sendColorString = color[0] + "," + color[1] + "," + color[2];
+                    //d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
+                    //d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                     d.Add(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
                     function.SetAttrState(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
                 }
+                //d.Add(FunctionAttributeKey.Colorful, "off");
                 Control.Ins.SendWriteCommand(function, d);
                 this.RemoveFromParent();
             };
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs
index 5ecba87..b05731e 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs
@@ -1,5 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
+using HDL_ON.Common;
+using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
 using HDL_ON.UI.CSS;
 using Shared;
@@ -31,8 +33,15 @@
             }
         }
 
+        public override void RemoveFromParent()
+        {
+            base.RemoveFromParent();
+        }
+
         public void LoadPage(Button btnCollectionIcon, Button btnFunctionNameOut, Button btnFromFloorOut)
         {
+            bodyView.RemoveAll();
+
             btnCollection_Out = btnCollectionIcon;
             btnFunctionName_Out = btnFunctionNameOut;
             btnFromFloor_Out = btnFromFloorOut;
@@ -91,9 +100,10 @@
             //};
 
 
+           
 
             //鍥為��鍒锋柊淇℃伅浜嬩欢
-            new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView_SettingIcon( () => {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.GroupControl)).LoadTopView_SettingIcon( () => {
                 var page = new AddGroupControlPage(function,
                         (newGC) => {
                             try
@@ -102,9 +112,22 @@
                                 {
                                     if (newGC != null)
                                     {
-                                        btnFunctionName.Text = btnFunctionName_Out.Text = function.name;
-                                        function.roomIds = newGC.uids;
-                                        btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = newGC.GetUidListName();
+                                        var localTemp = FunctionList.List.groupControls.Find((obj) => obj.deviceId == newGC.deviceId);
+                                        if(localTemp!= null)
+                                        {
+                                            try
+                                            {
+                                                localTemp.sids = newGC.sids;
+                                                localTemp.name = newGC.name;
+                                                localTemp.roomIds = newGC.roomIds;
+                                                localTemp.uids = newGC.uids;
+                                            }
+                                            catch { }
+                                            function = newGC;
+                                            btnFunctionName_Out.Text = function.name;
+                                            btnFromFloor_Out.Text = function.GetRoomListName();
+                                            LoadPage(btnCollection, btnFunctionName, btnFunctionName);
+                                        }
                                     }
                                 });
                             }
@@ -116,7 +139,7 @@
                             try
                             {
                                 this.RemoveFromParent();
-                                UI.HomePage.RefreshFunctionView();
+                                UI.HomePage.RefreshGroupControlView();
                                 UI.RoomPage.bodyView?.ReLoadPage();
                                 UI.FunctionPage.bodyView?.ReLoadPage();
                             }
@@ -157,10 +180,12 @@
                         }
                     }
                     hadRGB = true;
+                    hadDimming = true;
                 }
                 else if (temp.spk == SPK.LightCCT)
                 {
                     hadCCT = true;
+                    hadDimming = true;
                 }
                 else if (temp.spk == SPK.LightDimming)
                 {
@@ -174,38 +199,17 @@
             }
 
             //灞炴�ц缃尯鍩�
-            var attrView = new VerticalScrolViewLayout()
+            VerticalScrolViewLayout attrView = new VerticalScrolViewLayout()
             {
                 Y = Application.GetRealHeight(52),
                 Width = Application.GetRealWidth(343),
                 ScrollEnabled = false,
             };
-            //灞炴�ц缃尯鍩熼珮搴�
-            int attrViewHight = Application.GetRealHeight(18 + 22);
-
-
             controlView.AddChidren(attrView);
+
             attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) });
 
-
-            if (hadRGB)
-            {
-                hadCCT = true;
-                LoadRgbAttrView(hadCCT,hadColorful);
-            }
-            else if (hadCCT)
-            {
-                LoadCctAttrView(attrView);
-            }
-            else if (hadDimming)
-            {
-                LoadDimmingAttrView(attrView);
-            }
-            
-
-
-
-            var btnSwitch = new Button()
+            btnSwitch = new Button()
             {
                 Gravity = Gravity.CenterHorizontal,
                 Y = Application.GetRealHeight(466),
@@ -233,7 +237,59 @@
             };
 
 
+            if (hadRGB)
+            {
+                LoadRgbAttrView(hadCCT,hadColorful);
+            }
+            else if (hadCCT)
+            {
+                LoadCctAttrView(attrView);
+            }
+            else if (hadDimming)
+            {
+                LoadDimmingAttrView(attrView);
+            }
+            else
+            {
+                attrView.AddChidren(new Button() { Height = Application.GetRealHeight(30) });
+                var btnSwitchIcon = new Button()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealHeight(102),
+                    Width = Application.GetRealWidth(168),
+                    Height = Application.GetRealWidth(288),
+                    UnSelectedImagePath = "FunctionIcon/Light/RelayBg.png",
+                    SelectedImagePath = "FunctionIcon/Light/RelayOnBg.png",
+                    IsSelected = function.trait_on_off.curValue.ToString() == "on"
+                };
+                attrView.AddChidren(btnSwitchIcon);
+
+                btnSwitchIcon.MouseUpEventHandler = (sender, e) => {
+                    if (btnSwitchIcon.IsSelected)
+                    {
+                        btnSwitchIcon.IsSelected = btnSwitch.IsSelected = false;
+                        var d = new Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.OnOff, "off");
+                        function.Control(d);
+                    }
+                    else
+                    {
+                        btnSwitchIcon.IsSelected = btnSwitch.IsSelected = true;
+                        var d = new Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.OnOff, "on");
+                        function.Control(d);
+                    }
+                };
+                btnSwitch.MouseUpEventHandler += (sender, e) => {
+                    btnSwitchIcon.IsSelected = btnSwitch.IsSelected;
+                };
+            }
+
+
+
+
         }
+        Button btnSwitch;
 
         /// <summary>
         /// 鍔犺浇璋冨厜灞炴�ц缃帶浠�
@@ -241,88 +297,100 @@
         /// <param name="attrView"></param>
         void LoadDimmingAttrView(VerticalScrolViewLayout attrView)
         {
-            var dimmingView = new FrameLayout()
-            {
-                Height = Application.GetRealHeight(54 + 11)
-            };
-            attrView.AddChidren(dimmingView);
 
-            #region 浜害璋冭妭
+
+
+            attrView.AddChidren(new Button
+            {
+                Height = Application.GetRealHeight(50),
+            });
+
+            var dimmerView = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(280)
+            };
+            attrView.AddChidren(dimmerView);
+
+            var dimmerBar = new WaveSeekBarOn()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(168 - 40),
+                Height = Application.GetRealHeight(288 - 16 - 16),
+                BorderColor = 0x00000000,
+                CornerRadius = Application.GetRealWidth(30),
+                BorderWidth = 0,
+                Progress = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)),
+                IsProgressTextShow = false,
+            };
+            dimmerView.AddChidren(dimmerBar);
+
             var btnBrightnessText = new Button()
             {
-                X = Application.GetRealWidth(35),
-                Y = Application.GetRealHeight(1),
-                Width = Application.GetRealWidth(224),
-                Height = Application.GetRealHeight(25),
-                TextAlignment = TextAlignment.CenterLeft,
+                Gravity = Gravity.CenterHorizontal,
+                Y = ((100 - Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100),
+                Width = Application.GetRealWidth(56),
+                Height = Application.GetRealWidth(46),
+                UnSelectedImagePath = "FunctionIcon/Light/BrightnessBg.png",
                 TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                TextID = StringId.Brightness,
+                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                Text = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)) + "%",
             };
-            btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + function.GetAttrState(FunctionAttributeKey.Brightness) + "%";
-            dimmingView.AddChidren(btnBrightnessText);
+            dimmerView.AddChidren(btnBrightnessText);
 
-
-            var btnMinValuesText = new Button()
-            {
-                X = Application.GetRealWidth(35),
-                Y = btnBrightnessText.Bottom,
-                Width = Application.GetRealWidth(40),
-                Height = Application.GetRealHeight(21),
-                Text = "0%",
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.PromptingColor1,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-            };
-            dimmingView.AddChidren(btnMinValuesText);
-
-            var dimmerBar = new DiyImageSeekBar()
-            {
-                X = Application.GetRealWidth(45 + 10),
-                Y = Application.GetRealHeight(11),
-                Width = Application.GetRealWidth(220),
-                Height = Application.GetRealHeight(54),
-                SeekBarViewHeight = Application.GetRealHeight(8),
-                ThumbImagePath = "Public/ThumbImage.png",
-                ThumbImageHeight = Application.GetRealHeight(54),
-                ProgressTextColor = CSS_Color.FirstLevelTitleColor,
-                ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                ProgressBarColor = CSS_Color.AuxiliaryColor1,
-                MaxValue = 100,
-                SeekBarPadding = Application.GetRealWidth(20),
-                IsProgressTextShow = false,
-                ProgressChangeDelayTime = 0,
-            };
-            dimmingView.AddChidren(dimmerBar);
             dimmerBar.OnProgressChangedEvent = (sender, e) =>
             {
-                btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%";
-            };
-            dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
-            {
-                btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%";
-
-                var d = new Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.Brightness, e.ToString());
-                function.Control(d);
-            };
+                if (e == 0 && lastBrightness != 0)
+                {
+                    btnSwitch.IsSelected = false;
+                    lastBrightness = 0;
+                }
+                else
+                {
+                    if (lastBrightness == 0)
+                        lastBrightness = e;
+                    btnSwitch.IsSelected = true;
+                }
+                if (e == 0 || e == 100)
+                {
+                    var d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                    function.Control(d);
+                }
+                else
+                {
+                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                    {
+                        function.refreshTime = DateTime.Now;
+                        new System.Threading.Thread(() =>
+                        {
+                            var d = new Dictionary<string, string>();
+                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                            function.Control(d);
+                        })
+                        { IsBackground = true }.Start();
+                    }
+                }
 
 
-            var btnMaxValuesText = new Button()
-            {
-                X = dimmerBar.Right,
-                Y = btnBrightnessText.Bottom,
-                Width = Application.GetRealWidth(55),
-                Height = Application.GetRealHeight(21),
-                Text = "100%",
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.PromptingColor1,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
+                btnBrightnessText.Text = dimmerBar.Progress + "%";
             };
-            dimmingView.AddChidren(btnMaxValuesText);
-            #endregion
+
+            btnSwitch.MouseUpEventHandler += (sender, e) => {
+                if (btnSwitch.IsSelected)
+                {
+                    dimmerBar.Progress = 100;
+                }
+                else
+                {
+                    dimmerBar.Progress = 0;
+                }
+                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
+                btnBrightnessText.Text = dimmerBar.Progress + "%";
+            };
 
         }
+        int lastBrightness = 0;
 
         /// <summary>
         /// 鍔犺浇cct灞炴�ц缃帶浠�
@@ -330,6 +398,98 @@
         /// <param name="attrView"></param>
         void LoadCctAttrView(VerticalScrolViewLayout attrView)
         {
+            attrView.AddChidren(new Button
+            {
+                Height = Application.GetRealHeight(20),
+            });
+
+            var dimmerView = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(280)
+            };
+            attrView.AddChidren(dimmerView);
+
+            var dimmerBar = new WaveSeekBarOn()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(168 - 40),
+                Height = Application.GetRealHeight(288 - 16 - 16),
+                BorderColor = 0x00000000,
+                CornerRadius = Application.GetRealWidth(30),
+                BorderWidth = 0,
+                Progress = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)),
+                IsProgressTextShow = false,
+            };
+            dimmerView.AddChidren(dimmerBar);
+
+            var btnBrightnessText = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = ((100 - Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness))) * Application.GetRealHeight(222 - 16) / 100),
+                Width = Application.GetRealWidth(56),
+                Height = Application.GetRealWidth(46),
+                UnSelectedImagePath = "FunctionIcon/Light/BrightnessBg.png",
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                Text = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)) + "%",
+            };
+            dimmerView.AddChidren(btnBrightnessText);
+
+            dimmerBar.OnProgressChangedEvent = (sender, e) =>
+            {
+                if (e == 0 && lastBrightness != 0)
+                {
+                    btnSwitch.IsSelected = false;
+                    lastBrightness = 0;
+                }
+                else
+                {
+                    if (lastBrightness == 0)
+                        lastBrightness = e;
+                    btnSwitch.IsSelected = true;
+                }
+
+                if (e == 0 || e == 100)
+                {
+                    var d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                    function.Control(d);
+                }
+                else
+                {
+                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                    {
+                        function.refreshTime = DateTime.Now;
+                        new System.Threading.Thread(() =>
+                        {
+                            var d = new Dictionary<string, string>();
+                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                            function.Control(d);
+                        })
+                        { IsBackground = true }.Start();
+                    }
+                }
+
+
+                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
+                btnBrightnessText.Text = dimmerBar.Progress + "%";
+            };
+
+            btnSwitch.MouseUpEventHandler += (sender, e) => {
+                if (btnSwitch.IsSelected)
+                {
+                    dimmerBar.Progress = 100;
+                }
+                else
+                {
+                    dimmerBar.Progress = 0;
+                }
+                btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100);
+                btnBrightnessText.Text = dimmerBar.Progress + "%";
+            };
+
+            //attrView.AddChidren(new Button() { Height = Application.GetRealHeight(10) });
+
             #region 鑹叉俯
             var cctView = new FrameLayout()
             {
@@ -385,6 +545,7 @@
                 Y = Application.GetRealHeight(11),
                 Width = Application.GetRealWidth(220),
                 Height = Application.GetRealHeight(54),
+                Progress = 38,
             };
             barColorTemplatrue.MinValue = 27;
             barColorTemplatrue.MaxValue = 65;
@@ -490,6 +651,52 @@
             btnWhiteRound.Visible = false;
             framePickerBack.AddChidren(btnWhiteRound);
 
+
+            //褰撳墠鐐瑰嚮鐨勩�愮偣銆戞槸鍚︽纭�
+            bool pointIsRight = false;
+            //鍦嗙殑鍗婂緞(鑰冭檻杈圭晫,闇�瑕佽缃畠鐨勫崐寰勬瘮杈冨皬涓�鐐�)
+            int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12);
+            string rgbString = "255,255,255";
+            var rgbTemp = new Light();
+            colorPicker.MouseUpEventHandler = (sender2, e2) =>
+            {
+                var d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.RGB, rgbString);
+                function.Control(d);
+            };
+            colorPicker.ColorChaged += (sender2, e2) =>
+            {
+                rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString();
+                btnCurColor.BackgroundColor = (uint)(0xFF000000 + rgbTemp.GetRGBcolor(rgbString));
+                var d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.RGB, rgbString);
+                function.Control(d);
+            };
+            colorPicker.MouseDownEventHandler += (sender, e) =>
+            {
+                pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y);
+                if (pointIsRight == false)
+                {
+                    //鐐圭殑鍖哄煙涓嶆槸鍦嗙洏鍐�
+                    return;
+                }
+                //鏄剧ず鐧界偣
+                btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2;
+                btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2;
+                if (btnWhiteRound.Visible == false)
+                {
+                    btnWhiteRound.Visible = true;
+                }
+            };
+
+            colorPicker.MouseMoveEventHandler += (sender, e) =>
+            {
+                //褰撻紶鏍囩偣涓嬩簨浠跺鐞�
+                colorPicker.MouseDownEventHandler(sender, e);
+            };
+
+
+
             #region 浜害璋冭妭
             var btnBrightnessText = new Button()
             {
@@ -535,6 +742,43 @@
             };
             controlView.AddChidren(dimmerBar);
 
+
+            dimmerBar.OnProgressChangedEvent = (sender, e) =>
+            {
+                if (e == 0 && lastBrightness != 0)
+                {
+                    btnSwitch.IsSelected = false;
+                    lastBrightness = 0;
+                }
+                else
+                {
+                    if (lastBrightness == 0)
+                        lastBrightness = e;
+                    btnSwitch.IsSelected = true;
+                }
+                if (e == 0 || e == 100)
+                {
+                    var d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                    function.Control(d);
+                }
+                else
+                {
+                    if (350 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                    {
+                        function.refreshTime = DateTime.Now;
+                        new System.Threading.Thread(() =>
+                        {
+                            var d = new Dictionary<string, string>();
+                            d.Add(FunctionAttributeKey.Brightness, e.ToString());
+                            function.Control(d);
+                        })
+                        { IsBackground = true }.Start();
+                    }
+                }
+            };
+
+
             var btnMaxValuesText = new Button()
             {
                 X = dimmerBar.Right,
@@ -547,6 +791,17 @@
                 TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
             };
             controlView.AddChidren(btnMaxValuesText);
+
+            btnSwitch.MouseUpEventHandler += (sender, e) => {
+                if (btnSwitch.IsSelected)
+                {
+                    dimmerBar.Progress = 100;
+                }
+                else
+                {
+                    dimmerBar.Progress = 0;
+                }
+            };
             #endregion
 
             int heightMore = 375 - magriHeight-20;
@@ -612,6 +867,7 @@
                 };
                 barColorTemplatrue.MinValue = 27;
                 barColorTemplatrue.MaxValue = 65;
+                barColorTemplatrue.Progress = 38;
                 barColorTemplatrue.ProgressBarColor = 0x00000000;//鍏ㄩ儴閫忔槑
                 barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000;
                 barColorTemplatrue.SeekBarBackgroundColor = 0x00000000;
@@ -635,7 +891,7 @@
                 //6500K
                 var btnTempClolorMax = new Button();
                 btnTempClolorMax.Y = btnTempClolorMin.Y;
-                btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30);
+                btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(15);
                 btnTempClolorMax.Width = Application.GetRealWidth(54);
                 btnTempClolorMax.Height = Application.GetRealHeight(21);
                 btnTempClolorMax.Text = "6500K";
@@ -658,7 +914,7 @@
                 var btnGradualChangeText = new Button()
                 {
                     X = Application.GetRealWidth(35),
-                    Y = Application.GetRealHeight(375 + heightMore - magriHeight),
+                    Y = hadCCT ? Application.GetRealHeight(375 + heightMore - magriHeight) : Application.GetRealHeight(heightMore+10),
                     Width = Application.GetRealWidth(224),
                     Height = Application.GetRealHeight(21),
                     TextAlignment = TextAlignment.CenterLeft,
@@ -668,16 +924,17 @@
                 };
                 controlView.AddChidren(btnGradualChangeText);
 
-                var btnGradualChangeMinValuesText = new Button()
+                var btnColorfulEdit = new Button()
                 {
                     X = Application.GetRealWidth(35),
                     Y = btnGradualChangeText.Bottom + Application.GetRealHeight(10),
                     Width = Application.GetRealWidth(22),
                     Height = Application.GetRealHeight(21),
                     UnSelectedImagePath = "Public/Edit.png",
+                    Visible = false,
                 };
-                controlView.AddChidren(btnGradualChangeMinValuesText);
-                btnGradualChangeMinValuesText.MouseUpEventHandler = (sender, e) => {
+                controlView.AddChidren(btnColorfulEdit);
+                btnColorfulEdit.MouseUpEventHandler = (sender, e) => {
                     var rgbView = new ColorfulInfoPage(function);
                     MainPage.BasePageView.AddChidren(rgbView);
                     rgbView.LoadPage();
@@ -686,29 +943,54 @@
 
                 var barColorful = new FrameLayout()
                 {
-                    X = btnGradualChangeMinValuesText.Right + Application.GetRealWidth(15+5),
-                    Y = Application.GetRealHeight(412 + heightMore - magriHeight),
+                    X = btnColorfulEdit.Right + Application.GetRealWidth(15 + 5),
                     Width = Application.GetRealWidth(170),
+                    //X = Application.GetRealWidth(35),
+                    //Width = Application.GetRealWidth(170 + 41),
+                    Y = hadCCT ? Application.GetRealHeight(412 + heightMore - magriHeight) : Application.GetRealHeight(heightMore + 50),
                     Height = Application.GetRealHeight(8),
                     BackgroundImagePath = "FunctionIcon/Light/ColorfulBar.png",
                 };
                 controlView.AddChidren(barColorful);
 
-                var btnGradualChangeMaxValuesText = new Button()
+                var btnColorfulSwitch = new Button()
                 {
                     X = barColorful.Right + Application.GetRealWidth(8),
                     Y = btnGradualChangeText.Bottom + Application.GetRealHeight(10),
                     Width = Application.GetRealWidth(38),
                     Height = Application.GetRealHeight(24),
-                    UnSelectedImagePath = "Public/Switch.png"
+                    UnSelectedImagePath = "Public/Switch.png",
+                    SelectedImagePath = "Public/SwitchOn.png"
                 };
-                controlView.AddChidren(btnGradualChangeMaxValuesText);
+                controlView.AddChidren(btnColorfulSwitch);
+
+
+                btnColorfulSwitch.MouseUpEventHandler = (sender, e) => {
+                    btnColorfulSwitch.IsSelected = !btnColorfulSwitch.IsSelected;
+                    new System.Threading.Thread(() =>
+                    {
+                        try
+                        {
+                            var controlColorfulState = btnColorfulSwitch.IsSelected ? "on" : "off";
+                            function.SetAttrState(FunctionAttributeKey.Colorful, controlColorfulState);
+                            var d = new Dictionary<string, string>();
+                            d.Add(FunctionAttributeKey.Colorful, controlColorfulState);
+                            function.Control(d);
+                        }
+                        catch (Exception ex)
+                        {
+                            MainPage.Log($"鎺у埗鐐僵寮�鍏冲紓甯�:{ex.Message}");
+                        }
+                    })
+                    { IsBackground = true }.Start();
+                };
+
                 #endregion
 
 
             }
 
-         
+
 
         }
 
@@ -742,5 +1024,9 @@
             return false;
         }
 
+
+
+
+
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
index 168d4b0..f932a84 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/A31PlayMusicPage.cs
@@ -71,7 +71,7 @@
             #endregion
 
             #region   ---鐣岄潰鐐瑰嚮浜嬩欢---
-            playView.collectIconBtn.Visible = false;//鍏堟殏鏃堕殣钘忔敹钘忓姛鑳�
+            //playView.collectIconBtn.Visible = false;//鍏堟殏鏃堕殣钘忔敹钘忓姛鑳�
             //鏀惰棌鍥炬爣浜嬩欢
             playView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
             {
@@ -84,7 +84,7 @@
                 {
                     A31MusicModel.Current.functionMusic.collect = false;
                 }
-
+                A31MusicModel.Current.functionMusic.CollectFunction();
             };
             ///鍒囨崲鎾斁妯″紡鐐瑰嚮浜嬩欢;
             playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
index 0a5c9a5..e0a89ae 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/MusicMain.cs
@@ -194,7 +194,7 @@
             musicView.singerBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
             musicView.songNameBtn.Text = player.functionMusic.GetAttrState(KeyProperty.song_name);
             musicView.musicNameBtn.Text = player.functionMusic.name;
-            musicView.collectIconBtn.Visible = false;//鍏堟殏鏃堕殣钘忔敹钘忓姛鑳�
+            //musicView.collectIconBtn.Visible = false;//鍏堟殏鏃堕殣钘忔敹钘忓姛鑳�
             ///鏀惰棌浜嬩欢
             musicView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
             {
@@ -207,6 +207,7 @@
                 {
                     player.functionMusic.collect = false;
                 }
+                player.functionMusic.CollectFunction();
             };
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
index 7aed7ce..1ca1b0f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
@@ -299,7 +299,7 @@
         /// <param name="api_Url">璇锋眰鍦板潃(涓嶆槸缁濆鍦板潃)</param>
         /// <param name="tag">鏍囪->鎻忚堪鎺ュ彛(鑷畾涔�)</param>
         /// <returns></returns>
-        public ResponsePackNew RequestServerhomeId(object o, string api_Url, string tag, int mTimeout = 5)
+        public ResponsePackNew RequestServerhomeId(object o, string api_Url, string tag, int mTimeout = 15)
         {
             JObject jobject = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(o));
             return UI2.Intelligence.Automation.Send.Current.RequestServerhomeId(jobject, api_Url, tag, mTimeout);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
index f1ee2e9..a9eaf42 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
@@ -90,6 +90,21 @@
             bodyView.AddChidren(waitPage);
             waitPage.Start("");
 
+            #endregion
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealHeight(8),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            });
+
+            var view = new VerticalScrolViewLayout()
+            {
+                Height = Application.GetRealHeight(300),
+            };
+            contentView.AddChidren(view);
+
+
             btnFaceUnlockSwitchIcon.MouseUpEventHandler = (sender, e) =>
             {
                 waitPage.Start("");
@@ -110,6 +125,7 @@
                             {
                                 //鏇存柊鐣岄潰
                                 btnFaceUnlockSwitchIcon.IsSelected = changeState;
+                                loadSubView(view, faceUnlockSetup);
                             });
                         }
                         else
@@ -145,19 +161,7 @@
                 })
                 { IsBackground = true }.Start();
             };
-            #endregion
 
-            contentView.AddChidren(new Button()
-            {
-                Height = Application.GetRealHeight(8),
-                BackgroundColor = CSS_Color.BackgroundColor,
-            });
-
-            var view = new VerticalScrolViewLayout()
-            {
-                Height = Application.GetRealHeight(300),
-            };
-            contentView.AddChidren(view);
 
             new System.Threading.Thread(() => {
                 try
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
index 2055a86..8becceb 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
@@ -284,24 +284,27 @@
             recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png";
             recordFL.GetTextButton().TextID = StringId.lishijilu;
 
-            //鐢ㄦ埛绠$悊
-            CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
-            whiteFl.AddChidren(userManagerView);
-            userManagerView.Y = heightY;
-            userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
-            userManagerView.AddImageView();
-            userManagerView.AddTextButtonView();
-            userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png";
-            userManagerView.GetTextButton().TextID = StringId.UserManagement;
+            if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
+            {
+                //鐢ㄦ埛绠$悊
+                CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
+                whiteFl.AddChidren(userManagerView);
+                userManagerView.Y = heightY;
+                userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
+                userManagerView.AddImageView();
+                userManagerView.AddTextButtonView();
+                userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png";
+                userManagerView.GetTextButton().TextID = StringId.UserManagement;
 
-            userManagerView.SetClickListener((fl, btnImage, btnText) => {
-                var page = new VideoDoorlockUserListPage(device);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage();
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                userManagerView.SetClickListener((fl, btnImage, btnText) =>
+                {
+                    var page = new VideoDoorlockUserListPage(device);
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
 
-            });
-
+                });
+            }
             #endregion
 
 
@@ -387,7 +390,29 @@
                 //MainPage.BasePageView.AddChidren(historyPage);
                 //historyPage.LoadPage();
                 //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
+                var waitPage = new Loading();
+                this.AddChidren(waitPage);
+                waitPage.Start("");
+                new System.Threading.Thread(() =>
+                {
+                    try
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
+                        });
+                    }catch(Exception ex)
+                    {
+
+                    }
+                    finally
+                    {
+                        Application.RunOnMainThread(() => {
+                            waitPage.Hide();
+                        });
+                    }
+                })
+                { IsBackground = true }.Start();
             });
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
index cfa8765..3710ade 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
@@ -12,17 +12,17 @@
         FrameLayout bodyView;
 
         Function device;
-
         /// <summary>
-        /// 闂ㄩ搩绯荤粺闊抽噺
+        /// 闂ㄩ攣绯荤粺闊抽噺
         /// </summary>
-        int doorlockSystemSound = 0;
+        DoorLockSystemSound doorLockSystemSound;
         /// <summary>
         /// 闂ㄩ搩闊抽噺
         /// </summary>
-        int doorbelVol = 0;
+        int doorbellVol = 0;
         public VideoDoorlockAudioSetupPage(Function function)
         {
+            doorLockSystemSound = new DoorLockSystemSound();
             device = function;
             bodyView = this;
         }
@@ -74,7 +74,7 @@
 
             btnDoorlockSystemVolumeText.MouseUpEventHandler = (sender, e) =>
             {
-                LoadEditDialog(StringId.DoorlockSystemVolume, 3-doorlockSystemSound, btnDoorlockSystemVolumeStateText);
+                LoadEditDialog(StringId.DoorlockSystemVolume, btnDoorlockSystemVolumeStateText,true);
             };
             #endregion
 
@@ -124,7 +124,7 @@
 
             btnDoorbellVolumeText.MouseUpEventHandler = (sender, e) =>
             {
-                LoadEditDialog(StringId.DoorbellVolume, doorbelVol, btnDoorbellVolumeStateText);
+                LoadEditDialog(StringId.DoorbellVolume, btnDoorbellVolumeStateText,false);
 
             };
             #endregion
@@ -149,25 +149,21 @@
                         Application.RunOnMainThread(() =>
                         {
                             //鏇存柊鐣岄潰
-                            var doorLockSystemSound = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockSystemSound>(pack.Data.ToString());
+                            doorLockSystemSound = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockSystemSound>(pack.Data.ToString());
                             if(doorLockSystemSound != null)
                             {
                                 switch (doorLockSystemSound.sound)
                                 {
                                     case 0:
-                                        doorlockSystemSound = 0;
                                         btnDoorlockSystemVolumeStateText.TextID = StringId.Mute;
                                         break;
                                     case 1:
-                                        doorlockSystemSound = 1;
                                         btnDoorlockSystemVolumeStateText.TextID = StringId.Low;
                                         break;
                                     case 2:
-                                        doorlockSystemSound = 2;
                                         btnDoorlockSystemVolumeStateText.TextID = StringId.Moderate;
                                         break;
                                     case 3:
-                                        doorlockSystemSound = 3;
                                         btnDoorlockSystemVolumeStateText.TextID = StringId.High;
                                         break;
                                 }
@@ -205,22 +201,22 @@
                             {
                                 if (doorbellTone.volume == 0)
                                 {
-                                    doorbelVol = 3;
+                                    doorbellVol = 0;
                                     btnDoorbellVolumeStateText.TextID = StringId.Mute;
                                 }
                                 else if (doorbellTone.volume > 0 && doorbellTone.volume < 35)
                                 {
-                                    doorbelVol = 2;
+                                    doorbellVol = 1;
                                     btnDoorbellVolumeStateText.TextID = StringId.Low;
                                 }
                                 else if (doorbellTone.volume > 35 && doorbellTone.volume < 70)
                                 {
-                                    doorbelVol = 1;
+                                    doorbellVol = 2;
                                     btnDoorbellVolumeStateText.TextID = StringId.Moderate;
                                 }
                                 else if (doorbellTone.volume > 70)
                                 {
-                                    doorbelVol = 0;
+                                    doorbellVol = 3;
                                     btnDoorbellVolumeStateText.TextID = StringId.High;
                                 }
                             }
@@ -271,10 +267,10 @@
         /// <summary>
         /// 鍔犺浇鍔熻兘灞炴�ф暟鎹�夋嫨寮圭獥
         /// </summary>
-        void LoadEditDialog(int titleId, int index, Button btn)
+        void LoadEditDialog(int titleId, Button btn,bool isDoorlockSystemVolume)
         {
             Button lastButton = new Button();
-            var lastData = "";
+            
             var lastText = "";
             Dialog dialog = new Dialog();
 
@@ -311,7 +307,7 @@
             {
                 Gravity = Gravity.CenterHorizontal,
                 TextAlignment = TextAlignment.Center,
-                Width = Application.GetRealWidth(100),
+                Width = Application.GetRealWidth(150),
                 TextID = titleId,
                 IsBold = true,
                 TextColor = CSS_Color.FirstLevelTitleColor,
@@ -340,7 +336,7 @@
                 TextID = StringId.Complete,
             };
             topView.AddChidren(btnConfrim);
-            int hei = 1;
+            int index = 1;
             var statusList = new List<string>
             {
                 Language.StringByID(StringId.High),
@@ -353,11 +349,11 @@
             {
                 var row = new FrameLayout()
                 {
-                    Y = Application.GetRealHeight(50 * hei),
+                    Y = Application.GetRealHeight(50 * index),
                     Height = Application.GetRealHeight(50),
                 };
                 optionBaseView.AddChidren(row);
-                if (statusList.Count > hei)
+                if (statusList.Count > index)
                 {
                     optionBaseView.AddChidren(new Button()
                     {
@@ -377,13 +373,76 @@
                     Height = Application.GetMinRealAverage(28),
                     UnSelectedImagePath = "Public/ChooseIcon.png",
                     SelectedImagePath = "Public/ChooseOnIcon.png",
-
+                    Tag = index - 1,
                 };
                 row.AddChidren(btnChoose);
-                if (index == hei - 1)
+                if (isDoorlockSystemVolume) {//璁剧疆闂ㄩ攣绯荤粺闊抽噺
+                    switch (doorLockSystemSound.sound)
+                    {
+                        case 0:
+                            if (index == 3 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 1:
+                            if (index == 2 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 2:
+                            if (index == 1 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 3:
+                            if (index == 0 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                    }
+                }
+                else//璁剧疆闂ㄩ搩闊抽噺
                 {
-                    lastButton = btnChoose;
-                    btnChoose.IsSelected = true;
+                    switch (doorbellVol)
+                    {
+                        case 0:
+                            if (index == 3 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 1:
+                            if (index == 2 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 2:
+                            if (index == 1 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                        case 3:
+                            if (index == 0 + 1)
+                            {
+                                lastButton = btnChoose;
+                                btnChoose.IsSelected = true;
+                            }
+                            break;
+                    }
+
                 }
                 var btnPropertyTitle = new Button()
                 {
@@ -391,22 +450,24 @@
                     TextAlignment = TextAlignment.CenterLeft,
                     TextColor = CSS_Color.FirstLevelTitleColor,
                     TextSize = CSS_FontSize.TextFontSize,
-                    Tag = hei-1,
                     Text = m
                 };
                 row.AddChidren(btnPropertyTitle);
 
                 btnPropertyTitle.MouseUpEventHandler = (sender, e) => {
+                    if (btnChoose.IsSelected)
+                    {
+                        return;
+                    }
                     btnChoose.IsSelected = true;
                     if (lastButton != null)
                     {
                         lastButton.IsSelected = false;
                     }
                     lastButton = btnChoose;
-                    lastData = btnPropertyTitle.Tag.ToString();
                     lastText = btnPropertyTitle.Text;
                 };
-                hei++;
+                index++;
             }
 
 
@@ -423,13 +484,14 @@
             };
             btnConfrim.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
-                if(titleId == StringId.DoorlockSystemVolume)
+                var lastData = lastButton.Tag.ToString();
+
+                if (isDoorlockSystemVolume)
                 {
 
                     var waitPage = new Loading();
                     bodyView.AddChidren(waitPage);
                     waitPage.Start("");
-
                     new System.Threading.Thread(() => {
                         try
                         {
@@ -462,15 +524,19 @@
                                     switch (sound)
                                     {
                                         case 0:
+                                            doorLockSystemSound.sound = 0;
                                             btn.TextID = StringId.Mute;
                                             break;
                                         case 1:
+                                            doorLockSystemSound.sound = 1;
                                             btn.TextID = StringId.Low;
                                             break;
                                         case 2:
+                                            doorLockSystemSound.sound = 2;
                                             btn.TextID = StringId.Moderate;
                                             break;
                                         case 3:
+                                            doorLockSystemSound.sound = 3;
                                             btn.TextID = StringId.High;
                                             break;
                                     }
@@ -550,15 +616,19 @@
                                     switch (lastData)
                                     {
                                         case "0":
+                                            doorbellVol = 3;
                                             btn.TextID = StringId.High;
                                             break;
                                         case "1":
+                                            doorbellVol = 2;
                                             btn.TextID = StringId.Moderate;
                                             break;
                                         case "2":
+                                            doorbellVol = 1;
                                             btn.TextID = StringId.Low;
                                             break;
                                         case "3":
+                                            doorbellVol = 0;
                                             btn.TextID = StringId.Mute;
                                             break;
                                     }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs
index 9f0c115..7ce49b4 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockBatteryManagementPage.cs
@@ -16,8 +16,8 @@
 
         public void LoadPage()
         {
-            new TopViewDiv(bodyView, Language.StringByID(StringId.AudioSetup)).LoadTopView();
-            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
+            new TopViewDiv(bodyView, Language.StringByID(StringId.BatteryManagement)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
 
             var view1 = new FrameLayout()
@@ -25,7 +25,7 @@
                 Y = Application.GetRealHeight(64),
                 Height = Application.GetRealHeight(276),
                 BackgroundColor = CSS_Color.MainBackgroundColor,
-                BackgroundImagePath = "FunctionIcon/Doorlock/VideoDoorlockBatteryManagementBg.png"
+                BackgroundImagePath = "FunctionIcon/DoorLock/VideoDoorlockBatteryManagementBg.png"//VideoDoorlockBatteryManagementBg
             };
             bodyView.AddChidren(view1);
 
@@ -75,6 +75,7 @@
                 TextSize = CSS_FontSize.HeadlineFontSize,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 Text = "浣庣數閲忚鏄�",
+                BackgroundColor = CSS_Color.MainBackgroundColor,
             };
             view2.AddChidren(btnTitle2);
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
index 67cc900..73348c9 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
@@ -305,6 +305,7 @@
                 TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                 TextColor = CSS_Color.PromptingColor1,
                 TextID = StringId.FaceUnlockNote,
+                IsMoreLines = true,
             };
             automaitcTipView.AddChidren(btnAutomaitcNote);
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs
index f1b120c..624bc38 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserListPage.cs
@@ -30,13 +30,28 @@
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
 
+
             contentView = new VerticalScrolViewLayout()
             {
                 Y = Application.GetRealHeight(64),
-                Height = Application.GetRealHeight(667 - 70),
+                Height = Application.GetRealHeight(607 - 70),
             };
             bodyView.AddChidren(contentView);
 
+            var btnTip = new Button()
+            {
+                Y = Application.GetRealHeight(667 - 70),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(60),
+                TextAlignment = TextAlignment.TopLeft,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                TextColor = CSS_Color.TextualColor,
+                TextID = StringId.VideoDoorlockManagerTip,
+                IsMoreLines = true,
+            };
+            bodyView.AddChidren(btnTip);
+
             var waitPage = new Loading();
             bodyView.AddChidren(waitPage);
             waitPage.Start("");
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs
index 97ec8e1..6f1f608 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockUserManagerPage.cs
@@ -18,7 +18,7 @@
         VerticalScrolViewLayout contentView;
         FrameLayout userPermissionsView;
 
-        Button btnUserName;
+        //Button btnUserName;
 
         Function device;
         VideoDoorlockUser doorlockUser;
@@ -48,6 +48,8 @@
             };
             bodyView.AddChidren(contentView);
 
+          
+
             #region 鐢ㄦ埛鍚嶇О
             var userNameView = new FrameLayout()
             {
@@ -75,7 +77,7 @@
             };
             userNameView.AddChidren(btnEditUserNameIcon);
 
-            btnUserName = new Button()
+            var btnUserName = new Button()
             {
                 X = Application.GetRealWidth(100),
                 Width = Application.GetRealWidth(230),
@@ -94,12 +96,82 @@
             contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8) });
 
             initOptionView(false);
+
+            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+            {
+                Action<string> callBack = (str) =>
+                {
+                    if (string.IsNullOrEmpty(str))
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.UesrNameCannotBeEmpty),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(bodyView);
+                        return;
+                    }
+                    if (str == UserInfo.Current.userName)
+                    {
+                        return;
+                    }
+                    if (System.Text.Encoding.Default.GetBytes(str).Length > 20)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.LengthOutOfRange),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(bodyView);
+                        return;
+                    }
+                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
+                    new System.Threading.Thread(() =>
+                    {
+                        try
+                        {
+                            var resultObj = ApiUtlis.Ins.HttpRequest.EditDoorlockUserName(device.deviceId, doorlockUser.extUserId, str);
+                            if (resultObj.Code == StateCode.SUCCESS)
+                            {
+                                Application.RunOnMainThread(() =>
+                                {
+                                    btnUserName.Text = str;
+                                });
+                            }
+                            else
+                            {
+                                //澶辫触鎻愮ず
+                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            MainPage.Log($"update user name error : {ex.Message}");
+                        }
+                        finally
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                waitPage.Hide();
+                            });
+                        }
+                    })
+                    { IsBackground = true }.Start();
+                };
+                var pa = new PublicAssmebly();
+                pa.entryMaxLength = 20;
+                pa.LoadDialog_EditParater(StringId.ChangeName, "", callBack, StringId.UesrNameCannotBeEmpty, 0, new List<string>());
+            };
+            btnUserName.MouseUpEventHandler = eventHandler;
+            btnEditUserNameIcon.MouseUpEventHandler = eventHandler;
+            userNameView.MouseUpEventHandler = eventHandler;
+
         }
 
         void initOptionView(bool isEdit)
         {
             if(doorlockUser.faceCount == 0&&
-                doorlockUser.faceCount == 0 &&
+                doorlockUser.fingerCount == 0 &&
                 doorlockUser.pwdCount == 0 &&
                 doorlockUser.cardCount == 0)
             {
@@ -113,17 +185,17 @@
 
 
             int childrenViewHeight = Application.GetRealWidth(116);
-            int permissionsViewHeight = Application.GetRealHeight(291 + 92);
+            int permissionsViewHeight = Application.GetRealHeight(291 + 92 + 100);
             if (userPermissionsView!= null)
             {
                 userPermissionsView.RemoveAll();
 
                 if (isEdit)
                 {
-                    permissionsViewHeight = Application.GetRealHeight(391 + 50);
+                    permissionsViewHeight = Application.GetRealHeight(391 + 50 + 100);
                     childrenViewHeight = Application.GetRealWidth(156);
                 }
-                userPermissionsView.Height = permissionsViewHeight;
+                userPermissionsView.Height = permissionsViewHeight ;
             }
             else
             {
@@ -629,7 +701,7 @@
             var delUserView = new FrameLayout()
             {
                 Y = unlockOptionView.Bottom,
-                Height = Application.GetRealHeight(110),
+                Height = Application.GetRealHeight(310),
                 BackgroundColor = CSS_Color.BackgroundColor,
             };
             userPermissionsView.AddChidren(delUserView);
@@ -712,60 +784,7 @@
         /// </summary>
         void LoadEvent_EditUserName()
         {
-            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
-            {
-                Action<string> callBack = (str) =>
-                {
-                    if (string.IsNullOrEmpty(str))
-                    {
-                        new Tip()
-                        {
-                            CloseTime = 1,
-                            Text = Language.StringByID(StringId.UesrNameCannotBeEmpty),
-                            Direction = AMPopTipDirection.None,
-                        }.Show(bodyView);
-                        return;
-                    }
-                    if (str == UserInfo.Current.userName)
-                    {
-                        return;
-                    }
-                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
-                    new System.Threading.Thread(() =>
-                    {
-                        try
-                        {
-                            var resultObj = ApiUtlis.Ins.HttpRequest.EditDoorlockUserName(device.deviceId, doorlockUser.extUserId,str);
-                            if (resultObj.Code == StateCode.SUCCESS)
-                            {
-                                Application.RunOnMainThread(() =>
-                                {
-                                    btnUserName.Text = str;
-                                });
-                            }
-                            else
-                            {
-                                //澶辫触鎻愮ず
-                                IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            MainPage.Log($"update user name error : {ex.Message}");
-                        }
-                        finally
-                        {
-                            Application.RunOnMainThread(() =>
-                            {
-                                waitPage.Hide();
-                            });
-                        }
-                    })
-                    { IsBackground = true }.Start();
-                };
-                new PublicAssmebly().LoadDialog_EditParater(StringId.ChangeName, doorlockUser.lockUserName, callBack, StringId.UesrNameCannotBeEmpty, 0, new System.Collections.Generic.List<string>());
-            };
-            btnUserName.MouseUpEventHandler = eventHandler;
+            //btnUserName.MouseUpEventHandler = eventHandler;
         }
 
 
diff --git a/SiriIntents/Server/HttpUtil.cs b/SiriIntents/Server/HttpUtil.cs
index 8d4483c..dc7aca0 100644
--- a/SiriIntents/Server/HttpUtil.cs
+++ b/SiriIntents/Server/HttpUtil.cs
@@ -16,8 +16,8 @@
         /// 鍥哄畾鍩熷悕,姝e紡鐜
         /// 鍏叡鍩熷悕灏辫繎瑙f瀽
         /// </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
diff --git a/SiriIntents/SiriIntents.csproj b/SiriIntents/SiriIntents.csproj
index 20861d5..afb5d87 100644
--- a/SiriIntents/SiriIntents.csproj
+++ b/SiriIntents/SiriIntents.csproj
@@ -80,7 +80,7 @@
     <MtouchArch>ARM64</MtouchArch>
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
-    <CodesignProvision>OnProSiri230605-1-Dev</CodesignProvision>
+    <CodesignProvision>OnProSiri230630-1-Dev</CodesignProvision>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
diff --git a/SiriIntentsUI/SiriIntentsUI.csproj b/SiriIntentsUI/SiriIntentsUI.csproj
index 7c1916e..4d07b7f 100644
--- a/SiriIntentsUI/SiriIntentsUI.csproj
+++ b/SiriIntentsUI/SiriIntentsUI.csproj
@@ -84,7 +84,7 @@
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodesignProvision>OnProSiriUI230605-1-Dev</CodesignProvision>
+    <CodesignProvision>OnProSiriUI230630-1-Dev</CodesignProvision>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />

--
Gitblit v1.8.0