From 82a773d1783549caca563831aac8affc059deedf Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 07 十一月 2019 10:56:13 +0800 Subject: [PATCH] 合并了全部的代码,IOS 图片需要从新引入工程 --- ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs | 545 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 544 insertions(+), 1 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs b/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs index 04fa9fa..18c2427 100755 --- a/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs +++ b/ZigbeeApp/Shared/Phone/Device/Light/PlugControl.cs @@ -1,13 +1,556 @@ 锘縰sing System; +using System.Collections.Generic; +using Shared.Common; +using Shared.Phone.Device.CommonForm; +using Shared.Phone.UserView; +using ZigBee.Device; namespace Shared.Phone.Device.Light { /// <summary> /// 鎻掑骇 /// </summary> - public class PlugControl + public class PlugControl:FrameLayout, ZigBee.Common.IStatus { + + #region 鈼� 鍙橀噺__________________________ + /// <summary> + /// 寮�鍏� + /// </summary> + private Button switchBtn; + /// <summary> + /// The action. + /// </summary> + public Action action; + + /// <summary> + /// The light image. + /// </summary> + private Button deviceIMG; + /// <summary> + /// 鏀惰棌鎸夐挳 + /// </summary> + private Button collectionBtn; + /// <summary> + /// 浼犺繃鏉ョ殑璁惧 + /// </summary> + private DeviceUI device; + /// <summary> + /// 浼犺繃鏉ョ殑鎴块棿 + /// </summary> + private Shared.Common.Room room; + + /// <summary> + /// 鎴块棿 + /// </summary> + private Button roomBtn; + /// <summary> + /// 鎴块棿鍚� + /// </summary> + private Button roomName; + /// <summary> + /// 缃戝叧 + /// </summary> + private ZbGateway zbGateway = null; + /// <summary> + /// 鏄惁鍙戦�佹帶鍒跺懡浠ゆ垚鍔熶簡 + /// </summary> + private bool sendedControlCommand = false; + + /// <summary> + /// bodyFrameLayout + /// </summary> + private FrameLayout bodyFrameLayout; + + private Button StatuBtn; + + #endregion + + #region 鈼� 鎺ュ彛__________________________ + /// <summary> + /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange() + /// </summary> + /// <returns>The changed.</returns> + /// <param name="common">Common.</param> + public void Changed(CommonDevice common) + { + + } + /// <summary> + /// Changeds the IL ogic status. + /// </summary> + /// <param name="logic">Logic.</param> + public void ChangedILogicStatus(ZigBee.Device.Logic logic) + { + //throw new NotImplementedException(); + } + /// <summary> + /// Changeds the IS cene status. + /// </summary> + /// <param name="scene">Scene.</param> + public void ChangedISceneStatus(Scene scene) + { + //throw new NotImplementedException(); + } + /// <summary> + /// 璁惧鐘舵�佹洿鏂版帴鍙� + /// <para>type锛氬鏋滀负 DeviceInComingRespon:璁惧鏂颁笂鎶�</para> + /// <para>type锛氬鏋滀负 IASInfoReport:RemoveDeviceRespon</para> + /// <para>type锛氬鏋滀负 DeviceStatusReport:璁惧涓婃姤</para> + /// <para>type锛氬鏋滀负 IASInfoReport:IAS瀹夐槻淇℃伅涓婃姤</para> + /// <para>type锛氬鏋滀负 OnlineStatusChange: 璁惧鍦ㄧ嚎鐘舵�佹洿鏂�</para> + /// </summary> + /// <param name="common">Common.</param> + /// <param name="typeTag">Type tag.</param> + public void DeviceInfoChange(CommonDevice common, string typeTag) + { + if (typeTag == "DeviceStatusReport") + { + Application.RunOnMainThread(() => + { + try + { + var deviceUI = device; + //璁惧涓虹┖ + if (deviceUI.CommonDevice == null) + { + return; + } + //鏄惁涓哄綋鍓嶈澶� + if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr) + { + return; + } + if (deviceUI.CommonDevice.Type == DeviceType.OnOffOutput) + { + if (common.DeviceStatusReport.CluterID == 6) + { + var light = deviceUI.CommonDevice as ToggleLight; + light.DeviceStatusReport = common.DeviceStatusReport; + //璁板綍銆佹洿鏂扮姸鎬� + if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0) + { + return; + } + light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData; + deviceIMG.IsSelected = switchBtn.IsSelected = light.OnOffStatus == 1; + StatuBtn.Text = CommonFormResouce.GetSwitchStatu(deviceIMG.IsSelected); + light.LastDateTime = DateTime.Now; + } + } + } + catch (Exception ex) + { + System.Console.WriteLine($"Error:{ex.Message}"); + } + }); + } + else if (typeTag == "OnlineStatusChange") + { + Application.RunOnMainThread(() => + { + try + { + var deviceUI = device; + //璁惧涓虹┖ + if (deviceUI.CommonDevice == null) + { + return; + } + //鏄惁涓哄綋鍓嶈澶� + if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr) + { + return; + } + deviceUI.CommonDevice.IsOnline = common.IsOnline; + deviceIMG.IsSelected = switchBtn.IsSelected = deviceUI.CommonDevice.IsOnline == 1; + deviceUI.CommonDevice.LastDateTime = DateTime.Now; + } + catch (Exception ex) + { + System.Console.WriteLine($"Error:{ex.Message}"); + } + }); + } + } + #endregion + + #region 鈼� 鍒濆鍖朹____________________ + /// <summary> + /// 閲嶅啓绉婚櫎鏂规硶 + /// </summary> + public override void RemoveFromParent() + { + ZbGateway.StatusList.Remove(this); + //action(); + //action = null; + RemoveUpdateControlDeviceStatuAction(); + base.RemoveFromParent(); + } + + /// <summary> + /// 鏋勯�犳柟娉� + /// </summary> public PlugControl() { + BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; + ZbGateway.StatusList.Add(this); } + /// <summary> + /// 鏄剧ず鐣岄潰 + /// </summary> + /// <param name="dev">Device.</param> + /// <param name="room">Room.</param> + public void Show(DeviceUI dev, Shared.Common.Room room) + { + device = dev; + zbGateway = this.device.CommonDevice.Gateway; + this.room = room; + + AddTop(); + + AddBodyView(device); + + + var light = dev.CommonDevice as ToggleLight; + //琛ヤ笂闈炶繙绋� + if (light.Gateway == null) + { + return; + } + if (light.Gateway.IsVirtual) + { + UserHomeView.ReadStatus(light, () => + { + light.ReadOnOffStatus(); + light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); + }); + } + else + { + //闃叉鐭椂闂村唴澶氭璇诲彇鐘舵�� + if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds) + { + light.ReadOnOffStatus(); + light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); + } + } + + var de = Shared.Common.Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FileName); + if (de == null) + { + collectionBtn.IsSelected = false; + } + else + { + collectionBtn.IsSelected = true; + } + + + BindEvent(); + + } + + #endregion + + #region 鈼� Add______________________________ + + /// <summary> + /// AddTop + /// </summary> + public void AddTop() + { + var top = new TopFrameLayout(); + AddChidren(top); + top.InitTopview(); + top.backButton.MouseUpEventHandler += (sender, e) => + { + RemoveFromParent(); + }; + + var sharedBtn = new Button + { + X = Application.GetRealWidth(850), + Width = Application.GetMinReal(69), + Height = Application.GetMinReal(69), + Gravity = Gravity.CenterVertical, + UnSelectedImagePath = "Item/Shared.png" + }; + top.topView.AddChidren(sharedBtn); + + var moreBtn = new Button + { + X = Application.GetRealWidth(953), + Width = Application.GetMinReal(69), + Height = Application.GetMinReal(69), + Gravity = Gravity.CenterVertical, + UnSelectedImagePath = "Item/More.png" + }; + top.topView.AddChidren(moreBtn); + + moreBtn.MouseUpEventHandler += More; + + } + /// <summary> + /// AddBodyView + /// </summary> + public void AddBodyView(DeviceUI device) + { + bodyFrameLayout = new FrameLayout() + { + Y = Application.GetRealHeight(184), + Height = Application.GetRealHeight(1737), + BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor, + }; + AddChidren(bodyFrameLayout); + + var itemView = new FrameLayout() + { + Y = Application.GetRealHeight(115), + Width = Application.GetRealWidth(965), + Height = Application.GetRealHeight(1316), + Radius = (uint)Application.GetRealHeight(CommonFormResouce.BigFormRadius), + Gravity = Gravity.CenterHorizontal, + BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor + }; + bodyFrameLayout.AddChidren(itemView); + + collectionBtn = new Button() + { + X = Application.GetRealWidth(850), + Y = Application.GetRealHeight(46), + Width = Application.GetMinReal(69), + Height = Application.GetMinReal(69), + UnSelectedImagePath = "Item/Collection.png", + SelectedImagePath = "Item/CollectionSelected.png" + }; + itemView.AddChidren(collectionBtn); + + var deviceNameBtn = new Button() + { + Y = Application.GetRealHeight(46), + Width = Application.GetRealWidth(500), + Height = Application.GetRealHeight(60), + Gravity = Gravity.CenterHorizontal, + Text = device.CommonDevice.DeviceEpointName, + TextColor = ZigbeeColor.Current.GXCTextBlackColor, + TextSize = 15 + }; + itemView.AddChidren(deviceNameBtn); + + StatuBtn = new Button + { + Y = Application.GetRealHeight(118), + Width = Application.GetRealWidth(600), + Height = Application.GetRealHeight(60), + Gravity = Gravity.CenterHorizontal, + TextColor = ZigbeeColor.Current.GXCTextGrayColor, + Text = CommonFormResouce.GetSwitchStatu(device.CommonDevice.IsOnline == 1) + }; + itemView.AddChidren(StatuBtn); + + deviceIMG = new Button() + { + Y = Application.GetRealHeight(344), + Width = Application.GetMinRealAverage(567), + Height = Application.GetMinRealAverage(567), + Gravity = Gravity.CenterHorizontal, + UnSelectedImagePath = "Light/Plug.png", + SelectedImagePath = "Light/PlugSelected.png", + IsSelected = (device.CommonDevice as ToggleLight).OnOffStatus == 1 + }; + itemView.AddChidren(deviceIMG); + + switchBtn = new Button() + { + Y = Application.GetRealHeight(996), + Width = Application.GetMinRealAverage(81), + Height = Application.GetMinRealAverage(81), + Gravity = Gravity.CenterHorizontal, + UnSelectedImagePath = "Item/Switch.png", + SelectedImagePath = "Item/SwitchSelected.png", + IsSelected = (device.CommonDevice as ToggleLight).OnOffStatus == 1 + }; + itemView.AddChidren(switchBtn); + + var roomBG = new Button + { + Y = Application.GetRealHeight(1178 - 50), + Height = Application.GetRealHeight(138 + 50), + BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor, + Radius = (uint)Application.GetRealHeight(CommonFormResouce.BigFormRadius) + }; + itemView.AddChidren(roomBG); + + var roomBG2 = new Button + { + Y = Application.GetRealHeight(1178 - 50), + Height = Application.GetRealHeight(50), + BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, + }; + itemView.AddChidren(roomBG2); + + roomBtn = new Button() + { + X = Application.GetRealWidth(CommonFormResouce.X_Left), + Y = Application.GetRealHeight(1207), + Width = Application.GetMinReal(80), + Height = Application.GetMinReal(80), + UnSelectedImagePath = "Item/Room.png" + }; + itemView.AddChidren(roomBtn); + + roomName = new Button() + { + X = Application.GetRealWidth(150), + Y = Application.GetRealHeight(1224), + Width = Application.GetRealWidth(400), + Height = Application.GetRealHeight(50), + Text = room.Name, + TextAlignment = TextAlignment.CenterLeft, + TextColor = ZigbeeColor.Current.GXCTextWhiteColor + }; + itemView.AddChidren(roomName); + } + + #endregion + + #region 鈼� 缁戝畾鎸夐挳_______________________ + /// <summary> + /// 缁戝畾鎸夐挳鐨勪簨浠� + /// </summary> + private void BindEvent() + { + switchBtn.MouseUpEventHandler += Switch; + deviceIMG.MouseUpEventHandler += Switch; + collectionBtn.MouseUpEventHandler += Collection; + } + + #endregion + + #region 鈼� 寮�鍏砡_________________________ + + /// <summary> + /// 寮�鍏宠缃� + /// </summary> + /// <param name="sender">Sender.</param> + /// <param name="eventArgs">Event arguments.</param> + private void Switch(object sender, MouseEventArgs eventArgs) + { + sendedControlCommand = false; + zbGateway.ReportAction += UpdateDeviceControllStatu; + switchBtn.IsSelected = !switchBtn.IsSelected; + deviceIMG.IsSelected = !deviceIMG.IsSelected; + StatuBtn.Text = CommonFormResouce.GetSwitchStatu(deviceIMG.IsSelected); + if (switchBtn.IsSelected == true) + { + (device.CommonDevice as ToggleLight).SwitchControl(1); + } + else + { + (device.CommonDevice as ToggleLight).SwitchControl(0); + } + //鎺у埗寤舵椂鍥炶皟 + DeviceUI.SendCommandDelayAction(device.CommonDevice, () => + { + if (Parent == null) + { + return; + } + RemoveUpdateControlDeviceStatuAction(); + if (sendedControlCommand == false) + { + DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); + } + }); + } + + + + #endregion + + #region 鈼� 璁剧疆__________________________ + /// <summary> + /// 鏇村璁剧疆 + /// </summary> + /// <param name="sender">Sender.</param> + /// <param name="e">E.</param> + private void More(object sender, MouseEventArgs e) + { + var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; + UserView.HomePage.Instance.AddChidren(detailInfo); + UserView.HomePage.Instance.PageIndex += 1; + detailInfo.Show(device, room); + detailInfo.action = () => + { + Show(device, room); + }; + } + + #endregion + + #region 鈼� 鏀惰棌__________________________ + /// <summary> + /// 鏀惰棌鍒颁富椤� + /// </summary> + /// <param name="sender">Sender.</param> + /// <param name="e">E.</param> + private void Collection(object sender, MouseEventArgs e) + { + //collection + if ((sender as Button).IsSelected) + { + Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(device.FileName); + (sender as Button).IsSelected = false; + } + else + { + Shared.Common.Room.CurrentRoom.GetLoveRoom().AddDevice(device.FileName); + (sender as Button).IsSelected = true; + } + } + + #endregion + + #region 鈼� 璁惧鎺у埗鐘舵�乢____________________ + + /// <summary> + /// 鏄剧ず璁惧鎺у埗鐘舵�� + /// </summary> + /// <param name="command">Command.</param> + /// <param name="objValue">Object value.</param> + private void UpdateDeviceControllStatu(string command, object objValue) + { + if (Parent == null) + { + return; + } + if (command != "DeviceDefaultAck" || objValue == null) + { + return; + } + var tempDevice = (CommonDevice)objValue; + if (tempDevice.DeviceEpoint != this.device.CommonDevice.DeviceEpoint || tempDevice.DeviceAddr != this.device.CommonDevice.DeviceAddr) + { + //涓嶆槸褰撳墠璁惧鐨勬帹閫侊紝鍒欎笉澶勭悊 + return; + } + //鏍囪宸茬粡鍙戦�佹帶鍒跺懡浠ゅ埌缃戝叧 + sendedControlCommand = true; + //DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success); + } + + /// <summary> + /// 绉婚櫎鏇存柊鎺у埗璁惧鐨刟ction + /// </summary> + private void RemoveUpdateControlDeviceStatuAction() + { + //绉婚櫎action + if (zbGateway != null) + { + zbGateway.ReportAction -= UpdateDeviceControllStatu; + } + } + + #endregion } } -- Gitblit v1.8.0