using System; using System.Collections.Generic; using Microsoft.AppCenter.Crashes; 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 AddScenePage : 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 AddScenePage(ZigBee.Device.Panel key) { this.currentKey = key; } #region ◆ 变量申明__________________________ ZigBee.Device.Panel currentKey; //显示被绑定设备或场景的view VerticalScrolViewLayout midVerticalScrolViewLayout; HorizontalScrolViewLayout btnHorizontalScrolViewLayout; /// /// 按键配置的目标列表 /// List targetList = new List(); List roomList = new List(); public Action> action; #endregion public void Show() { this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.AddScene)); 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); midVerticalScrolViewLayout = new VerticalScrolViewLayout() { Y = btnMidTopLayout.Bottom, }; this.midFrameLayout.AddChidren(midVerticalScrolViewLayout); var bottomFrameLayout = new FrameLayout() { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight(1737 - 1472), Y = Application.GetRealHeight(1472), }; this.midFrameLayout.AddChidren(bottomFrameLayout); var btnFinifh = new Button() { Width = Application.GetRealWidth(907), Height = Application.GetRealHeight(127), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetRealHeight(120) / 2, TextID = R.MyInternationalizationString.Save, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, TextSize = 16, }; bottomFrameLayout.AddChidren(btnFinifh); #endregion #region 数据处理 roomList = Shared.Common.Room.Lists; Shared.Common.Room curRoom = roomList[0]; int index = 0; RefreshRoomList(curRoom, btnFinifh, ref index); RefreshSceneList(roomList[index]); if (curRoom.SceneUIList.Count == 0) { btnFinifh.Enable = false; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } btnFinifh.MouseUpEventHandler += async (sender, e) => { btnFinifh.Enable = false; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; if (currentKey.bindList.Count != 0) { var bindResult = await currentKey.ClearBindInfoAsync(); if (bindResult.clearBindInfoResponseData != null) { if (bindResult.clearBindInfoResponseData.Result != 0) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); CommonPage.Loading.Hide(); this.RemoveFromParent(); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; return; } else { currentKey.bindList.Clear(); } } } var temp = await currentKey.ConfigureHdlKeyValueAsync(Panel.KeyMode.Scene_Trigger); if (temp.setWritableValueResponData?.Status != 0) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.ChangeBindMode), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnFinifh); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; return; } else { currentKey.panelMode = 1; var addBindeDev = new AddBindData(); addBindeDev.DeviceAddr = currentKey.DeviceAddr; addBindeDev.Epoint = currentKey.DeviceEpoint; foreach (var de in targetList) { if (de.DeviceAddr != null) { var addBindInfo = new AddBindListObj(); addBindInfo.BindType = 0; addBindInfo.BindCluster = 6; addBindInfo.BindMacAddr = de.DeviceAddr; addBindInfo.BindEpoint = de.DeviceEpoint; addBindeDev.BindList.Add(addBindInfo); } else { var addBindInfo = new AddBindListObj(); addBindInfo.BindType = 1; addBindInfo.BindCluster = 6; var sc1 = (SceneUI)de; addBindInfo.BindScenesId = sc1.Id; addBindeDev.BindList.Add(addBindInfo); } } bool isFinish = false; try { CommonPage.Loading.Start(""); var dev = new AddedDeviceBindResponseAllData(); dev = await currentKey.AddDeviceBindAsync(addBindeDev); foreach (var ab in dev.addedDeviceBindResponseData?.BindList) { switch (ab.Result) { case 0: currentKey.bindList.Add((BindListResponseObj)ab); for (int i = 0; i < targetList.Count; i++) { var de = targetList[i]; var sc1 = new SceneUI(); if (de.DeviceAddr == null) { sc1 = (SceneUI)de; if (sc1.Id == ab.BindScenesId) { targetList.RemoveAt(i); i--; } } } isFinish = true; break; case 1: new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindErrorAbsence), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); break; case 2: switch (dev.addBindResultResponseData?.Result) { case 0: currentKey.bindList.Add((BindListResponseObj)ab); for (int i = 0; i < targetList.Count; i++) { var de = targetList[i]; if (de.DeviceAddr == ab.BindMacAddr && de.DeviceEpoint == ab.BindEpoint) { targetList.RemoveAt(i); i--; } } isFinish = true; break; case 140: new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFull), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); break; default: new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); break; } break; case 3: new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindErrorExisted), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); break; case 4: new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh); break; default: break; } } } catch { } finally { if (isFinish) { if (action != null) { action(currentKey.bindList); } this.RemoveFromParent(); } else { this.RemoveFromParent(); } CommonPage.Loading.Hide(); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } } }; #endregion } /// /// 按键绑定场景表显示 /// /// Gateway. /// Key. void RefreshRoomList(Shared.Common.Room curRoom, Button btnFinish, 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; if (curRoom.SceneUIList.Count == 0) { btnFinish.Enable = false; btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnFinish.Enable = true; btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } RefreshSceneList(curRoom); } 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; if (curRoom.SceneUIList.Count == 0) { btnFinish.Enable = false; btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnFinish.Enable = true; btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } RefreshSceneList(curRoom); } }; btnRoom.MouseUpEventHandler += eHandlerRoom; btnRoomFrameLayout.MouseUpEventHandler += eHandlerRoom; var btnEmpty = new Button { Width = Application.GetRealWidth(58), X = btnRoom.Right, }; btnHorizontalScrolViewLayout.AddChidren(btnEmpty); } } /// /// 按键绑定场景表显示 /// /// Gateway. /// Key. void RefreshSceneList(Shared.Common.Room curRoom) { midVerticalScrolViewLayout.RemoveAll(); Button oldScene = null; int curIndex = 0; foreach (var scene in curRoom.SceneUIList) { #region 绑定表UI显(无数据处理) var rowLayout = new FrameLayout() { Height = Application.GetRealHeight(23 + 127), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, }; midVerticalScrolViewLayout.AddChidren(rowLayout); var devicePic = new Button() { X = Application.GetMinRealAverage(58), Y = Application.GetMinRealAverage(46), Width = Application.GetMinRealAverage(81), Height = Application.GetMinRealAverage(81), UnSelectedImagePath = scene.IconPath, }; 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, }; 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", Visible = false, }; 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 if (scene.Name == null) { btnBindName.Text = Language.StringByID(R.MyInternationalizationString.Unknown); } else { btnBindName.Text = scene.Name; } foreach (var bindedSc in currentKey.bindList) { if (scene.Id == bindedSc.BindScenesId) { btnChoose.IsSelected = true; btnChoose.Visible = true; oldScene = btnChoose; targetList.Add(scene); } } bool IsTip = false; EventHandler hander = (sender, e) => { if (currentKey.bindList.Count != 0) { if (IsTip) { return; } IsTip = true; if (btnChoose.IsSelected) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindExist), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnBindName); return; } } if (!btnChoose.IsSelected) { if (oldScene != null) { oldScene.IsSelected = false; oldScene.Visible = false; targetList.Clear(); } oldScene = btnChoose; oldScene.IsSelected = true; oldScene.Visible = true; currentKey.curSelectSceneID = scene.Id.ToString(); targetList.Clear(); targetList.Add(scene); } }; rowLayout.MouseUpEventHandler += hander; devicePic.MouseUpEventHandler += hander; btnBindName.MouseUpEventHandler += hander; btnChoose.MouseUpEventHandler += hander; curIndex++; } } public void DeviceInfoChange(CommonDevice common, string typeTag) { } public void ChangedILogicStatus(ZigBee.Device.Logic logic) { } public void ChangedISceneStatus(Scene scene) { } } }