From f5a49299caaf1fdca7503ae682da13c6fda887c6 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 16 十二月 2020 20:55:55 +0800
Subject: [PATCH] Merge branch 'CJL' into NewFilePath

---
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                                 |   16 +
 HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockPasswordPage.cs                |   14 
 HDL-ON_Android/Assets/Language.ini                                                   |    4 
 HDL_ON/UI/UI2/2-Classification/RoomPage.cs                                           |    8 
 HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPage.cs                       |    7 
 HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs                                    |    7 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPage.cs                                |    8 
 HDL_ON/UI/UI0-Public/AppUnlockPage.cs                                                |   39 +++
 HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs                                 |    7 
 HDL-ON_iOS/Resources/Language.ini                                                    |    4 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs                            |    7 
 HDL_ON/UI/UI0-Public/UpdataSidDataDialog.cs                                          |    4 
 HDL_ON/UI/UI2/FuntionControlView/Light/RelayPage.cs                                  |    9 
 HDL_ON/DAL/DriverLayer/Packet.cs                                                     |   22 +-
 HDL_ON/DAL/DriverLayer/Control.cs                                                    |    3 
 HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs                                        |   39 ++-
 HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPage.cs                         |    7 
 HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs                                        |    7 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPage.cs                               |    7 
 HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs                                     |   22 +
 HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs                     |    7 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs     |    4 
 HDL_ON/Entity/Function/TV.cs                                                         |    4 
 HDL_ON/DAL/DriverLayer/Control_Udp.cs                                                |   78 +++---
 HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePage.cs                        |    7 
 HDL_ON/UI/UI0-Public/TopViewDiv.cs                                                   |   19 +
 HDL_ON/Entity/Function/Function.cs                                                   |    6 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                                |    7 
 HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockSettingsPageBLL.cs             |  227 +++++++++++---------
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs    |    4 
 HDL_ON/Common/R.cs                                                                   |   17 +
 HDL_ON/DAL/Server/HttpServerRequest.cs                                               |    1 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePageBLL.cs |    4 
 HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockGesturePage.cs                 |   15 
 HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs                                        |    8 
 35 files changed, 427 insertions(+), 222 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 0c26a51..143a78b 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -569,6 +569,10 @@
 9049=瀵嗙爜杩炵画杈撻敊娆℃暟宸茶揪鍒�10娆�,鐢ㄦ埛宸茶閿佸畾,璇锋鏃�0鐐瑰悗鍐嶇櫥闄�
 9050=楠岃瘉闈㈠ID
 9051=淇濆瓨鐢ㄦ埛澶村儚澶辫触
+9052=鎺ㄩ�佹敞鍐屾甯�
+9053=鎺ㄩ�佹敞鍐屽紓甯�
+9054=鏁板瓧瀵嗙爜楠岃瘉
+9055=缁樺埗鎵嬪娍楠岃瘉
 
 10000=鏃犳晥鐧诲綍瀵嗛挜锛岃閲嶆柊鐧诲綍锛�
 10001=璇锋眰鏈嶅姟鍣ㄥけ璐ワ紝璇风◢鍚庡啀璇曪紒
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 0c26a51..143a78b 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -569,6 +569,10 @@
 9049=瀵嗙爜杩炵画杈撻敊娆℃暟宸茶揪鍒�10娆�,鐢ㄦ埛宸茶閿佸畾,璇锋鏃�0鐐瑰悗鍐嶇櫥闄�
 9050=楠岃瘉闈㈠ID
 9051=淇濆瓨鐢ㄦ埛澶村儚澶辫触
+9052=鎺ㄩ�佹敞鍐屾甯�
+9053=鎺ㄩ�佹敞鍐屽紓甯�
+9054=鏁板瓧瀵嗙爜楠岃瘉
+9055=缁樺埗鎵嬪娍楠岃瘉
 
 10000=鏃犳晥鐧诲綍瀵嗛挜锛岃閲嶆柊鐧诲綍锛�
 10001=璇锋眰鏈嶅姟鍣ㄥけ璐ワ紝璇风◢鍚庡啀璇曪紒
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index e25fa3c..58cf187 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -722,6 +722,23 @@
         /// 淇濆瓨鐢ㄦ埛澶村儚澶辫触
         /// </summary>
         public const int FailedToSaveUserImage = 9051;
+        /// <summary>
+        /// 鎺ㄩ�佹敞鍐屾甯�
+        /// </summary>
+        public const int PushNormal = 9052;
+        /// <summary>
+        /// 鎺ㄩ�佹敞鍐屽紓甯�
+        /// </summary>
+        public const int PushException = 9053;
+        /// <summary>
+        /// 鏁板瓧瀵嗙爜楠岃瘉
+        /// </summary>
+        public const int PasswordVerification = 9054;
+        /// <summary>
+        /// 缁樺埗鎵嬪娍楠岃瘉
+        /// </summary>
+        public const int GestureVerification = 9055;
+
 
 
         #region 缃戠粶璇锋眰鍝嶅簲閿欒鎻愮ず淇℃伅
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 82757c7..e8215ad 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -244,10 +244,11 @@
         {
             function.usageCount++;
             function.refreshTime = DateTime.Now;
-            DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
+          
             //杩滅▼閫氳
             if (Ins.IsRemote)
             {
+                DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
                 //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋�
                 var apiControlData = function.GetApiControlData(commandDictionary);
                 var actionObjs = new List<ApiAlinkControlActionObj>();
diff --git a/HDL_ON/DAL/DriverLayer/Control_Udp.cs b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
index fd41020..5e32402 100644
--- a/HDL_ON/DAL/DriverLayer/Control_Udp.cs
+++ b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -174,8 +174,8 @@
                                         curtainState = 2;
                                         break;
                                 }
-                                ControlBytesSend(Command.SetCurtainModelStutas, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID,
-                                    new byte[] { f.localFunction.bus_Data.loopId, curtainState });
+                                ControlBytesSend(Command.SetCurtainModelStutas, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID,
+                                    new byte[] { f.localFunction.bus.loopId, curtainState });
                                 break;
                             }
                         }
@@ -218,10 +218,10 @@
                                     }
                                     break;
                             }
-                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID, new byte[] { 3, tempAc.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, f.localFunction.bus_Data.loopId });
-                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID, new byte[] { 6, tempAc.curModeIndex, f.localFunction.bus_Data.loopId });
-                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID, new byte[] { 5, tempAc.curFanIndex, f.localFunction.bus_Data.loopId });
-                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID, new byte[] { modeKey, Convert.ToByte(tempAc.trait_temp.curValue), f.localFunction.bus_Data.loopId });
+                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID, new byte[] { 3, tempAc.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, f.localFunction.bus.loopId });
+                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID, new byte[] { 6, tempAc.curModeIndex, f.localFunction.bus.loopId });
+                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID, new byte[] { 5, tempAc.curFanIndex, f.localFunction.bus.loopId });
+                            ControlBytesSend(Command.InstructionPanelKey, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID, new byte[] { modeKey, Convert.ToByte(tempAc.trait_temp.curValue), f.localFunction.bus.loopId });
                         }
                         break;
                     case FunctionType.Relay:
@@ -247,8 +247,8 @@
                                     break;
                             }
                         }
-                        ControlBytesSend(Command.SetSingleLight, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID,
-                            new byte[] { f.localFunction.bus_Data.loopId, brightness });
+                        ControlBytesSend(Command.SetSingleLight, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID,
+                            new byte[] { f.localFunction.bus.loopId, brightness });
                         break;
                     case FunctionType.RGB:
                         break;
@@ -270,8 +270,8 @@
                             }
                         }
                         byte b1 = tempFh.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0;
-                        ControlBytesSend(Command.SetFloorHeat, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID, new byte[] {
-                                f. localFunction.bus_Data.loopId, b1, 0, tempFh.curModeIndex, Convert.ToByte( tempFh.trait_temp.curValue),  Convert.ToByte( tempFh.trait_temp.curValue), Convert.ToByte( tempFh.trait_temp.curValue), Convert.ToByte( tempFh.trait_temp.curValue), 0, 0 });
+                        ControlBytesSend(Command.SetFloorHeat, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID, new byte[] {
+                                f. localFunction.bus.loopId, b1, 0, tempFh.curModeIndex, Convert.ToByte( tempFh.trait_temp.curValue),  Convert.ToByte( tempFh.trait_temp.curValue), Convert.ToByte( tempFh.trait_temp.curValue), Convert.ToByte( tempFh.trait_temp.curValue), 0, 0 });
                         break;
                     case FunctionType.Socket:
                         foreach (var attr in f.status)
@@ -288,8 +288,8 @@
                                         onOffValue = 2;
                                         break;
                                 }
-                                ControlBytesSend(Command.SetSingleLight, f.localFunction.bus_Data.SubnetID, f.localFunction.bus_Data.DeviceID,
-                                    new byte[] { f.localFunction.bus_Data.loopId, onOffValue });
+                                ControlBytesSend(Command.SetSingleLight, f.localFunction.bus.SubnetID, f.localFunction.bus.DeviceID,
+                                    new byte[] { f.localFunction.bus.loopId, onOffValue });
                                 break;
                             }
                         }
@@ -307,9 +307,9 @@
         {
             try
             {
-                var subnetId = function.bus_Data.SubnetID;
-                var deviceId = function.bus_Data.DeviceID;
-                var loopId = function.bus_Data.loopId;
+                var subnetId = function.bus.SubnetID;
+                var deviceId = function.bus.DeviceID;
+                var loopId = function.bus.loopId;
 
                 switch (function.functionCategory)
                 {
@@ -328,7 +328,7 @@
                                 {
                                     b = (byte)light.brightness == 0 ? (byte)100 : (byte)light.brightness;
                                 }
-                                var bytes = new byte[] { function.bus_Data.loopId,
+                                var bytes = new byte[] { function.bus.loopId,
                                             b,
                                             254, 0,Convert.ToByte(light.fadeTime) ,3,
                                             (byte)light.RedColor,(byte)light.GreenColor,
@@ -347,13 +347,13 @@
                                     b1 = (byte)light.brightness == 0 ? (byte)100 : (byte)light.brightness;
                                 }
                                 ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] {
-                                            function.bus_Data.loopId,
+                                            function.bus.loopId,
                                             b1,
                                             0, Convert.ToByte(light.fadeTime) });
                                 //DimmerPage.UpdataStates(light);
                                 break;
                             case FunctionType.Relay:
-                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { function.bus_Data.loopId, light.trait_on_off.curValue.ToString() == "on" ? (byte)100 : (byte)0, 0, 0 });
+                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { function.bus.loopId, light.trait_on_off.curValue.ToString() == "on" ? (byte)100 : (byte)0, 0, 0 });
                                 //RelayPage.UpdataState(light);
                                 break;
                         }
@@ -376,7 +376,7 @@
                                 {
                                     b1 = 2;
                                 }
-                                ControlBytesSend(Command.SetCurtainModelStutas, subnetId, deviceId, new byte[] { curtain.bus_Data.loopId, b1 });
+                                ControlBytesSend(Command.SetCurtainModelStutas, subnetId, deviceId, new byte[] { curtain.bus.loopId, b1 });
                                 break;
                             case FunctionType.MotorCurtain:
                             case FunctionType.RollingShutter:
@@ -384,7 +384,7 @@
                                 //{
                                 if (curtain.trait_on_off.curValue.ToString() == "stop")
                                 {
-                                    ControlBytesSend(Command.SetCurtainModelStutas, subnetId, deviceId, new byte[] { curtain.bus_Data.loopId, 0 });
+                                    ControlBytesSend(Command.SetCurtainModelStutas, subnetId, deviceId, new byte[] { curtain.bus.loopId, 0 });
                                 }
                                 else
                                 {
@@ -415,20 +415,20 @@
                         {
                             case FunctionType.AC:
                                 var aC = function as AC;
-                                ControlBytesSend(Command.SetACMode, subnetId, deviceId, new byte[] { aC.bus_Data.loopId, (byte)aC.curTempType, 32, 32, 32, 32, 32, 0, aC.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, aC.curModeIndex, aC.curFanIndex, Convert.ToByte(aC.trait_temp.curValue), 0 });
+                                ControlBytesSend(Command.SetACMode, subnetId, deviceId, new byte[] { aC.bus.loopId, (byte)aC.curTempType, 32, 32, 32, 32, 32, 0, aC.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, aC.curModeIndex, aC.curFanIndex, Convert.ToByte(aC.trait_temp.curValue), 0 });
                                 //ControlBytesSend(Command.InstructionPanelKey, aC.bus_Data.SubnetID, aC.bus_Data.DeviceID, new byte[] { 3, aC.on_off == "on" ? (byte)1 : (byte)0, aC.bus_Data.loopId });
                                 foreach (var dic in commandDictionary)
                                 {
                                     switch (dic.Key)
                                     {
                                         case "on_off":
-                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus_Data.SubnetID, aC.bus_Data.DeviceID, new byte[] { 3, aC.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, aC.bus_Data.loopId });
+                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus.SubnetID, aC.bus.DeviceID, new byte[] { 3, aC.trait_on_off.curValue.ToString() == "on" ? (byte)1 : (byte)0, aC.bus.loopId });
                                             break;
                                         case "mode":
-                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus_Data.SubnetID, aC.bus_Data.DeviceID, new byte[] { 6, aC.curModeIndex, aC.bus_Data.loopId });
+                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus.SubnetID, aC.bus.DeviceID, new byte[] { 6, aC.curModeIndex, aC.bus.loopId });
                                             break;
                                         case "fan":
-                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus_Data.SubnetID, aC.bus_Data.DeviceID, new byte[] { 5, aC.curFanIndex, aC.bus_Data.loopId });
+                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus.SubnetID, aC.bus.DeviceID, new byte[] { 5, aC.curFanIndex, aC.bus.loopId });
                                             break;
                                         case "temp":
                                             byte modeKey = 4;
@@ -450,7 +450,7 @@
                                                     modeKey = 2;
                                                     break;
                                             }
-                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus_Data.SubnetID, aC.bus_Data.DeviceID, new byte[] { modeKey, Convert.ToByte(aC.trait_temp.curValue), aC.bus_Data.loopId });
+                                            ControlBytesSend(Command.InstructionPanelKey, aC.bus.SubnetID, aC.bus.DeviceID, new byte[] { modeKey, Convert.ToByte(aC.trait_temp.curValue), aC.bus.loopId });
                                             break;
                                         default:
                                             MainPage.Log($"鍔熻兘鏈敮鎸� : {dic.Key}");
@@ -489,7 +489,7 @@
                                                 break;
                                         }
                                     }
-                                    ControlBytesSend(Command.SetFloorHeat, subnetId, deviceId, new byte[] { fh.bus_Data.loopId, b1, (byte)fh.curTempType, fh.curModeIndex, fh.modeTemp["normal"], fh.modeTemp["day"], fh.modeTemp["night"], fh.modeTemp["away"], 0, 0 });
+                                    ControlBytesSend(Command.SetFloorHeat, subnetId, deviceId, new byte[] { fh.bus.loopId, b1, (byte)fh.curTempType, fh.curModeIndex, fh.modeTemp["normal"], fh.modeTemp["day"], fh.modeTemp["night"], fh.modeTemp["away"], 0, 0 });
                                 }
                                 break;
                         }
@@ -501,10 +501,10 @@
                                 var fan = function as Fan;
                                 if (fan.trait_on_off.curValue.ToString() == "on")
                                 {
-                                    ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus_Data.loopId, (byte)fan.openLevel });
+                                    ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus.loopId, (byte)fan.openLevel });
                                 }
                                 {
-                                    ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus_Data.loopId, 0 });
+                                    ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus.loopId, 0 });
                                 }
                                 break;
                         }
@@ -514,7 +514,7 @@
                         {
                             case FunctionType.Socket:
                                 var s = function as SwitchSocket;
-                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { s.bus_Data.loopId, s.trait_on_off.curValue.ToString() == "on" ? (byte)100 : (byte)0 });
+                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { s.bus.loopId, s.trait_on_off.curValue.ToString() == "on" ? (byte)100 : (byte)0 });
                                 break;
                         }
                         break;
@@ -539,9 +539,9 @@
         {
             try
             {
-                var subnetId = function.bus_Data.SubnetID;
-                var deviceId = function.bus_Data.DeviceID;
-                var loopId = function.bus_Data.loopId;
+                var subnetId = function.bus.SubnetID;
+                var deviceId = function.bus.DeviceID;
+                var loopId = function.bus.loopId;
 
                 switch (function.functionCategory)
                 {
@@ -553,7 +553,7 @@
                                 ControlBytesSend(Command.ReadLightAllLoopBrightness, subnetId, deviceId, new byte[] { });
                                 break;
                             case FunctionType.RGB:
-                                ControlBytesSend(Command.ReadLogicLoopColor, subnetId, deviceId, new byte[] { function.bus_Data.loopId });
+                                ControlBytesSend(Command.ReadLogicLoopColor, subnetId, deviceId, new byte[] { function.bus.loopId });
                                 break;
                         }
                         break;
@@ -563,7 +563,7 @@
                             case FunctionType.Curtain:
                             case FunctionType.MotorCurtain:
                             case FunctionType.RollingShutter:
-                                ControlBytesSend(Command.ReadCurtainStatus, subnetId, deviceId, new byte[] { function.bus_Data.loopId });
+                                ControlBytesSend(Command.ReadCurtainStatus, subnetId, deviceId, new byte[] { function.bus.loopId });
                                 break;
                         }
                         break;
@@ -571,10 +571,10 @@
                         switch (function.functionType)
                         {
                             case FunctionType.AC:
-                                ControlBytesSend(Command.ReadACMode, subnetId, deviceId, new byte[] { function.bus_Data.loopId });
+                                ControlBytesSend(Command.ReadACMode, subnetId, deviceId, new byte[] { function.bus.loopId });
                                 break;
                             case FunctionType.FloorHeating:
-                                ControlBytesSend(Command.ReadFloorHeat, subnetId, deviceId, new byte[] { function.bus_Data.loopId });
+                                ControlBytesSend(Command.ReadFloorHeat, subnetId, deviceId, new byte[] { function.bus.loopId });
                                 break;
                         }
                         break;
@@ -583,7 +583,7 @@
                         {
                             case FunctionType.Fan:
                                 var fan = function as Fan;
-                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus_Data.loopId });
+                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { fan.bus.loopId });
                                 break;
                         }
                         break;
@@ -592,14 +592,14 @@
                         {
                             case FunctionType.Socket:
                                 var s = function as SwitchSocket;
-                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { s.bus_Data.loopId });
+                                ControlBytesSend(Command.SetSingleLight, subnetId, deviceId, new byte[] { s.bus.loopId });
                                 break;
                         }
                         break;
                     case FunctionCategory.Sensor:
                         var sensor = function as Sensor;
                         ControlBytesSend(Command.ReadDeviceLoopInfo, subnetId, deviceId, new byte[] { (byte)5,
-                                            (byte)((int)sensor.functionType % 256), sensor.bus_Data.loopId });
+                                            (byte)((int)sensor.functionType % 256), sensor.bus.loopId });
                         break;
                 }
             }
diff --git a/HDL_ON/DAL/DriverLayer/Packet.cs b/HDL_ON/DAL/DriverLayer/Packet.cs
index c0a5517..8bfb416 100644
--- a/HDL_ON/DAL/DriverLayer/Packet.cs
+++ b/HDL_ON/DAL/DriverLayer/Packet.cs
@@ -163,12 +163,12 @@
                     case Command.ReadLightAllLoopBrightnessACK:
                         for (int i = 0; i < receiveBytes[0]; i++)
                         {
-                            var light = FunctionList.List.lights.Find((obj) => obj.bus_Data.SubnetID == subnetID && obj.bus_Data.DeviceID == deviceID && obj.bus_Data.loopId == (i + 1));
+                            var light = FunctionList.List.lights.Find((obj) => obj.bus.SubnetID == subnetID && obj.bus.DeviceID == deviceID && obj.bus.loopId == (i + 1));
                             if (light != null)
                             {
                                 if (light.functionType != FunctionType.RGB)
                                 {
-                                    light.trait_on_off.curValue = receiveBytes[light.bus_Data.loopId] == 0 ? "off" : "on";
+                                    light.trait_on_off.curValue = receiveBytes[light.bus.loopId] == 0 ? "off" : "on";
                                     if (light.trait_on_off.curValue.ToString() == "on")
                                     {
                                         light.brightness = receiveBytes[2];
@@ -191,7 +191,7 @@
                             }
                             else
                             {
-                                var e = FunctionList.List.electricals.Find((obj) => obj.bus_Data.SubnetID == subnetID && obj.bus_Data.DeviceID == deviceID && obj.bus_Data.loopId == i);
+                                var e = FunctionList.List.electricals.Find((obj) => obj.bus.SubnetID == subnetID && obj.bus.DeviceID == deviceID && obj.bus.loopId == i);
                                 if (e != null)
                                 {
                                     var fan = e as Fan;
@@ -247,7 +247,7 @@
                     case Command.ReadCurtainStutasACK:
                         foreach (var curtain in FunctionList.List.curtains)
                         {
-                            if (curtain.bus_Data.SubnetID == subnetID && curtain.bus_Data.DeviceID == deviceID)
+                            if (curtain.bus.SubnetID == subnetID && curtain.bus.DeviceID == deviceID)
                             {
                                 if (receiveBytes[0] == 17)
                                 {
@@ -264,7 +264,7 @@
                                 }
                                 else
                                 {
-                                    if (curtain.bus_Data.loopId != receiveBytes[0])
+                                    if (curtain.bus.loopId != receiveBytes[0])
                                         continue;
                                     switch (receiveBytes[1])
                                     {
@@ -443,10 +443,10 @@
                         string tag = receiveBytes[1] + "_" + subnetID + "_" + deviceID + "_" + receiveBytes[2];
                         foreach (var sensor in FunctionList.List.sensorsEnvironmentalScience)
                         {
-                            if (sensor.bus_Data != null)
+                            if (sensor.bus != null)
                             {
-                                if ((int)sensor.functionType % 256 == receiveBytes[1] && sensor.bus_Data.SubnetID == subnetID &&
-                                    sensor.bus_Data.DeviceID == deviceID && sensor.bus_Data.loopId == receiveBytes[2])
+                                if ((int)sensor.functionType % 256 == receiveBytes[1] && sensor.bus.SubnetID == subnetID &&
+                                    sensor.bus.DeviceID == deviceID && sensor.bus.loopId == receiveBytes[2])
                                 {
                                     switch (dt)
                                     {
@@ -476,10 +476,10 @@
                         string tag1 = receiveBytes[1] + "_" + subnetID + "_" + deviceID + "_" + receiveBytes[2];
                         foreach (var sensor in FunctionList.List.sensorsEnvironmentalScience)
                         {
-                            if (sensor.bus_Data != null)
+                            if (sensor.bus != null)
                             {
-                                if ((int)sensor.functionType % 256 == receiveBytes[1] && sensor.bus_Data.SubnetID == subnetID &&
-                                    sensor.bus_Data.DeviceID == deviceID && sensor.bus_Data.loopId == receiveBytes[2])
+                                if ((int)sensor.functionType % 256 == receiveBytes[1] && sensor.bus.SubnetID == subnetID &&
+                                    sensor.bus.DeviceID == deviceID && sensor.bus.loopId == receiveBytes[2])
                                 {
                                     //0淇濈暀 1鏃犵鍙�4Byte鏁村舰  2鏈夌鍙�4Byte鏁村舰  3Float褰紙浠B憋級
                                     switch (receiveBytes[3])
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 24bc1a1..d6e8b1e 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -503,6 +503,7 @@
                             homeRegionName = mHome.homeRegionName,
                             homeRegionId = mHome.homeRegionId,
                             Address = mHome.homeAddress,
+                            isAllowCreateScene = mHome.isAllowCreateScene,
                         };
                         UserInfo.Current.regionList.Add(home);
                     }
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index d6d1e9b..5fd7886 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -119,7 +119,7 @@
         /// bus鍗忚鏁版嵁鏍煎紡
         /// 浣跨敤A鍗忚鎺у埗鏃讹紝鏀瑰睘鎬т负绌�
         /// </summary>
-        public BusData bus_Data;
+        public BusData bus;
         /// <summary>
         /// 鏄惁鏀惰棌
         /// </summary>
@@ -206,9 +206,9 @@
         public string GetBusId()
         {
             string busId = "";
-            if (bus_Data != null)
+            if (bus != null)
             {
-                busId = bus_Data.SubnetID + "_" + bus_Data.DeviceID + "_" + bus_Data.loopId;
+                busId = bus.SubnetID + "_" + bus.DeviceID + "_" + bus.loopId;
             }
             return busId;
         }
diff --git a/HDL_ON/Entity/Function/TV.cs b/HDL_ON/Entity/Function/TV.cs
index 0b645a2..485ac6a 100644
--- a/HDL_ON/Entity/Function/TV.cs
+++ b/HDL_ON/Entity/Function/TV.cs
@@ -14,7 +14,7 @@
         {
             int RandKey = new Random().Next(0, 255);
             var textByte = (byte)iCode;
-            Control.Ins.myUdp.ControlBytesSend(Command.InfraredControl, bus_Data.SubnetID, bus_Data.DeviceID, new byte[] { 1, bus_Data.loopId, textByte, 0, 0, (byte)RandKey }, 0);
+            Control.Ins.myUdp.ControlBytesSend(Command.InfraredControl, bus.SubnetID, bus.DeviceID, new byte[] { 1, bus.loopId, textByte, 0, 0, (byte)RandKey }, 0);
         }
         public void ControlTV(int number)
         {
@@ -24,7 +24,7 @@
             {
                 textByte = 18;
             }
-            Control.Ins.myUdp.ControlBytesSend(Command.InfraredControl, bus_Data.SubnetID, bus_Data.DeviceID, new byte[] { 1, bus_Data.loopId, textByte, 0, 0, (byte)RandKey }, 0);
+            Control.Ins.myUdp.ControlBytesSend(Command.InfraredControl, bus.SubnetID, bus.DeviceID, new byte[] { 1, bus.loopId, textByte, 0, 0, (byte)RandKey }, 0);
         }
     }
 }
diff --git a/HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs b/HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs
index 7c4961b..1b984d7 100644
--- a/HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs
+++ b/HDL_ON/Entity/ResponseEntity/RegionInfoRes.cs
@@ -118,6 +118,10 @@
         /// 浣忓畢鍖哄煙鍚嶅瓧
         /// </summary>
         public string homeRegionName;
+        /// <summary>
+        /// 鏄惁鍏佽鍒涘缓鍦烘櫙
+        /// </summary>
+        public bool isAllowCreateScene;
         ///// <summary>
         ///// 鏄惁缁戝畾缃戝叧
         ///// </summary>
@@ -199,5 +203,9 @@
         /// 浣忓畢鍦板潃
         /// </summary>
         public string homeAddress;
+        /// <summary>
+        /// 鏄惁鍏佽鍒涘缓鍦烘櫙
+        /// </summary>
+        public bool isAllowCreateScene;
     }
 }
diff --git a/HDL_ON/UI/UI0-Public/AppUnlockPage.cs b/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
index 5b1b28d..637798b 100644
--- a/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
+++ b/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
@@ -97,15 +97,18 @@
                 UserInfo.Current.unlockTime = DateTime.Now;
             };
 
+            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+            string verificationTitleString = GetVerificationTitleString();
+
             //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
             Action fingerAction = () =>
             {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
             };
             //鍔犺浇UI椤甸潰
             LoadGesturePage("7", fingerAction, null);
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
             TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
             {
                 if (e == TouchIDUtils.TouchIDState.Success)
@@ -247,15 +250,18 @@
                 UserInfo.Current.unlockTime = DateTime.Now;
             };
 
+            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+            string verificationTitleString = GetVerificationTitleString();
+
             //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
             Action faceIDAction = () =>
             {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.VerifyFaceID));
+                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
             };
             //鍔犺浇UI椤甸潰
             LoadFaceIDGesturePage("7", faceIDAction, null);
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.VerifyFaceID));
+            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
             TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
             {
                 if (e == TouchIDUtils.TouchIDState.Success)
@@ -389,5 +395,30 @@
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
             }
         }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+        /// </summary>
+        /// <returns></returns>
+        bool CheckIfUnlockPassword()
+        {
+            return UserInfo.Current.appUnlockType.Contains("1");
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+        /// </summary>
+        /// <returns></returns>
+        string GetVerificationTitleString()
+        {
+            if (CheckIfUnlockPassword())
+            {
+                return Language.StringByID(StringId.PasswordVerification);
+            }
+            else
+            {
+                return Language.StringByID(StringId.GestureVerification);
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/UI/UI0-Public/TopViewDiv.cs b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
index 31e109f..02b75d2 100644
--- a/HDL_ON/UI/UI0-Public/TopViewDiv.cs
+++ b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -146,8 +146,12 @@
                 Height = Application.GetMinRealAverage(28),
                 UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
             };
-            contentView.AddChidren(btnSetting);
 
+            //濡傛灉鏄垚鍛橀殣钘忕紪杈戝姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                contentView.AddChidren(btnSetting);
+            }
             btnSetting.MouseUpEventHandler = (sender, e) =>
             {
                 editAction();
@@ -173,7 +177,11 @@
                 Height = Application.GetMinRealAverage(28),
                 UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
             };
-            contentView.AddChidren(btnSetting);
+            //濡傛灉鏄垚鍛橀殣钘忕紪杈戝姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                contentView.AddChidren(btnSetting);
+            }
 
             btnSetting.MouseUpEventHandler = (sender, e) =>
             {
@@ -201,7 +209,12 @@
                 Height = Application.GetMinRealAverage(28),
                 UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
             };
-            contentView.AddChidren(btnSetting);
+
+            //濡傛灉鏄垚鍛橀殣钘忕紪杈戝姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                contentView.AddChidren(btnSetting);
+            }
 
             btnSetting.MouseUpEventHandler += (sender, e) =>
             {
diff --git a/HDL_ON/UI/UI0-Public/UpdataSidDataDialog.cs b/HDL_ON/UI/UI0-Public/UpdataSidDataDialog.cs
index caeabf2..0164334 100644
--- a/HDL_ON/UI/UI0-Public/UpdataSidDataDialog.cs
+++ b/HDL_ON/UI/UI0-Public/UpdataSidDataDialog.cs
@@ -40,8 +40,8 @@
                 {
                     var oidNetId = Convert.ToByte(oid.addresses.Substring(0, 2),16);
                     var oidDevId = Convert.ToByte(oid.addresses.Substring(2, 2),16);
-                    sidObj.bus_Data = new BusData();
-                    sidObj.bus_Data.loopId = Convert.ToByte(sidObj.sid.Substring(20, 4),16);
+                    sidObj.bus = new BusData();
+                    sidObj.bus.loopId = Convert.ToByte(sidObj.sid.Substring(20, 4),16);
                 }
                 FunctionList.List.AddDeviceFunction(sidObj);
             }
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index b6c33ea..2886f90 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -663,7 +663,13 @@
                     SelectedImagePath = "Collection/CollectionWhiteIcon.png",
                     UnSelectedImagePath = "Collection/CollectionIcon.png",
                 };
-                view.AddChidren(btnCollection);
+                //view.AddChidren(btnCollection);
+                //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+                if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+                {
+                    view.AddChidren(btnCollection);
+                }
+
                 LoadEvent_FunctionCollection(btnCollection, function);
 
                 if (function.functionCategory == FunctionCategory.Curtain)
@@ -897,7 +903,13 @@
                     SelectedImagePath = "Collection/CollectionWhiteIcon.png",
                     UnSelectedImagePath = "Collection/CollectionIcon.png",
                 };
-                view.AddChidren(btnCollection);
+                //view.AddChidren(btnCollection);
+                //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+                if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+                {
+                    view.AddChidren(btnCollection);
+                }
+
                 LoadEvent_SceneCollection(btnCollection, scene);
               
                 LoadEvent_ControlScene(btnCoverd,btnName,btnZone, scene);
diff --git a/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs b/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
index 87d2684..f130b5b 100644
--- a/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
@@ -113,17 +113,28 @@
                 MenuButtonSelect(0);
             };
             allMenuButton.SelectAction = allAction;
-
-#if DEBUG
             //娴嬭瘯鎻愬墠褰撳墠鎺ㄩ�両D
             allMenuButton.ImageButton.MouseLongEventHandler = (sender, e) =>
             {
-                CopyToClipboard("鎺ㄩ�両D锛�" + OnAppConfig.Instance.PushId);
-            };
-#endif
-            #endregion
+#if DEBUG
 
-            #region 鍒嗕韩涓庡姛鑳�
+                CopyToClipboard("鎺ㄩ�両D锛�" + OnAppConfig.Instance.PushId);
+#else
+                //妫�娴嬫槸鍚﹁幏鍙栨帹閫両D鎴愬姛锛屾彁绀烘帹閫佹敞鍐屾槸鍚︽甯�
+                if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId))
+                {
+                    Utlis.ShowTip(Language.StringByID(StringId.PushException));
+                }
+                else
+                {
+                    Utlis.ShowTip(Language.StringByID(StringId.PushNormal));
+                }
+#endif
+
+            };
+#endregion
+
+#region 鍒嗕韩涓庡姛鑳�
             shareMenuButton = new MenuButton()
             {
                 X = allMenuButton.Right,
@@ -138,9 +149,9 @@
                 MenuButtonSelect(1);
             };
             shareMenuButton.SelectAction = shateAction;
-            #endregion
+#endregion
 
-            #region 鎶ヨ绫�
+#region 鎶ヨ绫�
             alarmMenuButton = new MenuButton()
             {
                 X = shareMenuButton.Right,
@@ -155,9 +166,9 @@
                 MenuButtonSelect(2);
             };
             alarmMenuButton.SelectAction = alarmAction;
-            #endregion
+#endregion
 
-            #region 绯荤粺淇℃伅
+#region 绯荤粺淇℃伅
             systemMenuButton = new MenuButton()
             {
                 X = alarmMenuButton.Right,
@@ -172,7 +183,7 @@
                 MenuButtonSelect(3);
             };
             systemMenuButton.SelectAction = systemAction;
-            #endregion
+#endregion
 
         }
 
@@ -533,7 +544,7 @@
             }
         }
 
-        #region 娴嬭瘯
+#region 娴嬭瘯
 #if DEBUG
         /// <summary>
         /// 
@@ -608,7 +619,7 @@
 
 #endif
 
-        #endregion
+#endregion
 
         /// <summary>
         /// 鏍囪鎵�鏈夋帹閫佹秷鎭凡璇�
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index 0f3a706..01ae7e2 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -228,7 +228,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = function.collect
             };
-            bodyDiv.AddChidren(btnCollectionIcon);
+            //bodyDiv.AddChidren(btnCollectionIcon);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                bodyDiv.AddChidren(btnCollectionIcon);
+            }
         }
 
         /// <summary>
diff --git a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
index b41b765..3589474 100644
--- a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
@@ -176,7 +176,13 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = scene.collect
             };
-            bodyDiv.AddChidren(btnCollectionIcon);
+            //bodyDiv.AddChidren(btnCollectionIcon);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                bodyDiv.AddChidren(btnCollectionIcon);
+            }
+
             btnIcon.UnSelectedImagePath = "FunctionIcon/Scene/SceneIcon.png";
             if (scene.sceneType == SceneType.MovieScene)
             {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
index 6aa31b3..6f1aa84 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
@@ -69,7 +69,8 @@
             };
             bodyView.AddChidren(topView);
 
-            if (DB_ResidenceData.Instance.GatewayType == 0 || DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            //涓嶆槸A缃戝叧鎴栬�呮槸鎴愬憳 鍙厑璁告坊鍔犲満鏅殣钘忚嚜鍔ㄥ寲
+            if (DB_ResidenceData.Instance.GatewayType != 1 || DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
             {
                 btnSceneTilte = new Button()
                 {
@@ -360,7 +361,12 @@
                     SelectedImagePath = "Collection/CollectionIcon.png",
                     IsSelected = scene.collect,
                 };
-                view.AddChidren(btnCollection);
+                //view.AddChidren(btnCollection);
+                //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+                if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+                {
+                    view.AddChidren(btnCollection);
+                }
                 btnCollection.MouseUpEventHandler = (sender, e) => {
                     scene.collect = btnCollection.IsSelected = !btnCollection.IsSelected;
                     scene.CollectScene();
@@ -479,6 +485,18 @@
             {
                 if (!btnAutomationTitle.IsSelected)
                 {
+                    //濡傛灉鏄垚鍛�
+                    if (DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+                    {
+                        //濡傛灉娌℃湁鍦烘櫙鏉冮檺
+                        if (!DB_ResidenceData.Instance.CurrentRegion.isAllowCreateScene)
+                        {
+                            //鎻愮ず娌℃湁鍦烘櫙鐨勫垱寤烘潈闄�
+                            Utlis.ShowTip(Language.StringByID(StringId.PermissionDenied));
+                            return;
+                        }
+                    }
+
                     Action action = () =>
                     {
                         LoadSceneFunctionControlZone();
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockGesturePage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockGesturePage.cs
index 6afbed5..7fed444 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockGesturePage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockGesturePage.cs
@@ -153,18 +153,17 @@
 
             };
 
-
-            //鍔犺浇搴曢儴楠岃瘉鎸夐挳
-            if (optionType == "5" || optionType == "6")
-            {
-                //杈撳叆鐧诲綍瀵嗙爜楠岃瘉 鎻愮ず鎸夐挳
-                AddInputPasswordTipButton(optionType);
-            }
-            else if (optionType == "7")
+            
+            if (optionType == "7")
             {
                 //浣跨敤璐︽埛瀵嗙爜鐧诲綍鎸夐挳 鎻愮ず鎸夐挳
                 AddLoginTipButton();
             }
+            else if (optionType != "1")
+            {
+                //杈撳叆鐧诲綍瀵嗙爜楠岃瘉 鎻愮ず鎸夐挳
+                AddInputPasswordTipButton(optionType);
+            }
 
 
             //if (optionType == "5" || optionType == "6" || optionType == "7")
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockPasswordPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockPasswordPage.cs
index 9ce773d..4188ad6 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockPasswordPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockPasswordPage.cs
@@ -230,18 +230,16 @@
 
             etPassword.Foucs = true;
 
-            //鍔犺浇搴曢儴楠岃瘉鎸夐挳
-            if (optionType == "3" || optionType == "5" || optionType == "6")
-            {
-                //杈撳叆鐧诲綍瀵嗙爜楠岃瘉 鎻愮ず鎸夐挳
-                AddInputPasswordTipButton(optionType);
-            }
-            else if (optionType == "7")
+            if (optionType == "7")
             {
                 //浣跨敤璐︽埛瀵嗙爜鐧诲綍鎸夐挳 鎻愮ず鎸夐挳
                 AddLoginTipButton();
             }
-
+            else if (optionType != "1")
+            {
+                //杈撳叆鐧诲綍瀵嗙爜楠岃瘉 鎻愮ず鎸夐挳
+                AddInputPasswordTipButton(optionType);
+            }
         }
 
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockSettingsPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockSettingsPageBLL.cs
index 0594119..d045730 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockSettingsPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/UnlockSetting/AppUnlockSettingsPageBLL.cs
@@ -321,76 +321,16 @@
         }
 
         /// <summary>
-        /// 闈㈠ID寮�鍚拰鍏抽棴
+        /// 闈㈠ID楠岃瘉寮圭獥
         /// </summary>
-        void FaceIDVerification_SwtichOnOff()
+        /// <param name="successAction"></param>
+        /// <param name="goToVerifyPasswordAction"></param>
+        void FaceIDVerification_Show(Action successAction, Action goToVerifyPasswordAction)
         {
-            //6:闈㈠ID寮�鍏�
-            string optionType = "6";
-            //4:闈㈠ID
-            string faceIDUnlockType = "4";
+            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+            string verificationTitleString = GetVerificationTitleString();
 
-            //鎴愬姛浜嬩欢
-            Action successAction = () =>
-            {
-                var result = btnFaceIdUnlockSwtichIcon.IsSelected = !btnFaceIdUnlockSwtichIcon.IsSelected;
-                if (result)
-                {
-                    if (!UserInfo.Current.appUnlockType.Contains(faceIDUnlockType))
-                    {
-                        UserInfo.Current.appUnlockType.Add(faceIDUnlockType);
-                        UserInfo.Current.SaveUserInfo();
-                    }
-                }
-                else
-                {
-                    if (UserInfo.Current.appUnlockType.Contains(faceIDUnlockType))
-                    {
-                        UserInfo.Current.appUnlockType.Remove(faceIDUnlockType);
-                        UserInfo.Current.SaveUserInfo();
-                    }
-                }
-            };
-
-            Action fingerAction = () =>
-            {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.VerifyFaceID));
-            };
-            new AppUnlockPage().LoadFaceIDGesturePage(optionType, fingerAction, successAction);
-
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.VerifyFaceID));
-
-            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
-            {
-                if (e == TouchIDUtils.TouchIDState.Success)
-                {
-                    successAction?.Invoke();
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                }
-                else// if (e == TouchIDUtils.TouchIDState.InputPassword || e == TouchIDUtils.TouchIDState.TouchIDLockout)
-                {
-                    ///灏嗛獙璇侀潰瀹笽D鐨勯〉闈㈢Щ闄�
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-
-                    GotogoToVerifyPasswordPage(optionType, refreshAction);
-                }
-            };
-        }
-
-        /// <summary>
-        /// FaceID楠岃瘉 鍏抽棴瑙i攣璁剧疆
-        /// </summary>
-        /// <param name="action">楠岃瘉鎴愬姛浜嬩欢</param>
-        void FaceIDVerification_TurnOffUnlock(Action successAction)
-        {
-            //浣跨敤瀵嗙爜楠岃瘉
-            Action goToVerifyPasswordAction = () =>
-            {
-                //鍏抽棴瑙i攣楠岃瘉
-                GotogoToVerifyPasswordPage("4", successAction);
-            };
-
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.VerifyFaceID));
+            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
             TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
             {
                 if (e == TouchIDUtils.TouchIDState.Success)
@@ -412,75 +352,76 @@
         }
 
         /// <summary>
-        /// 鎸囩汗ID寮�鍚拰鍏抽棴
+        /// 闈㈠ID寮�鍚拰鍏抽棴
         /// </summary>
-        void TouchIDVerification_SwtichOnOff()
+        /// <param name="successAction">楠岃瘉鎴愬姛浜嬩欢</param>
+        void FaceIDVerification_SwtichOnOff()
         {
-            //5:鎸囩汗ID寮�鍏�
-            string optionType = "5";
+            //4:闈㈠ID
+            string faceIDUnlockType = "4";
+            //6:闈㈠ID寮�鍏�
+            string optionType = "6";
             //鎴愬姛浜嬩欢
             Action successAction = () =>
             {
-                var result = btnFingerprintUnlockSwtichIcon.IsSelected = !btnFingerprintUnlockSwtichIcon.IsSelected;
+                var result = btnFaceIdUnlockSwtichIcon.IsSelected = !btnFaceIdUnlockSwtichIcon.IsSelected;
                 if (result)
                 {
-                    if (!UserInfo.Current.appUnlockType.Contains("3"))
+                    if (!UserInfo.Current.appUnlockType.Contains(faceIDUnlockType))
                     {
-                        UserInfo.Current.appUnlockType.Add("3");
+                        UserInfo.Current.appUnlockType.Add(faceIDUnlockType);
                         UserInfo.Current.SaveUserInfo();
                     }
                 }
                 else
                 {
-                    if (UserInfo.Current.appUnlockType.Contains("3"))
+                    if (UserInfo.Current.appUnlockType.Contains(faceIDUnlockType))
                     {
-                        UserInfo.Current.appUnlockType.Remove("3");
+                        UserInfo.Current.appUnlockType.Remove(faceIDUnlockType);
                         UserInfo.Current.SaveUserInfo();
                     }
                 }
             };
-
-
-            Action fingerAction = () =>
+            
+            //璺宠浆鏁板瓧瀵嗙爜鎴栬�呮墜鍔垮瘑鐮侀獙璇侀〉闈�
+            Action goToVerifyPasswordAction = () =>
             {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+                //鍏抽棴瑙i攣楠岃瘉
+                GotogoToVerifyPasswordPage(optionType, successAction);
             };
-            new AppUnlockPage().LoadGesturePage(optionType, fingerAction, successAction);
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+            FaceIDVerification_Show(successAction, goToVerifyPasswordAction);
 
-            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
-            {
-                if (e == TouchIDUtils.TouchIDState.Success)
-                {
-                    successAction?.Invoke();
-
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                }
-                else// if (e == TouchIDUtils.TouchIDState.InputPassword || e == TouchIDUtils.TouchIDState.TouchIDLockout)
-                {
-                    ///灏嗛獙璇佹寚绾笽D鐨勯〉闈㈢Щ闄�
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                    
-                    GotogoToVerifyPasswordPage(optionType, refreshAction);
-                }
-            };
         }
 
         /// <summary>
-        /// TouchID楠岃瘉 鍏抽棴瑙i攣璁剧疆
+        /// FaceID楠岃瘉 鍏抽棴瑙i攣璁剧疆
         /// </summary>
         /// <param name="action">楠岃瘉鎴愬姛浜嬩欢</param>
-        void TouchIDVerification_TurnOffUnlock(Action successAction)
+        void FaceIDVerification_TurnOffUnlock(Action successAction)
         {
-            //浣跨敤瀵嗙爜楠岃瘉
+            //璋冩暣鏁板瓧瀵嗙爜鎴栬�呮墜鍔垮瘑鐮侀獙璇侀〉闈�
             Action goToVerifyPasswordAction = () =>
             {
                 //鍏抽棴瑙i攣楠岃瘉
                 GotogoToVerifyPasswordPage("4", successAction);
             };
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(null, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+            FaceIDVerification_Show(successAction, goToVerifyPasswordAction);
+        }
+
+        /// <summary>
+        /// 鎸囩汗ID缁熶竴寮瑰嚭
+        /// </summary>
+        /// <param name="optionType"></param>
+        /// <param name="successAction"></param>
+        /// <param name="goToVerifyPasswordAction"></param>
+        void TouchIDVerification_Show(Action successAction, Action goToVerifyPasswordAction)
+        {
+            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+            string verificationTitleString = GetVerificationTitleString();
+
+            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
             TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
             {
                 if (e == TouchIDUtils.TouchIDState.NotSupport)
@@ -503,6 +444,63 @@
         }
 
         /// <summary>
+        /// 鎸囩汗ID寮�鍚拰鍏抽棴 5:鎸囩汗ID寮�鍏�
+        /// </summary>
+        void TouchIDVerification_SwtichOnOff()
+        {
+            //鎸囩汗鍏抽棴鎴愬姛浜嬩欢 鎴愬姛浜嬩欢
+            Action successAction = () =>
+            {
+                var result = btnFingerprintUnlockSwtichIcon.IsSelected = !btnFingerprintUnlockSwtichIcon.IsSelected;
+                if (result)
+                {
+                    if (!UserInfo.Current.appUnlockType.Contains("3"))
+                    {
+                        UserInfo.Current.appUnlockType.Add("3");
+                        UserInfo.Current.SaveUserInfo();
+                    }
+                }
+                else
+                {
+                    if (UserInfo.Current.appUnlockType.Contains("3"))
+                    {
+                        UserInfo.Current.appUnlockType.Remove("3");
+                        UserInfo.Current.SaveUserInfo();
+                    }
+                }
+            };
+
+            //5:鎸囩汗ID寮�鍏�
+            string optionType = "5";
+            //璺宠浆鏁板瓧瀵嗙爜鎴栬�呮墜鍔垮瘑鐮侀獙璇侀〉闈�
+            Action goToVerifyPasswordAction = () =>
+            {
+                //5:鎸囩汗ID寮�鍏�
+                GotogoToVerifyPasswordPage(optionType, successAction);
+            };
+
+            
+
+            TouchIDVerification_Show(successAction, goToVerifyPasswordAction);
+        }
+
+        /// <summary>
+        /// TouchID楠岃瘉 4:鍏抽棴瑙i攣璁剧疆
+        /// </summary>
+        /// <param name="action">楠岃瘉鎴愬姛浜嬩欢</param>
+        void TouchIDVerification_TurnOffUnlock(Action successAction)
+        {
+            //璺宠浆鏁板瓧瀵嗙爜鎴栬�呮墜鍔垮瘑鐮侀獙璇侀〉闈�
+            Action goToVerifyPasswordAction = () =>
+            {
+                //4.鍏抽棴瑙i攣楠岃瘉
+                GotogoToVerifyPasswordPage("4", successAction);
+            };
+
+            TouchIDVerification_Show(successAction, goToVerifyPasswordAction);
+        }
+
+        /// <summary>
         /// 璺宠浆鎵嬪娍鎴栬�呭瘑鐮侀獙璇佺晫闈�
         /// </summary>
         /// <param name="optionType">1:璁剧疆瀵嗙爜锛�2:楠岃瘉瀵嗙爜;3:鍏抽棴瀵嗙爜;4:鍏抽棴瑙i攣璁剧疆;5:鎸囩汗ID寮�鍏筹紱6:闈㈠ID寮�鍏�;7:瑙i攣楠岃瘉</param>
@@ -524,5 +522,30 @@
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
             }
         }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+        /// </summary>
+        /// <returns></returns>
+        bool CheckIfUnlockPassword()
+        {
+            return UserInfo.Current.appUnlockType.Contains("1");
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+        /// </summary>
+        /// <returns></returns>
+        string GetVerificationTitleString()
+        {
+            if (CheckIfUnlockPassword())
+            {
+                return Language.StringByID(StringId.PasswordVerification);
+            }
+            else
+            {
+                return Language.StringByID(StringId.GestureVerification);
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs b/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
index cff9ed0..9f79e80 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/AC/ACPage.cs
@@ -134,7 +134,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = aC.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             arcBar = new DiyArcSeekBar()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePage.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePage.cs
index b2a2baa..661eb0e 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePage.cs
@@ -108,7 +108,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = curtain.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             btnCurtainBgIcon = new Button()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPage.cs
index 08c6e23..203fa6d 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPage.cs
@@ -121,7 +121,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = curtain.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             curtainSeekBar = new CurtainSeekBarOn()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPage.cs
index b0e0323..1e3b358 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPage.cs
@@ -122,7 +122,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = curtain.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             curtainSeekBar = new CurtainRollSeekBarOn()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPage.cs
index 4a9cbe5..7d8c20e 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPage.cs
@@ -101,7 +101,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = fan.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             btnSwitchIcon = new Button()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
index 2af08c2..8c2b3dc 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
@@ -100,7 +100,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = socketFunction.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             btnSwitchIcon = new Button()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPage.cs
index ab7f520..737c59b 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPage.cs
@@ -113,8 +113,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = tv.collect
             };
-            controlView.AddChidren(btnCollection);
-
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             btnChangeTVAV = new Button()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs
index c995824..399351c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePage.cs
@@ -368,9 +368,9 @@
             if (room.roomId == "" ||  sensor.roomIds.Contains(room.roomId))
             {
                 var sensorTag = sensor.sid;
-                if (sensor.bus_Data != null)
+                if (sensor.bus != null)
                 {
-                    sensorTag = ((int)sensor.functionType % 256) + "_" + sensor.bus_Data.SubnetID + "_" + sensor.bus_Data.DeviceID + "_" + sensor.bus_Data.loopId;
+                    sensorTag = ((int)sensor.functionType % 256) + "_" + sensor.bus.SubnetID + "_" + sensor.bus.DeviceID + "_" + sensor.bus.loopId;
                 }
                 FrameLayout sensorView = new FrameLayout()
                 {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePageBLL.cs
index aaaeae3..2139c22 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSciencePageBLL.cs
@@ -19,9 +19,9 @@
                     for (int i = 0; i < bodyView.sensorListView.ChildrenCount; i++)
                     {
                         var sensorTag = sensor.sid;
-                        if (sensor.bus_Data != null)
+                        if (sensor.bus != null)
                         {
-                            sensorTag = ((int)sensor.functionType % 256) + "_" + sensor.bus_Data.SubnetID + "_" + sensor.bus_Data.DeviceID + "_" + sensor.bus_Data.loopId;
+                            sensorTag = ((int)sensor.functionType % 256) + "_" + sensor.bus.SubnetID + "_" + sensor.bus.DeviceID + "_" + sensor.bus.loopId;
                         }
                         var view = bodyView.sensorListView.GetChildren(i);
                         if (view.GetType() == typeof(FrameLayout))
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
index 15307dc..c382507 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -904,8 +904,8 @@
                             i++;
                             continue;
                         }
-                        var revertObj = new HttpServerRequest().GetSensorHistory(sr.bus_Data.SubnetID, sr.bus_Data.DeviceID,
-                               5, (int)(sr.functionType) % 256, (int)curQueryType, sr.bus_Data.loopId, curMonth,
+                        var revertObj = new HttpServerRequest().GetSensorHistory(sr.bus.SubnetID, sr.bus.DeviceID,
+                               5, (int)(sr.functionType) % 256, (int)curQueryType, sr.bus.loopId, curMonth,
                                DB_ResidenceData.Instance.residenceGatewayMAC);
 
                         if (revertObj != null)
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
index 25eeb06..0b35fe5 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
@@ -130,7 +130,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = fh.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             arcBar = new DiyArcSeekBar()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs
index d87f2d4..bf0f284 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPage.cs
@@ -123,7 +123,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = light.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             dimmerBar = new WaveSeekBarOn()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
index 0162525..4055b10 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
@@ -134,7 +134,12 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = light.collect
             };
-            controlView.AddChidren(btnCollection);
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
 
             colorPicker = new ColorPicker()
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPage.cs
index ad0df54..4829203 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPage.cs
@@ -122,8 +122,13 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = light.collect
             };
-            controlView.AddChidren(btnCollection);
-            
+            //controlView.AddChidren(btnCollection);
+            //2020-12-16 濡傛灉鏄垚鍛橀殣钘忔敹钘忓姛鑳�
+            if (!DB_ResidenceData.Instance.CurrentRegion.IsOthreShare)
+            {
+                controlView.AddChidren(btnCollection);
+            }
+
             btnSwitchIcon = new Button()
             {
                 Gravity = Gravity.CenterHorizontal,

--
Gitblit v1.8.0