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)
{
}
}
}