using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.Device.Light; using Shared.Phone.UserCenter.Device; using ZigBee.Device; using static ZigBee.Device.BindObj; using static ZigBee.Device.Panel; namespace Shared.Phone.UserCenter.DeviceBind { public class AddDevicePage : BindCommonLayout, ZigBee.Common.IStatus { /// /// 按键模式接收 /// /// Common. public void Changed(CommonDevice common) { //if (common.Type != ZigBee.Device.DeviceType.OnOffSwitch) //{ // return; //} Shared.Application.RunOnMainThread(() => { //var dev = common as Panel; }); } /// 构造函数 /// /// public AddDevicePage(ZigBee.Device.Panel key, string deviceBindType) { this.currentKey = key; this.curDeviceBindType = deviceBindType; } #region ◆ 变量申明__________________________ ZigBee.Device.Panel currentKey; //显示被绑定设备或场景的view VerticalScrolViewLayout midVerticalScrolViewLayout; HorizontalScrolViewLayout btnHorizontalScrolViewLayout; /// /// 按键配置的目标列表 /// List targetList = new List(); List roomList = new List(); public Action> actionAddDevicePage; List curTypeDeviceList = new List { }; string curDeviceBindType = ""; #endregion public void Show() { targetList.Clear(); string titleText = ""; switch (curDeviceBindType) { case "AddSwitch": titleText = Language.StringByID(R.MyInternationalizationString.AddSwitch); break; case "AddDimmer": titleText = Language.StringByID(R.MyInternationalizationString.AddDimmer); break; case "AddCurtain": titleText = Language.StringByID(R.MyInternationalizationString.AddCurtain); break; } this.TopFrameLayout(this, titleText); EventHandler eHandlerBack = (sender, e) => { RemoveFromParent(); }; this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; this.MidFrameLayout(this); var btnAddFrameLayout = new FrameLayout { X = Application.GetRealWidth(953), Height = Application.GetRealHeight(72), Width = Application.GetRealWidth(72), }; this.titleFrameLayout.AddChidren(btnAddFrameLayout); var btnFloorText = new Button { Height = Application.GetRealHeight(84), Width = Application.GetRealWidth(58), X = Application.GetRealWidth(881), Text = "一楼", TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, }; btnAddFrameLayout.AddChidren(btnFloorText); var btnBindDown = new Button { Height = Application.GetRealHeight(72), Width = Application.GetRealWidth(72), //UnSelectedImagePath = "BindPic/BindDown.png", }; btnAddFrameLayout.AddChidren(btnBindDown); btnBindDown.MouseDownEventHandler += (sender, e) => { }; MidFrameLayoutContent(); } async void MidFrameLayoutContent() { #region UI var btnMidTopLayout = new FrameLayout { Height = Application.GetRealHeight(389 - 184), }; this.midFrameLayout.AddChidren(btnMidTopLayout); btnHorizontalScrolViewLayout = new HorizontalScrolViewLayout { }; btnMidTopLayout.AddChidren(btnHorizontalScrolViewLayout); //var btnLine = new Button //{ // Y = btnMidTopLayout.Bottom, // Height = 1, // BackgroundColor = Shared.Common.ZigbeeColor.Current.XMTitleLine, //}; //this.midFrameLayout.AddChidren(btnLine); var btnmidVerticalScrolViewLayoutFrameLayout = new FrameLayout { Y = btnMidTopLayout.Bottom, Height = Application.GetRealHeight(1145), }; this.midFrameLayout.AddChidren(btnmidVerticalScrolViewLayoutFrameLayout); midVerticalScrolViewLayout = new VerticalScrolViewLayout() { }; btnmidVerticalScrolViewLayoutFrameLayout.AddChidren(midVerticalScrolViewLayout); var bottomFrameLayout = new FrameLayout() { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight(127), Y = Application.GetRealHeight(1472), }; this.midFrameLayout.AddChidren(bottomFrameLayout); Button btnChooseKeyMode = new Button() { Width = Application.GetRealWidth(907), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetRealHeight(120) / 2, TextID = R.MyInternationalizationString.ChooseKeyMode, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, TextSize = 16, }; bottomFrameLayout.AddChidren(btnChooseKeyMode); #endregion #region 数据处理 roomList = Shared.Common.Room.Lists; Shared.Common.Room curRoom = roomList[0]; int index = 0; RefreshRoomList(curRoom, btnChooseKeyMode, ref index); RefreshDeviceList(roomList[index]); if (curTypeDeviceList.Count == 0) { btnChooseKeyMode.Enable = false; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnChooseKeyMode.Enable = true; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } btnChooseKeyMode.MouseUpEventHandler += (sender, e) => { var chooseKeyModePage = new Shared.Phone.UserCenter.DeviceBind.ChooseKeyModePage(currentKey, curDeviceBindType, targetList); Shared.Phone.UserView.HomePage.Instance.AddChidren(chooseKeyModePage); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; chooseKeyModePage.Show(); if (actionAddDevicePage != null) { Action> action = (obj) => { currentKey.bindList = obj; actionAddDevicePage(currentKey.bindList); }; chooseKeyModePage.action += action; } this.RemoveFromParent(); }; #endregion } /// /// 按键绑定场景表显示 /// /// Gateway. /// Key. void RefreshRoomList(Shared.Common.Room curRoom, Button btnChooseKeyMode, ref int index2) { Button curentOldRoom = null; FrameLayout curentOldRoomFrameLayout = null; int index = 0; for (int i = 0; i < roomList.Count; i++) { var room = roomList[i]; var btnRoomFrameLayout = new FrameLayout { Height = Application.GetRealHeight(78), Width = Application.GetRealWidth(187), Y = Application.GetRealHeight(58), X = Application.GetRealWidth(58), Radius = (uint)Application.GetMinRealAverage(78 / 2), BorderColor = Shared.Common.ZigbeeColor.Current.XMOrange, BorderWidth = 1, }; btnHorizontalScrolViewLayout.AddChidren(btnRoomFrameLayout); var btnRoom = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(127), Y = Application.GetRealHeight(58), X = Application.GetRealWidth(14), Text = room.Name, TextSize = 12, TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, Gravity = Gravity.Center, }; btnRoomFrameLayout.AddChidren(btnRoom); btnRoom.IsSelected = false; if (currentKey.RoomId == "") { if (i == index) { btnRoom.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; btnRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; btnRoomFrameLayout.BorderWidth = 0; btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; curentOldRoom = btnRoom; curentOldRoomFrameLayout = btnRoomFrameLayout; } else { btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; btnRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout; btnRoomFrameLayout.BorderWidth = 1; } } else { if (currentKey.RoomId == room.Id) { btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; btnRoom.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; btnRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; btnRoomFrameLayout.BorderWidth = 0; curentOldRoom = btnRoom; curentOldRoomFrameLayout = btnRoomFrameLayout; curRoom = room; index2 = i; } else { btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; btnRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout; btnRoomFrameLayout.BorderWidth = 1; } } EventHandler eHandlerRoom = (sender, e) => { if (!btnRoom.IsSelected) { if (curentOldRoom != null) { curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; curentOldRoom.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout; } curentOldRoom = btnRoom; curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; curentOldRoom.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; curRoom = room; currentKey.RoomId = room.Id; RefreshDeviceList(curRoom); if (curTypeDeviceList.Count == 0) { btnChooseKeyMode.Enable = false; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnChooseKeyMode.Enable = true; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } } if (btnRoomFrameLayout.BorderWidth == 1) { if (curentOldRoomFrameLayout != null) { curentOldRoomFrameLayout.BorderWidth = 1; curentOldRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout; } curentOldRoomFrameLayout = btnRoomFrameLayout; curentOldRoomFrameLayout.BorderWidth = 0; curentOldRoomFrameLayout.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMOrange; curRoom = room; currentKey.RoomId = room.Id; RefreshDeviceList(curRoom); if (curTypeDeviceList.Count == 0) { btnChooseKeyMode.Enable = false; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnChooseKeyMode.Enable = true; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } } }; btnRoom.MouseUpEventHandler += eHandlerRoom; btnRoomFrameLayout.MouseUpEventHandler += eHandlerRoom; var btnEmpty = new Button { Width = Application.GetRealWidth(58), X = btnRoom.Right, }; btnHorizontalScrolViewLayout.AddChidren(btnEmpty); } } /// /// 按键绑定场景表显示 /// /// Gateway. /// Key. void RefreshDeviceList(Shared.Common.Room curRoom) { midVerticalScrolViewLayout.RemoveAll(); curTypeDeviceList.Clear(); switch (curDeviceBindType) { case "AddSwitch": foreach (var device in curRoom.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; case "AddDimmer": foreach (var device in curRoom.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; case "AddCurtain": foreach (var device in curRoom.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 258)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; } int curIndex = 0; foreach (var device in curTypeDeviceList) { #region 绑定表UI显(无数据处理) var rowLayout = new FrameLayout() { Height = Application.GetRealHeight(23 + 127), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, Tag = device.CommonDevice?.DeviceEpointName, }; midVerticalScrolViewLayout.AddChidren(rowLayout); var devicePic = new Button() { X = Application.GetMinRealAverage(58), Y = Application.GetMinRealAverage(46), Width = Application.GetMinRealAverage(81), Height = Application.GetMinRealAverage(81), UnSelectedImagePath = device.IconPath, Tag = device.CommonDevice?.DeviceEpointName, }; rowLayout.AddChidren(devicePic); var btnBindName = new Button() { Width = Application.GetRealWidth(500 - 120), X = devicePic.Right + Application.GetRealWidth(20), TextColor = Shared.Common.ZigbeeColor.Current.TextBlack, TextAlignment = TextAlignment.CenterLeft, Tag = device.CommonDevice?.DeviceEpointName, }; rowLayout.AddChidren(btnBindName); var btnChoose = new Button() { Width = Application.GetRealWidth(60), Height = Application.GetRealHeight(60), X = Application.GetRealWidth(861 + 81), Y = Application.GetRealHeight(35), SelectedImagePath = "DoorLock/SelectedIcon.png", //Text = device.CommonDevice?.DeviceEpointName, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, Visible = false, Tag = device.CommonDevice?.DeviceEpointName, }; rowLayout.AddChidren(btnChoose); var line2 = new Button() { Y = rowLayout.Height - 1, X = devicePic.Right + Application.GetRealWidth(20), Width = Application.GetRealWidth(965 - 116), Height = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, }; rowLayout.AddChidren(line2); if (curIndex == curRoom.SceneUIList.Count - 1) { line2.Visible = false; } #endregion EventHandler hander = (sender, e) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (!btnChoose.IsSelected) { targetList.Remove(device.CommonDevice); btnChoose.IsSelected = false; btnChoose.Visible = false; } else { targetList.Add(device.CommonDevice); btnChoose.IsSelected = true; btnChoose.Visible = true; } }; rowLayout.MouseUpEventHandler += hander; devicePic.MouseUpEventHandler += hander; btnBindName.MouseUpEventHandler += hander; btnChoose.MouseUpEventHandler += hander; if (device.CommonDevice?.DeviceEpointName == "") { btnBindName.Text = device.CommonDevice?.DeviceAddr + "_" + device.CommonDevice?.DeviceEpoint; } else { btnBindName.Text = device.CommonDevice?.DeviceEpointName; } foreach (var bindedDev in currentKey.bindList) { var id = device.CommonDevice?.DeviceAddr + device.CommonDevice?.DeviceEpoint; if (id == bindedDev.BindMacAddr + bindedDev.BindEpoint) { btnChoose.IsSelected = true; btnChoose.Visible = true; targetList.Add(device.CommonDevice); } } curIndex++; } } public void DeviceInfoChange(CommonDevice common, string typeTag) { } public void ChangedILogicStatus(ZigBee.Device.Logic logic) { } public void ChangedISceneStatus(Scene scene) { } } }