using System; using System.Collections.Generic; using Shared.Common; 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 { /// 构造函数 /// /// public AddDevicePage(ZigBee.Device.Panel key, string deviceBindType) { this.currentKey = key; this.curDeviceBindType = deviceBindType; } #region 变量申明 /// /// 当前按键 /// ZigBee.Device.Panel currentKey; /// /// 显示被绑定设备或场景的view /// VerticalScrolViewLayout midVerticalScrolViewLayout; /// /// 显示房间的view /// HorizontalScrolViewLayout btnHorizontalScrolViewLayout; /// /// 按键配置的目标列表 /// List targetList = new List(); /// /// 房间列表 /// List roomList = new List(); /// /// 添加设备后的回调 /// public Action> actionAddDevicePage; /// /// 当前设备类型列表 /// List curTypeDeviceList = new List { }; /// /// 当前设备绑定类型 /// string curDeviceBindType = ""; /// /// 楼层文本 /// Button btnFloorText; /// /// 楼层表 /// Dictionary dicFloor; /// /// 当前选择的按键模式 /// Button btnChooseKeyMode; /// /// 是否首次进入该页 /// bool IsInitEntry = false; /// /// 当前按键的所有房间设备列表 /// List currentKeyAllRoomDeviceList = new List(); /// /// 临时存储的目标列表 /// Dictionary oldTargetList = new Dictionary { }; #endregion /// /// 添加设备显示 /// public void Show() { targetList.Clear(); string titleText = ""; IsInitEntry = true; 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.btnTitle.Width = Application.GetRealWidth(1080 - 161 - 300); this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; this.MidFrameLayout(this); var btnAddFrameLayout = new FrameLayout { X = Application.GetRealWidth(619), }; this.titleFrameLayout.AddChidren(btnAddFrameLayout); btnFloorText = new Button { Width = Application.GetRealWidth(300 - 69 - 58), X = Application.GetRealWidth(15), Text = Language.StringByID(R.MyInternationalizationString.FirstFloor), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 14, IsBold = true, TextAlignment = TextAlignment.CenterRight, }; btnAddFrameLayout.AddChidren(btnFloorText); var btnBindDownFrameLayout = new FrameLayout { Width = Application.GetMinReal(69 + 58), X = Application.GetRealWidth(300 - 69 - 58), }; btnAddFrameLayout.AddChidren(btnBindDownFrameLayout); var btnBindDown = new Button { Height = Application.GetMinReal(69), Width = Application.GetMinReal(69), UnSelectedImagePath = "BindPic/BindDown.png", Gravity = Gravity.CenterVertical, }; btnBindDownFrameLayout.AddChidren(btnBindDown); if (Common.Config.Instance.Home.FloorDics.Count == 0) { btnBindDown.Visible = false; } EventHandler eHandlerBindDown = (sender, e) => { SideslipFramelayout(); }; btnBindDown.MouseDownEventHandler += eHandlerBindDown; btnBindDownFrameLayout.MouseDownEventHandler += eHandlerBindDown; if (Common.Config.Instance.Home.FloorDics.Count == 0) { btnAddFrameLayout.Width = 0; } else { btnAddFrameLayout.Width = Application.GetRealWidth(300); } MidFrameLayoutContent(btnFloorText); } /// /// 中部布局 /// async void MidFrameLayoutContent(Button btnFloorText) { #region UI var btnMidTopLayout = new FrameLayout { Height = Application.GetRealHeight(389 - 184), }; this.midFrameLayout.AddChidren(btnMidTopLayout); btnHorizontalScrolViewLayout = new HorizontalScrolViewLayout { X = Application.GetRealWidth(58), }; btnMidTopLayout.AddChidren(btnHorizontalScrolViewLayout); 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); btnChooseKeyMode = new Button() { Width = Application.GetRealWidth(907), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetRealHeight(127) / 2, TextID = R.MyInternationalizationString.ChooseKeyMode, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, TextSize = 16, IsBold = true, }; bottomFrameLayout.AddChidren(btnChooseKeyMode); #endregion #region 数据处理 //获取楼层 dicFloor = HdlRoomLogic.Current.GetFloorSortList(); currentKey.currentSelectFloorId = BindInfo.GetCurrentSelectFloorId(); btnFloorText.Text = BindInfo.GetCurrentSelectFloorIdName(); if (Common.Config.Instance.Home.FloorDics.Count == 0) { // 获取没有楼层房间 var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { if (string.IsNullOrEmpty(room.FloorId)) { roomList.Add(room); } } } else { // 获取楼层对应对房间 var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { if (room.FloorId == currentKey.currentSelectFloorId) { roomList.Add(room); } } } //首次拿到所有房间中按键的目标并存储 GetALlDispalyRoomDeviceList(); if (currentKeyAllRoomDeviceList.Count != 0) { if (currentKey.bindList.Count != 0) { foreach (var devA in currentKeyAllRoomDeviceList) { var id = devA.DeviceAddr + devA.DeviceEpoint; var dev = currentKey.bindList.Find(obj => (obj != null) && (obj.BindMacAddr + obj.BindEpoint == id)); if (dev != null) { if (!oldTargetList.ContainsKey(id)) { oldTargetList.Add(id, devA); } } } } } if (oldTargetList.Count != 0) { foreach (var de in oldTargetList.Keys) { var curDev = oldTargetList[de]; targetList.Add(curDev); } } if (roomList.Count == 0) { return; } Shared.Common.Room curRoom = roomList[0]; int index = 0; RefreshRoomList(curRoom, btnChooseKeyMode, ref 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; } if (targetList.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) => { if (targetList.Count == 0) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindDeviceTargetIsEmpty), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnChooseKeyMode); return; } this.RemoveFromParent(); 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; } }; #endregion } /// /// 按键绑定场景表显示 /// /// Gateway. /// Key. void RefreshRoomList(Shared.Common.Room curRoom, Button btnChooseKeyMode, ref int index2) { if (roomList.Count == 0) { return; } btnHorizontalScrolViewLayout.RemoveAll(); Button curentOldRoom = null; FrameLayout curentOldRoomFrameLayout = null; int index = 0; var roomTempList = new List(); for (int i = 0; i < roomList.Count; i++) { var room = roomList[i]; //检测该房间能否显示 if (BindInfo.CheckCanShowRoom(room, curDeviceBindType) == false) { continue; } roomTempList.Add(room); } for (int i = 0; i < roomTempList.Count; i++) { var room = roomTempList[i]; curRoom = roomTempList[0]; var btnRoomFrameLayout = new FrameLayout { Height = Application.GetMinReal(159), Width = Application.GetMinReal(255), Y = Application.GetRealHeight(23), X = Application.GetRealWidth(5), BackgroundImagePath = "Item/RoomIconBackground.png", BorderWidth = 1, }; btnHorizontalScrolViewLayout.AddChidren(btnRoomFrameLayout); var btnRoom = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(255), 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 (index == 0) { btnRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; curentOldRoom = btnRoom; curentOldRoomFrameLayout = btnRoomFrameLayout; } if (index == roomTempList.Count - 1 && index > 2) { var btnRoomFrameLayoutEmpty = new FrameLayout { Height = Application.GetMinReal(159), Width = Application.GetMinReal(50), Y = Application.GetRealHeight(23), X = Application.GetRealWidth(5), BorderWidth = 1, }; btnHorizontalScrolViewLayout.AddChidren(btnRoomFrameLayoutEmpty); } EventHandler eHandlerRoom = (sender, e) => { if (!btnRoom.IsSelected) { if (curentOldRoom != null) { curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; } curentOldRoom = btnRoom; curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; } if (btnRoomFrameLayout.BorderWidth == 1) { if (curentOldRoomFrameLayout != null) { curentOldRoomFrameLayout.BorderWidth = 1; curentOldRoomFrameLayout.BorderColor = Shared.Common.ZigbeeColor.Current.XMOrange; curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackground.png"; } curentOldRoomFrameLayout = btnRoomFrameLayout; curentOldRoomFrameLayout.BorderWidth = 0; curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; } curRoom = room; 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 (targetList.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; index++; } BindInfo.FinishDisplay(roomTempList, btnChooseKeyMode); RefreshDeviceList(curRoom); } /// /// 当前按键所有显示房间的所有设备处理 /// /// List GetALlDispalyRoomDeviceList() { currentKeyAllRoomDeviceList.Clear(); var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); switch (curDeviceBindType) { case "AddSwitch": foreach (var r in listAllRoom) { if (r.ListDevice.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6)); if (dev != null) { currentKeyAllRoomDeviceList.Add(device); } } } } break; case "AddDimmer": foreach (var r in listAllRoom) { if (r.ListDevice.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8)); if (dev != null) { currentKeyAllRoomDeviceList.Add(device); } } } } break; case "AddCurtain": foreach (var r in listAllRoom) { if (r.ListDevice.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 258)); if (dev != null) { currentKeyAllRoomDeviceList.Add(device); } } } } break; } return currentKeyAllRoomDeviceList; } /// /// 按键绑定目标表显示 /// /// Gateway. /// Key. void RefreshDeviceList(Shared.Common.Room curRoom) { midVerticalScrolViewLayout.RemoveAll(); curTypeDeviceList.Clear(); switch (curDeviceBindType) { case "AddSwitch": foreach (var deviceKeys in curRoom.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; case "AddDimmer": foreach (var deviceKeys in curRoom.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; case "AddCurtain": foreach (var deviceKeys in curRoom.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (device != null) { var dev = device.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 258)); if (dev != null) { curTypeDeviceList.Add(device); } } } break; } int curIndex = 0; foreach (var device in curTypeDeviceList) { curIndex++; if (device != null && device.IsOnline == 0) { continue; } #region 绑定表UI显(无数据处理) var rowLayout = new FrameLayout() { Height = Application.GetRealHeight(23 + 127), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, Tag = device.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.DeviceEpointName, }; rowLayout.AddChidren(devicePic); var btnBindName = new Button() { Width = Application.GetRealWidth(790), X = devicePic.Right + Application.GetRealWidth(20), TextColor = Shared.Common.ZigbeeColor.Current.TextBlack, TextAlignment = TextAlignment.CenterLeft, Tag = device.DeviceEpointName, Text = HdlDeviceCommonLogic.Current.GetDeviceEpointName(device), TextSize = 15, }; rowLayout.AddChidren(btnBindName); var btnChoose = new Button() { Width = Application.GetMinReal(60), Height = Application.GetMinReal(60), X = Application.GetRealWidth(861 + 81), Y = Application.GetRealHeight(35), SelectedImagePath = "DoorLock/SelectedIcon.png", TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, Visible = false, Tag = device.DeviceEpointName, Gravity = Gravity.CenterVertical, }; 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 == curTypeDeviceList.Count) { line2.Visible = false; } #endregion EventHandler hander = (sender, e) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (!btnChoose.IsSelected) { targetList.Remove(device); btnChoose.IsSelected = false; btnChoose.Visible = false; } else { if (targetList.Count > 7) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFull), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } else { targetList.Add(device); btnChoose.IsSelected = true; btnChoose.Visible = true; } } if (targetList.Count == 0) { btnChooseKeyMode.Enable = false; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnChooseKeyMode.Enable = true; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } }; rowLayout.MouseUpEventHandler += hander; devicePic.MouseUpEventHandler += hander; btnBindName.MouseUpEventHandler += hander; btnChoose.MouseUpEventHandler += hander; foreach (var bindedDev in targetList) { var id = device.DeviceAddr + device.DeviceEpoint; if (id == bindedDev.DeviceAddr + bindedDev.DeviceEpoint) { btnChoose.IsSelected = true; btnChoose.Visible = true; } } } if (targetList.Count == 0) { btnChooseKeyMode.Enable = false; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnChooseKeyMode.Enable = true; btnChooseKeyMode.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } } /// /// 选择楼层的侧边栏 /// void SideslipFramelayout() { var dialog = new Dialog { }; dialog.Show(); var flMain = new FrameLayout { BackgroundColor = 0x00000000 }; dialog.AddChidren(flMain); flMain.MouseUpEventHandler += (sender11, e11) => { dialog.Close(); }; var sidelipFrameLayout = new FrameLayout() { Width = Application.GetMinReal(449), Y = Application.GetRealHeight(161), X = Application.GetRealWidth(596), BackgroundImagePath = "DoorLock/SideslipPic.png", }; flMain.AddChidren(sidelipFrameLayout); var btnSelectFloor = new Button() { Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(58), X = Application.GetRealWidth(81), Y = Application.GetRealHeight(81), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 14, TextAlignment = TextAlignment.CenterLeft, TextID = R.MyInternationalizationString.SelectFloor, IsBold = true, }; sidelipFrameLayout.AddChidren(btnSelectFloor); var sidelipVerticalScrolViewLayout = new VerticalScrolViewLayout() { Height = Application.GetRealHeight(600), Y = btnSelectFloor.Bottom + Application.GetRealHeight(45), }; sidelipFrameLayout.AddChidren(sidelipVerticalScrolViewLayout); Button oldbutton = null; Button oldbuttonText = null; int count = 0; foreach (var floorId in dicFloor.Keys) { count++; var rowFrameLayout = new RowLayout() { Height = Application.GetRealHeight(152), LineColor = Shared.Common.ZigbeeColor.Current.XMRowLine, X = Application.GetRealWidth(81), }; sidelipVerticalScrolViewLayout.AddChidren(rowFrameLayout); var btnAllMethod = new Button() { Width = Application.GetMinReal(81), Height = Application.GetMinReal(81), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Floor/Floor.png", SelectedImagePath = "Floor/FloorSelected.png", }; rowFrameLayout.AddChidren(btnAllMethod); var btnMethodText = new Button() { Width = Application.GetRealWidth(311), Height = Application.GetRealHeight(58), X = Application.GetRealWidth(92), Gravity = Gravity.CenterVertical, TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, TextSize = 14, TextAlignment = TextAlignment.CenterLeft, Text = dicFloor[floorId], }; rowFrameLayout.AddChidren(btnMethodText); if (currentKey.currentSelectFloorId == floorId) { btnAllMethod.IsSelected = true; btnAllMethod.IsBold = true; btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack; } string curFloorId = floorId; EventHandler hander = (sender, e) => { if (currentKey.currentSelectFloorId == curFloorId) { return; } currentKey.currentSelectFloorId = curFloorId; btnFloorText.Text = dicFloor[floorId]; roomList.Clear(); if (!btnMethodText.IsSelected) { if (oldbutton != null) { oldbutton.IsSelected = false; } if (oldbuttonText != null) { oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; } oldbutton = btnMethodText; oldbuttonText = btnMethodText; btnMethodText.IsSelected = true; oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack; oldbuttonText.IsBold = true; } //获取楼层对应的房间 var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listAllRoom) { if (room.FloorId == currentKey.currentSelectFloorId) { roomList.Add(room); } } Shared.Common.Room curRoom = new Shared.Common.Room(); if (roomList.Count != 0) { curRoom = roomList[0]; } else { curRoom = new Shared.Common.Room(); roomList.Add(curRoom); } int index = 0; RefreshRoomList(curRoom, btnChooseKeyMode, ref index); dialog.Close(); }; btnAllMethod.MouseUpEventHandler += hander; rowFrameLayout.MouseUpEventHandler += hander; btnMethodText.MouseUpEventHandler += hander; } if (count == 0) { sidelipFrameLayout.Height = 0; } else if (count <= 4 && count > 0) { sidelipFrameLayout.Height = Application.GetRealHeight(180) + count * Application.GetRealHeight(150); } else { sidelipFrameLayout.Height = Application.GetMinReal(780); } } } }