From 2109463fab2eb1caed189e4f258e0e763c5cea7b Mon Sep 17 00:00:00 2001
From: WJC <wjc@hdlchina.com.cn>
Date: 星期四, 07 十一月 2019 11:58:53 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev-tzy' into dev-wjc

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/AirConditionerModeForm.cs |  165 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 143 insertions(+), 22 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/AirConditionerModeForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/AirConditionerModeForm.cs
index d413616..470479a 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/AirConditionerModeForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/AirConditionerModeForm.cs
@@ -16,6 +16,18 @@
         /// 褰撳墠閫夋嫨鐨勭綉鍏�
         /// </summary>
         private AC deviceAc = null;
+        /// <summary>
+        /// 涓婃姤鐨勬暟鎹�(鐢ㄤ簩杩涘埗鏉ョ帺鑷畾涔夋ā寮� 0:鍒跺喎 1:鍒剁儹 2:閫侀 3:闄ゆ箍 4:鑷姩 5~7:澶囩敤)
+        /// </summary>
+        private string reportValue = null;
+        /// <summary>
+        /// 鏃х殑鏁版嵁
+        /// </summary>
+        private string oldReportValue = null;
+        /// <summary>
+        /// 鍥哄畾棰勭暀鐨勬暟鎹�
+        /// </summary>
+        private string fixValue = null;
 
         #endregion
 
@@ -31,6 +43,9 @@
 
             //璁剧疆澶撮儴淇℃伅
             base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditionerMode));
+
+            //璇诲彇绌鸿皟鑷畾涔夋ā寮�
+            this.ReadAirConditionerModeSupport();
 
             //鍒濆鍖栦腑閮ㄤ俊鎭�
             this.InitMiddleFrame();
@@ -50,27 +65,71 @@
             listView.Height = bodyFrameLayout.Height + Application.GetRealHeight(6);
             bodyFrameLayout.AddChidren(listView);
 
-            //鍒跺喎
-            this.AddAirConditionerModeRow(listView, "AC/Mode_Cool2.png", Language.StringByID(R.MyInternationalizationString.uMode_Cool), 1);
-            //鍒剁儹
-            this.AddAirConditionerModeRow(listView, "AC/Mode_Heat2.png", Language.StringByID(R.MyInternationalizationString.uMode_Heat), 2);
-            //鑷姩
-            this.AddAirConditionerModeRow(listView, "AC/Mode_AutoSelected.png", Language.StringByID(R.MyInternationalizationString.uMode_Auto), 3);
-            //閫侀
-            this.AddAirConditionerModeRow(listView, "AC/Mode_Fan2.png", Language.StringByID(R.MyInternationalizationString.uMode_FanOnly), 4);
-            //闄ゆ箍
-            this.AddAirConditionerModeRow(listView, "AC/Mode_Dry2.png", Language.StringByID(R.MyInternationalizationString.uMode_Dry), 5);
-
-            listView.AdjustRealHeight(Application.GetRealHeight(23));
-
-            //淇濆瓨
-            var btnOk = new BottomClickButton();
-            btnOk.TextID = R.MyInternationalizationString.uSave;
-            bodyFrameLayout.AddChidren(btnOk);
-            btnOk.ButtonClickEvent += (sender, e) =>
+            HdlThreadLogic.Current.RunThread(() =>
             {
-                this.CloseForm();
-            };
+                //寮�鍚繘搴︽潯
+                this.ShowProgressBar();
+                int timeOut = 0;
+                while (this.reportValue == null && timeOut <= 30)
+                {
+                    System.Threading.Thread.Sleep(100);
+                    timeOut++;
+                }
+                if (this.reportValue == null)
+                {
+                    //鑾峰彇绌鸿皟妯″紡澶辫触
+                    string msg = Language.StringByID(R.MyInternationalizationString.uGetAcModeFail);
+                    msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
+                    this.ShowMassage(ShowMsgType.Tip, msg);
+                    this.CloseProgressBar(ShowReLoadMode.YES);
+                    return;
+                }
+                //鍏抽棴杩涘害鏉�
+                this.CloseProgressBar();
+
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍒跺喎
+                    this.AddAirConditionerModeRow(listView, "AC/Mode_Cool2.png", Language.StringByID(R.MyInternationalizationString.uMode_Cool), 0);
+                    //鍒剁儹
+                    this.AddAirConditionerModeRow(listView, "AC/Mode_Heat2.png", Language.StringByID(R.MyInternationalizationString.uMode_Heat), 1);
+                    //鑷姩
+                    this.AddAirConditionerModeRow(listView, "AC/Mode_AutoSelected.png", Language.StringByID(R.MyInternationalizationString.uMode_Auto), 4);
+                    //閫侀
+                    this.AddAirConditionerModeRow(listView, "AC/Mode_Fan2.png", Language.StringByID(R.MyInternationalizationString.uMode_FanOnly), 2);
+                    //闄ゆ箍
+                    this.AddAirConditionerModeRow(listView, "AC/Mode_Dry2.png", Language.StringByID(R.MyInternationalizationString.uMode_Dry), 3);
+
+                    listView.AdjustRealHeight(Application.GetRealHeight(23));
+
+                    //淇濆瓨
+                    var btnOk = new BottomClickButton();
+                    btnOk.TextID = R.MyInternationalizationString.uSave;
+                    bodyFrameLayout.AddChidren(btnOk);
+                    btnOk.ButtonClickEvent += async (sender, e) =>
+                     {
+                         if (this.oldReportValue == this.reportValue)
+                         {
+                            //鏁版嵁鐩稿悓,涓嶉渶瑕佷慨鏀�
+                            this.CloseForm();
+                             return;
+                         }
+                         //灏嗕簩杩涘埗杞崲涓哄崄杩涘埗
+                         var data = Convert.ToInt32(this.fixValue + this.reportValue, 2);
+                         var result = await HdlDeviceAirConditionerLogic.Current.SetAcModeSupport(deviceAc, data);
+                         if (result == true)
+                         {
+                             //鏇存敼缂撳瓨
+                             for (int i = 0; i < this.reportValue.Length; i++)
+                             {
+                                 deviceAc.listSupportMode[i] = Convert.ToInt32(reportValue[i]);
+                             }
+                             deviceAc.ReSave();
+                             this.CloseForm();
+                         }
+                     };
+                });
+            });
         }
 
         /// <summary>
@@ -90,21 +149,83 @@
             //鏄剧ず鏂囨湰
             var btnText = rowFrame.AddLeftCaption(textValue, 400);
             btnText.TextSize = 15;
-            if (div != 5)
+            if (div != 3)
             {
                 //搴曠嚎
                 rowFrame.AddBottomLine();
             }
             //閫夋嫨
             var btnSelect = rowFrame.AddMostRightEmptyIcon(58, 58);
-            btnSelect.Visible = false;
+            if (this.reportValue[div] == '0')
+            {
+                btnSelect.Visible = false;
+            }
             btnSelect.UnSelectedImagePath = "Item/ItemSelected.png";
             rowFrame.ButtonClickEvent += (sender, e) =>
             {
                 btnSelect.Visible = !btnSelect.Visible;
+                //鍙樻洿鍊�
+                if (btnSelect.Visible == true)
+                {
+                    this.reportValue = reportValue.Substring(0, div) + "1" + reportValue.Substring(div + 1);
+                }
+                else
+                {
+                    this.reportValue = reportValue.Substring(0, div) + "0" + reportValue.Substring(div + 1);
+                }
             };
         }
 
         #endregion
+
+        #region 鈻� 璇诲彇绌鸿皟鑷畾涔夋ā寮廮________________
+
+        /// <summary>
+        /// 璇诲彇绌鸿皟鑷畾涔夋ā寮�
+        /// </summary>
+        private void ReadAirConditionerModeSupport()
+        {
+            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(deviceAc);
+            HdlDeviceAttributeLogic.Current.AddAttributeEvent("ReadAirConditionerModeSupport", "DeviceStatusReport", (report) =>
+            {
+                string checkKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
+                if (checkKeys != mainkeys || report.DeviceStatusReport.CluterID != 513)
+                {
+                    return;
+                }
+                for (int i = 0; i < report.DeviceStatusReport.AttriBute.Count; i++)
+                {
+                    var data = report.DeviceStatusReport.AttriBute[i];
+                    if (data.AttributeId == 4099)
+                    {
+                        HdlDeviceAttributeLogic.Current.RemoveEvent("ReadAirConditionerModeSupport");
+                        //杞崲涓轰簩杩涘埗
+                        var value = Convert.ToString(data.AttriButeData, 2).PadLeft(16, '0');
+                        //杩欎簲涓缃槸鏀惧湪鍚庨潰鐨�
+                        this.fixValue = value.Substring(0, value.Length - 5);
+                        this.reportValue = value.Substring(this.fixValue.Length);
+                        oldReportValue = reportValue;
+                    }
+                }
+            });
+            //鍙戦�佽鍙栫┖璋冭嚜瀹氫箟妯″紡
+            deviceAc.ReadModeSupport();
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰鍏抽棴___________________________
+
+        /// <summary>
+        /// 鐣岄潰鍏抽棴
+        /// </summary>
+        public override void CloseForm()
+        {
+            HdlDeviceAttributeLogic.Current.RemoveEvent("ReadAirConditionerModeSupport");
+
+            base.CloseForm();
+        }
+
+        #endregion
     }
 }

--
Gitblit v1.8.0