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 = ""; 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 - 200 - 58); this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; this.MidFrameLayout(this); var btnAddFrameLayout = new FrameLayout { X = Application.GetRealWidth(830), Width = Application.GetRealWidth(200), }; this.titleFrameLayout.AddChidren(btnAddFrameLayout); btnFloorText = new Button { Width = Application.GetRealWidth(110), X = Application.GetRealWidth(15), Text = Language.StringByID(R.MyInternationalizationString.FirstFloor), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 15, TextAlignment = TextAlignment.CenterRight, }; btnAddFrameLayout.AddChidren(btnFloorText); var btnBindDown = new Button { Height = Application.GetRealHeight(69), Width = Application.GetRealWidth(69), X = Application.GetRealWidth(200 - 77), UnSelectedImagePath = "BindPic/BindDown.png", Gravity = Gravity.CenterVertical, }; btnAddFrameLayout.AddChidren(btnBindDown); btnBindDown.MouseDownEventHandler += (sender, e) => { SideslipFramelayout(); }; 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(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 数据处理 //获取楼层 dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); currentKey.currentSelectFloorId = BindInfo.GetCurrentSelectFloorId(); btnFloorText.Text = BindInfo.GetCurrentSelectFloorIdName(); // 获取楼层对应对房间 foreach (var room in Shared.Common.Room.Lists) { if (room.FloorId == currentKey.currentSelectFloorId) { roomList.Add(room); } } //首次拿到所有房间中按键的目标并存储 GetALlDispalyRoomDeviceList(); if (currentKeyAllRoomDeviceList.Count != 0) { if (currentKey.bindList != null && currentKey.bindList.Count != 0) { foreach (var devA in currentKeyAllRoomDeviceList) { var id = devA.CommonDevice?.DeviceAddr + devA.CommonDevice?.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.CommonDevice); } } } } } 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; } btnChooseKeyMode.MouseUpEventHandler += (sender, e) => { 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); if (roomTempList.Count != 0) { curRoom = roomTempList[0]; } 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 (index == 0) { 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; } 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); index++; } BindInfo.FinishDisplay(roomTempList, btnChooseKeyMode); RefreshDeviceList(curRoom); } //当前按键所有显示房间的所有设备处理 List GetALlDispalyRoomDeviceList() { currentKeyAllRoomDeviceList.Clear(); switch (curDeviceBindType) { case "AddSwitch": foreach (var r in Shared.Common.Room.Lists) { if (r.IsLove == true) { var aa = 0; ; } if (r.DeviceUIList.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var device in r.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 6)); if (dev != null) { currentKeyAllRoomDeviceList.Add(device); } } } } break; case "AddDimmer": foreach (var r in Shared.Common.Room.Lists) { if (r.DeviceUIList.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var device in r.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.InClusterList.Find(obj => (obj != null) && (obj.InCluster == 8)); if (dev != null) { currentKeyAllRoomDeviceList.Add(device); } } } } break; case "AddCurtain": foreach (var r in Shared.Common.Room.Lists) { if (r.DeviceUIList.Count == 0) { continue; } if (r.IsLove == true) { continue; } foreach (var device in r.DeviceUIList) { if (device.CommonDevice != null) { var dev = device.CommonDevice.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 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) { if (device.CommonDevice != null && device.CommonDevice.IsOnline == 0) { continue; } #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 targetList) { var id = device.CommonDevice?.DeviceAddr + device.CommonDevice?.DeviceEpoint; if (id == bindedDev.DeviceAddr + bindedDev.DeviceEpoint) { btnChoose.IsSelected = true; btnChoose.Visible = true; } } curIndex++; } //IsInitEntry = false; } // 侧边导航栏 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() { Height = Application.GetRealHeight(783), Width = Application.GetRealWidth(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.XMGray3, TextSize = 14, TextAlignment = TextAlignment.CenterLeft, TextID = R.MyInternationalizationString.SelectFloor, }; sidelipFrameLayout.AddChidren(btnSelectFloor); var sidelipVerticalScrolViewLayout = new VerticalScrolViewLayout() { Height = Application.GetRealHeight(600), Y = btnSelectFloor.Bottom, }; sidelipFrameLayout.AddChidren(sidelipVerticalScrolViewLayout); Button oldbutton = null; Button oldbuttonText = null; foreach (var floorId in dicFloor.Keys) { var rowFrameLayout = new RowLayout() { Height = Application.GetRealHeight(150), LineColor = Shared.Common.ZigbeeColor.Current.XMRowLine, X = Application.GetRealWidth(81), }; sidelipVerticalScrolViewLayout.AddChidren(rowFrameLayout); var btnAllMethod = new Button() { Width = Application.GetRealWidth(81), Height = Application.GetRealHeight(81), Y = Application.GetRealHeight(55), 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), Y = Application.GetRealHeight(69), TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, TextSize = 14, TextAlignment = TextAlignment.CenterLeft, Text = dicFloor[floorId], }; rowFrameLayout.AddChidren(btnMethodText); if (currentKey.currentSelectFloorId == floorId) { btnAllMethod.IsSelected = 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; } //获取楼层对应的房间 foreach (var room in Shared.Common.Room.Lists) { 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; } } public void DeviceInfoChange(CommonDevice common, string typeTag) { } public void ChangedILogicStatus(ZigBee.Device.Logic logic) { } public void ChangedISceneStatus(Scene scene) { } } }