using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.UserView;
using Shared.R;
using ZigBee.Device;
using Shared.Phone.Device.CommonForm;
namespace Shared.Phone.Device.Category
{
///
/// Category.
///
public class Category : FrameLayout, ZigBee.Common.IStatus
{
#region ◆ 变量____________________________
///
/// The instance.
///
public static Category instance;
///
/// low_High
///
private const int low_High= 127;
///
/// 功能
///
private ButtonLineForm functionBtn;
///
/// 场景
///
private ButtonLineForm sceneBtn;
///
/// 自动化
///
private ButtonLineForm automationBtn;
///
/// 场景功能中部背景bodyView
///
public FrameLayout functionSceneBodyView;
///
/// 中部背景bodyView
///
public FrameLayout functionSceneAutoBodyView;
///
/// 相同的设备列表
///
public VerticalScrolViewLayout deviceListScrolView;
///
/// 设备是否在线标识--Online
///
private readonly string deviceStatus_Online = "Online";
///
/// 设备状态开关标识--Switch
///
private readonly string deviceStatus_OnOffStatus = "Switch";
///
/// 右上角添加按钮
///
private Device.CommonForm.SelectedStatuButton addBtn;
///
/// 网关
///
private ZbGateway zbGateway = null;
///
/// 网关列表
///
private List zbGatewayList = new List { };
///
/// 设备列表
///
private List commonDeviceList = new List { };
///
/// 是否发送控制命令成功了
///
private bool sendedControlCommand = false;
///
/// 当前功能类型按钮
///
private FunctionButton tempFunctionTypeBtn;
///
/// 功能类型按钮
///
private FunctionButton functionTypeIMG;
///
/// 功能类型
///
private HorizontalScrolViewLayout functionTypeScrowView;
///
/// 设备类型RowLayout
///
private FrameLayout typeRowLayout;
///
/// 楼层
///
private Button floorBtn;
///
/// 选择楼层
///
private Button selectFloorBtn;
#endregion
#region ◆ 接口____________________________
///
/// 该接口将弃用 改用DeviceInfoChange()
///
/// Common.
public void Changed(CommonDevice common)
{
}
///
/// Changeds the IL ogic status.
///
/// Logic.
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
{
}
///
/// Changeds the IS cene status.
///
/// Scene.
public void ChangedISceneStatus(Scene scene)
{
}
///
/// 设备状态更新接口
/// type:如果为 DeviceInComingRespon:设备新上报
/// type:如果为 IASInfoReport:RemoveDeviceRespon
/// type:如果为 DeviceStatusReport:设备上报
/// type:如果为 IASInfoReport:IAS安防信息上报
/// type:如果为 OnlineStatusChange: 设备在线状态更新
///
/// Common.
/// Type tag.
public void DeviceInfoChange(CommonDevice common, string typeTag)
{
//设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
if (typeTag == "DeviceStatusReport")
{
Application.RunOnMainThread(() =>
{
try
{
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
{
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
continue;
}
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
{
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
//开关功能
if ((common as ToggleLight).DeviceStatusReport.CluterID == 6)
{
var light = deviceUI.CommonDevice as ToggleLight;
light.DeviceStatusReport = (common as ToggleLight).DeviceStatusReport;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
//记录、更新状态
if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0)
{
continue;
}
light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData;
(tempView as Button).IsSelected = light.OnOffStatus == 1;
//记录回复时间
light.LastDateTime = DateTime.Now;
}
}
}
if ((common as ToggleLight).DeviceStatusReport.CluterID == 3)
{
var light = deviceUI.CommonDevice as ToggleLight;
light.IsOnline = 1;
//记录回复时间
light.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = light.IsOnline == 1;
}
}
}
break;
case DeviceType.AirSwitch:
//开关功能
if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 6)
{
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
airSwitch.DeviceStatusReport = (common as ZigBee.Device.AirSwitch).DeviceStatusReport;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
//记录、更新状态
if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
{
return;
}
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
(tempView as Button).IsSelected = airSwitch.OnOffStatus == 1;
//记录回复时间
airSwitch.LastDateTime = DateTime.Now;
}
}
}
if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 3)
{
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
airSwitch.IsOnline = 1;
//记录回复时间
airSwitch.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = airSwitch.IsOnline == 1;
}
}
}
break;
case DeviceType.WindowCoveringDevice:
if ((common as Rollershade).DeviceStatusReport.CluterID == 3)
{
var rollerShape = deviceUI.CommonDevice as Rollershade;
//记录回复时间
rollerShape.LastDateTime = DateTime.Now;
rollerShape.IsOnline = 1;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = rollerShape.IsOnline == 1;
}
}
}
break;
case DeviceType.Thermostat:
//AC功能
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 513)
{
var attriButeList = (common as ZigBee.Device.AC).DeviceStatusReport.AttriBute;
if (attriButeList == null || attriButeList.Count == 0)
{
return;
}
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.DeviceStatusReport = (common as ZigBee.Device.AC).DeviceStatusReport;
switch (attriButeList[0].AttributeId)
{
case 0:
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100;
ac.LastDateTime = DateTime.Now;
break;
case 17:
//此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100;
ac.LastDateTime = DateTime.Now;
break;
case 18:
//此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100;
ac.LastDateTime = DateTime.Now;
break;
case 28:
//此属性描述恒温设备正处于哪种模式
//Off = 0 Auto = 1 Cool = 3 Heat = 4 FanOnly = 7 Dry = 8
ac.currentSystemMode = attriButeList[0].AttriButeData;
ac.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
if (ac.currentSystemMode == 0)
{
(tempView as Button).IsSelected = false;
}
else
{
(tempView as Button).IsSelected = true;
}
}
}
break;
}
}
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 3)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.IsOnline = 1;
//记录回复时间
ac.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = ac.IsOnline == 1;
}
}
}
break;
case DeviceType.DimmableLight:
//调光灯功能
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 6)
{
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
//记录、更新状态
if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
{
return;
}
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
(tempView as Button).IsSelected = dimmableLight.OnOffStatus == 1;
//记录回复时间
dimmableLight.LastDateTime = DateTime.Now;
}
}
}
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 3)
{
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
dimmableLight.IsOnline = 1;
//记录回复时间
dimmableLight.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = dimmableLight.IsOnline == 1;
}
}
}
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
}
});
}
else if (typeTag == "OnlineStatusChange")
{
Application.RunOnMainThread(() =>
{
try
{
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
{
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
continue;
}
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
{
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
var light = deviceUI.CommonDevice as ToggleLight;
light.IsOnline = (common as ToggleLight).IsOnline;
//记录回复时间
light.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = light.IsOnline == 1;
}
}
break;
case DeviceType.AirSwitch:
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
airSwitch.IsOnline = (common as ZigBee.Device.AirSwitch).IsOnline;
//记录回复时间
airSwitch.LastDateTime = DateTime.Now;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = airSwitch.IsOnline == 1;
}
}
break;
case DeviceType.WindowCoveringDevice:
var rollerShape = deviceUI.CommonDevice as Rollershade;
//记录回复时间
rollerShape.LastDateTime = DateTime.Now;
rollerShape.IsOnline = (common as Rollershade).IsOnline;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = rollerShape.IsOnline == 1;
}
}
break;
case DeviceType.Thermostat:
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
//记录回复时间
ac.LastDateTime = DateTime.Now;
ac.IsOnline = (common as ZigBee.Device.AC).IsOnline;
for (int j = 0; j < rowLayout.ChildrenCount; j++)
{
var tempView = rowLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = ac.IsOnline == 1;
}
}
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
}
});
}
}
#endregion
#region ◆ 初始化__________________________
///
/// Removes from parent.
///
public override void RemoveFromParent()
{
ZbGateway.StatusList.Remove(this);
RemoveAllUpdateControlDeviceStatuAction();
base.RemoveFromParent();
}
///
/// 构造方法
///
public Category()
{
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
instance = this;
}
///
/// 显示界面--默认场景界面
///
/// 选中那个界面 0--功能 1--场景 2--自动化
public void Show(int selectedBtn = 1)
{
ZbGateway.StatusList.Add(this);
RemoveAll();
#region topview
var topView = new FrameLayout()
{
Y = Application.GetRealHeight(104),
Height = Application.GetRealHeight(low_High),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
};
this.AddChidren(topView);
var title = new Button()
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(95),
Width = Application.GetRealWidth(CommonFormResouce.TopTitle_Width),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterLeft,
TextID = R.MyInternationalizationString.Category,
TextSize = 20,
TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
};
topView.AddChidren(title);
addBtn = new SelectedStatuButton()
{
X = Application.GetRealWidth(953),
Width = Application.GetMinRealAverage(104),
Height = Application.GetMinRealAverage(104),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Add_Category.png",
SelectedImagePath = "Item/Add_Category.png"
};
topView.AddChidren(addBtn);
#endregion
#region midFL
var midFL = new FrameLayout
{
Y = topView.Bottom,
Height = Application.GetRealHeight(1549),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
AddChidren(midFL);
var functionSceneAutoBG = new FrameLayout()
{
Height = Application.GetRealHeight(low_High),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
midFL.AddChidren(functionSceneAutoBG);
//场景
sceneBtn = new ButtonLineForm(CommonFormResouce.X_Left, 34, 150, 68);
functionSceneAutoBG.AddChidren(sceneBtn);
sceneBtn.Init();
sceneBtn.SetTitle(R.MyInternationalizationString.Scence);
//功能
functionBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 + 20, 34, 150, 68);
functionSceneAutoBG.AddChidren(functionBtn);
functionBtn.Init();
functionBtn.SetTitle(R.MyInternationalizationString.Function);
//自动化
automationBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 * 2 + 20, 34, 150, 68);
automationBtn.Init();
automationBtn.SetTitle(R.MyInternationalizationString.Automation);
//隐藏自动化
if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3)
{
functionSceneAutoBG.AddChidren(automationBtn);
}
floorBtn = new Button()
{
X = Application.GetRealWidth(750),
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(60),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterRight,
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
};
selectFloorBtn = new Button()
{
X = Application.GetRealWidth(950),
Width = Application.GetMinRealAverage(69),
Height = Application.GetMinRealAverage(69),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Drop_Down.png"
};
if (Config.Instance.Home.FloorDics.Count > 0)
{
floorBtn.Text = Config.Instance.Home.GetCurrentFloorName;
functionSceneAutoBG.AddChidren(floorBtn);
functionSceneAutoBG.AddChidren(selectFloorBtn);
}
functionSceneAutoBodyView = new FrameLayout
{
Y = functionSceneAutoBG.Bottom,
Height = Application.GetRealHeight(1423),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
midFL.AddChidren(functionSceneAutoBodyView);
if (selectedBtn == 0)
{
addBtn.Visible = false;
functionBtn.IsSelected = true;
}
else if (selectedBtn == 1)
{
addBtn.Visible = true;
sceneBtn.IsSelected = true;
}
else if (selectedBtn == 2)
{
addBtn.Visible = true;
automationBtn.IsSelected = true;
}
RefreshBodyView();
#endregion
//绑定按钮事件
BindEvent();
}
#endregion
#region ◆ 切换/添加 功能、场景、自动化________
///
/// 绑定按钮的事件
///
private void BindEvent()
{
//选择功能分栏
functionBtn.NameBtn.MouseUpEventHandler += FunctionBtn_MouseUpEventHandler;
//选择场景分栏
sceneBtn.NameBtn.MouseUpEventHandler += SceneBtn_MouseUpEventHandler;
//选中自动化
automationBtn.NameBtn.MouseUpEventHandler += AutomationBtn_MouseUpEventHandler;
//右上角添加按钮
addBtn.MouseUpEventHandler += AddBtn_MouseUpEventHandler;
selectFloorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler;
floorBtn.MouseUpEventHandler+= SelectedFloor_MouseUpEventHandler;
}
///
/// 选择楼层
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void SelectedFloor_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
var floors = new SelectFloor ();
AddChidren(floors);
floors.Init(580,330,Direction.Right);
floors.FloorAction += (floorName) =>
{
floorBtn.Text = floorName;
RefreshBodyView();
};
}
///
/// 选择功能分栏
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void FunctionBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
functionBtn.IsSelected = true;
sceneBtn.IsSelected = false;
automationBtn.IsSelected = false;
addBtn.Visible = false;
RefreshBodyView();
}
///
/// 选择场景分栏
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void SceneBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
functionBtn.IsSelected = false;
sceneBtn.IsSelected = true;
automationBtn.IsSelected = false;
addBtn.Visible = true;
RefreshBodyView();
}
///
/// 选中自动化
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void AutomationBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
functionBtn.IsSelected = false;
sceneBtn.IsSelected = false;
automationBtn.IsSelected = true;
addBtn.Visible = true;
RefreshBodyView();
}
///
/// 右上角添加按钮事件
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void AddBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
if (functionBtn.IsSelected)
{
//功能
}
else if (sceneBtn.IsSelected)
{
//添加场景
Add_Scene();
}
else if (automationBtn.IsSelected)
{
//添加自动化
Add_Automation();
}
}
///
/// 添加场景
///
private void Add_Scene()
{
var scene = new CategoryAddScene();
UserView.HomePage.Instance.AddChidren(scene);
UserView.HomePage.Instance.PageIndex += 1;
scene.Show();
}
///
/// 添加自动化
///
private void Add_Automation()
{
//new一个新逻辑对象;
Common.Logic.CurrentLogic = new Common.Logic();
Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1);
var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage();
UserView.HomePage.Instance.AddChidren(addLogicPage);
UserView.HomePage.Instance.PageIndex += 1;
addLogicPage.Show();
}
#endregion
#region ◆ 刷新____________________________
///
/// 刷新bodyView
///
public void RefreshBodyView()
{
functionSceneAutoBodyView.RemoveAll();
if (functionBtn.IsSelected)
{
ShowFunction();
}
else if (sceneBtn.IsSelected)
{
ShowScene();
}
else if (automationBtn.IsSelected)
{
ShowAutotion();
}
}
#endregion
#region ◆ 功能____________________________
///
/// 功能
///
public void ShowFunction()
{
AddRoomView();
}
///
/// 提示没有功能
///
private void ShowNoFunctionTip()
{
var noFunction = new Button()
{
Y=Application.GetRealHeight(320),
Width=Application.GetMinRealAverage(757),
Height = Application.GetMinRealAverage(435),
UnSelectedImagePath="Item/NoFunction.png",
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noFunction);
var noFunctionTip = new Button()
{
Y = noFunction.Bottom + Application.GetRealHeight(32),
Height = Application.GetRealHeight(200),
Width = Application.GetRealWidth(700),
Gravity = Gravity.CenterHorizontal,
Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}","\r\n"),
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
IsMoreLines=true
};
functionSceneBodyView.AddChidren(noFunctionTip);
}
///
/// RefreshFunction
///
///
private void RefreshFunction(Common.Room room)
{
//移除监听
RemoveAllUpdateControlDeviceStatuAction();
functionSceneBodyView.RemoveAll();
if (room.DeviceUIList.Count == 0)
{
ShowNoFunctionTip();
}
else
{
functionTypeScrowView = new HorizontalScrolViewLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(279),
Width = Application.GetRealWidth(1028),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
functionSceneBodyView.AddChidren(functionTypeScrowView);
deviceListScrolView = new VerticalScrolViewLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Y = Application.GetRealHeight(35+275),
Width = Application.GetRealWidth(1028),
Height = Application.GetRealHeight(938) - 1,
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
functionSceneBodyView.AddChidren(deviceListScrolView);
tempFunctionTypeBtn = new FunctionButton();
EventHandler ShowSameTypeFunction = (object typeSender, MouseEventArgs mouseEventArgs) =>
{
tempFunctionTypeBtn.IsSelected = false;
tempFunctionTypeBtn = (typeSender as Button).Parent as FunctionButton;
((typeSender as Button).Parent as FunctionButton).IsSelected = true;
deviceListScrolView.RemoveAll();
var sameTypeList = new List { };
foreach (var devieceUI in room.DeviceUIList)
{
if (devieceUI == null || devieceUI.CommonDevice == null)
{
continue;
}
if (devieceUI.CommonDevice.Type.ToString() == (typeSender as Button).Tag.ToString())
{
if (!sameTypeList.Contains(devieceUI))
{
sameTypeList.Add(devieceUI);
}
}
}
foreach (var deviceUI in sameTypeList)
{
//删除设备
EventHandler delEvent = (delSender, delE) =>
{
var alert = new CustomAlert();
AddChidren(alert);
alert.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
alert.ResultEventHandler += (e2) =>
{
if (e2)
{
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.CommonDevice);
deviceListScrolView.RemoveViewByTag((delSender as Button).Tag);
sameTypeList.Remove(deviceUI);
if (sameTypeList.Count == 0)
{
RefreshBodyView();
}
}
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.action = RefreshBodyView;
};
if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.OnOffOutput)
{
//灯
var light = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
//补上非远程
if (light.Gateway == null)
{
continue;
}
if (light.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(light, () =>
{
light.ReadOnOffStatus();
light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
});
}
else
{
//防止短时间内多次读取状态
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
{
light.ReadOnOffStatus();
light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
}
}
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(129 + 35),
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = deviceUI
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
deviceRow.SetStatu(light.IsOnline == 1);
deviceRow.SetZoneText(deviceUI.GetZone());
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
deviceRow.IsSelected = (send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
light.SwitchControl(1);
}
else
{
light.SwitchControl(0);
}
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var lightControl = new Phone.Device.Light.LightControl();
UserView.HomePage.Instance.AddChidren(lightControl);
UserView.HomePage.Instance.PageIndex += 1;
lightControl.action = RefreshBodyView;
lightControl.Show(deviceUI, room);
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
}
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.AirSwitch)
{
//空气开关
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
//补上非远程
if (airSwitch.Gateway == null)
{
continue;
}
if (airSwitch.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(airSwitch, () =>
{
airSwitch.ReadOnOffStatus();
airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
});
}
else
{
if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
airSwitch.ReadOnOffStatus();
airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
}
}
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(127 + 35),
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = deviceUI
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
deviceRow.SetStatu(airSwitch.IsOnline == 1);
deviceRow.SetZoneText(deviceUI.GetZone());
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
airSwitch.SwitchControl(1);
}
else
{
airSwitch.SwitchControl(0);
}
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var lightControl = new Phone.Device.Light.LightControl();
UserView.HomePage.Instance.AddChidren(lightControl);
UserView.HomePage.Instance.PageIndex += 1;
lightControl.action = RefreshBodyView;
lightControl.Show(deviceUI, room);
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
}
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.DimmableLight)
{
//调光灯
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
//补上非远程
if (dimmableLight.Gateway == null)
{
continue;
}
if (dimmableLight.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(dimmableLight, () =>
{
dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
dimmableLight.ReadOnOffStatus();
dimmableLight.ReadLevel();
});
}
else
{
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
dimmableLight.ReadOnOffStatus();
dimmableLight.ReadLevel();
}
}
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(129 + 35),
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = deviceUI
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
deviceRow.SetStatu(dimmableLight.IsOnline == 1);
deviceRow.SetZoneText(deviceUI.GetZone());
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
dimmableLight.SwitchControl(1);
}
else
{
dimmableLight.SwitchControl(0);
}
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var dimmableLightControl = new Phone.Device.Light.DimmableLightControl();
UserView.HomePage.Instance.AddChidren(dimmableLightControl);
UserView.HomePage.Instance.PageIndex += 1;
UserView.HomePage.Instance.ScrollEnabled = false;
dimmableLightControl.action = RefreshBodyView;
dimmableLightControl.Show(deviceUI, room);
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
}
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.Thermostat)
{
//空调
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
//补上非远程
if (ac.Gateway == null)
{
continue;
}
if (ac.Gateway.IsVirtual)
{
//发送读取状态命令
UserView.UserHomeView.ReadStatus(ac, () =>
{
ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
ac.ReadFanMode();
ac.ReadSystemMode();
ac.ReadLocalTemperature();
ac.ReadCoolingSetpoint();
ac.ReadHeatingSetpoint();
});
}
else
{
//防止短时间内多次读取设备状态
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
});
}
else
{
//防止短时间内多次读取
if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
}
}
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(127 + 35),
LineColor = ZigbeeColor.Current.GXCLineColor,
Tag = deviceUI
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
var deviceRow = new FunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
deviceRow.SetStatu(rollerShade.IsOnline == 1);
deviceTypeRowLayout.AddChidren(deviceRow);
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
deviceRow.SwitchBtn.MouseUpEventHandler += (sender, e) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(sender as CommonForm.SelectedStatuButton).IsSelected = !(sender as CommonForm.SelectedStatuButton).IsSelected;
if ((sender as CommonForm.SelectedStatuButton).IsSelected)
{
rollerShade.CurtainUpDownStopControl(0);
}
else
{
rollerShade.CurtainUpDownStopControl(1);
}
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
}
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice)
{
//卷帘
var rollerShade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
//不上非远程
if (rollerShade.Gateway == null)
{
continue;
}
if (rollerShade.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(rollerShade, () =>
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
});
}
else
{
//防止短时间内多次读取
if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
}
}
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(127 + 35),
LineColor = ZigbeeColor.Current.GXCLineColor,
Tag = deviceUI
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
var deviceRow = new FunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
deviceRow.SetStatu(rollerShade.IsOnline == 1);
deviceTypeRowLayout.AddChidren(deviceRow);
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI,
Radius = 0
};
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
deviceRow.SwitchBtn.MouseUpEventHandler += (sender, e) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(sender as CommonForm.SelectedStatuButton).IsSelected = !(sender as CommonForm.SelectedStatuButton).IsSelected;
if ((sender as CommonForm.SelectedStatuButton).IsSelected)
{
rollerShade.CurtainUpDownStopControl(0);
}
else
{
rollerShade.CurtainUpDownStopControl(1);
}
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
}
else
{
}
}
};
foreach (var deviceType in Common.Room.GetdeviceTypes(room))
{
typeRowLayout = new FrameLayout()
{
Width = Application.GetRealWidth(CommonPage.AppRealWidth / 5),
Tag = deviceType
};
functionTypeScrowView.AddChidren(typeRowLayout);
functionTypeIMG = new FunctionButton()
{
Tag = deviceType
};
functionTypeIMG.Init(DeviceUI.GetDeviceTypeUnSelectedImagePath(deviceType), DeviceUI.GetDeviceTypeUnSelectedImagePath(deviceType));
functionTypeIMG.SetTitle(DeviceUI.GetDeviceTypeName(deviceType));
typeRowLayout.AddChidren(functionTypeIMG);
functionTypeIMG.ClickBtn.MouseUpEventHandler += ShowSameTypeFunction;
if (deviceType == room.DeviceUIList[0].CommonDevice.Type)
{
ShowSameTypeFunction(functionTypeIMG.ImageBtn, null);
}
}
}
}
///
/// AddRoomView
///
private void AddRoomView()
{
var roomFL = new HorizontalScrolViewLayout()
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(170),
Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonFormResouce.X_Left),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
functionSceneAutoBodyView.AddChidren(roomFL);
//功能和场景bodyView
functionSceneBodyView = new FrameLayout()
{
Y = roomFL.Bottom,
Height = Application.GetRealHeight(973+279),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
functionSceneAutoBodyView.AddChidren(functionSceneBodyView);
Button curBtn = new Button();
foreach (var room in Common.Room.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom())
{
var row = new FrameLayout()
{
Width = Application.GetRealWidth(187 + 50),
Height = Application.GetRealHeight(167)
};
roomFL.AddChidren(row);
var roomBtn = new Button()
{
Width = Application.GetRealWidth(187),
Height = Application.GetRealHeight(78),
Radius = (uint)Application.GetRealHeight(78 / 2),
Gravity = Gravity.Center,
Text = room.Name,
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor3,
SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonSelectedColor,
BorderColor = ZigbeeColor.Current.GXCBorderUnSelectedColor,
BorderWidth = 1
};
row.AddChidren(roomBtn);
if (room.IsLove)
{
roomBtn.IsSelected = true;
curBtn = roomBtn;
if(sceneBtn.IsSelected)
{
RefreshScene(room);
}
else
{
RefreshFunction(room);
}
}
roomBtn.MouseUpEventHandler += (sender, e) =>
{
if ((sender as Button) == curBtn)
{
return;
}
(sender as Button).IsSelected = true;
curBtn.IsSelected = false;
curBtn = sender as Button;
if (sceneBtn.IsSelected)
{
RefreshScene(room);
}
else
{
RefreshFunction(room);
}
};
}
}
#endregion
#region ◆ 场景____________________________
///
/// 选择场景--所有房间的所有场景
///
public void ShowScene()
{
AddRoomView();
}
///
/// RefreshScene
///
///
public void RefreshScene(Common.Room room)
{
functionSceneBodyView.RemoveAll();
var sceneList = room.SceneUIList;
if (sceneList.Count == 0)
{
ShowNoSceneTip();
}
else
{
var sceneScrolView = new VerticalScrolViewLayout
{
//Y = Application.GetRealHeight(58)
};
functionSceneBodyView.AddChidren(sceneScrolView);
foreach (var scene in sceneList)
{
var sceneFL = new FrameLayout()
{
Height = Application.GetRealHeight(446),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
Tag = scene
};
sceneScrolView.AddChidren(sceneFL);
var sceneRowLayout = new RowLayout
{
Y = Application.GetRealHeight(46),
Height = Application.GetRealHeight(446 - 46),
LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
Radius = CommonPage.BigFormRadius
};
sceneFL.AddChidren(sceneRowLayout);
var sceneImg = new Button()
{
X = Application.GetRealWidth(179),
Width = Application.GetRealWidth(844),
Height = Application.GetRealHeight(400),
BackgroundColor = ZigbeeColor.Current.GXCRedColor,
UnSelectedImagePath = scene.IconPath,
Radius = (uint)Application.GetRealHeight(17)
};
sceneRowLayout.AddChidren(sceneImg);
var leftFL = new FrameLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Y = Application.GetRealHeight(58),
Width = Application.GetRealWidth(251),
Height = Application.GetRealHeight(282),
BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2,
Radius = (uint)Application.GetRealHeight(17)
};
sceneRowLayout.AddChidren(leftFL);
var collectionBtn = new Button
{
X = Application.GetRealWidth(23),
Y = Application.GetRealHeight(23),
Width = Application.GetMinRealAverage(65),
Height = Application.GetMinRealAverage(65),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName),
Tag = scene
};
leftFL.AddChidren(collectionBtn);
var sceneNameBtn = new Button()
{
Width = Application.GetRealWidth(176),
Height = Application.GetRealHeight(150),
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
Text = scene.Name,
Gravity = Gravity.Center,
IsMoreLines = true
};
leftFL.AddChidren(sceneNameBtn);
var collection = new Button
{
Tag=scene
};
leftFL.AddChidren(collection);
collection.MouseUpEventHandler += (sender, e) =>
{
if (room.IsLove)
{
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
sceneScrolView.RemoveViewByTag(collectionBtn.Tag);
}
else
{
collectionBtn.IsSelected = !collectionBtn.IsSelected;
if (collectionBtn.IsSelected)
{
Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
}
else
{
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
}
}
};
//定时
var delayBtn = new RowLayoutDeleteButton
{
TextID = R.MyInternationalizationString.Delay,
Tag = scene.SceneDelayTime
};
sceneRowLayout.AddLeftView(delayBtn);
//编辑
var settingBtn = new Device.CommonForm.RowLayoutEditButton()
{
TextID = R.MyInternationalizationString.Editor,
Tag = scene.SceneDelayTime
};
//删除
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = scene
};
if (!room.IsSharedRoom)
{
sceneRowLayout.AddRightView(settingBtn);
sceneRowLayout.AddRightView(deleteBtn);
}
//调用场景
EventHandler sceneUpHandler = async (sender, e) =>
{
//1成功 0失败
//后面补上相关提示
//要先从网关读取延时是否正在执行,如果是进行倒计时,不允许在点击
var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
//主网关不在线
if (sceneOpenAllData == null)
{
//CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine);
CommonPage.Instance.FailureToServer();
return;
}
if (sceneOpenAllData.sceneOpenData == null)
{
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
return;
}
//成功
if (sceneOpenAllData.sceneOpenData.Result == 1)
{
}
//失败
else
{
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
return;
}
};
sceneImg.MouseUpEventHandler += sceneUpHandler;
//删除场景
EventHandler delEvent = (sender, e) =>
{
if(room.IsLove)
{
Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
}
else
{
var tip = new CustomAlert { };
AddChidren(tip);
tip.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
//var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.ConfirmDelete), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
//alert.Show();
tip.ResultEventHandler += async (e1) =>
{
if (e1)
{
//0 移除失败 1 移除成功 2 没有该场景
var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
{
//CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine);
CommonPage.Instance.FailureToServer();
return;
}
//1成功
if (removeSceneAllData.removeSceneData.Result == 1)
{
room.RemoveScene(scene);
//RefreshBodyView();
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
}
//0 移除失败
else if (removeSceneAllData.removeSceneData.Result == 0)
{
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
return;
}
//2 没有该场景
else if (removeSceneAllData.removeSceneData.Result == 2)
{
room.RemoveScene(scene);
//RefreshBodyView();
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheSceneIsNull);
return;
}
}
};
}
};
deleteBtn.MouseUpEventHandler += delEvent;
//编辑场景
settingBtn.MouseUpEventHandler += (sender, e) =>
{
SceneUI.EditScene(scene, room);
};
//编辑延时
delayBtn.MouseUpEventHandler += (sender, e) =>
{
var timeSelect = new SelectTime();
CommonPage.Instance.AddChidren(timeSelect);
timeSelect.TempTime = scene.SceneDelayTime;
timeSelect.Init();
timeSelect.TimeAction = (t) =>
{
scene.SceneDelayTime = t;
};
};
}
}
}
///
/// 显示没有场景
///
private void ShowNoSceneTip()
{
var noFunction = new Button()
{
Y = Application.GetRealHeight(320),
Width = Application.GetMinRealAverage(757),
Height = Application.GetMinRealAverage(435),
UnSelectedImagePath = "Item/NoFunction.png",
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noFunction);
var noScenceTip = new Button()
{
Y = noFunction.Bottom + Application.GetRealHeight(32),
Height = Application.GetRealHeight(200),
Width = Application.GetRealWidth(700),
Gravity = Gravity.CenterHorizontal,
Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}","\r\n"),
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
IsMoreLines = true
};
functionSceneBodyView.AddChidren(noScenceTip);
}
#endregion
#region ◆ 自动化__________________________
///
/// 自动化
///
private async void ShowAutotion()
{
functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
var bjFrameLayout = new FrameLayout
{
Width = Application.GetRealWidth(1080 - 58),
Height = Application.GetRealHeight(170),
BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
X = Application.GetRealWidth(58),
Radius = (uint)Application.GetRealHeight(50),
Y = Application.GetRealHeight(30),
};
functionSceneAutoBodyView.AddChidren(bjFrameLayout);
var sigBtn = new Button
{
Width = Application.GetMinRealAverage(84),
Height = Application.GetMinRealAverage(84),
UnSelectedImagePath = "ZigeeLogic/sign.png",
X = Application.GetRealWidth(58),
Gravity = Gravity.CenterVertical,
};
bjFrameLayout.AddChidren(sigBtn);
var recommendtextBtn = new Button
{
Width = Application.GetMinRealAverage(300),
Height = Application.GetMinRealAverage(84),
X = sigBtn.Right + Application.GetRealWidth(35),
TextAlignment = TextAlignment.CenterLeft,
//Text = "推荐模板",
TextID = MyInternationalizationString.logictemplate,
Gravity = Gravity.CenterVertical,
TextColor = ZigbeeColor.Current.LogicBtnSelectedColor,
};
bjFrameLayout.AddChidren(recommendtextBtn);
var recommendswitchBtn = new Button
{
Width = Application.GetMinRealAverage(104),
Height = Application.GetMinRealAverage(63),
UnSelectedImagePath = "ZigeeLogic/logicclose.png",
SelectedImagePath = "ZigeeLogic/logicopen.png",
X = bjFrameLayout.Width - Application.GetRealWidth(104 + 58),
Gravity = Gravity.CenterVertical,
};
bjFrameLayout.AddChidren(recommendswitchBtn);
///
/// 显示没有场景
///
private void ShowNoSceneTip()
{
var noFunction = new Button()
{
Y = Application.GetRealHeight(320),
Width = Application.GetMinRealAverage(757),
Height = Application.GetMinRealAverage(435),
UnSelectedImagePath = "Item/NoFunction.png",
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noFunction);
var noScenceTip = new Button()
{
Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30),
BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
X = Application.GetRealWidth(58),
Radius = (uint)Application.GetRealHeight(50),
Y = scenehorizontalScrol.Bottom,
};
functionSceneBodyView.AddChidren(noScenceTip);
}
#endregion
#region ◆ 自动化__________________________
CommonPage.Loading.Start();
if (Common.Logic.LogicList.Count == 0)
{
//var Idlist = await Logic.Send.GetLogicId();
//if (Idlist.Count != 0)
//{
// foreach (var LogicId in Idlist)
// {
// var logic = await Logic.Send.GetLogic(LogicId);
// if (logic != null)
// {
// Common.Logic.LogicList.Add(logic);
// }
// }
//}
var Idlist = await Logic.Send.GetLogicId();
if (Idlist.Count != 0)
{
var listlogic = await Logic.Send.ReadList(Idlist.Count);
foreach (var LogicId in Idlist)
{
foreach (var logic in listlogic)
{
if (logic.LogicId == LogicId)
{
Common.Logic.LogicList.Add(logic);
}
}
}
}
}
//自动化
Automationview(logicScrolView);
CommonPage.Loading.Hide();
}
///
/// 自动化列表界面
///
/// Refresview.
public async void Automationview(VerticalScrolViewLayout refresview)
{
refresview.RemoveAll();
foreach (var logic in Common.Logic.LogicList)
{
var logicrowlayout = new RowLayout
{
Height = Application.GetRealHeight(180),
LineColor = ZigbeeColor.Current.LogicLineColor,
};
refresview.AddChidren(logicrowlayout);
var btnname = new Button
{
//Text = "逻辑一",
Text = logic.LogicName,
X = Application.GetRealWidth(50),
TextAlignment = TextAlignment.CenterLeft,
Gravity = Gravity.CenterVertical,
TextColor = ZigbeeColor.Current.LogicTextBlackColor,
};
logicrowlayout.AddChidren(btnname);
var btnswitch = new Button
{
Width = Application.GetMinRealAverage(183),
Height = Application.GetMinRealAverage(123),
UnSelectedImagePath = "ZigeeLogic/Switch.png",
SelectedImagePath = "ZigeeLogic/SwitchSelected.png",
X = Application.GetRealWidth(1080 - 200),
Gravity = Gravity.CenterVertical,
};
logicrowlayout.AddChidren(btnswitch);
btnswitch.MouseUpEventHandler += (sender1, e1) =>
{
btnswitch.IsSelected = !btnswitch.IsSelected;
if (btnswitch.IsSelected)
{
//逻辑开
logic.IsEnable = 1;
}
else
{
//逻辑关
logic.IsEnable = 0;
}
Logic.Send.LogicControlSwitch(logic);
//Logic.Send.AddModifyLogic(logic);
};
if (logic.IsEnable == 1)
{
btnswitch.IsSelected = true;
}
else if (logic.IsEnable == 0)
{
btnswitch.IsSelected = false;
}
///编辑
var edit = new Button
{
//TextID = MyInternationalizationString.Musicdel
BackgroundColor = 0xFF00aaf0,
Text = Language.StringByID(MyInternationalizationString.edit),
TextColor = ZigbeeColor.Current.LogicTextBlackColor,
};
logicrowlayout.AddRightView(edit);
edit.MouseUpEventHandler += (sender, e) =>
{
Common.Logic.LogicDviceList.Clear();
if (Common.Logic.LogicDviceList.Count == 0)
{
Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray());
}
Common.Logic.CurrentLogic = logic;
var logicCommunalPage = new Logic.LogicCommunalPage();
UserView.HomePage.Instance.AddChidren(logicCommunalPage);
UserView.HomePage.Instance.PageIndex += 1;
logicCommunalPage.Show(() => { btnname.Text = logic.LogicName; Automationview(refresview); });
};
///删除
var del = new Button
{
//TextID = MyInternationalizationString.Musicdel,
BackgroundColor = 0xFFFF0000,
Text = Language.StringByID(MyInternationalizationString.del),
};
logicrowlayout.AddRightView(del);
del.MouseUpEventHandler += (sender, e) =>
{
Common.Logic.LogicList.Remove(logic);
Automationview(refresview);
Logic.Send.DelLogic(logic.LogicId);
};
}
}
#endregion
#region ◆ 控制状态_________________________
///
/// 显示设备控制状态
///
/// Command.
/// Object value.
private void UpdateDeviceControllStatu(string command, object objValue)
{
if (command != "DeviceDefaultAck" || objValue == null)
{
return;
}
var tempDevice = (CommonDevice)objValue;
if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == tempDevice.DeviceEpoint && obj.DeviceAddr == tempDevice.DeviceAddr))
{
return;
}
//标记已经发送控制命令到网关
sendedControlCommand = true;
//DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success);
}
///
/// 移除全部更新控制设备的action
///
private void RemoveAllUpdateControlDeviceStatuAction()
{
foreach (var gateway in zbGatewayList)
{
//移除action
if (gateway != null)
{
gateway.ReportAction -= UpdateDeviceControllStatu;
}
}
}
///
/// 移除单个控制设备的更新状态action
///
/// Gateway.
private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway)
{
//移除action
if (gateway != null)
{
gateway.ReportAction -= UpdateDeviceControllStatu;
}
}
///
/// 添加需要监控回调状态的网关和设备
///
/// Gateway list.
/// Gateway.
/// Device list.
/// Common.
private void AddZbGateway(List gatewayList, ZbGateway gateway, List deviceList, CommonDevice common)
{
if (null == gatewayList.Find((obj) => obj.getGatewayBaseInfo.gwID == gateway.getGatewayBaseInfo.gwID))
{
gatewayList.Add(gateway);
}
if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == common.DeviceEpoint && obj.DeviceAddr == common.DeviceAddr))
{
commonDeviceList.Add(common);
}
}
#endregion
}
}