From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期五, 10 七月 2020 10:52:13 +0800
Subject: [PATCH] 2020-07-10-01

---
 ZigbeeApp/Shared/Phone/MainPage/Controls/DeviceCard/Base/DeviceCardCommon.cs |  216 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 159 insertions(+), 57 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/MainPage/Controls/DeviceCard/Base/DeviceCardCommon.cs b/ZigbeeApp/Shared/Phone/MainPage/Controls/DeviceCard/Base/DeviceCardCommon.cs
index ecd5188..d3cc6fc 100755
--- a/ZigbeeApp/Shared/Phone/MainPage/Controls/DeviceCard/Base/DeviceCardCommon.cs
+++ b/ZigbeeApp/Shared/Phone/MainPage/Controls/DeviceCard/Base/DeviceCardCommon.cs
@@ -9,10 +9,14 @@
     /// <summary>
     /// 涓婚〉鐨勮澶囧崱鐗囨帶浠跺簳灞傚叡閫�(瀹藉害:458 + 14 * 2 楂樺害:305 + 43)
     /// </summary>
-    public class DeviceCardCommon : FrameLayoutControl
+    public class DeviceCardCommon : FrameLayoutStatuControl
     {
         #region 鈻� 鍙橀噺澹版槑___________________________
 
+        /// <summary>
+        /// 璁惧瀵硅薄
+        /// </summary>
+        public CommonDevice device = null;
         /// <summary>
         /// 鍗$墖闇�瑕佽绉婚櫎鐨勪簨浠�
         /// </summary>
@@ -28,7 +32,7 @@
         /// <summary>
         /// 璁惧鐨勮儗鏅渾鍦堝浘鎺т欢
         /// </summary>
-        private NormalViewControl btnDeviceRound = null;
+        private FrameLayout fraDeviceRound = null;
         /// <summary>
         /// 璁惧鍥炬爣鎺т欢
         /// </summary>
@@ -42,9 +46,21 @@
         /// </summary>
         private PicViewControl btnSwitch = null;
         /// <summary>
+        /// 鏀堕泦鎺т欢
+        /// </summary>
+        private IconViewControl btnCollect = null;
+        /// <summary>
         /// 鏄惁鑾峰彇缃戝叧鍙嶉鐨勭粨鏋�  0:娌℃湁鑾峰彇寰楀埌  1:宸茬粡鑾峰彇寰楀埌
         /// </summary>
         private int ResponeResult = 0;
+        /// <summary>
+        /// 鍒ゆ柇鏄惁鏈夊紑鍏冲姛鑳�
+        /// </summary>
+        private bool isHadOpenSwitch = true;
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬埧闂�
+        /// </summary>
+        public Common.Room nowSelectRoom = null;
 
         #endregion
 
@@ -56,9 +72,9 @@
         public DeviceCardCommon()
         {
             //鍥剧墖鐪熷疄瀹藉害+鍥剧墖鑷韩宸﹀彸绌虹櫧
-            this.Width = Application.GetMinRealAverage(458 + 14 * 2);
+            this.Width = HdlControlLogic.Current.GetPictrueRealSize(458 + 14 * 2);
             //鍥剧墖楂樺害+闃村奖
-            this.Height = Application.GetMinRealAverage(305 + 43);
+            this.Height = HdlControlLogic.Current.GetPictrueRealSize(305 + 43);
             //鍙栨秷鐐瑰嚮鐗规晥
             this.UseClickStatu = false;
         }
@@ -67,29 +83,32 @@
         /// 鍒濆鍖栨帶浠�
         /// </summary>
         /// <param name="i_device">鎸囧畾璁惧</param>
-        public virtual void InitControl(CommonDevice i_device)
+        /// <param name="i_nowSelectRoom">褰撳墠閫夋嫨鐨勬埧闂�(鏈夌偣鐢ㄥ)</param>
+        public virtual void InitControl(CommonDevice i_device, Common.Room i_nowSelectRoom)
         {
+            this.device = i_device;
+            this.nowSelectRoom = i_nowSelectRoom;
             //鑳屾櫙鍥剧墖
             this.btnBackGroud = new PicViewControl(this.Width, this.Height, false);
             btnBackGroud.UnSelectedImagePath = "Item/FunctionCardView.png";
             btnBackGroud.SelectedImagePath = "Item/FunctionCardViewSelected.png";
             btnBackGroud.Gravity = Gravity.CenterHorizontal;
-            this.AddChidren(btnBackGroud, ChidrenBindMode.BindEventOnly);
+            this.AddChidren(btnBackGroud, ChidrenBindMode.BindEvent);
 
             //璁惧鍚嶇О鎺т欢
             this.btnDeviceName = new NormalViewControl(320, 63, true);
-            btnDeviceName.X = Application.GetMinRealAverage(40);
-            btnDeviceName.Y = Application.GetMinRealAverage(17);
+            btnDeviceName.X = HdlControlLogic.Current.GetPictrueRealSize(40);
+            btnDeviceName.Y = HdlControlLogic.Current.GetPictrueRealSize(17);
             btnDeviceName.TextSize = 16;
             btnDeviceName.TextColor = UserCenterColor.Current.TextGrayColor1;
             btnDeviceName.SelectedTextColor = UserCenterColor.Current.White;
             btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
-            this.AddChidren(btnDeviceName, ChidrenBindMode.BindEventOnly);
+            this.AddChidren(btnDeviceName, ChidrenBindMode.BindEvent);
 
             //鏀堕泦鎺т欢
-            var btnCollect = new IconViewControl(107);
-            btnCollect.X = Application.GetMinRealAverage(350);
-            btnCollect.Y = Application.GetMinRealAverage(12);
+            this.btnCollect = new IconViewControl(107);
+            btnCollect.X = HdlControlLogic.Current.GetPictrueRealSize(350);
+            btnCollect.Y = HdlControlLogic.Current.GetPictrueRealSize(12);
             btnCollect.UnSelectedImagePath = "Item/Collection1.png";
             btnCollect.SelectedImagePath = "Item/CollectionSelected1.png";
             this.AddChidren(btnCollect, ChidrenBindMode.NotBind);
@@ -102,7 +121,7 @@
                 {
                     //鍙栨秷鏀惰棌
                     HdlRoomLogic.Current.DeleteLoveDevice(i_device);
-                    if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
+                    if (this.nowSelectRoom.IsLove == true)
                     {
                         //濡傛灉褰撳墠鎴块棿鏄垜鐨勫枩鐖辩殑璇�,鍥炶皟鍗$墖琚垹闄ょ殑浜嬩欢
                         this.CardNeedRemoveEvent?.Invoke();
@@ -116,37 +135,36 @@
             };
 
             //璁惧鐨勮儗鏅渾鍦堝浘
-            this.btnDeviceRound = new NormalViewControl(Application.GetMinRealAverage(124), Application.GetMinRealAverage(124), false);
-            btnDeviceRound.Radius = (uint)Application.GetMinRealAverage(124) / 2;
-            btnDeviceRound.X = Application.GetMinRealAverage(44);
-            btnDeviceRound.Y = Application.GetMinRealAverage(101);
-            btnDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionUnSelectedBackgroundColor;
-            btnDeviceRound.SelectedBackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionBackgroundColor;
-            this.AddChidren(btnDeviceRound, ChidrenBindMode.BindEventOnly);
+            this.fraDeviceRound = new FrameLayout();
+            fraDeviceRound.Width = HdlControlLogic.Current.GetPictrueRealSize(124);
+            fraDeviceRound.Height = HdlControlLogic.Current.GetPictrueRealSize(124);
+            fraDeviceRound.Radius = (uint)HdlControlLogic.Current.GetPictrueRealSize(124) / 2;
+            fraDeviceRound.X = HdlControlLogic.Current.GetPictrueRealSize(44);
+            fraDeviceRound.Y = HdlControlLogic.Current.GetPictrueRealSize(101);
+            fraDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionUnSelectedBackgroundColor;
+            this.AddChidren(fraDeviceRound, ChidrenBindMode.BindEvent);
 
             //璁惧鍥炬爣鎺т欢
             this.btnDeviceIcon = new IconViewControl(86);
-            btnDeviceIcon.X = Application.GetMinRealAverage(63);
-            btnDeviceIcon.Y = Application.GetMinRealAverage(121);
-            this.AddChidren(btnDeviceIcon, ChidrenBindMode.BindEventOnly);
+            btnDeviceIcon.Gravity = Gravity.Center;
+            fraDeviceRound.AddChidren(btnDeviceIcon);
+            this.ChangedChidrenBindMode(fraDeviceRound, ChidrenBindMode.BindEvent);
 
             //鐘舵�佹枃鏈帶浠�
-            this.btnStatu = new NormalViewControl(Application.GetMinRealAverage(280), Application.GetMinRealAverage(63), false);
-            btnStatu.X = Application.GetMinRealAverage(46);
-            btnStatu.Y = Application.GetMinRealAverage(236);
+            this.btnStatu = new NormalViewControl(HdlControlLogic.Current.GetPictrueRealSize(300), HdlControlLogic.Current.GetPictrueRealSize(63), false);
+            btnStatu.X = HdlControlLogic.Current.GetPictrueRealSize(46);
+            btnStatu.Y = HdlControlLogic.Current.GetPictrueRealSize(236);
             btnStatu.TextColor = UserCenterColor.Current.TextColor1;
             btnStatu.SelectedTextColor = Common.ZigbeeColor.Current.GXCTextSelectedColor;
             btnStatu.IsBold = true;
-            this.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly);
+            this.AddChidren(btnStatu, ChidrenBindMode.BindEvent);
 
             //寮�鍏虫帶浠�(涓嶅姞鍏ョ埗鎺т欢涓�)
             this.btnSwitch = new PicViewControl(109, 104);
-            btnSwitch.X = Application.GetMinRealAverage(325);
-            btnSwitch.Y = Application.GetMinRealAverage(202);
+            btnSwitch.X = HdlControlLogic.Current.GetPictrueRealSize(325);
+            btnSwitch.Y = HdlControlLogic.Current.GetPictrueRealSize(202);
             btnSwitch.UnSelectedImagePath = "Item/Switch1.png";
             btnSwitch.SelectedImagePath = "Item/SwitchSelected1.png";
-            this.AddChidren(this.btnSwitch, ChidrenBindMode.NotBind);
-            btnSwitch.Visible = false;
 
             //鍒锋柊淇℃伅
             this.RefreshControlInfo(i_device);
@@ -162,7 +180,7 @@
         /// <returns></returns>
         public PicViewControl AddSwitchControl()
         {
-            btnSwitch.Visible = true;
+            this.AddChidren(this.btnSwitch, ChidrenBindMode.NotBind);
             return btnSwitch;
         }
 
@@ -176,21 +194,35 @@
         /// <param name="i_device">璁惧瀵硅薄,涓嶆槸鎺ㄩ�佺殑閭d釜</param>
         public void RefreshControlInfo(CommonDevice i_device)
         {
-            //璁惧鐘舵�佸繀椤诲埛鏂�
-            this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(i_device);
+            bool collect = HdlRoomLogic.Current.IsCollectInRoom(i_device);
+            if (btnCollect.IsSelected != collect)
+            {
+                btnCollect.IsSelected = collect;
+            }
             //璁惧鍥炬爣涔熷埛鏂�
-            Common.LocalDevice.Current.SetDeviceIconToControl(btnDeviceIcon, i_device);
+            Common.LocalDevice.Current.SetDeviceIconToControl2(btnDeviceIcon, i_device);
+            //鍚嶅瓧鍒锋柊
+            this.btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
             //妫�娴嬭澶囨槸鍚︽槸鎵撳紑鐘舵��
             bool isOpen = this.CheckIsOpenStatu(i_device);
-            this.SetCardStatu(isOpen);
+            if (this.isHadOpenSwitch == true && i_device.HadReadDeviceStatu == false)
+            {
+                //濡傛灉杩欎釜鍗$墖鏈夊紑鍏冲姛鑳�,骞朵笖缃戝叧杩樻病鏈夊洖澶嶄箣鍓�,榛樿鏄叧闂姸鎬�
+                //绛夊緟缃戝叧鍥炲鍚庝細閲嶆柊鍒锋柊,涓嶇劧涓�鐩存槸鍏抽棴鐘舵��
+                isOpen = false;
+            }
+            this.SetCardOpenStatu(isOpen);
         }
 
         /// <summary>
         /// 璁剧疆鍗$墖鐘舵��
         /// </summary>
         /// <param name="isOpen"></param>
-        public void SetCardStatu(bool isOpen)
+        public void SetCardOpenStatu(bool isOpen)
         {
+            //璁惧鐘舵�佸繀椤诲埛鏂�
+            this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device);
+
             if (this.btnBackGroud.IsSelected == isOpen)
             {
                 //鐘舵�佷竴鏍�,鍒欎笉闇�瑕佸鐞�
@@ -202,13 +234,37 @@
             this.btnDeviceName.IsSelected = isOpen;
             this.btnDeviceName.IsBold = isOpen;
             //璁惧鐨勮儗鏅渾鍦堝浘
-            this.btnDeviceRound.IsSelected = isOpen;
+            if (isOpen == true)
+            {
+                fraDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionBackgroundColor;
+            }
+            else
+            {
+                fraDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionUnSelectedBackgroundColor;
+            }
             //璁惧鍥炬爣鎺т欢
             this.btnDeviceIcon.IsSelected = isOpen;
             //鐘舵�佹枃鏈帶浠�
             this.btnStatu.IsSelected = isOpen;
             //寮�鍏虫帶浠�
-            this.btnSwitch.IsSelected = isOpen;
+            if (btnSwitch != null)
+            {
+                this.btnSwitch.IsSelected = isOpen;
+            }
+        }
+
+        /// <summary>
+        /// 璁剧疆鍗$墖鐨勫湪绾跨姸鎬�
+        /// </summary>
+        /// <param name="isOnline">鍦ㄧ嚎</param>
+        public void SetCardOnlineStatu(bool isOnline)
+        {
+            if (this.isHadOpenSwitch == true)
+            {
+                //濡傛灉杩欎釜璁惧鏈夊紑鍏冲姛鑳�,鍒欏湪绾跨姸鎬佷笉浼氭敼鍙樼姸鎬�
+                return;
+            }
+            this.SetCardOpenStatu(isOnline);
         }
 
         /// <summary>
@@ -227,8 +283,7 @@
         /// <summary>
         /// 鍙戦�佽幏鍙栫姸鎬佸懡浠�
         /// </summary>
-        /// <param name="i_device"></param>
-        public virtual void SendStatuComand(CommonDevice i_device)
+        public virtual void SendStatuComand()
         {
             return;
         }
@@ -244,8 +299,10 @@
         /// <returns></returns>
         public virtual bool CheckIsOpenStatu(CommonDevice i_device)
         {
+            //濡傛灉杩欎釜鍑芥暟琚噸鍐欑殑璇�,鍒欎唬琛ㄨ繖涓澶囨湁寮�鍏冲姛鑳�
+            this.isHadOpenSwitch = false;
             //榛樿鐢ㄥ湪绾跨姸鎬佹潵鍒ゆ柇
-            return i_device.IsOnline == 1;
+            return Common.LocalDevice.Current.CheckDeviceIsOnline(i_device);
         }
 
 
@@ -257,22 +314,26 @@
         /// 娣卞害鍗$墖淇℃伅鐨勮繑鍥炰簨浠�(搴曞眰涓撶敤)
         /// </summary>
         /// <param name="device">璁惧</param>
-        /// <param name="room">鎴块棿</param>
-        public void CardDetailInfoBackEvent(CommonDevice device, Common.Room room)
+        public void CardDetailInfoBackEvent(CommonDevice device)
         {
-            //濡傛灉鏄富椤靛彇娑堟悳钘忕殑璇�,鍥炶皟鍗$墖琚垹闄ょ殑鍑芥暟
-            if (HdlRoomLogic.Current.CurrentRoom.IsLove
-            && HdlRoomLogic.Current.IsCollectInRoom(device) == false)
+            if (this.nowSelectRoom.IsLove == true)
             {
-                this.CardNeedRemoveEvent?.Invoke();
-                return;
+                //濡傛灉鏄富椤靛彇娑堟悳钘忕殑璇�,鍥炶皟鍗$墖琚垹闄ょ殑鍑芥暟
+                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
+                {
+                    this.CardNeedRemoveEvent?.Invoke();
+                    return;
+                }
             }
-            //濡傛灉杩欎釜璁惧鏀瑰彉浜嗘埧闂寸殑璇�,鍥炶皟鍗$墖琚垹闄ょ殑鍑芥暟
-            var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
-            if (nowRoom == null || nowRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
+            else
             {
-                this.CardNeedRemoveEvent?.Invoke();
-                return;
+                //濡傛灉杩欎釜璁惧鏀瑰彉浜嗘埧闂寸殑璇�,鍥炶皟鍗$墖琚垹闄ょ殑鍑芥暟
+                var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
+                if (nowRoom == null || nowRoom.Id != this.nowSelectRoom.Id)
+                {
+                    this.CardNeedRemoveEvent?.Invoke();
+                    return;
+                }
             }
             //濡傛灉瀹冭繕鍦ㄨ繖涓埧闂寸殑璇�,鍒锋柊鍗$墖淇℃伅
             this.RefreshControlInfo(device);
@@ -289,10 +350,18 @@
         /// <param name="oldOpenStatu">璁惧鐩墠鐨勫紑鍏崇姸鎬�</param>
         public void StartCheckResponeResult(bool oldOpenStatu)
         {
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�,鍒欐鍔熻兘鏃犳晥
+                return;
+            }
             this.ResponeResult = 0;
+            //寮�鍏虫寜閽笉鑳藉啀鐐瑰嚮
+            if (btnSwitch != null) { this.btnSwitch.CanClick = false; }
+
             HdlThreadLogic.Current.RunThread(() =>
             {
-                int waitime = 30 * 100;
+                int waitime = 40;
                 while (waitime > 0)
                 {
                     System.Threading.Thread.Sleep(100);
@@ -301,8 +370,16 @@
                         //宸茬粡鑾峰彇寰楀埌鏁版嵁
                         break;
                     }
+                    waitime--;
+                    //2绉掔殑鏃跺��,杩樻槸鎺ュ彈涓嶅埌鐨勮瘽,寮哄埗鍐嶆鍒锋柊璁惧鐘舵��
+                    if (waitime == 20)
+                    {
+                        //浠庢柊鍙戦�佽幏鍙栬澶囩殑鐘舵��(寮哄埗)
+                        this.device.HadReadDeviceStatu = false;
+                        this.SendStatuComand();
+                    }
                 }
-                if (waitime <= 0)
+                if (waitime <= 0 && this.Parent != null)
                 {
                     //娌℃湁鑾峰彇寰楀埌缁撴灉
                     HdlThreadLogic.Current.RunMain(() =>
@@ -310,9 +387,11 @@
                         var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL));
                         msgContr.Show();
                         //鍙樻洿鍥炲師鏉ョ殑鐘舵��
-                        this.SetCardStatu(oldOpenStatu);
+                        this.SetCardOpenStatu(oldOpenStatu);
                     });
                 }
+                //寮�鍏虫寜閽笉鑳藉啀鐐瑰嚮
+                if (btnSwitch != null) { this.btnSwitch.CanClick = true; }
             });
         }
 
@@ -326,6 +405,29 @@
 
         #endregion
 
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 妫�娴嬭兘鍚﹀彂閫佽幏鍙栫姸鎬佸懡浠�
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckCanSendStatuComand()
+        {
+            if (this.device.HadReadDeviceStatu == false)
+            {
+                //杩樻病鏈夎鍙栬繃鏁版嵁
+                return true;
+            }
+            if ((DateTime.Now - this.device.LastDateTime).TotalMinutes >= 10)
+            {
+                //10鍒嗛挓鍚庡彲浠ュ啀娆¤幏鍙�
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
         #region 鈻� 鎺т欢鎽ф瘉___________________________
 
         /// <summary>

--
Gitblit v1.8.0