From 3aa397ab145382935492b11c1f18c9634e69910b Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 10 十二月 2020 16:45:00 +0800
Subject: [PATCH] 请合并,门锁和晾衣架第一版代码

---
 ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs | 2117 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 1,061 insertions(+), 1,056 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs b/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
old mode 100755
new mode 100644
index 41140ca..e3c9632
--- a/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
+++ b/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
@@ -8,1062 +8,1067 @@
 using ZigBee.Device;
 
 namespace Shared.Phone.Category
-{
+{
+  /// <summary>
+  /// 鍒嗙被鐨勪富鐣岄潰
+  /// </summary>
+  public class CategoryMainForm : EditorCommonForm
+  {
+    #region 鈻� 鍙橀噺澹版槑___________________________
+
     /// <summary>
-    /// 鍒嗙被鐨勪富鐣岄潰
+    /// The instance.
     /// </summary>
-    public class CategoryMainForm : EditorCommonForm
-    {
-        #region 鈻� 鍙橀噺澹版槑___________________________
-
-        /// <summary>
-        /// The instance.
-        /// </summary>
-        public static CategoryMainForm instance;
-        /// <summary>
-        /// 鍦烘櫙鍔熻兘涓儴鑳屾櫙bodyView(楂樺害涓鸿澶囪彍鍗曠殑閭d釜鐧借壊鑳屾櫙鐨勪笂閮ㄥ埌灞忓箷搴曢儴)
-        /// </summary>
-        public NormalFrameLayout functionSceneBodyView;
-        /// <summary>
-        /// 涓儴鑳屾櫙bodyView(楂樺害涓哄満鏅姛鑳藉垏鎹㈡帶浠剁殑搴曢儴鍒板睆骞曞簳閮�)
-        /// </summary>
-        public NormalFrameLayout functionSceneAutoBodyView;
-        /// <summary>
-        /// 鍙充笂瑙掓坊鍔犳寜閽�
-        /// </summary>
-        private IconViewControl btnTopRightAdd = null;
-        /// <summary>
-        /// 妤煎眰鎺т欢
-        /// </summary>
-        private NormalViewControl btnFloorName = null;
-        /// <summary>
-        /// 妤煎眰鍥炬爣鎺т欢
-        /// </summary>
-        private IconViewControl btnFloorIcon = null;
-        /// <summary>
-        /// 璁惧琛屾帶浠�
-        /// </summary>
-        private Dictionary<string, Controls.DeviceRowCommon> dicDeviceRowControl = new Dictionary<string, Controls.DeviceRowCommon>();
-
-        #endregion
-
-        #region 鈻� 鍒濆鍖朹____________________________
-
-        /// <summary>
-        /// 鏋勯�犳柟娉�
-        /// </summary>
-        public CategoryMainForm()
-        {
-            this.FormID = "CategoryMainForm";
-            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
-            instance = this;
-        }
-
-        /// <summary>
-        /// 鏄剧ず鐣岄潰--榛樿鍦烘櫙鐣岄潰
-        /// </summary>
-        public void ShowForm()
-        {
-            //鍏堟竻闄ゅ惂
-            this.RemoveAll();
-
-            //鍒濆鍖栧ご閮ㄦ帶浠�
-            this.InitTopControl();
-            //鍒濆鍖栦腑闂存帶浠�
-            this.InitMidControls();
-            //娣诲姞璁惧鐘舵�佷笂鎶ヤ簨浠�
-            this.AddNormalDeviceReportEvent();
-            //娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
-            this.AddSensorDeviceReportEvent();
-            //寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
-            this.StartRecoverSenorStatuThread();
-        }
-
-        /// <summary>
-        /// 鍒濆鍖栧ご閮ㄦ帶浠�
-        /// </summary>
-        private void InitTopControl()
-        {
-            //澶撮儴FrameLayout
-            this.topFrameLayout = new NormalFrameLayout();
-            topFrameLayout.Y = Application.GetRealHeight(104);
-            topFrameLayout.Height = Application.GetRealHeight(127);
-            topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
-            this.AddChidren(topFrameLayout);
-            //鏍囬鍒嗙被
-            var btnTitle = new NormalViewControl(300, 95, true);
-            btnTitle.X = ControlCommonResourse.XXLeft;
-            btnTitle.Gravity = Gravity.CenterVertical;
-            btnTitle.TextID = R.MyInternationalizationString.Category;
-            btnTitle.TextSize = 24;
-            btnTitle.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
-            btnTitle.IsBold = true;
-            topFrameLayout.AddChidren(btnTitle);
-
-            //鍙充笂瑙掓坊鍔犳寜閽�
-            this.btnTopRightAdd = new IconViewControl(104);
-            btnTopRightAdd.X = Application.GetRealWidth(953);
-            btnTopRightAdd.Gravity = Gravity.CenterVertical;
-            btnTopRightAdd.UnSelectedImagePath = "Item/Add_Category.png";
-            topFrameLayout.AddChidren(btnTopRightAdd);
-            btnTopRightAdd.ButtonClickEvent += (sender, e) =>
-            {
-                if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
-                {
-                    //娣诲姞鍦烘櫙
-                    var form = new AddOrEditorSceneForm();
-                    form.AddForm(new object[] { null });
-                    form.SceneChangedEvent += (scene, roomId) =>
-                    {
-                        //鍒锋柊bodyView
-                        this.RefreshBodyView();
-                    };
-                }
-                else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2)
-                {
-                    //娣诲姞鑷姩鍖�
-                    Device.Logic.SkipView.SkipAddLogic(0);
-                }
-            };
-        }
-
-        /// <summary>
-        /// 鍒濆鍖栦腑闂存帶浠�
-        /// </summary>
-        private void InitMidControls()
-        {
-            //搴旇鏄痓ody鍚�
-            this.bodyFrameLayout = new NormalFrameLayout();
-            bodyFrameLayout.Y = topFrameLayout.Bottom;
-            bodyFrameLayout.Height = this.Height - topFrameLayout.Bottom;
-            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
-            this.AddChidren(bodyFrameLayout);
-
-            //鍦烘櫙,鍔熻兘,鑷姩鍖栫殑鍒囨崲鎺т欢鐨勫鍣�
-            var frameSwitchBack = new FrameLayout();
-            frameSwitchBack.Height = Application.GetRealHeight(127);
-            bodyFrameLayout.AddChidren(frameSwitchBack);
-
-            //鎷ユ湁妤煎眰鏃�
-            this.btnFloorName = null;
-            this.btnFloorIcon = null;
-            if (Config.Instance.Home.FloorDics.Count > 0)
-            {
-                //妤煎眰鍚�
-                this.btnFloorName = new NormalViewControl(200, 69, true);
-                btnFloorName.X = frameSwitchBack.Width - Application.GetRealWidth(200 + 120);
-                btnFloorName.Y = Application.GetRealHeight(17);
-                btnFloorName.TextAlignment = TextAlignment.CenterRight;
-                btnFloorName.IsBold = true;
-                btnFloorName.Text = Common.Config.Instance.Home.GetCurrentFloorName;
-                frameSwitchBack.AddChidren(btnFloorName);
-                btnFloorName.ButtonClickEvent += (sender, e) =>
-                {
-                    var floors = new SelectFloorForm();
-                    floors.CurFloorId = Config.Instance.Home.CurrentFloorId;
-                    AddChidren(floors);
-                    floors.Init(580, 330, Direction.Right);
-                    floors.FloorAction += (floorId) =>
-                    {
-                        btnFloorName.Text = HdlResidenceLogic.Current.GetFloorNameById(floorId);
-                        Config.Instance.Home.CurrentFloorId = floorId;
-                        HdlRoomLogic.Current.NowCategoryRoom = HdlRoomLogic.Current.GetLoveRoom();
-                        //杩欎釜鏃跺�欓渶瑕佸埛鏂颁富椤�
-                        UserPage.Instance.RefreshMainPageForm = true;
-                        //鍒锋柊bodyView
-                        this.RefreshBodyView();
-                    };
-                };
-                //妤煎眰鍥炬爣
-                this.btnFloorIcon = new IconViewControl(69);
-                btnFloorIcon.X = Application.GetRealWidth(950);
-                btnFloorIcon.Y = Application.GetRealHeight(17);
-                btnFloorIcon.UnSelectedImagePath = "Item/Drop_Down.png";
-                frameSwitchBack.AddChidren(btnFloorIcon);
-                btnFloorIcon.ButtonClickEvent += (sender, e) =>
-                {
-                    btnFloorName.ButtonClickEvent?.Invoke(sender, e);
-                };
-            }
-
-            //鐩墠涓嶇煡閬撻儹闆煄鐨勮繖涓叿浣撴斁鍦ㄥ摢涓殑浣嶇疆
-            this.functionSceneAutoBodyView = new NormalFrameLayout();
-            functionSceneAutoBodyView.Y = frameSwitchBack.Bottom;
-            functionSceneAutoBodyView.Height = bodyFrameLayout.Height - frameSwitchBack.Bottom;
-            bodyFrameLayout.AddChidren(functionSceneAutoBodyView);
-
-            //鍦烘櫙,鍔熻兘,鑷姩鍖栫殑鍒囨崲鎺т欢
-            var switchContr = new SceneFunctionSwitchControl();
-            switchContr.Y = Application.GetRealHeight(40);
-            switchContr.Width = Application.GetRealWidth(650);
-            switchContr.Gravity = Gravity.CenterVertical;
-            frameSwitchBack.AddChidren(switchContr);
-            var listTitle = new List<string>();
-            listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence));
-            listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction));
-            if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
-            {
-                //鎴愬憳娌℃湁鑷姩鍖�
-                listTitle.Add(Language.StringByID(R.MyInternationalizationString.Automation));
-            }
-            //璁剧疆鍒濆鍊�
-            switchContr.SetDefultIndex(UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex);
-            //閫夋嫨浜嬩欢
-            switchContr.SelectTabEvent += (selectIndex) =>
-            {
-                UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex = selectIndex;
-                if (selectIndex == 2)
-                {
-                    Common.Logic.LogicDviceList.Clear();
-                    if (Common.Logic.LogicDviceList.Count == 0)
-                    {
-                        Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray());
-                    }
-                }
-                //鍒锋柊bodyView
-                this.RefreshBodyView();
-            };
-            //寮�濮嬪垵濮嬪寲
-            switchContr.InitControl(listTitle);
-        }
-
-        /// <summary>
-        /// 鍒锋柊bodyView
-        /// </summary>
-        public void RefreshBodyView()
-        {
-            this.functionSceneAutoBodyView.RemoveAll();
-
-            HdlThreadLogic.Current.RunMainInThread(() =>
-            {
-                bool floorVisible = true;
-                //鍦烘櫙
-                if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
-                {
-                    //鍒濆鍖栨埧闂磋彍鍗�
-                    this.InitRoomMenuControl();
-                    //鏄剧ず鍙充笂瑙掔殑鍔犲彿
-                    this.btnTopRightAdd.Visible = true;
-                }
-                //鍔熻兘
-                else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1)
-                {
-                    //鍒濆鍖栨埧闂磋彍鍗�
-                    this.InitRoomMenuControl();
-                    //闅愯棌鍙充笂瑙掔殑鍔犲彿
-                    this.btnTopRightAdd.Visible = false;
-                }
-                //鑷姩鍖�
-                else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2)
-                {
-                    //鑷姩鍖栧姛鑳戒唬鐮佸叆鍙�
-                    Device.Logic.SkipView.ShowAutotionView(functionSceneAutoBodyView);
-                    //闅愯棌妤煎眰
-                    floorVisible = false;
-                    //鏄剧ず鍙充笂瑙掔殑鍔犲彿
-                    this.btnTopRightAdd.Visible = true;
-                }
-
-                //淇敼妤煎眰鐨勬樉绀烘晥鏋�
-                if (this.btnFloorName != null)
-                {
-                    this.btnFloorName.Visible = floorVisible;
-                    this.btnFloorIcon.Visible = floorVisible;
-                }
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 鎴块棿鑿滃崟鎺т欢_______________________
-
-        /// <summary>
-        /// 鍒濆鍖栨埧闂磋彍鍗曟帶浠�
-        /// </summary>
-        private void InitRoomMenuControl()
-        {
-            //褰撳墠妤煎眰鐨勫叏閮ㄦ埧闂�
-            var lisrRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
-            if (HdlRoomLogic.Current.NowCategoryRoom == null)
-            {
-                //璁剧疆绗竴涓负鍒濆鎴块棿
-                HdlRoomLogic.Current.NowCategoryRoom = lisrRoom[0];
-            }
-            //鎴块棿鑿滃崟鎺т欢
-            var roomSwitchContr = new RoomDeviceGroupMenuControl(lisrRoom);
-            roomSwitchContr.Y = Application.GetRealHeight(-55);
-            this.functionSceneAutoBodyView.AddChidren(roomSwitchContr);
-            //璁剧疆鍒濆鍊�
-            roomSwitchContr.SetDefultIndex(HdlRoomLogic.Current.NowCategoryRoom.Id);
-            //閫夋嫨浜嬩欢
-            roomSwitchContr.SelectRoomEvent += (selectRoom) =>
-            {
-                HdlRoomLogic.Current.NowCategoryRoom = selectRoom;
-                //鍦烘櫙
-                if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
-                {
-                    //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
-                    this.functionSceneBodyView.RemoveAll();
-                    HdlThreadLogic.Current.RunMainInThread(() =>
-                    {
-                        //鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
-                        this.RefreshSceneView(selectRoom);
-                    });
-                }
-                //鍔熻兘
-                else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1)
-                {
-                    //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
-                    this.functionSceneBodyView.RemoveAll();
-                    HdlThreadLogic.Current.RunMainInThread(() =>
-                    {
-                        //鍒锋柊璁惧鍒嗘敮鎺т欢
-                        this.RefreshFunctionView(selectRoom);
-                    });
-                }
-            };
-
-            //鍔熻兘鍜屽満鏅痓odyView
-            this.functionSceneBodyView = new NormalFrameLayout();
-            functionSceneBodyView.Y = roomSwitchContr.Bottom;
-            functionSceneBodyView.Height = functionSceneAutoBodyView.Height - roomSwitchContr.Bottom;
-            functionSceneAutoBodyView.AddChidren(functionSceneBodyView);
-
-            //鎵ц鍒濆鍖� 
-            roomSwitchContr.InitControl();
-        }
-
-        #endregion
-
-        #region 鈻� 鍔熻兘鍒嗘敮___________________________
-
-        /// <summary>
-        /// 鍒锋柊鍔熻兘鍒嗘敮鎺т欢
-        /// </summary>
-        /// <param name="room"></param>
-        private void RefreshFunctionView(Common.Room room)
-        {
-            //鑾峰彇鍒嗙粍鍚庣殑璁惧
-            var dicGroupDevice = this.GetAllGroupDevice(room);
-            if (dicGroupDevice.Count == 0)
-            {
-                //娌℃湁鍔熻兘{0}璇峰湪涓汉涓績--璁惧绠$悊澶勬坊鍔�
-                string[] arryMsg = Language.StringByID(R.MyInternationalizationString.NoFunction).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
-                this.ShowNotDataImage(functionSceneBodyView, arryMsg);
-                return;
-            }
-
-            //璁惧鑿滃崟鐨勭櫧鑹茶儗鏅�
-            var functionBack1 = new FrameLayout();
-            functionBack1.X = ControlCommonResourse.XXLeft;
-            functionBack1.Height = Application.GetRealHeight(160);
-            functionBack1.Width = Application.GetRealWidth(1028);
-            functionBack1.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
-            functionSceneBodyView.AddChidren(functionBack1);
-            functionBack1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
-            var functionBack2 = new FrameLayout();
-            functionBack2.X = ControlCommonResourse.XXLeft;
-            functionBack2.Y = functionBack1.Bottom - Application.GetRealHeight(50);
-            functionBack2.Height = Application.GetRealHeight(279 - 160 + 50);
-            functionBack2.Width = Application.GetRealWidth(1028);
-            functionBack2.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
-            functionSceneBodyView.AddChidren(functionBack2);
-            functionBack2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
-
-            //璁惧鑿滃崟鐨勫乏鍙虫粦鍔ㄧ殑鎺т欢
-            var HorizontalView = new HorizontalScrolViewLayout();
-            HorizontalView.X = Application.GetRealWidth(CommonFormResouce.X_Left);
-            HorizontalView.Height = Application.GetRealHeight(279);
-            HorizontalView.Width = Application.GetRealWidth(1028);
-            functionSceneBodyView.AddChidren(HorizontalView);
-
-            //璁惧鐨勮儗鏅鍣�
-            var frameDeviceBack = new FrameLayout();
-            frameDeviceBack.X = ControlCommonResourse.XXLeft;
-            frameDeviceBack.Y = HorizontalView.Bottom + Application.GetRealHeight(35);
-            frameDeviceBack.BackgroundColor = UserCenterColor.Current.White;
-            frameDeviceBack.Width = bodyFrameLayout.Width;
-            frameDeviceBack.Height = functionSceneBodyView.Height - HorizontalView.Bottom - Application.GetRealHeight(35);
-            frameDeviceBack.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
-            functionSceneBodyView.AddChidren(frameDeviceBack);
-
-            //璁惧鍒楄〃鎺т欢
-            var listDeviceView = new VerticalListControl(35);
-            listDeviceView.Y = Application.GetRealHeight(11);
-            listDeviceView.Width = Application.GetRealWidth(1022);
-            listDeviceView.Height = frameDeviceBack.Height - Application.GetRealHeight(11);
-            listDeviceView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
-            frameDeviceBack.AddChidren(listDeviceView);
-
-            //涓婁竴娆¢�夋嫨鐨勮彍鍗�
-            MainPage.Controls.DeviceFunctionUnallocatedControl oldSelectContr = null;
-            DeviceRowInfo nowSelectDeviceInfo = null;
-            foreach (string strText in dicGroupDevice.Keys)
-            {
-                var rowInfo = dicGroupDevice[strText];
-
-                //璁惧绫诲瀷鐨勫鍣�
-                var devieFrame = new FrameLayout();
-                devieFrame.Width = Application.GetRealWidth(220);
-                HorizontalView.AddChidren(devieFrame);
-
-                //鑿滃崟鍥剧墖鎺т欢
-                var deviceObjContr = new MainPage.Controls.DeviceFunctionUnallocatedControl();
-                devieFrame.AddChidren(deviceObjContr);
-                deviceObjContr.InitControl(strText, rowInfo.IconPath, rowInfo.IconPathSelected, rowInfo.listDeviceKeys);
-                deviceObjContr.ButtonClickEvent += (sender, e) =>
-                {
-                    //閫夋嫨鐨勬槸鍚屼竴涓笢瑗跨殑璇�,涓嶅鐞�
-                    if (nowSelectDeviceInfo.Text != rowInfo.Text)
-                    {
-                        //涓婁竴娆$殑鑿滃崟鍙栨秷,鏈鑿滃崟閫夋嫨
-                        oldSelectContr.SetSelectStatu(false);
-                        deviceObjContr.SetSelectStatu(true);
-                        oldSelectContr = deviceObjContr;
-
-                        nowSelectDeviceInfo = rowInfo;
-                        HdlThreadLogic.Current.RunMainInThread(() =>
-                        {
-                            //鍒濆鍖栬澶囧垪琛ㄦ帶浠�
-                            this.InitListDeviceControls(listDeviceView, rowInfo, room);
-                        });
-                    }
-                };
-
-                if (nowSelectDeviceInfo == null)
-                {
-                    //璁剧疆鍒濆閫夋嫨
-                    nowSelectDeviceInfo = rowInfo;
-                    //璁板綍鍒濆閫夋嫨鐨勮彍鍗曟帶浠�
-                    oldSelectContr = deviceObjContr;
-                    deviceObjContr.SetSelectStatu(true);
-                }
-            }
-            if (nowSelectDeviceInfo != null)
-            {
-                //鍒濆鍖栭粯璁ょ殑璁惧鍒楄〃鎺т欢
-                this.InitListDeviceControls(listDeviceView, nowSelectDeviceInfo, room);
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 鍒濆鍖栬澶囧垪琛ㄦ帶浠禵________________
-
-        /// <summary>
-        /// 鍒濆鍖栬澶囧垪琛ㄦ帶浠�
-        /// </summary>
-        /// <param name="listView"></param>
-        /// <param name="rowInfo"></param>
-        private void InitListDeviceControls(VerticalListControl listView, DeviceRowInfo rowInfo, Room i_room)
-        {
-            //鍏堟竻绌�
-            listView.RemoveAll();
-            this.dicDeviceRowControl = new Dictionary<string, Controls.DeviceRowCommon>();
-
-            var listDevice = new List<CommonDevice>();
-            for (int i = 0; i < rowInfo.listDeviceKeys.Count; i++)
-            {
-                var device = LocalDevice.Current.GetDevice(rowInfo.listDeviceKeys[i]);
-
-                //鑾峰彇璁惧绫诲瀷鐨�
-                var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
-                //鏂伴闈㈡澘涓嬬殑鍥炶矾涓嶆樉绀猴紝锛堝鏂伴銆佹俯/婀垮害浼犳劅鍣ㄥ垯涓嶆樉绀猴級
-                if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir)
-                {
-                    continue;
-                }
-
-                if (device != null)
-                {
-                    listDevice.Add(device);
-                }
-                else
-                {
-                    rowInfo.listDeviceKeys.RemoveAt(i);
-                    i--;
-                }
-            }
-
-            HdlThreadLogic.Current.RunMain(() =>
-            {
-                var listContr = new List<Controls.DeviceRowCommon>();
-                foreach (var device in listDevice)
-                {
-                    Controls.DeviceRowCommon cardContr = null;
-                    //绐楀笜
-                    if (device.Type == DeviceType.WindowCoveringDevice)
-                    {
-                        cardContr = new Controls.DeviceCurtainRowControl();
-                    }
-                    //缁х數鍣�
-                    else if (device.Type == DeviceType.OnOffOutput)
-                    {
-                        cardContr = new Controls.DeviceRelayRowControl();
-                    }
-                    //绌烘皵寮�鍏�
-                    else if (device.Type == DeviceType.AirSwitch)
-                    {
-                        cardContr = new Controls.DeviceAirSwitchRowControl();
-                    }
-                    //绌鸿皟
-                    else if (device.Type == DeviceType.Thermostat)
-                    {
-                        cardContr = new Controls.DeviceAcRowControl();
-                    }
-                    // 鏂伴
-                    else if (device.Type == DeviceType.FreshAir)
-                    {
-                        cardContr = new Controls.DeviceFreshAirRowControl();
-                    }
-                    // PM2.5
-                    else if (device.Type == DeviceType.PMSensor)
-                    {
-                        cardContr = new Controls.DevicePmSensorRowControl();
-                    }
-                    //褰╃伅(璋冨厜鍣�)
-                    else if (device.Type == DeviceType.DimmableLight)
-                    {
-                        cardContr = new Controls.DeviceColorLightRowControl();
-                    }
-                    //浼犳劅鍣�
-                    else if (device.Type == DeviceType.IASZone)
-                    {
-                        cardContr = new Controls.DeviceSensorRowControl();
-                    }
-                    //娓╂箍搴�
-                    else if (device.Type == DeviceType.TemperatureSensor)
-                    {
-                        cardContr = new Controls.DeviceTemperatureRowControl();
-                    }
-                    //闂ㄩ攣
-                    else if (device.Type == DeviceType.DoorLock)
-                    {
-                        cardContr = new Controls.DeviceDoorLockRowControl();
-                    }
-                    //鑹叉俯鐏�
-                    else if (device.Type == DeviceType.ColorTemperatureLight)
-                    {
-                        cardContr = new Controls.DeviceColorTemperatureRowControl();
-                    }
-                    //鏃犳硶璇嗗埆
-                    else
-                    {
-                        cardContr = new Controls.DeviceRowCommon();
-                        //娌℃湁鐘舵�佸姛鑳�
-                        cardContr.hadStatuFunction = false;
-                    }
-                    cardContr.chidrenYaxis = listView.rowSpace / 2;
-                    //鍒濆鍖栧崱鐗�
-                    listView.AddChidren(cardContr);
-                    cardContr.InitControl(device, HdlRoomLogic.Current.NowCategoryRoom);
-                    //鎺т欢璁板綍鍒扮紦瀛樹腑
-                    this.dicDeviceRowControl[LocalDevice.Current.GetDeviceMainKeys(device)] = cardContr;
-                    //鍔犵紦瀛�,鐒跺悗鍙戝懡浠�
-                    listContr.Add(cardContr);
-                    //鎺т欢琚Щ闄ょ殑鍥炶皟鍑芥暟
-                    cardContr.RowNeedRemoveEvent += () =>
-                    {
-                        string myKeys = LocalDevice.Current.GetDeviceMainKeys(cardContr.device);
-                        rowInfo.listDeviceKeys.Remove(myKeys);
-                        this.dicDeviceRowControl.Remove(myKeys);
-
-                        if (rowInfo.listDeviceKeys.Count == 0)
-                        {
-                            //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
-                            this.functionSceneBodyView.RemoveAll();
-                            HdlThreadLogic.Current.RunMainInThread(() =>
-                            {
-                                //鍒锋柊璁惧鍒嗘敮鎺т欢
-                                this.RefreshFunctionView(i_room);
-                            });
-                        }
-                    };
-                }
-                HdlThreadLogic.Current.RunThread(() =>
-                {
-                    while (listView.Parent != null)
-                    {
-                        bool hadSend = false;
-                        for (int i = 0; i < listContr.Count; i++)
-                        {
-                            if (listView.Parent == null)
-                            {
-                                return;
-                            }
-                            //濡傛灉杩樻病鏈夋帴鏀跺埌鏁版嵁,鍒欏啀娆″彂閫�
-                            if (listContr[i].ReceiveResponeResultStatu() == false)
-                            {
-                                //鍙戦�佽幏鍙栫姸鎬佺殑鍛戒护
-                                listContr[i].SendStatuComand();
-                                hadSend = true;
-                                System.Threading.Thread.Sleep(200);
-                            }
-                        }
-                        if (hadSend == false)
-                        {
-                            //濡傛灉宸茬粡鍏ㄩ儴鍥炶矾閮芥帴鏀朵簡缃戝叧鍥炲,鍒欎笉鍐嶄簩娆″彂閫�
-                            break;
-                        }
-                        System.Threading.Thread.Sleep(2000);
-                    }
-
-                }, ShowErrorMode.NO);
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 鍦烘櫙鍒嗘敮___________________________
-
-        /// <summary>
-        /// 鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
-        /// </summary>
-        /// <param name="room"></param>
-        private void RefreshSceneView(Room room)
-        {
-            //涓讳汉锛岀鐞嗗憳涓撶敤鍒锋柊鎺т欢
-            VerticalListRefreshControl listview1 = null;
-            //鎴愬憳涓撶敤涓嶈兘鍒锋柊鐨勬帶浠�
-            VerticalListControl listview2 = null;
-            if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
-            {
-                //涓讳汉锛岀鐞嗗憳涓撶敤鍒锋柊鎺т欢
-                listview1 = new VerticalListRefreshControl();
-                functionSceneBodyView.AddChidren(listview1);
-                //涓嬫媺鍒锋柊
-                listview1.BeginHeaderRefreshingAction += () =>
-                {
-                    //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�,鍒欏彧缁欎釜鐗规晥
-                    if (Common.Config.Instance.Home.IsVirtually == true)
-                    {
-                        HdlThreadLogic.Current.RunThread(() =>
-                        {
-                            System.Threading.Thread.Sleep(1500);
-                            HdlThreadLogic.Current.RunMain(() =>
-                            {
-                                listview1.EndHeaderRefreshing();
-                            });
-                        });
-                        return;
-                    }
-
-                    HdlThreadLogic.Current.RunThread(() =>
-                    {
-                        //浠庣綉鍏冲埛鏂板満鏅垪琛�
-                        bool result = HdlSceneLogic.Current.RefreshSceneUIList(false);
-                        HdlThreadLogic.Current.RunMain(() =>
-                        {
-                            listview1.EndHeaderRefreshing();
-                            //listview1.Parent涓簄ull浠h〃瀹冨垏鎹㈡埧闂翠簡
-                            if (result == true && listview1.Parent != null)
-                            {
-                                //鍒锋柊鍦烘櫙鐨勬椂鍊�,鍏抽棴宸﹀垝鑿滃崟鐨勬湭鍒嗛厤鐣岄潰
-                                MainPage.LeftListRoomViewFrom.Instance?.CloseUnallocatedRoomForm();
-                                //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
-                                this.functionSceneBodyView.RemoveAll();
-
-                                HdlThreadLogic.Current.RunMainInThread(() =>
-                                {
-                                    //鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
-                                    this.RefreshSceneView(room);
-                                });
-                            }
-                        });
-                    });
-                };
-            }
-            else
-            {
-                //鎴愬憳涓撶敤涓嶈兘鍒锋柊鐨勬帶浠�
-                listview2 = new VerticalListControl();
-                functionSceneBodyView.AddChidren(listview2);
-            }
-
-            var listScene = new List<SceneUI>();
-            foreach (var sceneId in room.ListSceneId)
-            {
-                var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
-                if (scene != null)
-                {
-                    listScene.Add(scene);
-                }
-            }
-            if (listScene.Count == 0)
-            {
-                //鍦ㄦ粦鍔ㄦ帶浠堕噷闈㈡坊鍔犱竴涓甯�
-                var frameTable = new FrameLayout();
-                listview1?.AddChidren(frameTable);
-                listview2?.AddChidren(frameTable);
-                //娌℃湁鍦烘櫙{0}璇风偣鍑诲彸涓婅娣诲姞
-                string[] arryMsg = Language.StringByID(R.MyInternationalizationString.NoScene).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
-                this.ShowNotDataImage(frameTable, arryMsg);
-                return;
-            }
-
-            var dicSceneContr = new Dictionary<int, SceneCategoryView>();
-            foreach (var scene in listScene)
-            {
-                //鍦烘櫙鍗$墖鎺т欢
-                var sceneView = new SceneCategoryView();
-                listview1?.AddChidren(sceneView);
-                listview2?.AddChidren(sceneView);
-                sceneView.InitControl(scene, room);
-
-                dicSceneContr[scene.Id] = sceneView;
-            }
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                if (listview1 != null)
-                {
-                    //鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
-                    this.StartAllDelayScene(dicSceneContr, listview1);
-                }
-                else
-                {
-                    //鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
-                    this.StartAllDelayScene(dicSceneContr, listview2);
-                }
-            }, ShowErrorMode.NO);
-        }
-
-        /// <summary>
-        /// 鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
-        /// </summary>
-        /// <param name="dicSceneContr"></param>
-        private async void StartAllDelayScene(Dictionary<int, SceneCategoryView> dicSceneContr, ViewGroup listview)
-        {
-            string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
-            string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
-            string secondText = Language.StringByID(R.MyInternationalizationString.Second);
-
-            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
-            if (Config.Instance.Home.IsVirtually == true)
-            {
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //寮�鍚欢鏃剁壒鏁�
-                    foreach (var myContr in dicSceneContr.Values)
-                    {
-                        if (myContr.scene.RemainTime > 0)
-                        {
-                            //寮�鍚満鏅欢鏃剁壒鏁�
-                            this.StartSceneDelayApeal(myContr, listview, myContr.scene.RemainTime, hourText, minuText, secondText);
-                        }
-                    }
-                }, ShowErrorMode.NO);
-                return;
-            }
-
-            //璇诲彇鍏ㄩ儴鐨勫欢鏃舵椂闂�
-            var result = await Scene.CatDelaySceneAsync();
-            if (result == null || result.catDelaySceneResponseData == null ||
-                result.catDelaySceneResponseData.DelayScenesList.Count == 0)
-            {
-                //鍑洪敊涓嶉笩瀹�
-                return;
-            }
-
-            foreach (var data in result.catDelaySceneResponseData.DelayScenesList)
-            {
-                if (dicSceneContr.ContainsKey(data.ScenesId) == false)
-                {
-                    //褰撳墠鐨勭晫闈㈡病鏈夋樉绀鸿繖涓満鏅�
-                    continue;
-                }
-                var seceneContr = dicSceneContr[data.ScenesId];
-                //淇濆瓨缂撳瓨鏃堕棿
-                seceneContr.scene.RemainTime = data.RemainTime;
-                int remainTime = data.RemainTime;
-                if (remainTime <= 0)
-                {
-                    continue;
-                }
-                //寮�鍚満鏅欢鏃剁壒鏁�
-                this.StartSceneDelayApeal(seceneContr, listview, remainTime, hourText, minuText, secondText);
-            }
-        }
-
-        /// <summary>
-        /// 寮�鍚満鏅欢鏃剁壒鏁�
-        /// </summary>
-        /// <param name="sceneContr"></param>
-        /// <param name="remainTime"></param>
-        /// <param name="hourText"></param>
-        /// <param name="minuText"></param>
-        /// <param name="secondText"></param>
-        private void StartSceneDelayApeal(SceneCategoryView sceneContr, ViewGroup listview, int remainTime,
-            string hourText, string minuText, string secondText)
-        {
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                //寮�鍚唴閮ㄥ欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
-                HdlSceneLogic.Current.StartDelayTimeThread(sceneContr.scene);
-                while (remainTime > 0 && this.Parent != null)
-                {
-                    System.Threading.Thread.Sleep(1000);
-                    HdlThreadLogic.Current.RunMain(() =>
-                    {
-                        sceneContr.SetTimeText(this.GetTimeString(remainTime, hourText, minuText, secondText));
-                    }, ShowErrorMode.NO);
-                    remainTime--;
-                }
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    if (listview.Parent != null)
-                    {
-                        sceneContr.SetTimeImage();
-                        //寮�鍚疞oading鐗规晥
-                        sceneContr.StartLoadingApreal();
-                    }
-                }, ShowErrorMode.NO);
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 涓�鑸澶囩姸鎬佷笂鎶__________________
-
-        /// <summary>
-        /// 娣诲姞涓�鑸澶囩姸鎬佷笂鎶ヤ簨浠�
-        /// </summary>
-        private void AddNormalDeviceReportEvent()
-        {
-            //璁惧灞炴�т笂鎶�(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
-            HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormDeviceStatus", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) =>
-            {
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //澶勭悊涓�鑸澶囩殑涓婃姤鏁版嵁
-                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
-                    if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
-                    {
-                        //鍒锋柊鍗$墖淇℃伅
-                        var locadevice = LocalDevice.Current.GetDevice(mainKeys);
-                        //宸茬粡鎺ユ敹鍒扮綉鍏崇殑鍙嶉 2020.05.09:鍒犻櫎Ack涓婚
-                        this.dicDeviceRowControl[mainKeys].SetHadGetResponeResultStatu();
-                        //鍒锋柊鎺т欢
-                        if (locadevice.Type != DeviceType.IASZone)
-                        {
-                            //浼犳劅鍣ㄤ笉闇�瑕佸睘鎬т笂鎶�(浣嗘槸閭d釜鐞冨瀷浼犳劅鍣ㄥ眳鐒朵細灞炴�т笂鎶�)
-                            this.dicDeviceRowControl[mainKeys].RefreshControlInfo(locadevice);
-                        }
-                        else if (report.DeviceStatusReport.CluterID == 1)
-                        {
-                            //杩欎釜鏄數閲忔帹閫�
-                            this.dicDeviceRowControl[mainKeys].RefreshBatteryStatu();
-                        }
-                    }
-                }, ShowErrorMode.NO);
-            });
-
-            //璁惧鍦ㄧ嚎涓婃姤(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
-            HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormDeviceOnline", ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤, (report) =>
-            {
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
-                    if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
-                    {
-                        //鍒锋柊鍗$墖鐘舵��
-                        bool bolOnline = LocalDevice.Current.CheckDeviceIsOnline(report);
-                        this.dicDeviceRowControl[mainKeys].SetRowOnlineStatu(bolOnline);
-                        return;
-                    }
-
-                }, ShowErrorMode.NO);
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 浼犳劅鍣ㄧ姸鎬佷笂鎶____________________
-
-        /// <summary>
-        /// 娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
-        /// </summary>
-        private void AddSensorDeviceReportEvent()
-        {
-            //浼犳劅鍣ㄤ笂鎶�(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
-            HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormSensor", ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�, (report) =>
-            {
-                HdlThreadLogic.Current.RunMain(() =>
-                {
-                    //澶勭悊浼犳劅鍣ㄤ笂鎶ユ暟鎹�
-                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
-                    if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
-                    {
-                        //寮�鍚闂儊鐗规晥
-                        this.dicDeviceRowControl[mainKeys].StartRowLightAppeal();
-                    }
-
-                }, ShowErrorMode.NO);
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 浼犳劅鍣ㄧ姸鎬佽繕鍘焈____________________
-
-        /// <summary>
-        /// 寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
-        /// </summary>
-        private void StartRecoverSenorStatuThread()
-        {
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                while (this.Parent != null)
-                {
-                    try
-                    {
-                        var dicControl = this.dicDeviceRowControl;
-                        foreach (var contr in dicControl.Values)
-                        {
-                            //濡傛灉鏄紶鎰熷櫒,鍒欏埛鏂扮姸鎬�
-                            if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
-                              && ((IASZone)contr.device).iASInfo == null)
-                            {
-                                HdlThreadLogic.Current.RunMain(() =>
-                                {
-                                    //璁惧鐘舵�佸繀椤诲埛鏂�
-                                    string statuText = HdlDeviceOtherLogic.Current.GetDeviceStatu(contr.device);
-                                    contr.SetDeviceStatuText(statuText);
-                                    //浼犳劅鍣ㄥ垏鎹负鐏拌壊鐘舵��
-                                    contr.SwitchRowStatuAppeal(false);
-                                }, ShowErrorMode.NO);
-                            }
-                        }
-                        System.Threading.Thread.Sleep(8000);
-                    }
-                    catch { System.Threading.Thread.Sleep(3000); }
-                }
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 鏁村悎璁惧___________________________
-
-        /// <summary>
-        /// 鑾峰彇鍒嗙粍鍚庣殑璁惧
-        /// </summary>
-        /// <returns></returns>
-        private Dictionary<string, DeviceRowInfo> GetAllGroupDevice(Common.Room room)
-        {
-            //鍏ㄩ儴鐨勮澶�
-            var listDeviceTemp = HdlRoomLogic.Current.GetRoomListDevice(room);
-            var listDevice = new List<CommonDevice>();
-            foreach (var device in listDeviceTemp)
-            {
-                //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪鍒嗙被
-                if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
-                {
-                    continue;
-                }
-                listDevice.Add(device);
-            }
-
-            //鏍规嵁璁惧鎵�灞炵被鍨嬫帓搴�
-            listDevice = LocalDevice.Current.SortDeviceByBelongType(listDevice);
-            var dic = new Dictionary<string, DeviceRowInfo>();
-            foreach (var device in listDevice)
-            {
-                var typeInfo = LocalDevice.Current.GetDeviceBelongEnumInfo(device);
-                //鎸夋墍灞濱D鍒嗙粍
-                if (dic.ContainsKey(typeInfo.BeloneText) == false)
-                {
-                    dic[typeInfo.BeloneText] = new DeviceRowInfo();
-                    string path1 = string.Empty;
-                    string path2 = string.Empty;
-                    //鑾峰彇鍥剧墖
-                    LocalDevice.Current.GetDeviceFunctionTypeMenuIcon(typeInfo.ConcreteType, ref path1, ref path2);
-                    dic[typeInfo.BeloneText].IconPath = path1;
-                    dic[typeInfo.BeloneText].IconPathSelected = path2;
-                    dic[typeInfo.BeloneText].Text = typeInfo.BeloneText;
-                }
-                dic[typeInfo.BeloneText].listDeviceKeys.Add(LocalDevice.Current.GetDeviceMainKeys(device));
-            }
-            return dic;
-        }
-
-        #endregion
-
-        #region 鈻� 鐣岄潰鍏抽棴___________________________
-
-        /// <summary>
-        /// 鐣岄潰鍏抽棴
-        /// </summary>
-        public override void CloseFormBefore()
-        {
-            //鎶婇潤鎬佸彉閲忕殑杩欎釜涓滆タ缃┖
-            instance = null;
-            HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormDeviceStatus");
-            HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormDeviceOnline");
-            HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormSensor");
-
-            base.CloseFormBefore();
-        }
-
-        #endregion
-
-        #region 鈻� 涓�鑸柟娉昣__________________________
-
-        /// <summary>
-        /// 鑾峰彇鏃堕棿鐨勭炕璇戞枃鏈�
-        /// </summary>
-        /// <param name="second"></param>
-        /// <param name="hourText">灏忔椂鐨勬枃鏈�</param>
-        /// <param name="minuText">鍒嗙殑鏂囨湰</param>
-        /// <param name="secondText">绉掔殑鏂囨湰</param>
-        /// <returns></returns>
-        private string GetTimeString(int second, string hourText, string minuText, string secondText)
-        {
-            string timeStr = string.Empty;
-            int hour = second / 3600;
-            int minu = second % 3600 / 60;
-            int sec = second % 60;
-            if (hour > 0)
-            {
-                timeStr += hour + hourText;
-            }
-            if (minu > 0)
-            {
-                timeStr += minu + minuText;
-            }
-            if (sec > 0)
-            {
-                timeStr += sec + secondText;
-            }
-            return timeStr;
-        }
-
-        #endregion
-
-        #region 鈻� 缁撴瀯浣揰____________________________
-
-        /// <summary>
-        /// 璁惧琛屼俊鎭�
-        /// </summary>
-        private class DeviceRowInfo
-        {
-            /// <summary>
-            /// 鏂囨湰,鐩墠鐢ㄦ潵鍋氫富閿�
-            /// </summary>
-            public string Text = string.Empty;
-            /// <summary>
-            /// 鍥炬爣
-            /// </summary>
-            public string IconPath = string.Empty;
-            /// <summary>
-            /// 鍥炬爣
-            /// </summary>
-            public string IconPathSelected = string.Empty;
-            /// <summary>
-            /// 璁惧鍥炶矾涓婚敭
-            /// </summary>
-            public List<string> listDeviceKeys = new List<string>();
-        }
-
-        #endregion
-    }
+    public static CategoryMainForm instance;
+    /// <summary>
+    /// 鍦烘櫙鍔熻兘涓儴鑳屾櫙bodyView(楂樺害涓鸿澶囪彍鍗曠殑閭d釜鐧借壊鑳屾櫙鐨勪笂閮ㄥ埌灞忓箷搴曢儴)
+    /// </summary>
+    public NormalFrameLayout functionSceneBodyView;
+    /// <summary>
+    /// 涓儴鑳屾櫙bodyView(楂樺害涓哄満鏅姛鑳藉垏鎹㈡帶浠剁殑搴曢儴鍒板睆骞曞簳閮�)
+    /// </summary>
+    public NormalFrameLayout functionSceneAutoBodyView;
+    /// <summary>
+    /// 鍙充笂瑙掓坊鍔犳寜閽�
+    /// </summary>
+    private IconViewControl btnTopRightAdd = null;
+    /// <summary>
+    /// 妤煎眰鎺т欢
+    /// </summary>
+    private NormalViewControl btnFloorName = null;
+    /// <summary>
+    /// 妤煎眰鍥炬爣鎺т欢
+    /// </summary>
+    private IconViewControl btnFloorIcon = null;
+    /// <summary>
+    /// 璁惧琛屾帶浠�
+    /// </summary>
+    private Dictionary<string, Controls.DeviceRowCommon> dicDeviceRowControl = new Dictionary<string, Controls.DeviceRowCommon>();
+
+    #endregion
+
+    #region 鈻� 鍒濆鍖朹____________________________
+
+    /// <summary>
+    /// 鏋勯�犳柟娉�
+    /// </summary>
+    public CategoryMainForm()
+    {
+      this.FormID = "CategoryMainForm";
+      BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
+      instance = this;
+    }
+
+    /// <summary>
+    /// 鏄剧ず鐣岄潰--榛樿鍦烘櫙鐣岄潰
+    /// </summary>
+    public void ShowForm()
+    {
+      //鍏堟竻闄ゅ惂
+      this.RemoveAll();
+
+      //鍒濆鍖栧ご閮ㄦ帶浠�
+      this.InitTopControl();
+      //鍒濆鍖栦腑闂存帶浠�
+      this.InitMidControls();
+      //娣诲姞璁惧鐘舵�佷笂鎶ヤ簨浠�
+      this.AddNormalDeviceReportEvent();
+      //娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
+      this.AddSensorDeviceReportEvent();
+      //寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+      this.StartRecoverSenorStatuThread();
+    }
+
+    /// <summary>
+    /// 鍒濆鍖栧ご閮ㄦ帶浠�
+    /// </summary>
+    private void InitTopControl()
+    {
+      //澶撮儴FrameLayout
+      this.topFrameLayout = new NormalFrameLayout();
+      topFrameLayout.Y = Application.GetRealHeight(104);
+      topFrameLayout.Height = Application.GetRealHeight(127);
+      topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
+      this.AddChidren(topFrameLayout);
+      //鏍囬鍒嗙被
+      var btnTitle = new NormalViewControl(400, 95, true);
+      btnTitle.X = ControlCommonResourse.XXLeft;
+      btnTitle.Gravity = Gravity.CenterVertical;
+      btnTitle.TextID = R.MyInternationalizationString.Category;
+      btnTitle.TextSize = 24;
+      btnTitle.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
+      btnTitle.IsBold = true;
+      topFrameLayout.AddChidren(btnTitle);
+
+      //鍙充笂瑙掓坊鍔犳寜閽�
+      this.btnTopRightAdd = new IconViewControl(104);
+      btnTopRightAdd.X = Application.GetRealWidth(953);
+      btnTopRightAdd.Gravity = Gravity.CenterVertical;
+      btnTopRightAdd.UnSelectedImagePath = "Item/Add_Category.png";
+      topFrameLayout.AddChidren(btnTopRightAdd);
+      btnTopRightAdd.ButtonClickEvent += (sender, e) =>
+      {
+        if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
+        {
+          //娣诲姞鍦烘櫙
+          var form = new AddOrEditorSceneForm();
+          form.AddForm(new object[] { null });
+          form.SceneChangedEvent += (scene, roomId) =>
+                {
+                  //鍒锋柊bodyView
+                  this.RefreshBodyView();
+                };
+        }
+        else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2)
+        {
+          //娣诲姞鑷姩鍖�
+          Device.Logic.SkipView.SkipAddLogic(0);
+        }
+      };
+    }
+
+    /// <summary>
+    /// 鍒濆鍖栦腑闂存帶浠�
+    /// </summary>
+    private void InitMidControls()
+    {
+      //搴旇鏄痓ody鍚�
+      this.bodyFrameLayout = new NormalFrameLayout();
+      bodyFrameLayout.Y = topFrameLayout.Bottom;
+      bodyFrameLayout.Height = this.Height - topFrameLayout.Bottom;
+      bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
+      this.AddChidren(bodyFrameLayout);
+
+      //鍦烘櫙,鍔熻兘,鑷姩鍖栫殑鍒囨崲鎺т欢鐨勫鍣�
+      var frameSwitchBack = new FrameLayout();
+      frameSwitchBack.Height = Application.GetRealHeight(127);
+      bodyFrameLayout.AddChidren(frameSwitchBack);
+
+      //鎷ユ湁妤煎眰鏃�
+      this.btnFloorName = null;
+      this.btnFloorIcon = null;
+      if (Config.Instance.Home.FloorDics.Count > 0)
+      {
+        //妤煎眰鍚�
+        this.btnFloorName = new NormalViewControl(200, 69, true);
+        btnFloorName.X = frameSwitchBack.Width - Application.GetRealWidth(200 + 120);
+        btnFloorName.Y = Application.GetRealHeight(17);
+        btnFloorName.TextAlignment = TextAlignment.CenterRight;
+        btnFloorName.IsBold = true;
+        btnFloorName.Text = Common.Config.Instance.Home.GetCurrentFloorName;
+        frameSwitchBack.AddChidren(btnFloorName);
+        btnFloorName.ButtonClickEvent += (sender, e) =>
+        {
+          var floors = new SelectFloorForm();
+          floors.CurFloorId = Config.Instance.Home.CurrentFloorId;
+          AddChidren(floors);
+          floors.Init(580, 330, Direction.Right);
+          floors.FloorAction += (floorId) =>
+                  {
+                    btnFloorName.Text = HdlResidenceLogic.Current.GetFloorNameById(floorId);
+                    Config.Instance.Home.CurrentFloorId = floorId;
+                    HdlRoomLogic.Current.NowCategoryRoom = HdlRoomLogic.Current.GetLoveRoom();
+                    //杩欎釜鏃跺�欓渶瑕佸埛鏂颁富椤�
+                    UserPage.Instance.RefreshMainPageForm = true;
+                    //鍒锋柊bodyView
+                    this.RefreshBodyView();
+                  };
+        };
+        //妤煎眰鍥炬爣
+        this.btnFloorIcon = new IconViewControl(69);
+        btnFloorIcon.X = Application.GetRealWidth(950);
+        btnFloorIcon.Y = Application.GetRealHeight(17);
+        btnFloorIcon.UnSelectedImagePath = "Item/Drop_Down.png";
+        frameSwitchBack.AddChidren(btnFloorIcon);
+        btnFloorIcon.ButtonClickEvent += (sender, e) =>
+        {
+          btnFloorName.ButtonClickEvent?.Invoke(sender, e);
+        };
+      }
+
+      //鐩墠涓嶇煡閬撻儹闆煄鐨勮繖涓叿浣撴斁鍦ㄥ摢涓殑浣嶇疆
+      this.functionSceneAutoBodyView = new NormalFrameLayout();
+      functionSceneAutoBodyView.Y = frameSwitchBack.Bottom;
+      functionSceneAutoBodyView.Height = bodyFrameLayout.Height - frameSwitchBack.Bottom;
+      bodyFrameLayout.AddChidren(functionSceneAutoBodyView);
+
+      //鍦烘櫙,鍔熻兘,鑷姩鍖栫殑鍒囨崲鎺т欢
+      var switchContr = new SceneFunctionSwitchControl();
+      switchContr.Y = Application.GetRealHeight(40);
+      switchContr.Width = Application.GetRealWidth(650);
+      switchContr.Gravity = Gravity.CenterVertical;
+      frameSwitchBack.AddChidren(switchContr);
+      var listTitle = new List<string>();
+      listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence));
+      listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction));
+      if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
+      {
+        //鎴愬憳娌℃湁鑷姩鍖�
+        listTitle.Add(Language.StringByID(R.MyInternationalizationString.Automation));
+      }
+      //璁剧疆鍒濆鍊�
+      switchContr.SetDefultIndex(UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex);
+      //閫夋嫨浜嬩欢
+      switchContr.SelectTabEvent += (selectIndex) =>
+      {
+        UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex = selectIndex;
+        if (selectIndex == 2)
+        {
+          Common.Logic.LogicDviceList.Clear();
+          if (Common.Logic.LogicDviceList.Count == 0)
+          {
+            Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray());
+          }
+        }
+        //鍒锋柊bodyView
+        this.RefreshBodyView();
+      };
+      //寮�濮嬪垵濮嬪寲
+      switchContr.InitControl(listTitle);
+    }
+
+    /// <summary>
+    /// 鍒锋柊bodyView
+    /// </summary>
+    public void RefreshBodyView()
+    {
+      this.functionSceneAutoBodyView.RemoveAll();
+
+      HdlThreadLogic.Current.RunMainInThread(() =>
+      {
+        bool floorVisible = true;
+        //鍦烘櫙
+        if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
+        {
+          //鍒濆鍖栨埧闂磋彍鍗�
+          this.InitRoomMenuControl();
+          //鏄剧ず鍙充笂瑙掔殑鍔犲彿
+          this.btnTopRightAdd.Visible = true;
+        }
+        //鍔熻兘
+        else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1)
+        {
+          //鍒濆鍖栨埧闂磋彍鍗�
+          this.InitRoomMenuControl();
+          //闅愯棌鍙充笂瑙掔殑鍔犲彿
+          this.btnTopRightAdd.Visible = false;
+        }
+        //鑷姩鍖�
+        else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 2)
+        {
+          //鑷姩鍖栧姛鑳戒唬鐮佸叆鍙�
+          Device.Logic.SkipView.ShowAutotionView(functionSceneAutoBodyView);
+          //闅愯棌妤煎眰
+          floorVisible = false;
+          //鏄剧ず鍙充笂瑙掔殑鍔犲彿
+          this.btnTopRightAdd.Visible = true;
+        }
+
+        //淇敼妤煎眰鐨勬樉绀烘晥鏋�
+        if (this.btnFloorName != null)
+        {
+          this.btnFloorName.Visible = floorVisible;
+          this.btnFloorIcon.Visible = floorVisible;
+        }
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 鎴块棿鑿滃崟鎺т欢_______________________
+
+    /// <summary>
+    /// 鍒濆鍖栨埧闂磋彍鍗曟帶浠�
+    /// </summary>
+    private void InitRoomMenuControl()
+    {
+      //褰撳墠妤煎眰鐨勫叏閮ㄦ埧闂�
+      var lisrRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
+      if (HdlRoomLogic.Current.NowCategoryRoom == null)
+      {
+        //璁剧疆绗竴涓负鍒濆鎴块棿
+        HdlRoomLogic.Current.NowCategoryRoom = lisrRoom[0];
+      }
+      //鎴块棿鑿滃崟鎺т欢
+      var roomSwitchContr = new RoomDeviceGroupMenuControl(lisrRoom);
+      roomSwitchContr.Y = Application.GetRealHeight(-55);
+      this.functionSceneAutoBodyView.AddChidren(roomSwitchContr);
+      //璁剧疆鍒濆鍊�
+      roomSwitchContr.SetDefultIndex(HdlRoomLogic.Current.NowCategoryRoom.Id);
+      //閫夋嫨浜嬩欢
+      roomSwitchContr.SelectRoomEvent += (selectRoom) =>
+      {
+        HdlRoomLogic.Current.NowCategoryRoom = selectRoom;
+        //鍦烘櫙
+        if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 0)
+        {
+          //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
+          this.functionSceneBodyView.RemoveAll();
+          HdlThreadLogic.Current.RunMainInThread(() =>
+                {
+                  //鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
+                  this.RefreshSceneView(selectRoom);
+                });
+        }
+        //鍔熻兘
+        else if (UserCenterResourse.ResidenceOption.CategoryPageSwitchIndex == 1)
+        {
+          //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
+          this.functionSceneBodyView.RemoveAll();
+          HdlThreadLogic.Current.RunMainInThread(() =>
+                {
+                  //鍒锋柊璁惧鍒嗘敮鎺т欢
+                  this.RefreshFunctionView(selectRoom);
+                });
+        }
+      };
+
+      //鍔熻兘鍜屽満鏅痓odyView
+      this.functionSceneBodyView = new NormalFrameLayout();
+      functionSceneBodyView.Y = roomSwitchContr.Bottom;
+      functionSceneBodyView.Height = functionSceneAutoBodyView.Height - roomSwitchContr.Bottom;
+      functionSceneAutoBodyView.AddChidren(functionSceneBodyView);
+
+      //鎵ц鍒濆鍖� 
+      roomSwitchContr.InitControl();
+    }
+
+    #endregion
+
+    #region 鈻� 鍔熻兘鍒嗘敮___________________________
+
+    /// <summary>
+    /// 鍒锋柊鍔熻兘鍒嗘敮鎺т欢
+    /// </summary>
+    /// <param name="room"></param>
+    private void RefreshFunctionView(Common.Room room)
+    {
+      //鑾峰彇鍒嗙粍鍚庣殑璁惧
+      var dicGroupDevice = this.GetAllGroupDevice(room);
+      if (dicGroupDevice.Count == 0)
+      {
+        //娌℃湁鍔熻兘{0}璇峰湪涓汉涓績--璁惧绠$悊澶勬坊鍔�
+        string[] arryMsg = Language.StringByID(R.MyInternationalizationString.NoFunction).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
+        this.ShowNotDataImage(functionSceneBodyView, arryMsg);
+        return;
+      }
+
+      //璁惧鑿滃崟鐨勭櫧鑹茶儗鏅�
+      var functionBack1 = new FrameLayout();
+      functionBack1.X = ControlCommonResourse.XXLeft;
+      functionBack1.Height = Application.GetRealHeight(160);
+      functionBack1.Width = Application.GetRealWidth(1028);
+      functionBack1.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
+      functionSceneBodyView.AddChidren(functionBack1);
+      functionBack1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
+      var functionBack2 = new FrameLayout();
+      functionBack2.X = ControlCommonResourse.XXLeft;
+      functionBack2.Y = functionBack1.Bottom - Application.GetRealHeight(50);
+      functionBack2.Height = Application.GetRealHeight(279 - 160 + 50);
+      functionBack2.Width = Application.GetRealWidth(1028);
+      functionBack2.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
+      functionSceneBodyView.AddChidren(functionBack2);
+      functionBack2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
+
+      //璁惧鑿滃崟鐨勫乏鍙虫粦鍔ㄧ殑鎺т欢
+      var HorizontalView = new HorizontalScrolViewLayout();
+      HorizontalView.X = Application.GetRealWidth(CommonFormResouce.X_Left);
+      HorizontalView.Height = Application.GetRealHeight(279);
+      HorizontalView.Width = Application.GetRealWidth(1028);
+      functionSceneBodyView.AddChidren(HorizontalView);
+
+      //璁惧鐨勮儗鏅鍣�
+      var frameDeviceBack = new FrameLayout();
+      frameDeviceBack.X = ControlCommonResourse.XXLeft;
+      frameDeviceBack.Y = HorizontalView.Bottom + Application.GetRealHeight(35);
+      frameDeviceBack.BackgroundColor = UserCenterColor.Current.White;
+      frameDeviceBack.Width = bodyFrameLayout.Width;
+      frameDeviceBack.Height = functionSceneBodyView.Height - HorizontalView.Bottom - Application.GetRealHeight(35);
+      frameDeviceBack.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
+      functionSceneBodyView.AddChidren(frameDeviceBack);
+
+      //璁惧鍒楄〃鎺т欢
+      var listDeviceView = new VerticalListControl(35);
+      listDeviceView.Y = Application.GetRealHeight(11);
+      listDeviceView.Width = Application.GetRealWidth(1022);
+      listDeviceView.Height = frameDeviceBack.Height - Application.GetRealHeight(11);
+      listDeviceView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
+      frameDeviceBack.AddChidren(listDeviceView);
+
+      //涓婁竴娆¢�夋嫨鐨勮彍鍗�
+      MainPage.Controls.DeviceFunctionMenuControl oldSelectContr = null;
+      DeviceRowInfo nowSelectDeviceInfo = null;
+      foreach (string strText in dicGroupDevice.Keys)
+      {
+        var rowInfo = dicGroupDevice[strText];
+
+        //璁惧绫诲瀷鐨勫鍣�
+        var devieFrame = new FrameLayout();
+        devieFrame.Width = Application.GetRealWidth(220);
+        HorizontalView.AddChidren(devieFrame);
+
+        //鑿滃崟鍥剧墖鎺т欢
+        var deviceObjContr = new MainPage.Controls.DeviceFunctionMenuControl();
+        devieFrame.AddChidren(deviceObjContr);
+        deviceObjContr.InitControl(strText, rowInfo.IconPath, rowInfo.IconPathSelected);
+        deviceObjContr.ButtonClickEvent += (sender, e) =>
+        {
+          //閫夋嫨鐨勬槸鍚屼竴涓笢瑗跨殑璇�,涓嶅鐞�
+          if (nowSelectDeviceInfo.Text != rowInfo.Text)
+          {
+            //涓婁竴娆$殑鑿滃崟鍙栨秷,鏈鑿滃崟閫夋嫨
+            oldSelectContr.SetSelectStatu(false);
+            deviceObjContr.SetSelectStatu(true);
+            oldSelectContr = deviceObjContr;
+
+            nowSelectDeviceInfo = rowInfo;
+            HdlThreadLogic.Current.RunMainInThread(() =>
+             {
+               //鍒濆鍖栬澶囧垪琛ㄦ帶浠�
+               this.InitListDeviceControls(listDeviceView, rowInfo, room);
+             });
+          }
+        };
+
+        if (nowSelectDeviceInfo == null)
+        {
+          //璁剧疆鍒濆閫夋嫨
+          nowSelectDeviceInfo = rowInfo;
+          //璁板綍鍒濆閫夋嫨鐨勮彍鍗曟帶浠�
+          oldSelectContr = deviceObjContr;
+          deviceObjContr.SetSelectStatu(true);
+        }
+      }
+      if (nowSelectDeviceInfo != null)
+      {
+        //鍒濆鍖栭粯璁ょ殑璁惧鍒楄〃鎺т欢
+        this.InitListDeviceControls(listDeviceView, nowSelectDeviceInfo, room);
+      }
+    }
+
+    #endregion
+
+    #region 鈻� 鍒濆鍖栬澶囧垪琛ㄦ帶浠禵________________
+
+    /// <summary>
+    /// 鍒濆鍖栬澶囧垪琛ㄦ帶浠�
+    /// </summary>
+    /// <param name="listView"></param>
+    /// <param name="rowInfo"></param>
+    private void InitListDeviceControls(VerticalListControl listView, DeviceRowInfo rowInfo, Room i_room)
+    {
+      //鍏堟竻绌�
+      listView.RemoveAll();
+      this.dicDeviceRowControl = new Dictionary<string, Controls.DeviceRowCommon>();
+
+      var listDevice = new List<CommonDevice>();
+      for (int i = 0; i < rowInfo.listDeviceKeys.Count; i++)
+      {
+        var device = LocalDevice.Current.GetDevice(rowInfo.listDeviceKeys[i]);
+
+        //鑾峰彇璁惧绫诲瀷鐨�
+        var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
+        //鏂伴闈㈡澘涓嬬殑鍥炶矾涓嶆樉绀猴紝锛堝鏂伴銆佹俯/婀垮害浼犳劅鍣ㄥ垯涓嶆樉绀猴級
+        if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+        {
+          continue;
+        }
+
+        if (device != null)
+        {
+          listDevice.Add(device);
+        }
+        else
+        {
+          rowInfo.listDeviceKeys.RemoveAt(i);
+          i--;
+        }
+      }
+
+      HdlThreadLogic.Current.RunMain(() =>
+      {
+        var listContr = new List<Controls.DeviceRowCommon>();
+        foreach (var device in listDevice)
+        {
+          Controls.DeviceRowCommon cardContr = null;
+          //绐楀笜
+          if (device.Type == DeviceType.WindowCoveringDevice)
+          {
+            cardContr = new Controls.DeviceCurtainRowControl();
+          }
+          //鏅捐。鏋� Airer
+          if (device.Type == DeviceType.Airer)
+          {
+            cardContr = new Controls.DeviceAirerRowControl();
+          }
+          //缁х數鍣�
+          else if (device.Type == DeviceType.OnOffOutput)
+          {
+            cardContr = new Controls.DeviceRelayRowControl();
+          }
+          //绌烘皵寮�鍏�
+          else if (device.Type == DeviceType.AirSwitch)
+          {
+            cardContr = new Controls.DeviceAirSwitchRowControl();
+          }
+          //绌鸿皟
+          else if (device.Type == DeviceType.Thermostat)
+          {
+            cardContr = new Controls.DeviceAcRowControl();
+          }
+          // 鏂伴
+          else if (device.Type == DeviceType.FreshAir)
+          {
+            cardContr = new Controls.DeviceFreshAirRowControl();
+          }
+          // PM2.5
+          else if (device.Type == DeviceType.PMSensor)
+          {
+            cardContr = new Controls.DevicePmSensorRowControl();
+          }
+          //褰╃伅(璋冨厜鍣�)
+          else if (device.Type == DeviceType.DimmableLight)
+          {
+            cardContr = new Controls.DeviceColorLightRowControl();
+          }
+          //浼犳劅鍣�
+          else if (device.Type == DeviceType.IASZone)
+          {
+            cardContr = new Controls.DeviceSensorRowControl();
+          }
+          //娓╂箍搴�
+          else if (device.Type == DeviceType.TemperatureSensor)
+          {
+            cardContr = new Controls.DeviceTemperatureRowControl();
+          }
+          //闂ㄩ攣
+          else if (device.Type == DeviceType.DoorLock)
+          {
+            cardContr = new Controls.DeviceDoorLockRowControl();
+          }
+          //鑹叉俯鐏�
+          else if (device.Type == DeviceType.ColorTemperatureLight)
+          {
+            cardContr = new Controls.DeviceColorTemperatureRowControl();
+          }
+          //鏃犳硶璇嗗埆
+          else
+          {
+            cardContr = new Controls.DeviceRowCommon();
+            //娌℃湁鐘舵�佸姛鑳�
+            cardContr.hadStatuFunction = false;
+          }
+          cardContr.chidrenYaxis = listView.rowSpace / 2;
+          //鍒濆鍖栧崱鐗�
+          listView.AddChidren(cardContr);
+          cardContr.InitControl(device, HdlRoomLogic.Current.NowCategoryRoom);
+          //鎺т欢璁板綍鍒扮紦瀛樹腑
+          this.dicDeviceRowControl[LocalDevice.Current.GetDeviceMainKeys(device)] = cardContr;
+          //鍔犵紦瀛�,鐒跺悗鍙戝懡浠�
+          listContr.Add(cardContr);
+          //鎺т欢琚Щ闄ょ殑鍥炶皟鍑芥暟
+          cardContr.RowNeedRemoveEvent += () =>
+          {
+            string myKeys = LocalDevice.Current.GetDeviceMainKeys(cardContr.device);
+            rowInfo.listDeviceKeys.Remove(myKeys);
+            this.dicDeviceRowControl.Remove(myKeys);
+
+            if (rowInfo.listDeviceKeys.Count == 0)
+            {
+              //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
+              this.functionSceneBodyView.RemoveAll();
+              HdlThreadLogic.Current.RunMainInThread(() =>
+                          {
+                            //鍒锋柊璁惧鍒嗘敮鎺т欢
+                            this.RefreshFunctionView(i_room);
+                          });
+            }
+          };
+        }
+        HdlThreadLogic.Current.RunThread(() =>
+              {
+                while (listView.Parent != null)
+                {
+                  bool hadSend = false;
+                  for (int i = 0; i < listContr.Count; i++)
+                  {
+                    if (listView.Parent == null)
+                    {
+                      return;
+                    }
+                    //濡傛灉杩樻病鏈夋帴鏀跺埌鏁版嵁,鍒欏啀娆″彂閫�
+                    if (listContr[i].ReceiveResponeResultStatu() == false)
+                    {
+                      //鍙戦�佽幏鍙栫姸鎬佺殑鍛戒护
+                      listContr[i].SendStatuComand();
+                      hadSend = true;
+                      System.Threading.Thread.Sleep(200);
+                    }
+                  }
+                  if (hadSend == false)
+                  {
+                    //濡傛灉宸茬粡鍏ㄩ儴鍥炶矾閮芥帴鏀朵簡缃戝叧鍥炲,鍒欎笉鍐嶄簩娆″彂閫�
+                    break;
+                  }
+                  System.Threading.Thread.Sleep(2000);
+                }
+
+              }, ShowErrorMode.NO);
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 鍦烘櫙鍒嗘敮___________________________
+
+    /// <summary>
+    /// 鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
+    /// </summary>
+    /// <param name="room"></param>
+    private void RefreshSceneView(Room room)
+    {
+      //涓讳汉锛岀鐞嗗憳涓撶敤鍒锋柊鎺т欢
+      VerticalListRefreshControl listview1 = null;
+      //鎴愬憳涓撶敤涓嶈兘鍒锋柊鐨勬帶浠�
+      VerticalListControl listview2 = null;
+      if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
+      {
+        //涓讳汉锛岀鐞嗗憳涓撶敤鍒锋柊鎺т欢
+        listview1 = new VerticalListRefreshControl();
+        functionSceneBodyView.AddChidren(listview1);
+        //涓嬫媺鍒锋柊
+        listview1.BeginHeaderRefreshingAction += () =>
+        {
+          //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�,鍒欏彧缁欎釜鐗规晥
+          if (Common.Config.Instance.Home.IsVirtually == true)
+          {
+            HdlThreadLogic.Current.RunThread(() =>
+                    {
+                      System.Threading.Thread.Sleep(1500);
+                      HdlThreadLogic.Current.RunMain(() =>
+                              {
+                                listview1.EndHeaderRefreshing();
+                              });
+                    });
+            return;
+          }
+
+          HdlThreadLogic.Current.RunThread(() =>
+                  {
+                    //浠庣綉鍏冲埛鏂板満鏅垪琛�
+                    bool result = HdlSceneLogic.Current.RefreshSceneUIList(false);
+                    HdlThreadLogic.Current.RunMain(() =>
+                            {
+                              listview1.EndHeaderRefreshing();
+                              //listview1.Parent涓簄ull浠h〃瀹冨垏鎹㈡埧闂翠簡
+                              if (result == true && listview1.Parent != null)
+                              {
+                                //鍒锋柊鍦烘櫙鐨勬椂鍊�,鍏抽棴宸﹀垝鑿滃崟鐨勬湭鍒嗛厤鐣岄潰
+                                MainPage.LeftListRoomViewFrom.Instance?.CloseUnallocatedRoomForm();
+                                //鍦ㄥ闈㈡竻绌�(鐗规晥鐨勯棶棰�)
+                                this.functionSceneBodyView.RemoveAll();
+
+                                HdlThreadLogic.Current.RunMainInThread(() =>
+                                  {
+                                    //鍒锋柊鍦烘櫙鍒嗘敮鎺т欢
+                                    this.RefreshSceneView(room);
+                                  });
+                              }
+                            });
+                  });
+        };
+      }
+      else
+      {
+        //鎴愬憳涓撶敤涓嶈兘鍒锋柊鐨勬帶浠�
+        listview2 = new VerticalListControl();
+        functionSceneBodyView.AddChidren(listview2);
+      }
+
+      var listScene = new List<SceneUI>();
+      foreach (var sceneId in room.ListSceneId)
+      {
+        var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
+        if (scene != null)
+        {
+          listScene.Add(scene);
+        }
+      }
+      if (listScene.Count == 0)
+      {
+        //鍦ㄦ粦鍔ㄦ帶浠堕噷闈㈡坊鍔犱竴涓甯�
+        var frameTable = new FrameLayout();
+        listview1?.AddChidren(frameTable);
+        listview2?.AddChidren(frameTable);
+        //娌℃湁鍦烘櫙{0}璇风偣鍑诲彸涓婅娣诲姞
+        string[] arryMsg = Language.StringByID(R.MyInternationalizationString.NoScene).Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
+        this.ShowNotDataImage(frameTable, arryMsg);
+        return;
+      }
+
+      var dicSceneContr = new Dictionary<int, SceneCategoryView>();
+      foreach (var scene in listScene)
+      {
+        //鍦烘櫙鍗$墖鎺т欢
+        var sceneView = new SceneCategoryView();
+        listview1?.AddChidren(sceneView);
+        listview2?.AddChidren(sceneView);
+        sceneView.InitControl(scene, room);
+
+        dicSceneContr[scene.Id] = sceneView;
+      }
+      HdlThreadLogic.Current.RunThread(() =>
+      {
+        if (listview1 != null)
+        {
+          //鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
+          this.StartAllDelayScene(dicSceneContr, listview1);
+        }
+        else
+        {
+          //鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
+          this.StartAllDelayScene(dicSceneContr, listview2);
+        }
+      }, ShowErrorMode.NO);
+    }
+
+    /// <summary>
+    /// 鎵撳紑鍏ㄩ儴鍦烘櫙鐨勫欢鏃舵椂闂�
+    /// </summary>
+    /// <param name="dicSceneContr"></param>
+    private async void StartAllDelayScene(Dictionary<int, SceneCategoryView> dicSceneContr, ViewGroup listview)
+    {
+      string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
+      string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
+      string secondText = Language.StringByID(R.MyInternationalizationString.Second);
+
+      //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+      if (Config.Instance.Home.IsVirtually == true)
+      {
+        HdlThreadLogic.Current.RunMain(() =>
+        {
+          //寮�鍚欢鏃剁壒鏁�
+          foreach (var myContr in dicSceneContr.Values)
+          {
+            if (myContr.scene.RemainTime > 0)
+            {
+              //寮�鍚満鏅欢鏃剁壒鏁�
+              this.StartSceneDelayApeal(myContr, listview, myContr.scene.RemainTime, hourText, minuText, secondText);
+            }
+          }
+        }, ShowErrorMode.NO);
+        return;
+      }
+
+      //璇诲彇鍏ㄩ儴鐨勫欢鏃舵椂闂�
+      var result = await Scene.CatDelaySceneAsync();
+      if (result == null || result.catDelaySceneResponseData == null ||
+          result.catDelaySceneResponseData.DelayScenesList.Count == 0)
+      {
+        //鍑洪敊涓嶉笩瀹�
+        return;
+      }
+
+      foreach (var data in result.catDelaySceneResponseData.DelayScenesList)
+      {
+        if (dicSceneContr.ContainsKey(data.ScenesId) == false)
+        {
+          //褰撳墠鐨勭晫闈㈡病鏈夋樉绀鸿繖涓満鏅�
+          continue;
+        }
+        var seceneContr = dicSceneContr[data.ScenesId];
+        //淇濆瓨缂撳瓨鏃堕棿
+        seceneContr.scene.RemainTime = data.RemainTime;
+        int remainTime = data.RemainTime;
+        if (remainTime <= 0)
+        {
+          continue;
+        }
+        //寮�鍚満鏅欢鏃剁壒鏁�
+        this.StartSceneDelayApeal(seceneContr, listview, remainTime, hourText, minuText, secondText);
+      }
+    }
+
+    /// <summary>
+    /// 寮�鍚満鏅欢鏃剁壒鏁�
+    /// </summary>
+    /// <param name="sceneContr"></param>
+    /// <param name="remainTime"></param>
+    /// <param name="hourText"></param>
+    /// <param name="minuText"></param>
+    /// <param name="secondText"></param>
+    private void StartSceneDelayApeal(SceneCategoryView sceneContr, ViewGroup listview, int remainTime,
+        string hourText, string minuText, string secondText)
+    {
+      HdlThreadLogic.Current.RunThread(() =>
+      {
+        //寮�鍚唴閮ㄥ欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
+        HdlSceneLogic.Current.StartDelayTimeThread(sceneContr.scene);
+        while (remainTime > 0 && this.Parent != null)
+        {
+          System.Threading.Thread.Sleep(1000);
+          HdlThreadLogic.Current.RunMain(() =>
+                {
+                  sceneContr.SetTimeText(this.GetTimeString(remainTime, hourText, minuText, secondText));
+                }, ShowErrorMode.NO);
+          remainTime--;
+        }
+        HdlThreadLogic.Current.RunMain(() =>
+              {
+                if (listview.Parent != null)
+                {
+                  sceneContr.SetTimeImage();
+                  //寮�鍚疞oading鐗规晥
+                  sceneContr.StartLoadingApreal();
+                }
+              }, ShowErrorMode.NO);
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 涓�鑸澶囩姸鎬佷笂鎶__________________
+
+    /// <summary>
+    /// 娣诲姞涓�鑸澶囩姸鎬佷笂鎶ヤ簨浠�
+    /// </summary>
+    private void AddNormalDeviceReportEvent()
+    {
+      //璁惧灞炴�т笂鎶�(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
+      HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormDeviceStatus", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) =>
+      {
+        HdlThreadLogic.Current.RunMain(() =>
+              {
+                //澶勭悊涓�鑸澶囩殑涓婃姤鏁版嵁
+                string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
+                if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
+                {
+                  //鍒锋柊鍗$墖淇℃伅
+                  var locadevice = LocalDevice.Current.GetDevice(mainKeys);
+                  //宸茬粡鎺ユ敹鍒扮綉鍏崇殑鍙嶉 2020.05.09:鍒犻櫎Ack涓婚
+                  this.dicDeviceRowControl[mainKeys].SetHadGetResponeResultStatu();
+                  //鍒锋柊鎺т欢
+                  if (locadevice.Type != DeviceType.IASZone)
+                  {
+                    //浼犳劅鍣ㄤ笉闇�瑕佸睘鎬т笂鎶�(浣嗘槸閭d釜鐞冨瀷浼犳劅鍣ㄥ眳鐒朵細灞炴�т笂鎶�)
+                    this.dicDeviceRowControl[mainKeys].RefreshControlInfo(locadevice);
+                  }
+                  else if (report.DeviceStatusReport.CluterID == 1)
+                  {
+                    //杩欎釜鏄數閲忔帹閫�
+                    this.dicDeviceRowControl[mainKeys].RefreshBatteryStatu();
+                  }
+                }
+              }, ShowErrorMode.NO);
+      });
+
+      //璁惧鍦ㄧ嚎涓婃姤(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
+      HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormDeviceOnline", ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤, (report) =>
+      {
+        HdlThreadLogic.Current.RunMain(() =>
+              {
+                string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
+                if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
+                {
+                  //鍒锋柊鍗$墖鐘舵��
+                  bool bolOnline = LocalDevice.Current.CheckDeviceIsOnline(report);
+                  this.dicDeviceRowControl[mainKeys].SetRowOnlineStatu(bolOnline);
+                  return;
+                }
+
+              }, ShowErrorMode.NO);
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 浼犳劅鍣ㄧ姸鎬佷笂鎶____________________
+
+    /// <summary>
+    /// 娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
+    /// </summary>
+    private void AddSensorDeviceReportEvent()
+    {
+      //浼犳劅鍣ㄤ笂鎶�(缂撳瓨鐨勪慨鏀逛氦鐢� HdlGatewayReceiveLogic 澶勭悊)
+      HdlGatewayReceiveLogic.Current.AddAttributeEvent("CategoryMainFormSensor", ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�, (report) =>
+      {
+        HdlThreadLogic.Current.RunMain(() =>
+              {
+                //澶勭悊浼犳劅鍣ㄤ笂鎶ユ暟鎹�
+                string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
+                if (this.dicDeviceRowControl.ContainsKey(mainKeys) == true)
+                {
+                  //寮�鍚闂儊鐗规晥
+                  this.dicDeviceRowControl[mainKeys].StartRowLightAppeal();
+                }
+
+              }, ShowErrorMode.NO);
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 浼犳劅鍣ㄧ姸鎬佽繕鍘焈____________________
+
+    /// <summary>
+    /// 寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+    /// </summary>
+    private void StartRecoverSenorStatuThread()
+    {
+      HdlThreadLogic.Current.RunThread(() =>
+      {
+        while (this.Parent != null)
+        {
+          try
+          {
+            var dicControl = this.dicDeviceRowControl;
+            foreach (var contr in dicControl.Values)
+            {
+              //濡傛灉鏄紶鎰熷櫒,鍒欏埛鏂扮姸鎬�
+              if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
+                && ((IASZone)contr.device).iASInfo == null)
+              {
+                HdlThreadLogic.Current.RunMain(() =>
+                      {
+                        //璁惧鐘舵�佸繀椤诲埛鏂�
+                        string statuText = HdlDeviceOtherLogic.Current.GetDeviceStatu(contr.device);
+                        contr.SetDeviceStatuText(statuText);
+                        //浼犳劅鍣ㄥ垏鎹负鐏拌壊鐘舵��
+                        contr.SwitchRowStatuAppeal(false);
+                      }, ShowErrorMode.NO);
+              }
+            }
+            System.Threading.Thread.Sleep(8000);
+          }
+          catch { System.Threading.Thread.Sleep(3000); }
+        }
+      });
+    }
+
+    #endregion
+
+    #region 鈻� 鏁村悎璁惧___________________________
+
+    /// <summary>
+    /// 鑾峰彇鍒嗙粍鍚庣殑璁惧
+    /// </summary>
+    /// <returns></returns>
+    private Dictionary<string, DeviceRowInfo> GetAllGroupDevice(Common.Room room)
+    {
+      //鍏ㄩ儴鐨勮澶�
+      var listDeviceTemp = HdlRoomLogic.Current.GetRoomListDevice(room);
+      var listDevice = new List<CommonDevice>();
+      foreach (var device in listDeviceTemp)
+      {
+        //鍒ゆ柇璇ヨ澶囪兘鍚︽樉绀哄湪鍒嗙被
+        if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
+        {
+          continue;
+        }
+        listDevice.Add(device);
+      }
+
+      //鏍规嵁璁惧鎵�灞炵被鍨嬫帓搴�
+      listDevice = LocalDevice.Current.SortDeviceByBelongType(listDevice);
+      var dic = new Dictionary<string, DeviceRowInfo>();
+      foreach (var device in listDevice)
+      {
+        var typeInfo = LocalDevice.Current.GetDeviceBelongEnumInfo(device);
+        //鎸夋墍灞濱D鍒嗙粍
+        if (dic.ContainsKey(typeInfo.BeloneText) == false)
+        {
+          dic[typeInfo.BeloneText] = new DeviceRowInfo();
+          string path1 = string.Empty;
+          string path2 = string.Empty;
+          //鑾峰彇鍥剧墖
+          LocalDevice.Current.GetDeviceFunctionTypeMenuIcon(typeInfo, ref path1, ref path2);
+          dic[typeInfo.BeloneText].IconPath = path1;
+          dic[typeInfo.BeloneText].IconPathSelected = path2;
+          dic[typeInfo.BeloneText].Text = typeInfo.BeloneText;
+        }
+        dic[typeInfo.BeloneText].listDeviceKeys.Add(LocalDevice.Current.GetDeviceMainKeys(device));
+      }
+      return dic;
+    }
+
+    #endregion
+
+    #region 鈻� 鐣岄潰鍏抽棴___________________________
+
+    /// <summary>
+    /// 鐣岄潰鍏抽棴
+    /// </summary>
+    public override void CloseFormBefore()
+    {
+      //鎶婇潤鎬佸彉閲忕殑杩欎釜涓滆タ缃┖
+      instance = null;
+      HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormDeviceStatus");
+      HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormDeviceOnline");
+      HdlGatewayReceiveLogic.Current.RemoveEvent("CategoryMainFormSensor");
+
+      base.CloseFormBefore();
+    }
+
+    #endregion
+
+    #region 鈻� 涓�鑸柟娉昣__________________________
+
+    /// <summary>
+    /// 鑾峰彇鏃堕棿鐨勭炕璇戞枃鏈�
+    /// </summary>
+    /// <param name="second"></param>
+    /// <param name="hourText">灏忔椂鐨勬枃鏈�</param>
+    /// <param name="minuText">鍒嗙殑鏂囨湰</param>
+    /// <param name="secondText">绉掔殑鏂囨湰</param>
+    /// <returns></returns>
+    private string GetTimeString(int second, string hourText, string minuText, string secondText)
+    {
+      string timeStr = string.Empty;
+      int hour = second / 3600;
+      int minu = second % 3600 / 60;
+      int sec = second % 60;
+      if (hour > 0)
+      {
+        timeStr += hour + hourText;
+      }
+      if (minu > 0)
+      {
+        timeStr += minu + minuText;
+      }
+      if (sec > 0)
+      {
+        timeStr += sec + secondText;
+      }
+      return timeStr;
+    }
+
+    #endregion
+
+    #region 鈻� 缁撴瀯浣揰____________________________
+
+    /// <summary>
+    /// 璁惧琛屼俊鎭�
+    /// </summary>
+    private class DeviceRowInfo
+    {
+      /// <summary>
+      /// 鏂囨湰,鐩墠鐢ㄦ潵鍋氫富閿�
+      /// </summary>
+      public string Text = string.Empty;
+      /// <summary>
+      /// 鍥炬爣
+      /// </summary>
+      public string IconPath = string.Empty;
+      /// <summary>
+      /// 鍥炬爣
+      /// </summary>
+      public string IconPathSelected = string.Empty;
+      /// <summary>
+      /// 璁惧鍥炶矾涓婚敭
+      /// </summary>
+      public List<string> listDeviceKeys = new List<string>();
+    }
+
+    #endregion
+  }
 }

--
Gitblit v1.8.0