From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 16 四月 2020 17:10:57 +0800 Subject: [PATCH] 请合并代码 --- ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs | 1161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,161 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs new file mode 100755 index 0000000..0dc5e74 --- /dev/null +++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs @@ -0,0 +1,1161 @@ +锘縰sing Shared.Common; +using System; +using System.Collections.Generic; +using System.Text; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter.Device +{ + /// <summary> + /// 璁惧鍒楄〃鐨勪富鐣岄潰 + /// </summary> + public class DeviceListMainForm : EditorCommonForm + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 缃戝叧鎺т欢 + /// </summary> + private MyGatewayControl gatewayViewRow = null; + /// <summary> + /// 鍒楄〃鎺т欢 + /// </summary> + private VerticalListRefreshControl listView = null; + /// <summary> + /// 鍓嶄竴娆℃樉绀哄嚭宸︽粦鑿滃崟鐨凴owLayout + /// </summary> + private RowLayoutControl oldShowRightMuneRow = null; + /// <summary> + /// 琛屾帶浠剁殑淇℃伅(Keys锛歁ac鍦板潃) + /// </summary> + private Dictionary<string, DeviceObjRowInfo> dicRowInfo = new Dictionary<string, DeviceObjRowInfo>(); + /// <summary> + /// 閲嶆柊鑾峰彇璁惧鐨勫湪绾跨姸鎬� + /// </summary> + private bool reGetDeviceOnlineStatu = false; + /// <summary> + /// 褰撳墠姝e湪鎿嶄綔鐨勮澶囧璞ac鍦板潃(璁惧淇℃伅缂栬緫鐣岄潰鐢�) + /// </summary> + private string nowActionDeviceMac = null; + + #endregion + + #region 鈻� 鍒濆鍖朹____________________________ + + /// <summary> + /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓) + /// </summary> + public void ShowForm() + { + this.ScrollEnabled = false; + + //璁剧疆鏍囬淇℃伅 + base.SetTitleText(Language.StringByID(R.MyInternationalizationString.DeviceManagement)); + + //鍙充笂娣诲姞鎸夐挳 + var btnAddDeviceIcon = new MostRightIconControl(69, 69); + btnAddDeviceIcon.UnSelectedImagePath = "Item/Add.png"; + topFrameLayout.AddChidren(btnAddDeviceIcon); + btnAddDeviceIcon.InitControl(); + btnAddDeviceIcon.ButtonClickEvent += (sender, e) => + { + ZbGateway realWay = null; + if (GatewayResourse.NowSelectGateway == null || HdlGatewayLogic.Current.GetRealGateway(ref realWay, GatewayResourse.NowSelectGateway) == false) + { + //缃戝叧瀵硅薄寮傚父,璇烽噸鏂伴�夋嫨缃戝叧 + string msg = Language.StringByID(R.MyInternationalizationString.uGatewayIsErrorAndReSelect); + this.ShowMassage(ShowMsgType.Error, msg, () => + { + var form2 = new GatewayManage.GatewayListForm(); + form2.AddForm(); + }); + return; + } + GatewayResourse.NowSelectGateway = realWay; + + var form = new DeviceDirection.AddDeviceTypeListForm(); + form.AddForm(); + }; + + //鍒濆鍖栦腑閮ㄦ帶浠� + this.InitMiddleFrame(); + } + + /// <summary> + /// 鍒濆鍖栦腑閮ㄦ帶浠�(澶栭儴鍙互璋冪敤) + /// </summary> + /// <param name="i_reGetDeviceOnlineStatu">閲嶆柊鑾峰彇璁惧鐨勫湪绾跨姸鎬�</param> + public void InitMiddleFrame(bool i_reGetDeviceOnlineStatu = true) + { + this.reGetDeviceOnlineStatu = i_reGetDeviceOnlineStatu; + //娓呯┖bodyFrame + this.ClearBodyFrame(); + + //鍒濆鍖栫綉鍏宠鎺т欢 + GatewayResourse.NowSelectGateway = HdlGatewayLogic.Current.GetLocalGateway(GatewayResourse.AppOldSelectGatewayId); + this.gatewayViewRow = new MyGatewayControl(GatewayResourse.NowSelectGateway); + bodyFrameLayout.AddChidren(gatewayViewRow); + gatewayViewRow.InitControl(); + + //鍒濆鍖栨悳绱㈡帶浠� + this.InitSearchControl(); + + HdlThreadLogic.Current.RunThread(() => + { + //鍒濆鍖栬澶囧垪琛ㄦ帶浠� + this.InitDeviceListControl(); + }); + } + + #endregion + + #region 鈻� 鍒濆鍖栨悳绱㈡帶浠禵____________________ + + /// <summary> + /// 鍒濆鍖栨悳绱㈡帶浠� + /// </summary> + private void InitSearchControl() + { + //鐧借壊鑳屾櫙 + var frame = new FrameLayout(); + frame.BackgroundColor = UserCenterColor.Current.White; + frame.Y = this.gatewayViewRow.Bottom + Application.GetRealHeight(23); + frame.Height = bodyFrameLayout.Height - this.gatewayViewRow.Bottom - Application.GetRealHeight(23); + bodyFrameLayout.AddChidren(frame); + + //鎼滅储璁惧鍏抽敭璇� + string textTip = Language.StringByID(R.MyInternationalizationString.uSearchDeviceKeyWorld); + var txtSearchControl = new SearchTextControl(textTip); + frame.AddChidren(txtSearchControl); + txtSearchControl.Y = Application.GetRealHeight(46); + //缁戝畾鍥炶皟鍑芥暟 + txtSearchControl.BindEvent(this.SetRowDataBySearchKeys); + + //鍒楄〃鎺т欢 + listView = new VerticalListRefreshControl(29); + listView.Y = txtSearchControl.Bottom + Application.GetRealHeight(29); + listView.Height = frame.Height - txtSearchControl.Bottom - Application.GetRealHeight(29); + frame.AddChidren(listView); + listView.BeginHeaderRefreshingAction += () => + { + HdlThreadLogic.Current.RunThread(() => + { + //涓嬫媺鍒锋柊 + this.ListViewBeginHeaderRefreshing(); + }); + }; + } + + #endregion + + #region 鈻� 鍒濆鍖栬澶囧垪琛ㄦ帶浠禵________________ + + /// <summary> + /// 鍒濆鍖栬澶囧垪琛ㄦ帶浠� + /// </summary> + private void InitDeviceListControl() + { + //鑾峰彇璁惧鍒楄〃 + string gwID = HdlGatewayLogic.Current.GetGatewayId(GatewayResourse.NowSelectGateway); + var listDevice = Common.LocalDevice.Current.GetDeviceByGatewayID(gwID); + var listSpecialOta = Common.LocalDevice.Current.GetSpecialOtaDevice(gwID); + listDevice.AddRange(listSpecialOta); + + this.dicRowInfo.Clear(); + + //娌℃湁璁惧 + if (listDevice.Count == 0) + { + return; + } + + //鏍规嵁MAC鍚堝苟璁惧鍒楄〃 + this.MargeAllDeviceByMac(listDevice); + + if (this.Parent == null) + { + return; + } + HdlThreadLogic.Current.RunMain(() => + { + var listOta = new List<OTADevice>(); + foreach (var macAddress in this.dicRowInfo.Keys) + { + //鑾峰彇ota璁惧 + var ota = Common.LocalDevice.Current.GetOTADevice(macAddress); + if (ota != null) + { + listOta.Add(ota); + } + //娣诲姞璁惧鐨勮彍鍗曡 + this.AddDeviceMenuRow(macAddress); + } + + //寮�鍚綉鍏冲湪绾跨洃娴嬬殑绾跨▼ + this.StartGatewayOnlieCheckThread(); + //妫�娴嬭澶囨柊鐗堟湰 + this.CheckDeviceNewVersion(listOta); + }); + } + + #endregion + + #region 鈻� 娣诲姞璁惧鑿滃崟琛宊____________________ + + /// <summary> + /// 娣诲姞璁惧鐨勮彍鍗曡 + /// </summary> + /// <param name="deviceMac">璁惧Mac鍦板潃</param> + private void AddDeviceMenuRow(string deviceMac) + { + var rowInfo = this.dicRowInfo[deviceMac]; + + //鍒涘缓涓�涓彲浠ュ睍寮�鍜屾敹缂╃殑FrameLayout,鐩稿綋浜庤彍鍗曟爮 + var frameTable = new FrameListControl(29); + frameTable.Height = ControlCommonResourse.ListViewRowHeight + frameTable.rowSpace; + listView.AddChidren(frameTable); + rowInfo.frameTable = frameTable; + + //鎺т欢 + var rowMenu = new DeviceObjectControl(deviceMac, listView.rowSpace / 2); + rowMenu.MainKeys = deviceMac; + frameTable.AddChidren(rowMenu); + rowMenu.InitControl(); + rowInfo.MenuRow = rowMenu; + //鍚戝彸鍥炬爣 + var btnRight = rowMenu.frameTable.AddMostRightEmptyIcon(58, 58); + btnRight.UnSelectedImagePath = "Item/RightNext.png"; + btnRight.SelectedImagePath = "Item/Down.png"; + rowMenu.frameTable.ChangedChidrenBindMode(btnRight, ChidrenBindMode.NotBind); + + //鎻愮ず鏂扮増鏈� + var btnNew = new InformationTipView(rowMenu.btnIcon); + btnNew.Visible = false; + rowMenu.frameTable.AddChidren(btnNew, ChidrenBindMode.BindEventOnly); + rowMenu.AddTag("btnNew", btnNew); + + //妫�娴嬭澶囨槸鍚︽嫢鏈夊畾浣嶇殑鍔熻兘 + var listdevice = Common.LocalDevice.Current.GetDevicesByMac(deviceMac); + if (listdevice.Count > 0 && Common.LocalDevice.Current.DeviceIsCanFixedPosition(listdevice[0]) == true) + { + //瀹氫綅 + var btnPosition = rowMenu.AddEditorControl(false); + btnPosition.TextID = R.MyInternationalizationString.uFixedPosition; + btnPosition.ButtonClickEvent += (sender, e) => + { + //瀹氫綅 + Common.LocalDevice.Current.SetFixedPositionCommand(listdevice[0]); + }; + } + + //灞曞紑,鎶樺彔 + btnRight.ButtonClickEvent += (sender, e) => + { + //鍥炶矾鏁板ぇ浜�1鎵嶅睍寮� + if (Common.LocalDevice.Current.GetDevicesCountByMac(deviceMac) > 1) + { + btnRight.IsSelected = !btnRight.IsSelected; + //灞曞紑鎴栬�呮姌鍙犳槑缁嗗垪琛� + this.ShowDetailList(deviceMac, btnRight.IsSelected); + } + else + { + btnNew.Visible = false; + var form = new DeviceMacInfoEditorForm(); + form.AddForm(deviceMac); + //鐣岄潰璺宠浆,璁板綍褰撳墠鐨勬鍦ㄦ搷浣滅殑璁惧鐨凪ac鍦板潃 + this.nowActionDeviceMac = deviceMac; + } + }; + + rowMenu.frameTable.ButtonClickEvent += (sender, e) => + { + //闅愯棌鑿滃崟 + rowMenu.HideMenu(); + //寮哄埗璺宠浆鐪熷疄璁惧鐣岄潰 + if (UserCenterResourse.HideOption.GotoRealDeviceForm == 1) + { + var form2 = new DeviceAddSuccessForm(); + form2.AddForm(deviceMac); + return; + } + btnNew.Visible = false; + var form = new DeviceMacInfoEditorForm(); + form.AddForm(deviceMac); + //鐣岄潰璺宠浆,璁板綍褰撳墠鐨勬鍦ㄦ搷浣滅殑璁惧鐨凪ac鍦板潃 + this.nowActionDeviceMac = deviceMac; + }; + //宸︽粦鑿滃崟浜嬩欢 + rowMenu.OpenMenuAction += () => + { + if (this.oldShowRightMuneRow != null && this.oldShowRightMuneRow.MainKeys != rowMenu.MainKeys) + { + //宸︽粦鑿滃崟鍙兘婊戜竴涓� + this.oldShowRightMuneRow.HideMenu(); + } + this.oldShowRightMuneRow = rowMenu; + }; + } + + #endregion + + #region 鈻� 灞曞紑鎶樺彔___________________________ + + /// <summary> + /// 灞曞紑鎴栬�呴殣钘忓垪琛� + /// </summary> + /// <param name="deviceMac">璁惧Mac鍦板潃</param> + /// <param name="isShow">鏄惁灞曞紑</param> + private void ShowDetailList(string deviceMac, bool isShow) + { + var rowInfo = this.dicRowInfo[deviceMac]; + //瀹冨師鏉ョ殑楂樺害 + int oldHeight = rowInfo.frameTable.Height; + //鍙樻洿鐨勯珮搴�,榛樿涓哄垪琛ㄩ殣钘� + int heightValue = ControlCommonResourse.ListViewRowHeight + rowInfo.frameTable.rowSpace; + var listDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceMac); + if (isShow == true) + { + //灞曞紑妯″紡鏃讹紝鎵╁ぇ渚濇嵁涓�:瀹冩湁鍑犱釜瀛愭帶浠� + heightValue = (listDevice.Count + 1) * (ControlCommonResourse.ListViewRowHeight + rowInfo.frameTable.rowSpace); + //鏍囬鑷繁灏辨槸涓�涓瓙鎺т欢 + if (rowInfo.frameTable.ChildrenCount == 1) + { + //鑾峰彇杩欎竴鍫嗚澶囨椂灞炰簬浠�涔堢被鍨嬬殑 + var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice); + foreach (CommonDevice info in listDevice) + { + //鍔犺浇瀹冪殑鍒楄〃 + this.AddDeviceDetailRow(rowInfo.frameTable, info, deviceEnumInfo); + } + } + } + //鑷韩楂樺害鍙樻洿 + rowInfo.frameTable.Height = heightValue; + } + + /// <summary> + /// 娣诲姞璁惧鐨勬槑缁嗚 + /// </summary> + /// <param name="frame">瀹瑰櫒</param> + /// <param name="device"></param> + /// <param name="deviceEnumInfo"></param> + private void AddDeviceDetailRow(FrameListControl frame, CommonDevice device, DeviceEnumInfo deviceEnumInfo) + { + var rowInfo = this.dicRowInfo[device.DeviceAddr]; + if (rowInfo.dicDetailRow == null) + { + rowInfo.dicDetailRow = new Dictionary<string, DeviceRoomControl>(); + } + + //琛屾帶浠� + var rowDevice = new DeviceRoomControl(device, frame.rowSpace / 2); + rowDevice.MainKeys = LocalDevice.Current.GetDeviceMainKeys(device); + frame.AddChidren(rowDevice); + rowDevice.frameTable.LeftOffset = Application.GetRealWidth(173) - ControlCommonResourse.XXLeft; + rowDevice.InitControl(); + //搴曠嚎 + rowDevice.frameTable.AddBottomLine(); + //鍙崇澶� + rowDevice.frameTable.AddRightArrow(); + //鍦ㄧ嚎鐘舵�� + rowDevice.isOnline = device.IsOnline == 1; + + //淇濆瓨鎺т欢 + string maikey = Common.LocalDevice.Current.GetDeviceMainKeys(device); + rowInfo.dicDetailRow[maikey] = rowDevice; + + //妫�娴嬭澶囨槸鍚︽嫢鏈夊畾浣嶇殑鍔熻兘 + if (Common.LocalDevice.Current.DeviceIsCanFixedPosition(device) == true) + { + //瀹氫綅 + var btnPosition = rowDevice.AddEditorControl(false); + btnPosition.TextID = R.MyInternationalizationString.uFixedPosition; + btnPosition.ButtonClickEvent += (sender, e) => + { + //瀹氫綅 + Common.LocalDevice.Current.SetFixedPositionCommand(device); + }; + } + + rowDevice.frameTable.ButtonClickEvent += (sender, e) => + { + //闅愯棌鑿滃崟 + rowDevice.HideMenu(); + //鐣岄潰璺宠浆,璁板綍褰撳墠鐨勬鍦ㄦ搷浣滅殑璁惧鐨凪ac鍦板潃 + this.nowActionDeviceMac = device.DeviceAddr; + //鏄剧ず璁惧鍔熻兘閰嶇疆鐣岄潰 + this.ShowDeviceFunctionSettionForm(device, deviceEnumInfo); + }; + //宸︽粦鑿滃崟浜嬩欢 + rowDevice.OpenMenuAction += () => + { + if (this.oldShowRightMuneRow != null && this.oldShowRightMuneRow.MainKeys != rowDevice.MainKeys) + { + //宸︽粦鑿滃崟鍙兘婊戜竴涓� + this.oldShowRightMuneRow.HideMenu(); + } + this.oldShowRightMuneRow = rowDevice; + }; + } + + /// <summary> + /// 鏄剧ず璁惧鍔熻兘閰嶇疆鐣岄潰 + /// </summary> + /// <param name="device"></param> + /// <param name="deviceEnumInfo"></param> + private void ShowDeviceFunctionSettionForm(CommonDevice device, DeviceEnumInfo deviceEnumInfo) + { + //鏅鸿兘闂ㄩ攣 + if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣) + { + var form = new DeviceMacInfoEditorForm(); + form.AddForm(device.DeviceAddr); + } + else if (deviceEnumInfo.BeloneType == DeviceBeloneType.A绐楀笜) + { + var form = new DeviceMacInfoEditorForm(); + form.AddForm(device.DeviceAddr); + } + //pir浼犳劅鍣� + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.Sensor_Pir) + { + if (device is IASZone) + { + var form = new DevicePirSensor.PirSensorBindTargetSettionForm(); + form.AddForm((IASZone)device); + } + else + { + //pir浼犳劅鍣�,浠栦滑鍙堟悶浜嗕釜缁х數鍣ㄥ湪閲岄潰 + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + } + //涓ぎ绌鸿皟 + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.AirConditioner_ZbGateway) + { + var form = new DeviceAirConditioner.IndoorUnitSettionForm(); + form.AddForm((AC)device); + } + //鐜闈㈡澘 + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment) + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + //鏂伴闈㈡澘 + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir) + { + //鏂规偊鏂伴闈㈡澘鐨勬寜閿厤缃� + var form = new DevicePanel.PanelFangyueFreshAirButtonSettionForm(); + form.AddForm(device); + } + //鏂规偊闈㈡澘 + else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour + || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight) + { + //骞叉帴鐐� + if (device.Type == DeviceType.OnOffSwitch) + { + //鏂规偊闈㈡澘鐨勬寜閿厤缃� + var form = new DevicePanel.PanelFangyueButtonSettionForm(); + form.AddForm(device); + } + //缁х數鍣� + else if (device.Type == DeviceType.OnOffOutput) + { + //鏂规偊闈㈡澘鐨勫姛鑳介厤缃� + var form = new DevicePanel.PanelFangyueFunctionSettionForm(); + form.AddForm(device); + } + else + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + } + //闈㈡澘璁惧 + else if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘) + { + //骞叉帴鐐� + if (device.Type == DeviceType.OnOffSwitch) + { + //娌充笢璁惧 + if (deviceEnumInfo.IsHdlDevice == true) + { + var form = new DevicePanel.PanelButtonSettionForm(); + form.AddForm(device); + } + else + { + var form = new DeviceDryContactSettionForm(); + form.AddForm(device); + } + } + //缁х數鍣� + else if (device.Type == DeviceType.OnOffOutput) + { + //娌充笢璁惧 + if (deviceEnumInfo.IsHdlDevice == true) + { + var form = new DevicePanel.PanelFunctionSettionForm(); + form.AddForm(device); + } + else + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + } + else + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + } + //濡傛灉鏄共鎺ョ偣 + else if (device.Type == DeviceType.OnOffSwitch) + { + var form = new DeviceDryContactSettionForm(); + form.AddForm(device); + } + else + { + var form = new DeviceFunctionSettionForm(); + form.AddForm(device, true); + } + } + + #endregion + + #region 鈻� 閿�兼悳绱__________________________ + + /// <summary> + /// 鏍规嵁鎼滅储閿�硷紝璁惧畾鍒楄〃鏁版嵁 + /// </summary> + /// <param name="searchKey">Search key.</param> + private void SetRowDataBySearchKeys(string searchKey) + { + lock (dicRowInfo) + { + Application.RunOnMainThread(() => + { + if (this.listView == null) + { + return; + } + //棣栧厛鍏堢Щ闄ゅ垪琛ㄦ墍鏈夋帶浠� + this.listView.RemoveAll(); + //濡傛灉鎼滅储閿�间负绌猴紝鍒欒繕鍘熶负鍘熷鐘舵��:鏄剧ず璁惧绫诲瀷鎬昏 + if (searchKey == string.Empty) + { + foreach (var deviceMac in dicRowInfo.Keys) + { + //娣诲姞璁惧鐨勮 + this.AddDeviceMenuRow(deviceMac); + } + //娣诲姞搴曢儴闂撮殭 + var frameTemp = new FrameLayout(); + frameTemp.Height = Application.GetRealHeight(23); + listView.AddChidren(frameTemp); + } + else + { + //鎼滅储鍚嶅瓧閲岄潰鍖呭惈閿�肩殑璁惧 + foreach (var rowInfo in this.dicRowInfo.Values) + { + if ((rowInfo.MacName != null && rowInfo.MacName.Contains(searchKey) == true) + || rowInfo.DeviveTypeName.Contains(searchKey) == true) + { + //娣诲姞璁惧鐨勮 + this.AddDeviceMenuRow(rowInfo.DeviceMac); + } + } + //娣诲姞搴曢儴闂撮殭 + var frameTemp = new FrameLayout(); + frameTemp.Height = Application.GetRealHeight(23); + listView.AddChidren(frameTemp); + } + }); + } + } + + #endregion + + #region 鈻� 涓嬫媺鍒锋柊___________________________ + + /// <summary> + /// 婊戝姩鎺т欢涓嬫媺鍒锋柊 + /// </summary> + private async void ListViewBeginHeaderRefreshing() + { + //濡傛灉鏄湪绾跨殑 + if (HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(GatewayResourse.NowSelectGateway) == true) + { + //妫�娴嬪箍鎾埌鐨勮繖涓綉鍏虫槸鍚︽嫢鏈変綇瀹匢D + ZbGateway realWay = null; + if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, GatewayResourse.NowSelectGateway) == true) + { + //閲嶆柊璁剧疆浣忓畢ID(杩欎釜搴旇鏄笉缁忚繃APP,鐩存帴鎶婄綉鍏虫仮澶嶄簡鍑哄巶璁剧疆) + if (HdlGatewayLogic.Current.HomeIdIsEmpty(realWay.getGatewayBaseInfo.HomeId) == true) + { + //鏄剧ず杩涘害鏉� + ProgressBar.Show(); + int result2 = await HdlGatewayLogic.Current.ReBindNewGateway(realWay); + //鍏抽棴杩涘害鏉� + ProgressBar.Close(); + if (result2 == -1) + { + return; + } + } + } + } + if (this.Parent == null) + { + return; + } + + //鑾峰彇鍏ㄩ儴璁惧 + int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(GatewayResourse.NowSelectGateway); + if (this.Parent == null) + { + return; + } + HdlThreadLogic.Current.RunMain(() => + { + //闅愯棌涓嬫媺鍒锋柊鐗规晥 + listView.EndHeaderRefreshing(); + if (result != -1) + { + //閲嶆柊鍒锋柊鐣岄潰 + this.InitMiddleFrame(false); + } + }); + } + + #endregion + + #region 鈻� 缃戝叧鍦ㄧ嚎妫�娴媉______________________ + + /// <summary> + /// 寮�鍚綉鍏冲湪绾跨洃娴嬬殑绾跨▼ + /// </summary> + private void StartGatewayOnlieCheckThread() + { + if (GatewayResourse.NowSelectGateway == null) + { + return; + } + + string selectGwId = HdlGatewayLogic.Current.GetGatewayId(GatewayResourse.NowSelectGateway); + HdlThreadLogic.Current.RunThread(() => + { + ZbGateway zbGateway = HdlGatewayLogic.Current.GetLocalGateway(selectGwId); + if (zbGateway == null) + { + return; + } + //鍒锋柊缃戝叧鍦ㄧ嚎鐘舵�� + HdlGatewayLogic.Current.RefreshGatewayOnlineStatu(new List<ZbGateway>() { zbGateway }); + + Application.RunOnMainThread(() => + { + if (this.gatewayViewRow != null && this.gatewayViewRow.zbGatewayId == selectGwId) + { + bool online = HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(zbGateway); + this.gatewayViewRow.RefreshControl(); + //寮�鍚澶囧湪绾跨嚎绋� + this.StartDeviceListControlThread(online); + } + }); + }); + } + + /// <summary> + /// 缃戝叧鍦ㄧ嚎鐘舵�佸彉鏇� + /// </summary> + /// <param name="gateWay">缃戝叧瀵硅薄</param> + /// <param name="online">鍦ㄧ嚎鐘舵�佸彉鏇村悗鐨勭姸鎬�</param> + public override void GatewayOnlinePush(ZbGateway gateWay, bool online) + { + if (this.gatewayViewRow == null) + { + return; + } + if (HdlGatewayLogic.Current.GetGatewayId(gateWay) == this.gatewayViewRow.zbGatewayId) + { + Application.RunOnMainThread(() => + { + this.gatewayViewRow?.RefreshControl(); + }); + } + } + + #endregion + + #region 鈻� 璁惧鍦ㄧ嚎妫�娴媉______________________ + + /// <summary> + /// 寮�鍚澶囧湪绾跨嚎绋� + /// </summary> + /// <param name="gatewayOnline">缃戝叧鐨勫湪绾跨姸鎬�</param> + private void StartDeviceListControlThread(bool gatewayOnline) + { + if (gatewayOnline == false) + { + //璁剧疆鍏ㄩ儴璁惧绂荤嚎 + this.SetAllDeviceOffLine(); + return; + } + //寮�鍚紶鎰熷櫒鎶ヨ鐩戣 + this.StartCheckDeviceAlarm(); + //寮�鍚澶囧湪绾跨洃娴� + this.StartCheckDeviceOnline(); + } + + /// <summary> + /// 寮�鍚澶囧湪绾跨洃娴� + /// </summary> + private void StartCheckDeviceOnline() + { + //澶栭儴璋冪敤鐨勮瘽,涓嶅啀閲嶆柊鑾峰彇璁惧鐘舵�� + if (GatewayResourse.NowSelectGateway == null || this.reGetDeviceOnlineStatu == false) + { + return; + } + + //娣诲姞鎺ユ敹璁惧鍦ㄧ嚎涓婃姤鐨勭洃鍚� + HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceListFormReceivePushOnline", ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤, this.ReceiveDeviceStatu); + + string gwId = HdlGatewayLogic.Current.GetGatewayId(GatewayResourse.NowSelectGateway); + HdlThreadLogic.Current.RunThread(() => + { + //杩欓噷涓昏鍙槸鑾峰彇鍦ㄧ嚎鐘舵�� + var zbway = HdlGatewayLogic.Current.GetLocalGateway(gwId); + int statu = 0; + var list = LocalDevice.Current.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO); + if (statu != -1) + { + for (int i = 0; i < list.Count; i++) + { + //璁剧疆璁惧鍦ㄧ嚎鐘舵�� + this.ReceiveDeviceStatu(list[i]); + } + } + }); + } + + /// <summary> + /// 鎺ュ彈璁惧鐘舵�� + /// </summary> + /// <param name="device"></param> + private void ReceiveDeviceStatu(CommonDevice device) + { + DeviceObjRowInfo rowInfo = null; + if (this.dicRowInfo.ContainsKey(device.DeviceAddr) == true) + { + rowInfo = this.dicRowInfo[device.DeviceAddr]; + } + if (rowInfo == null || rowInfo.MenuRow == null) + { + return; + } + //鍒锋柊璁惧鐨勫湪绾跨姸鎬� + string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + var localDevice = Common.LocalDevice.Current.GetDevice(mainkeys); + if (localDevice != null) + { + //鍦ㄧ嚎鐘舵�佷竴鏍风殑璇濓紝涓嶉渶瑕佸埛鏂� + if (localDevice.IsOnline == device.IsOnline) + { + return; + } + //淇濆瓨鐘舵�� + localDevice.IsOnline = device.IsOnline; + localDevice.ReSave(); + } + + HdlThreadLogic.Current.RunMain(() => + { + if (rowInfo != null) + { + rowInfo.MenuRow.isOnline = device.IsOnline == 1; + if (rowInfo.dicDetailRow != null) + { + foreach (var detailRow in rowInfo.dicDetailRow.Values) + { + detailRow.isOnline = rowInfo.MenuRow.isOnline; + } + } + } + }); + } + + /// <summary> + /// 璁剧疆鍏ㄩ儴璁惧绂荤嚎 + /// </summary> + private void SetAllDeviceOffLine() + { + lock (dicRowInfo) + { + foreach (var rowInfo in this.dicRowInfo.Values) + { + Application.RunOnMainThread(() => + { + if (rowInfo.MenuRow != null) + { + rowInfo.MenuRow.isOnline = false; + } + }); + } + } + } + + #endregion + + #region 鈻� 浼犳劅鍣ㄦ姤璀________________________ + + /// <summary> + /// 寮�鍚紶鎰熷櫒鎶ヨ鐩戣 + /// </summary> + private void StartCheckDeviceAlarm() + { + HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceListFormSensor", ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�, (device) => + { + HdlThreadLogic.Current.RunMain(() => + { + if (this.dicRowInfo.ContainsKey(device.DeviceAddr) == false) + { + return; + } + //鏄剧ず浼犳劅鍣ㄤ笂鎶ョ殑鐗规晥 + this.dicRowInfo[device.DeviceAddr].MenuRow?.StartSensorPushAppeal(); + }); + }); + } + + #endregion + + #region 鈻� 璁惧鏂扮増鏈琠________________________ + + /// <summary> + /// 妫�娴嬭澶囨柊鐗堟湰 + /// </summary> + /// <param name="list">ota璁惧</param> + private void CheckDeviceNewVersion(List<OTADevice> list) + { + HdlThreadLogic.Current.RunThread(async () => + { + await System.Threading.Tasks.Task.Delay(2000); + foreach (var ota in list) + { + if (this.Parent == null) + { + return; + } + //娣诲姞鍗囩骇鍥轰欢淇℃伅(鎴愪笉鎴愬姛閮芥棤鎵�璋�) + var result = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.ZigbeeDevice, ota.HwVersion.ToString(), ota.ImgTypeId.ToString()); + + //鑾峰彇璁惧鏈�鏂扮増鏈� + var deviceFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.ZigbeeDevice, + ota.HwVersion.ToString(), + ota.ImgTypeId.ToString(), + ota.ImgVersion); + + if (deviceFirmware == null) + { + continue; + } + + //鎷ユ湁鏂扮増鏈� + Application.RunOnMainThread(() => + { + if (this.dicRowInfo.ContainsKey(ota.DeviceAddr) == true) + { + var row = this.dicRowInfo[ota.DeviceAddr].MenuRow; + if (row != null) + { + var btnNew = (InformationTipView)row.GetTagByKey("btnNew"); + if (btnNew != null) + { + btnNew.Visible = true; + } + } + } + }); + } + }); + } + + #endregion + + #region 鈻� 瀹炵幇澶栭儴璋冪敤_______________________ + + /// <summary> + /// 娣诲姞鏂扮殑璁惧鍒扮晫闈㈡甯冧腑 + /// </summary> + /// <param name="deviceAddr">璁惧Mac鍦板潃</param> + public void AddDeviceToFormTable(string deviceAddr) + { + //鏂板缓涓�涓璞� + if (this.dicRowInfo.ContainsKey(deviceAddr) == false) + { + var localDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr); + if (localDevice.Count == 0) + { + //閽堝鍗曠函鍙湁涓�涓�200绔偣鐨勮澶� + var ota = Common.LocalDevice.Current.GetOTADevice(deviceAddr); + if (ota == null) + { + //鍏ョ綉涔嬪悗锛屽張鎶婂畠鍒犱簡 + return; + } + localDevice.Add(ota); + } + var rowNewInfo = new DeviceObjRowInfo(); + rowNewInfo.DeviceMac = deviceAddr; + rowNewInfo.MacName = Common.LocalDevice.Current.GetDeviceMacName(localDevice[0]); + rowNewInfo.DeviveTypeName = Common.LocalDevice.Current.GetDeviceObjectText(localDevice); + this.dicRowInfo[deviceAddr] = rowNewInfo; + + //鍒涘缓鏂扮殑琛� + this.AddDeviceMenuRow(deviceAddr); + } + } + + #endregion + + #region 鈻� 鍚堝苟鏁版嵁___________________________ + + /// <summary> + /// 鏍规嵁MAC鍚堝苟璁惧鍒楄〃 + /// </summary> + /// <param name="listDevice"></param> + private void MargeAllDeviceByMac(List<CommonDevice> listDevice) + { + //鏍规嵁Mac鍏ㄩ儴鍒嗙粍 + var dic = new Dictionary<string, List<CommonDevice>>(); + foreach (CommonDevice device in listDevice) + { + if (device == null || device.DeviceAddr == null) + { + continue; + } + if (dic.ContainsKey(device.DeviceAddr) == false) + { + dic[device.DeviceAddr] = new List<CommonDevice>(); + } + dic[device.DeviceAddr].Add(device); + } + //鑾峰彇淇℃伅 + foreach (var mac in dic.Keys) + { + var info = new DeviceObjRowInfo(); + info.DeviceMac = mac; + info.MacName = Common.LocalDevice.Current.GetDeviceMacName(dic[mac][0]); + info.DeviveTypeName = Common.LocalDevice.Current.GetDeviceObjectText(dic[mac]); + this.dicRowInfo[mac] = info; + } + } + + #endregion + + #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________ + + /// <summary> + /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠� + /// </summary> + public override int FormActionAgainEvent() + { + if (this.nowActionDeviceMac != null) + { + var rowInfo = this.dicRowInfo[nowActionDeviceMac]; + //妫�娴嬭繖涓澶囨槸鍚﹁鍒犻櫎 2020.01.13鍙樻洿:杩藉姞Ota璁惧鐨勫垽鏂� + if (Common.LocalDevice.Current.GetDevicesByMac(nowActionDeviceMac).Count == 0 + && Common.LocalDevice.Current.GetOTADevice(nowActionDeviceMac) == null) + { + //绉婚櫎鎺т欢 + rowInfo.dicDetailRow = null; + rowInfo.frameTable.RemoveFromParent(); + + this.dicRowInfo.Remove(nowActionDeviceMac); + rowInfo = null; + } + else + { + //鍒锋柊璁惧淇℃伅 + rowInfo.MenuRow?.RefreshControlInfo(true); + if (rowInfo.dicDetailRow != null) + { + foreach (var contr in rowInfo.dicDetailRow.Values) + { + contr?.RefreshControlInfo(); + } + } + } + } + //娓呯┖璁板綍 + this.nowActionDeviceMac = null; + //缃戝叧鎺т欢鍒锋柊 + this.gatewayViewRow.RefreshControl(); + + return 1; + } + + #endregion + + #region 鈻� 鍏抽棴鐣岄潰___________________________ + + /// <summary> + /// 鐢婚潰鍏抽棴 + /// </summary> + public override void CloseFormBefore() + { + HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceListFormSensor"); + HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceListFormReceivePushOnline"); + + GatewayResourse.NowSelectGateway = null; + + base.CloseFormBefore(); + } + + #endregion + + #region 鈻� 缁撴瀯浣撶被___________________________ + + /// <summary> + /// 璁惧琛屼俊鎭� + /// </summary> + private class DeviceObjRowInfo + { + /// <summary> + /// 璁惧Mac鍦板潃 + /// </summary> + public string DeviceMac = string.Empty; + /// <summary> + /// 璁惧鐨凪AC鍚嶅瓧 + /// </summary> + public string MacName = string.Empty; + /// <summary> + /// 璁惧绫诲瀷鐨勬枃鏈俊鎭� + /// </summary> + public string DeviveTypeName = string.Empty; + /// <summary> + /// 鑿滃崟琛� + /// </summary> + public DeviceObjectControl MenuRow = null; + /// <summary> + /// 妗屽竷FrameLayout + /// </summary> + public FrameListControl frameTable = null; + /// <summary> + /// 鏄庣粏琛� + /// </summary> + public Dictionary<string, DeviceRoomControl> dicDetailRow = null; + } + + #endregion + + #region 鈻� 鑷畾涔夌綉鍏虫帶浠禵____________________ + + /// <summary> + /// 鑷畾涔夌綉鍏虫帶浠� + /// </summary> + private class MyGatewayControl : FrameRowControl + { + /// <summary> + /// 缃戝叧ID + /// </summary> + public string zbGatewayId = string.Empty; + /// <summary> + /// 缃戝叧鍚嶅瓧鎺т欢 + /// </summary> + private NormalViewControl btnName = null; + + /// <summary> + /// 鑷畾涔夌綉鍏虫帶浠� + /// </summary> + /// <param name="i_zbGateway">缃戝叧瀵硅薄</param> + public MyGatewayControl(ZbGateway i_zbGateway) + { + this.UseClickStatu = false; + this.zbGatewayId = HdlGatewayLogic.Current.GetGatewayId(i_zbGateway); + this.BackgroundColor = UserCenterColor.Current.White; + this.Height = Application.GetRealHeight(173); + } + + /// <summary> + /// 鍒濆鍖栨帶浠� + /// </summary> + public void InitControl() + { + //鑾峰彇鏈湴缃戝叧瀵硅薄 + ZbGateway zbway = HdlGatewayLogic.Current.GetLocalGateway(zbGatewayId); + //鍥炬爣 + var btnIcon = this.AddLeftIcon(81); + HdlGatewayLogic.Current.SetGatewayIcon(btnIcon, zbway); + + //鏄剧ず鏂囨湰 + btnName = this.AddLeftCaption(HdlGatewayLogic.Current.GetGatewayName(zbway), 700); + btnName.Height = Application.GetRealHeight(60); + btnName.TextSize = 15; + btnName.Y = Application.GetRealHeight(35); + if (HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(zbway) == false) + { + btnName.TextColor = UserCenterColor.Current.TextGrayColor1; + } + + //褰撳墠缃戝叧 + var btnNowGw = this.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNowGateway), 700); + btnNowGw.Height = Application.GetRealHeight(49); + btnNowGw.TextSize = 12; + btnNowGw.Y = Application.GetRealHeight(95); + btnNowGw.TextColor = UserCenterColor.Current.TextGrayColor1; + + //鍚戝彸鍥炬爣 + var btnRight = this.AddRightArrow(); + btnRight.Name = "btnRight"; + //缃戝叧绠$悊 + var btnMament = this.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uGatewayManagement), 300); + btnMament.Name = "btnMament"; + + this.ButtonClickEvent += (sernder, e) => + { + if (string.IsNullOrEmpty(((View)sernder).Name) == false) + { + //鎵撳紑缃戝叧鍒楄〃鐣岄潰 + var form = new GatewayManage.GatewayListForm(); + form.AddForm(); + } + }; + } + + /// <summary> + /// 鍒锋柊鎺т欢淇℃伅 + /// </summary> + public void RefreshControl() + { + //鑾峰彇鏈湴缃戝叧瀵硅薄 + ZbGateway zbway = HdlGatewayLogic.Current.GetLocalGateway(zbGatewayId); + if (zbway == null) + { + return; + } + btnName.Text = HdlGatewayLogic.Current.GetGatewayName(zbway); + if (HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(zbway) == false) + { + btnName.TextColor = UserCenterColor.Current.TextGrayColor1; + } + else + { + btnName.TextColor = UserCenterColor.Current.TextColor1; + } + } + } + + #endregion + } +} -- Gitblit v1.8.0