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