using System;
using System.Collections.Generic;
using Shared.Common;
using ZigBee.Device;
namespace Shared.Phone.UserView
{
///
/// 主页
///
public class UserHomeView : FrameLayout, ZigBee.Common.IStatus
{
#region ◆ 变量____________________________
///
/// 设备是否在线标识--Online
///
private readonly string deviceStatus_Online = "Online";
///
/// 设备状态开关标识--Switch
///
private readonly string deviceStatus_OnOffStatus = "Switch";
///
/// 功能ScrolViewLayout
///
private VerticalScrolViewLayout deviceVerticalScrolViewLayout;
///
/// 功能和场景bodyView
///
private FrameLayout functionSceneBodyView;
///
/// The height of the top frame layout -- 500
///
private static readonly int topFrameLayout_Height = 500;
///
/// The height of the middle view.-- 1920-500-160
///
private static readonly int midView_Height = CommonPage.AppRealHeight - topFrameLayout_Height - CommonPage.TabbarHeight;
///
/// The height of the room page view. -- 550
///
private static readonly int roomPageView_Height = 550;
///
/// 功能卡片高度 --250
///
private static readonly int deviceFL_Height = 250;
///
/// 功能按键
///
private Button functionBtn;
///
/// 读取设备状态的线程列表
///
private static List threadList = new List { };
///
/// 网关
///
private ZbGateway zbGateway = null;
///
/// 网关列表
///
private List zbGatewayList = new List { };
///
/// 设备列表
///
private List commonDeviceList = new List { };
///
/// 是否发送控制命令成功了
///
private bool sendedControlCommand = false;
///
/// 延时 300毫秒
///
private readonly int sleepSpan = 300;
#endregion
#region ◆ 接口____________________________
///
/// 该接口将弃用 !!!!!!
/// 改用DeviceInfoChange()
///
/// The changed.
/// Common.
public void Changed(CommonDevice common)
{
}
///
/// 设备状态更新接口
/// 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; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
{
var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
var rowLayout = rowFL.GetChildren(0) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI.CommonDevice == null || rowLayout.ChildrenCount == 0)
{
//设备为空或者控件为空
continue;
}
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
{
//判断是否为当前设备
continue;
}
var frameLayout = rowLayout.GetChildren(0) as FrameLayout;
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
//开关功能
if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 6)
{
var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
onOffOutputLight.DeviceStatusReport = (common as ZigBee.Device.ToggleLight).DeviceStatusReport;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
//记录、更新状态
if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
{
continue;
}
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
(tempView as Button).IsSelected = onOffOutputLight.OnOffStatus == 1;
//记录回复时间
onOffOutputLight.LastDateTime = DateTime.Now;
}
}
}
//当CluterID=3,就证明该设备在线,直接标记
if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 3)
{
var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
onOffOutputLight.IsOnline = 1;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = onOffOutputLight.IsOnline == 1;
//记录回复时间
onOffOutputLight.LastDateTime = DateTime.Now;
}
}
}
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 < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.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;
}
}
}
//当CluterID=3,就证明该设备在线,直接标记
if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 3)
{
var airSwitch = deviceUI.CommonDevice as AirSwitch;
airSwitch.IsOnline = 1;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = airSwitch.IsOnline == 1;
//记录回复时间
airSwitch.LastDateTime = DateTime.Now;
}
}
}
break;
case DeviceType.WindowCoveringDevice:
if ((common as ZigBee.Device.Rollershade).DeviceStatusReport.CluterID == 3)
{
var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
rollershade.IsOnline = 1;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = rollershade.IsOnline == 1;
//记录回复时间
rollershade.LastDateTime = DateTime.Now;
}
}
}
break;
case DeviceType.Thermostat:
//AC功能
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 513)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.DeviceStatusReport = (common as ZigBee.Device.AC).DeviceStatusReport;
var attriButeList = ac.DeviceStatusReport.AttriBute;
if (attriButeList == null || attriButeList.Count == 0)
{
continue;
}
switch (attriButeList[0].AttributeId)
{
case 0:
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100;
ac.LastDateTime = DateTime.Now;
//indoorTemperatureBtn.Text = $"室温 {ac.currentLocalTemperature} ℃";
//currentTemperatureBtn.Text = $"{ac.currentLocalTemperature} ℃";
//Temparetrue
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == "Temparetrue")
{
(tempView as Button).Text = $"{ac.currentLocalTemperature} ℃";
}
}
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 < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_OnOffStatus)
{
(tempView as Button).IsSelected = ac.currentSystemMode != 0;
}
}
break;
}
}
//当CluterID=3,就证明该设备在线,直接标记
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 3)
{
var ac = deviceUI.CommonDevice as AC;
ac.IsOnline = 1;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = ac.IsOnline == 1;
//记录回复时间
ac.LastDateTime = DateTime.Now;
}
}
}
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 < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.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 == 8)
{
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport;
var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
if (attriButeList == null || attriButeList.Count == 0)
{
continue;
}
switch (attriButeList[0].AttributeId)
{
case 0:
//此属性表明当前亮度程度
dimmableLight.Level = attriButeList[0].AttriButeData ;
dimmableLight.LastDateTime = DateTime.Now;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == "LevelSeekBar")
{
(tempView as HorizontalSeekBar).Progress = dimmableLight.Level;
}
}
break;
}
}
//当CluterID=3,就证明该设备在线,直接标记
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 3)
{
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
dimmableLight.IsOnline = 1;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = dimmableLight.IsOnline == 1;
//记录回复时间
dimmableLight.LastDateTime = DateTime.Now;
}
}
}
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"Error:{ex.Message}");
}
});
}
//设备在线状态上报
else if (typeTag == "OnlineStatusChange")
{
Application.RunOnMainThread(() =>
{
try
{
for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
{
var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
var rowLayout = rowFL.GetChildren(0) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI.CommonDevice == null || rowLayout.ChildrenCount == 0)
{
//设备为空或者控件为空
continue;
}
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
{
//判断是否为当前设备
continue;
}
var frameLayout = rowLayout.GetChildren(0) as FrameLayout;
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
onOffOutputLight.IsOnline = (common as ToggleLight).IsOnline;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = onOffOutputLight.IsOnline == 1;
}
}
//记录回复时间
onOffOutputLight.LastDateTime = DateTime.Now;
break;
case DeviceType.AirSwitch:
var airSwitch = deviceUI.CommonDevice as AirSwitch;
airSwitch.IsOnline = (common as AirSwitch).IsOnline;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = airSwitch.IsOnline == 1;
}
}
//记录回复时间
airSwitch.LastDateTime = DateTime.Now;
break;
case DeviceType.WindowCoveringDevice:
var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
rollershade.IsOnline = (common as Rollershade).IsOnline;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = rollershade.IsOnline == 1;
}
}
//记录回复时间
rollershade.LastDateTime = DateTime.Now;
break;
case DeviceType.Thermostat:
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.IsOnline = (common as ZigBee.Device.AC).IsOnline;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = ac.IsOnline == 1;
}
}
//记录回复时间
ac.LastDateTime = DateTime.Now;
break;
case DeviceType.DimmableLight:
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
dimmableLight.IsOnline = (common as ZigBee.Device.DimmableLight).IsOnline;
for (int j = 0; j < frameLayout.ChildrenCount; j++)
{
var tempView = frameLayout.GetChildren(j);
if (tempView.Tag == null)
{
continue;
}
if (tempView.Tag.ToString() == deviceStatus_Online)
{
(tempView as Button).IsSelected = dimmableLight.IsOnline == 1;
}
}
//记录回复时间
dimmableLight.LastDateTime = DateTime.Now;
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"主页功能刷新-Error:{ex.Message}");
}
});
}
}
///
/// Changeds the IL ogic status.
///
/// Logic.
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
{
//throw new NotImplementedException();
}
///
/// Changeds the IS cene status.
///
/// Scene.
public void ChangedISceneStatus(Scene scene)
{
//throw new NotImplementedException();
}
#endregion
#region ◆ 初始化__________________________
///
/// Removes from parent.
///
public override void RemoveFromParent()
{
RemoveStatuList();
base.RemoveFromParent();
}
private void RemoveStatuList()
{
ZbGateway.StatusList.Remove(this);
RemoveAllUpdateControlDeviceStatuAction();
}
///
/// 主页 --我的家
///
public UserHomeView()
{
ZbGateway.StatusList.Add(this);
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
}
///
/// 显示界面
///
public void Show()
{
this.RemoveAll();
#region topview
var topFrameLayout = new FrameLayout()
{
Height = Application.GetRealHeight(topFrameLayout_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
};
this.AddChidren(topFrameLayout);
var homeBtn = new Device.CommonForm.SelectedStatuButton()
{
Y = Application.GetRealHeight(100),
X = Application.GetRealWidth(50),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = "Item/MyHome.png",
};
topFrameLayout.AddChidren(homeBtn);
var residecneName = new Button()
{
Y = Application.GetRealHeight(100),
Width = Application.GetRealWidth(600),
Height = Application.GetRealHeight(110),
TextAlignment = TextAlignment.Center,
Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
TextSize = 20,
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
Gravity = Gravity.CenterHorizontal
};
topFrameLayout.AddChidren(residecneName);
var messageBtn = new Button()
{
X = Application.GetRealWidth(CommonPage.AppRealWidth - 150),
Y = Application.GetRealHeight(100),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = "Item/Message.png"
};
//暂时隐藏
//topFrameLayout.AddChidren(messageBtn);
//切换住宅
homeBtn.MouseUpEventHandler += (send, e) =>
{
if (Config.Instance.HomeFilePathList.Count == 0)
{
var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst), Language.StringByID(R.MyInternationalizationString.Close), Language.StringByID(R.MyInternationalizationString.OK));
alert.Show();
alert.ResultEventHandler += (senderHouse, eHouse) =>
{
if (eHouse)
{
return;
}
};
}
else
{
var residenceListView = new Dialog();
residenceListView.Show();
var closeBGview = new FrameLayout();
residenceListView.AddChidren(closeBGview);
closeBGview.MouseUpEventHandler += (send1, e1) =>
{
residenceListView.Close();
};
var upperTriangleBtn = new Button()
{
X = Application.GetRealWidth(25) + homeBtn.X,
Y = homeBtn.Bottom,
Width = Application.GetMinRealAverage(30),
Height = Application.GetMinRealAverage(15),
UnSelectedImagePath = "Item/UpperTriangle.png"
};
closeBGview.AddChidren(upperTriangleBtn);
var changeHomeFL = new FrameLayout()
{
X = Application.GetRealWidth(25),
Y = upperTriangleBtn.Bottom,
Height = Application.GetRealHeight(340),
Width = Application.GetRealWidth(500),
Radius = CommonPage.BigFormRadius,
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
closeBGview.AddChidren(changeHomeFL);
var changeHomeBtn = new Button()
{
X = Application.GetRealWidth(80),
Width = Application.GetRealWidth(450),
Height = Application.GetRealHeight(110),
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextID = R.MyInternationalizationString.ChangeHome,
TextAlignment = TextAlignment.CenterLeft
};
changeHomeFL.AddChidren(changeHomeBtn);
var scrolView = new VerticalScrolViewLayout()
{
Y = changeHomeBtn.Bottom,
Height = Application.GetRealHeight(220)
};
changeHomeFL.AddChidren(scrolView);
var clickCheckBtn = new Device.CommonForm.SelectedStatuButton();
var clickNameBtn = new Device.CommonForm.SelectedStatuButton();
foreach (var homeFilePath in Config.Instance.HomeFilePathList)
{
var home = House.GetHouseByFilePath(homeFilePath);
if (home == null)
{
continue;
}
var rowView = new RowLayout()
{
Height = Application.GetRealHeight(110)
};
scrolView.AddChidren(rowView);
var pointBtn = new Device.CommonForm.SelectedStatuButton()
{
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Point.png",
SelectedImagePath = "Item/PointSelected.png",
IsSelected = home.Id == Config.Instance.Home.Id
};
rowView.AddChidren(pointBtn);
var nameBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(80),
Width = Application.GetRealWidth(500 - 80 - 50),
TextAlignment = TextAlignment.CenterLeft,
Text = home.Name,
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor,
IsSelected = home.Id == Config.Instance.Home.Id
};
rowView.AddChidren(nameBtn);
EventHandler selectedResidenceHandler = (send1, e1) =>
{
if (Config.Instance.Home == home)
{
return;
}
clickCheckBtn.IsSelected = false;
clickNameBtn.IsSelected = false;
pointBtn.IsSelected = true;
nameBtn.IsSelected = true;
residecneName.Text = home.Name;
clickCheckBtn = pointBtn;
clickNameBtn = nameBtn;
residenceListView.Close();
ChangeResidence(home);
};
nameBtn.MouseUpEventHandler += selectedResidenceHandler;
pointBtn.MouseUpEventHandler += selectedResidenceHandler;
rowView.MouseUpEventHandler += selectedResidenceHandler;
if (home.Id == Config.Instance.Home.Id)
{
pointBtn.IsSelected = true;
nameBtn.IsSelected = true;
clickCheckBtn = pointBtn;
clickNameBtn = nameBtn;
residecneName.Text = home.Name;
}
else
{
pointBtn.IsSelected = false;
nameBtn.IsSelected = false;
}
};
}
};
//消息
messageBtn.MouseUpEventHandler += (send, e) =>
{
};
#endregion
#region midView
var midView = new FrameLayout()
{
Y = topFrameLayout.Bottom,
Height = midView_Height,
};
AddChidren(midView);
#endregion
#region --roomPage
var roomPageView = new PageLayout()
{
Y = Application.GetRealHeight(50) + residecneName.Bottom,
Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonPage.XLeft * 2),
Height = Application.GetMinRealAverage(roomPageView_Height),
Radius = CommonPage.BigFormRadius,
Gravity = Gravity.CenterHorizontal,
IsShowPoint = false
};
AddChidren(roomPageView);
//当前房间
if (Shared.Common.Room.canInitAllRoom == true)
{
//Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.CurrentRoom;
Room.CurrentRoom = Room.Lists[0];
foreach (var room in Room.Lists)
{
var roomBackView = new FrameLayout()
{
BackgroundImagePath = room.BackgroundImage
};
roomPageView.AddChidren(roomBackView);
var roomBG = new Button()
{
UnSelectedImagePath = "Room/HomeBG.png",
};
roomBackView.AddChidren(roomBG);
var roomName = new Button()
{
X = Application.GetRealWidth(20),
Y = Application.GetRealHeight(20),
Width = Application.GetRealWidth(500),
Height = Application.GetRealHeight(80),
Text = room.Name,
TextAlignment = TextAlignment.CenterLeft,
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextSize = 18,
};
roomBackView.AddChidren(roomName);
var roomListBtn = new Device.CommonForm.SelectedStatuButton()
{
X = roomPageView.Width - Application.GetRealWidth(100 + 20),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(100),
Height = Application.GetMinRealAverage(100),
UnSelectedImagePath = "Item/List.png",
SelectedImagePath = "Item/ListSelected.png"
};
roomBackView.AddChidren(roomListBtn);
roomListBtn.MouseUpEventHandler += (send, e) =>
{
var roomList = new Device.Room.RoomManagement();
HomePage.Instance.AddChidren(roomList);
HomePage.Instance.PageIndex += 1;
roomList.Show();
roomList.action += () =>
{
Show();
};
};
}
}
else
{
var roomBackView = new FrameLayout()
{
BackgroundImagePath = "Room/r0.png"
};
roomPageView.AddChidren(roomBackView);
var roomBG = new Button()
{
UnSelectedImagePath = "Room/HomeBG.png",
};
roomBackView.AddChidren(roomBG);
var roomName = new Button()
{
X = Application.GetRealWidth(20),
Y = Application.GetRealHeight(20),
Width = Application.GetRealWidth(500),
Height = Application.GetRealHeight(80),
Text = Language.StringByID(R.MyInternationalizationString.Favorite),
TextAlignment = TextAlignment.CenterLeft,
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextSize = 18,
};
roomBackView.AddChidren(roomName);
var roomListBtn = new Button()
{
X = roomPageView.Width - Application.GetRealWidth(100 + 20),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(100),
Height = Application.GetMinRealAverage(100),
UnSelectedImagePath = "Item/List.png"
};
roomBackView.AddChidren(roomListBtn);
}
var functionSceneView = new FrameLayout()
{
Y = roomPageView.Bottom,
Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight) - roomPageView.Bottom,
};
AddChidren(functionSceneView);
//功能
functionBtn = new Button()
{
X = Application.GetRealWidth(50),
Width = Application.GetRealWidth(540 - 50) - 2,
Height = Application.GetRealHeight(150),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor,
TextAlignment = TextAlignment.Center,
TextSize = 16,
TextID = R.MyInternationalizationString.Function,
IsSelected = true
};
functionSceneView.AddChidren(functionBtn);
var functionSceneMidLine = new Button()
{
X = functionBtn.Right,
Width = 2,
Y = Application.GetRealHeight(60),
Height = Application.GetRealHeight(60),
BackgroundColor = ZigbeeColor.Current.GXCLineColor
};
functionSceneView.AddChidren(functionSceneMidLine);
//场景
var sceneBtn = new Button()
{
X = functionBtn.Right,
Width = Application.GetRealWidth(540 - 50),
Height = Application.GetRealHeight(150),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor,
TextAlignment = TextAlignment.Center,
TextSize = 16,
TextID = R.MyInternationalizationString.Scence,
IsSelected = false
};
functionSceneView.AddChidren(sceneBtn);
var functionSceneBottomLine = new Button()
{
Y = functionBtn.Bottom,
Height = CommonPage.LineHeight,
X = functionBtn.X,
Width = roomPageView.Width,
BackgroundColor = ZigbeeColor.Current.GXCLineColor
};
functionSceneView.AddChidren(functionSceneBottomLine);
var line = new Button()
{
Y = functionBtn.Bottom,
Height = CommonPage.LineHeight,
X = functionBtn.X,
Width = Application.GetRealWidth(540 - 50),
BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor
};
functionSceneView.AddChidren(line);
//功能和场景bodyView
functionSceneBodyView = new FrameLayout()
{
Y = line.Bottom,
Height = functionSceneView.Height - functionBtn.Height,
Width = roomPageView.Width,
Gravity = Gravity.CenterHorizontal
};
functionSceneView.AddChidren(functionSceneBodyView);
//选择功能分栏
functionBtn.MouseUpEventHandler += (sender, e) =>
{
sceneBtn.IsSelected = false;
functionBtn.IsSelected = true;
line.X = functionBtn.X;
RefreshBodyView();
};
//选择场景分栏
sceneBtn.MouseUpEventHandler += (sender, e) =>
{
functionBtn.IsSelected = false;
sceneBtn.IsSelected = true;
line.X = sceneBtn.X;
RefreshBodyView();
};
RefreshBodyView();
#endregion
roomPageView.PageChange += (sender, e) =>
{
//切换当前房间
Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.Lists[roomPageView.PageIndex];
RefreshBodyView();
};
//roomPageView.PageIndex = Room.Lists.IndexOf(Room.CurrentRoom);
}
#endregion
#region ◆ 刷新____________________________
public void RefreshBodyView()
{
if (Room.canInitAllRoom == false)
{
return;
}
functionSceneBodyView.RemoveAll();
if (functionBtn.IsSelected)
{
ShowFunction();
}
else
{
ShowScene();
}
}
#endregion
#region ◆ 检测是否绑定了网关________________
///
/// 当没有绑定网关时,是否有权限添加网关
///
/// true, if bing gateway was caned, false otherwise.
private bool CanBindGateway()
{
if (HadBindGateway() == false && UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1)
{
return true;
}
return false;
}
///
/// 是否绑定了网关
///
/// true, if bind gateway was haded, false otherwise.
private bool HadBindGateway()
{
var gatewayList = Common.LocalGateway.Current.GetAllLocalGateway();
if (gatewayList.Count == 0)
{
return false;
}
return true;
}
///
/// 提示用户没有网关,并快速跳转到添加网关界面
///
private void ShowNoGatewayTip()
{
var addGatewayBtn = new Button()
{
Height = Application.GetMinRealAverage(200),
Width = Application.GetMinRealAverage(200),
UnSelectedImagePath = "Room/AddScenceFunction.png",
Gravity = Gravity.Center
};
functionSceneBodyView.AddChidren(addGatewayBtn);
addGatewayBtn.MouseUpEventHandler += GoToAddGateWay;
var noGatewayTip = new Button()
{
Y = addGatewayBtn.Bottom,
Height = Application.GetRealHeight(150),
TextID = R.MyInternationalizationString.NoGateway,
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noGatewayTip);
}
///
/// 前往添加网关界面
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs)
{
UserCenter.Gateway.SelectNewGateWayForm selectNewGateWayForm = new UserCenter.Gateway.SelectNewGateWayForm { };
selectNewGateWayForm.AddForm(selectNewGateWayForm);
}
#endregion
#region ◆ 功能_____________________________
///
/// 显示没有功能
///
private void ShowNoFunctionTip()
{
var noFunctionTip = new Button()
{
Height = Application.GetRealHeight(200),
TextID = R.MyInternationalizationString.NoFunction,
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
Gravity = Gravity.Center
};
functionSceneBodyView.AddChidren(noFunctionTip);
}
///
/// 显示功能
///
private void ShowFunction()
{
if (CanBindGateway() == false)
{
//选择功能--直接从房间的devicelist中获取
var deviceList = Room.CurrentRoom.DeviceUIList;
if (deviceList == null)
{
return;
}
if (deviceList.Count == 0)
{
ShowNoFunctionTip();
}
else
{
deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { };
functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout);
foreach (var device in deviceList)
{
if (device == null || device.CommonDevice == null)
{
continue;
}
//删除设备
EventHandler delEvent = (sender, e) =>
{
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();
alert.ResultEventHandler += (send1, e1) =>
{
if (e1)
{
Room.CurrentRoom.DeleteDevice(device.FileName);
//RefreshBodyView();
deviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag);
}
};
};
//收藏
//EventHandler collectionEvent = (sender, e) =>
//{
// if ((sender as Button).IsSelected)
// {
// Room.Lists[0].DeleteDevice(device.FilePath);
// (sender as Button).IsSelected = false;
// if (Room.CurrentRoom == Room.Lists[0])
// {
// DeviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag);
// }
// }
// else
// {
// Room.Lists[0].AddDevice(device.FilePath);
// (sender as Button).IsSelected = true;
// }
// //RefreshBodyView();
//};
EventHandler collectionEvent = (sender, e) =>
{
if (Room.CurrentRoom == Room.Lists[0])
{
Room.Lists[0].DeleteDevice(device.FileName);
deviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag);
}
};
//////判断设备是否支持的属性 如开关等控制
if (device.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice)
{
//窗帘 卷帘
var rollerShade = (ZigBee.Device.Rollershade)device.CommonDevice;
//不上非远程
if (rollerShade.Gateway == null)
{
continue;
}
if (rollerShade.Gateway.IsVirtual)
{
//发送读取状态命令
ReadStatus(rollerShade, () =>
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
});
}
else
{
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds)
{
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
}
}
var deviceFL = new FrameLayout
{
Height = Application.GetRealHeight(deviceFL_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = device
};
deviceVerticalScrolViewLayout.AddChidren(deviceFL);
var deviceRowLayout = new RowLayout
{
Y = Application.GetRealHeight(25),
Height = Application.GetRealHeight(deviceFL_Height - 25) - 1,
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius,
Tag = device
};
deviceFL.AddChidren(deviceRowLayout);
var deviceItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius
};
deviceRowLayout.AddChidren(deviceItemFL);
var deviceIMG = new Button()
{
X = Application.GetRealWidth(50),
Y = Application.GetRealHeight(30),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = device.IconPath,
SelectedImagePath = device.OnlineIconPath,
IsSelected = rollerShade.IsOnline == 1,
Tag = deviceStatus_Online
};
deviceItemFL.AddChidren(deviceIMG);
var deviceName = new Button()
{
X = Application.GetRealWidth(10),
Y = deviceIMG.Bottom,
Width = Application.GetRealWidth(180),
Height = Application.GetRealHeight(80),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextAlignment = TextAlignment.Center,
Text = device.CommonDevice.DeviceEpointName,
TextSize = 10,
IsMoreLines = true
};
deviceItemFL.AddChidren(deviceName);
var closeBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(50) + deviceName.Right,
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "WindowCovering/RollerShadeClose.png",
SelectedImagePath = "WindowCovering/RollerShadeCloseSelected.png",
//Visible=false
};
deviceItemFL.AddChidren(closeBtn);
var stopBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(120) + closeBtn.Right,
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "WindowCovering/RollerShadeStop.png",
SelectedImagePath = "WindowCovering/RollerShadeStopSelected.png",
//Visible=false
};
deviceItemFL.AddChidren(stopBtn);
var openBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(120) + stopBtn.Right,
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "WindowCovering/RollerShadeOpen.png",
SelectedImagePath = "WindowCovering/RollerShadeOpenSelected.png",
//Visible=false
};
deviceItemFL.AddChidren(openBtn);
var collectionBtn = new Button()
{
X = deviceItemFL.Right - Application.GetRealWidth(150),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(80),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
Tag = device
};
//*****先隐藏*****
//deviceItemFL.AddChidren(collectionBtn);
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = device,
IsMoreLines = true
};
if (Room.CurrentRoom.IsLove)
{
deleteBtn.TextID = R.MyInternationalizationString.CancelCollect;
deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor;
deleteBtn.MouseUpEventHandler += collectionEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
else if(Room.CurrentRoom.IsSharedRoom)
{
//不处理
}
else
{
deleteBtn.MouseUpEventHandler += delEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
EventHandler curtainHandler = (sender, e) =>
{
var curtain = new Phone.Device.Curtain.RollerShadeControl();
UserView.HomePage.Instance.ScrollEnabled = false;
UserView.HomePage.Instance.AddChidren(curtain);
UserView.HomePage.Instance.PageIndex += 1;
curtain.action = RefreshBodyView;
curtain.Show(device, Room.CurrentRoom);
};
deviceItemFL.MouseUpEventHandler += curtainHandler;
deviceItemFL.MouseLongEventHandler += curtainHandler;
deviceIMG.MouseUpEventHandler += curtainHandler;
deviceName.MouseUpEventHandler += curtainHandler;
//窗帘关
closeBtn.MouseUpEventHandler += (sender, e) =>
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
rollerShade.CurtainUpDownStopControl(1);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
//窗帘停
stopBtn.MouseUpEventHandler += (sender, e) =>
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
rollerShade.CurtainUpDownStopControl(2);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
//窗帘开
openBtn.MouseUpEventHandler += (sender, e) =>
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
rollerShade.CurtainUpDownStopControl(0);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
//collectionBtn.MouseUpEventHandler += (sender, e) =>
//{
// if (collectionBtn.IsSelected)
// {
// Room.Lists[0].DeleteDevice(device.FilePath);
// collectionBtn.IsSelected = false;
// }
// else
// {
// Room.Lists[0].AddDevice(device.FilePath);
// collectionBtn.IsSelected = true;
// }
// //RefreshBodyView();
//};
collectionBtn.MouseUpEventHandler += collectionEvent;
//var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj==device.FilePath);
//if(dev==null)
//{
// collectionBtn.IsSelected = false;
//}
//else
//{
// collectionBtn.IsSelected = true;
//}
////开关停按钮是否显示
//foreach(var command in commandList)
//{
// if (command == null)
// {
// continue;
// }
// if (command.commandId==0)
// {
// openBtn.Visible = true;
// }
// else if(command.commandId==1)
// {
// openBtn.Visible = true;
// }
// else if(command.commandId==2)
// {
// stopBtn.Visible = true;
// }
//}
}
else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.OnOffOutput)
{
//开关灯
var light = device.CommonDevice as ToggleLight;
//补上非远程
if (light.Gateway == null)
{
continue;
}
if (light.Gateway.IsVirtual)
{
//发送读取状态命令
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 deviceFL = new FrameLayout
{
Height = Application.GetRealHeight(deviceFL_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = device
};
deviceVerticalScrolViewLayout.AddChidren(deviceFL);
var deviceRowLayout = new RowLayout
{
Y = Application.GetRealHeight(25),
Height = Application.GetRealHeight(deviceFL_Height - 25) - 1,
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius,
Tag = device
};
deviceFL.AddChidren(deviceRowLayout);
var deviceItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius
};
deviceRowLayout.AddChidren(deviceItemFL);
var deviceIMG = new Button()
{
X = Application.GetRealWidth(50),
Y = Application.GetRealHeight(30),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = device.IconPath,
SelectedImagePath = device.OnlineIconPath,
IsSelected = light.IsOnline == 1,
Tag = deviceStatus_Online
};
deviceItemFL.AddChidren(deviceIMG);
var deviceName = new Button()
{
X = Application.GetRealWidth(10),
Y = deviceIMG.Bottom,
Width = Application.GetRealWidth(180),
Height = Application.GetRealHeight(80),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextAlignment = TextAlignment.Center,
Text = device.CommonDevice.DeviceEpointName,
TextSize = 10,
IsMoreLines = true
};
deviceItemFL.AddChidren(deviceName);
var collectionBtn = new Button()
{
X = deviceItemFL.Right - Application.GetRealWidth(150),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(80),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
Tag = device
};
//***先隐藏******
//deviceItemFL.AddChidren(collectionBtn);
var switchBtn = new Button
{
X = deviceItemFL.Right - Application.GetRealWidth(200),
//Y = deviceItemFL.Bottom - Application.GetRealHeight(120),
Width = Application.GetMinRealAverage(183),
Height = Application.GetMinRealAverage(123),
UnSelectedImagePath = "Item/Switch.png",
SelectedImagePath = "Item/SwitchSelected.png",
IsSelected = light.OnOffStatus == 1,
Tag = deviceStatus_OnOffStatus,
//Visible=false
Gravity = Gravity.CenterVertical
};
deviceItemFL.AddChidren(switchBtn);
switchBtn.MouseUpEventHandler += (send2, e2) =>
{
switchBtn.IsSelected = !switchBtn.IsSelected;
if (switchBtn.IsSelected == true)
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
light.SwitchControl(1);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
light.SwitchControl(0);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
};
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = device,
IsMoreLines = true
};
if (Room.CurrentRoom.IsLove)
{
deleteBtn.TextID = R.MyInternationalizationString.CancelCollect;
deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor;
deleteBtn.MouseUpEventHandler += collectionEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
else if(Room.CurrentRoom.IsSharedRoom)
{
//不处理
}
else
{
deleteBtn.MouseUpEventHandler += delEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
EventHandler lightHandler = (sender, e) =>
{
var lightControl = new Phone.Device.Light.LightControl();
UserView.HomePage.Instance.AddChidren(lightControl);
UserView.HomePage.Instance.PageIndex += 1;
lightControl.action = RefreshBodyView;
lightControl.Show(device, Room.CurrentRoom);
};
deviceItemFL.MouseLongEventHandler += lightHandler;
deviceItemFL.MouseUpEventHandler += lightHandler;
deviceName.MouseUpEventHandler += lightHandler;
deviceIMG.MouseUpEventHandler += lightHandler;
//collectionBtn.MouseUpEventHandler += (sender, e) =>
//{
// if (collectionBtn.IsSelected)
// {
// Room.Lists[0].DeleteDevice(device.FilePath);
// collectionBtn.IsSelected = false;
// if(Room.CurrentRoom==Room.Lists[0])
// {
// RefreshBodyView();
// }
// }
// else
// {
// Room.Lists[0].AddDevice(device.FilePath);
// collectionBtn.IsSelected = true;
// }
// //RefreshBodyView();
//};
collectionBtn.MouseUpEventHandler += collectionEvent;
//var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath);
//if (dev == null)
//{
// collectionBtn.IsSelected = false;
//}
//else
//{
// collectionBtn.IsSelected = true;
//}
}
else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.AirSwitch)
{
//空气开关
var airSwitch = device.CommonDevice as AirSwitch;
//补上非远程
if (airSwitch.Gateway == null)
{
continue;
}
if (airSwitch.Gateway.IsVirtual)
{
//发送读取状态命令
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 deviceFL = new FrameLayout
{
Height = Application.GetRealHeight(deviceFL_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = device
};
deviceVerticalScrolViewLayout.AddChidren(deviceFL);
var deviceRowLayout = new RowLayout
{
Y = Application.GetRealHeight(25),
Height = Application.GetRealHeight(deviceFL_Height - 25) - 1,
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius,
Tag = device
};
deviceFL.AddChidren(deviceRowLayout);
var deviceItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius
};
deviceRowLayout.AddChidren(deviceItemFL);
var deviceIMG = new Button()
{
X = Application.GetRealWidth(50),
Y = Application.GetRealHeight(30),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = device.IconPath,
SelectedImagePath = device.OnlineIconPath,
IsSelected = airSwitch.IsOnline == 1,
Tag = deviceStatus_Online
};
deviceItemFL.AddChidren(deviceIMG);
var deviceName = new Button()
{
X = Application.GetRealWidth(10),
Y = deviceIMG.Bottom,
Width = Application.GetRealWidth(180),
Height = Application.GetRealHeight(80),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextAlignment = TextAlignment.Center,
Text = device.CommonDevice.DeviceEpointName,
TextSize = 10,
IsMoreLines = true
};
deviceItemFL.AddChidren(deviceName);
var collectionBtn = new Button()
{
X = deviceItemFL.Right - Application.GetRealWidth(150),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(80),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
Tag = device
};
//***先隐藏******
//deviceItemFL.AddChidren(collectionBtn);
var switchBtn = new Button
{
X = deviceItemFL.Right - Application.GetRealWidth(200),
//Y = deviceItemFL.Bottom - Application.GetRealHeight(120),
Width = Application.GetMinRealAverage(183),
Height = Application.GetMinRealAverage(123),
UnSelectedImagePath = "Item/Switch.png",
SelectedImagePath = "Item/SwitchSelected.png",
IsSelected = airSwitch.OnOffStatus == 1,
Tag = deviceStatus_OnOffStatus,
//Visible=false
Gravity = Gravity.CenterVertical
};
deviceItemFL.AddChidren(switchBtn);
switchBtn.MouseUpEventHandler += (send2, e2) =>
{
switchBtn.IsSelected = !switchBtn.IsSelected;
if (switchBtn.IsSelected == true)
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
airSwitch.SwitchControl(1);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
airSwitch.SwitchControl(0);
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
};
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = device,
IsMoreLines = true
};
if (Room.CurrentRoom.IsLove)
{
deleteBtn.TextID = R.MyInternationalizationString.CancelCollect;
deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor;
deleteBtn.MouseUpEventHandler += collectionEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
else if(Room.CurrentRoom.IsSharedRoom)
{
//不处理
}
else
{
deleteBtn.MouseUpEventHandler += delEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
EventHandler airSwitchHandler = (sender, e) =>
{
var airSwitchControl = new Phone.Device.AirSwitch.AirSwitchControl();
UserView.HomePage.Instance.AddChidren(airSwitchControl);
UserView.HomePage.Instance.PageIndex += 1;
airSwitchControl.action = RefreshBodyView;
airSwitchControl.Show(device, Room.CurrentRoom);
};
deviceItemFL.MouseLongEventHandler += airSwitchHandler;
deviceItemFL.MouseUpEventHandler += airSwitchHandler;
deviceName.MouseUpEventHandler += airSwitchHandler;
deviceIMG.MouseUpEventHandler += airSwitchHandler;
//collectionBtn.MouseUpEventHandler += (sender, e) =>
//{
// if (collectionBtn.IsSelected)
// {
// Room.Lists[0].DeleteDevice(device.FilePath);
// collectionBtn.IsSelected = false;
// if(Room.CurrentRoom==Room.Lists[0])
// {
// RefreshBodyView();
// }
// }
// else
// {
// Room.Lists[0].AddDevice(device.FilePath);
// collectionBtn.IsSelected = true;
// }
// //RefreshBodyView();
//};
collectionBtn.MouseUpEventHandler += collectionEvent;
//var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath);
//if (dev == null)
//{
// collectionBtn.IsSelected = false;
//}
//else
//{
// collectionBtn.IsSelected = true;
//}
}
else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.Thermostat)
{
//恒温器-AC-空调
var ac = device.CommonDevice as AC;
//补上非远程
if (ac.Gateway == null)
{
continue;
}
if (ac.Gateway.IsVirtual)
{
//发送读取状态命令
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)
{
ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
ac.ReadFanMode();
ac.ReadSystemMode();
ac.ReadLocalTemperature();
ac.ReadCoolingSetpoint();
ac.ReadHeatingSetpoint();
}
}
var deviceFL = new FrameLayout
{
Height = Application.GetRealHeight(deviceFL_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = device
};
deviceVerticalScrolViewLayout.AddChidren(deviceFL);
var deviceRowLayout = new RowLayout
{
Y = Application.GetRealHeight(25),
Height = Application.GetRealHeight(deviceFL_Height - 25) - 1,
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius,
Tag = device
};
deviceFL.AddChidren(deviceRowLayout);
var deviceItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius
};
deviceRowLayout.AddChidren(deviceItemFL);
var deviceIMG = new Button()
{
X = Application.GetRealWidth(50),
Y = Application.GetRealHeight(30),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = device.IconPath,
SelectedImagePath = device.OnlineIconPath,
IsSelected = ac.IsOnline == 1,
Tag = deviceStatus_Online
};
deviceItemFL.AddChidren(deviceIMG);
var deviceName = new Button()
{
X = Application.GetRealWidth(10),
Y = deviceIMG.Bottom,
Width = Application.GetRealWidth(180),
Height = Application.GetRealHeight(80),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextAlignment = TextAlignment.Center,
Text = device.CommonDevice.DeviceEpointName,
TextSize = 10,
IsMoreLines = true
};
deviceItemFL.AddChidren(deviceName);
var collectionBtn = new Button()
{
X = deviceItemFL.Right - Application.GetRealWidth(150),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(80),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
Tag = device
};
//***先隐藏******
//deviceItemFL.AddChidren(collectionBtn);
//减
var reduceBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(30) + deviceName.Right,
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Reduce.png",
SelectedImagePath = "Item/ReduceSelected.png",
};
deviceItemFL.AddChidren(reduceBtn);
//当前温度
var currentTemperatureBtn = new Button()
{
X = Application.GetRealWidth(50) + reduceBtn.Right,
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(110),
Gravity = Gravity.CenterVertical,
TextColor = ZigbeeColor.Current.TextBlack,
TextSize = 16,
Text = $"{Device.AC.ACControlBase.GetCurrentModeTemperature(ac)} °C",
Tag = "Temparetrue"
};
deviceItemFL.AddChidren(currentTemperatureBtn);
reduceBtn.MouseUpEventHandler += (send2, e2) =>
{
if (Device.AC.ACControlBase.IsOpen(ac) == false)
{
Device.AC.ACControlBase.ShowACIsCloseTip();
return;
}
//cool
if (ac.currentSystemMode == 3)
{
ac.currentCoolingSetpoint -= 1;
ac.SetCoolingTemperatureAsync(ac.currentCoolingSetpoint);
currentTemperatureBtn.Text = $"{ac.currentCoolingSetpoint} °C";
}
//heat
else if (ac.currentSystemMode == 4)
{
ac.currentHeatingSetpoint -= 1;
ac.SetHeatingTemperatureAsync(ac.currentHeatingSetpoint);
currentTemperatureBtn.Text = $"{ac.currentHeatingSetpoint} °C";
}
//auto
//dry
//currentTemperatureBtn.Text = $"{Device.AC.ACControlBase.GetCurrentModeTemperature(ac)} °C";
};
var addBtn = new Device.CommonForm.SelectedStatuButton()
{
X = Application.GetRealWidth(30) + currentTemperatureBtn.Right,
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Add.png",
SelectedImagePath = "Item/AddSelected.png",
};
deviceItemFL.AddChidren(addBtn);
addBtn.MouseUpEventHandler += (send2, e2) =>
{
if (Device.AC.ACControlBase.IsOpen(ac) == false)
{
Device.AC.ACControlBase.ShowACIsCloseTip();
return;
}
//cool
if (ac.currentSystemMode == 3)
{
ac.currentCoolingSetpoint += 1;
ac.SetCoolingTemperatureAsync(ac.currentCoolingSetpoint);
currentTemperatureBtn.Text = $"{ac.currentCoolingSetpoint} °C";
}
//heat
else if (ac.currentSystemMode == 4)
{
ac.currentHeatingSetpoint += 1;
ac.SetHeatingTemperatureAsync(ac.currentHeatingSetpoint);
currentTemperatureBtn.Text = $"{ac.currentHeatingSetpoint} °C";
}
//auto
//dry
};
var switchBtn = new Button
{
X = deviceItemFL.Right - Application.GetRealWidth(200),
//Y = deviceItemFL.Bottom - Application.GetRealHeight(120),
Width = Application.GetMinRealAverage(183),
Height = Application.GetMinRealAverage(123),
UnSelectedImagePath = "Item/Switch.png",
SelectedImagePath = "Item/SwitchSelected.png",
IsSelected = ac.currentSystemMode != 0,
Tag = deviceStatus_OnOffStatus,
//Visible=false
Gravity = Gravity.CenterVertical
};
deviceItemFL.AddChidren(switchBtn);
switchBtn.MouseUpEventHandler += (send2, e2) =>
{
switchBtn.IsSelected = !switchBtn.IsSelected;
if (switchBtn.IsSelected == true)
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
ac.Open();
//控制延时回调
//DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
//{
// if (Parent == null)
// {
// return;
// }
// RemoveUpdateControlDeviceStatuAction(zbGateway);
// if (sendedControlCommand == false)
// {
// DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
// }
//});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
ac.Close();
//控制延时回调
//DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
//{
// if (Parent == null)
// {
// return;
// }
// RemoveUpdateControlDeviceStatuAction(zbGateway);
// if (sendedControlCommand == false)
// {
// DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
// }
//});
}
};
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = device,
IsMoreLines = true
};
if (Room.CurrentRoom.IsLove)
{
deleteBtn.TextID = R.MyInternationalizationString.CancelCollect;
deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor;
deleteBtn.MouseUpEventHandler += collectionEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
else if(Room.CurrentRoom.IsSharedRoom)
{
//不处理
}
else
{
deleteBtn.MouseUpEventHandler += delEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
EventHandler acHandler = (sender, e) =>
{
var acControl = new Phone.Device.AC.ACControl { };
UserView.HomePage.Instance.AddChidren(acControl);
UserView.HomePage.Instance.PageIndex += 1;
acControl.action = RefreshBodyView;
acControl.Show(device, Room.CurrentRoom);
};
deviceItemFL.MouseLongEventHandler += acHandler;
deviceItemFL.MouseUpEventHandler += acHandler;
deviceName.MouseUpEventHandler += acHandler;
deviceIMG.MouseUpEventHandler += acHandler;
}
else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.DimmableLight)
{
//调光灯
var dimmableLight = device.CommonDevice as DimmableLight;
//补上非远程
if (dimmableLight.Gateway == null)
{
continue;
}
if (dimmableLight.Gateway.IsVirtual)
{
//发送读取状态命令
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 deviceFL = new FrameLayout
{
Height = Application.GetRealHeight(deviceFL_Height),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = device
};
deviceVerticalScrolViewLayout.AddChidren(deviceFL);
var deviceRowLayout = new RowLayout
{
Y = Application.GetRealHeight(25),
Height = Application.GetRealHeight(deviceFL_Height - 25) - 1,
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius,
Tag = device
};
deviceFL.AddChidren(deviceRowLayout);
var deviceItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor,
Radius = CommonPage.BigFormRadius
};
deviceRowLayout.AddChidren(deviceItemFL);
var deviceIMG = new Button()
{
X = Application.GetRealWidth(50),
Y = Application.GetRealHeight(30),
Width = Application.GetMinRealAverage(110),
Height = Application.GetMinRealAverage(110),
UnSelectedImagePath = device.IconPath,
SelectedImagePath = device.OnlineIconPath,
IsSelected = dimmableLight.IsOnline == 1,
Tag = deviceStatus_Online
};
deviceItemFL.AddChidren(deviceIMG);
var deviceName = new Button()
{
X = Application.GetRealWidth(10),
Y = deviceIMG.Bottom,
Width = Application.GetRealWidth(180),
Height = Application.GetRealHeight(80),
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextAlignment = TextAlignment.Center,
Text = device.CommonDevice.DeviceEpointName,
TextSize = 10,
IsMoreLines = true
};
deviceItemFL.AddChidren(deviceName);
var levelSeekBar = new HorizontalSeekBar()
{
X=deviceIMG.Right+Application.GetRealWidth(50),
Width = Application.GetRealWidth(500),
Height = Application.GetRealHeight(80),
Gravity = Gravity.CenterVertical,
BackgroundColor = ZigbeeColor.Current.GXCSliderUnSelectedColor,
ThumbColor = ZigbeeColor.Current.GXCButtonBlueColor,
BorderColor = ZigbeeColor.Current.GXCButtonBlueColor,
ProgressColor = ZigbeeColor.Current.GXCButtonBlueColor,
Max = 254,
Tag = "LevelSeekBar",
Progress = dimmableLight.Level,
SleepTime=sleepSpan
};
deviceItemFL.AddChidren(levelSeekBar);
levelSeekBar.ProgressChanged += (send2, e2) =>
{
dimmableLight.SetLevel(levelSeekBar.Progress);
};
var collectionBtn = new Button()
{
X = deviceItemFL.Right - Application.GetRealWidth(150),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(80),
Height = Application.GetMinRealAverage(80),
UnSelectedImagePath = "Item/Collection.png",
SelectedImagePath = "Item/CollectionSelected.png",
Tag = device
};
//***先隐藏******
//deviceItemFL.AddChidren(collectionBtn);
var switchBtn = new Button
{
X = deviceItemFL.Right - Application.GetRealWidth(200),
//Y = deviceItemFL.Bottom - Application.GetRealHeight(120),
Width = Application.GetMinRealAverage(183),
Height = Application.GetMinRealAverage(123),
UnSelectedImagePath = "Item/Switch.png",
SelectedImagePath = "Item/SwitchSelected.png",
IsSelected = dimmableLight.OnOffStatus == 1,
Tag = deviceStatus_OnOffStatus,
//Visible=false
Gravity = Gravity.CenterVertical
};
deviceItemFL.AddChidren(switchBtn);
switchBtn.MouseUpEventHandler += (send2, e2) =>
{
switchBtn.IsSelected = !switchBtn.IsSelected;
if (switchBtn.IsSelected == true)
{
//zbGateway = device.CommonDevice.Gateway;
//sendedControlCommand = false;
//zbGateway.ReportAction += UpdateDeviceControllStatu;
//AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
dimmableLight.SwitchControl(1);
//控制延时回调
//DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
//{
//if (Parent == null)
//{
// return;
//}
//RemoveUpdateControlDeviceStatuAction(zbGateway);
//if (sendedControlCommand == false)
//{
// DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
//}
//});
}
else
{
//zbGateway = device.CommonDevice.Gateway;
//sendedControlCommand = false;
//zbGateway.ReportAction += UpdateDeviceControllStatu;
//AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
dimmableLight.SwitchControl(0);
//控制延时回调
//DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
//{
// if (Parent == null)
// {
// return;
// }
// RemoveUpdateControlDeviceStatuAction(zbGateway);
// if (sendedControlCommand == false)
// {
// DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
// }
//});
}
};
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = device,
IsMoreLines = true
};
if (Room.CurrentRoom.IsLove)
{
deleteBtn.TextID = R.MyInternationalizationString.CancelCollect;
deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor;
deleteBtn.MouseUpEventHandler += collectionEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
else if(Room.CurrentRoom.IsSharedRoom)
{
//不处理
}
else
{
deleteBtn.MouseUpEventHandler += delEvent;
deviceRowLayout.AddRightView(deleteBtn);
}
EventHandler dimmableLightHandler = (sender, e) =>
{
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(device, Room.CurrentRoom);
};
deviceItemFL.MouseLongEventHandler += dimmableLightHandler;
deviceItemFL.MouseUpEventHandler += dimmableLightHandler;
deviceName.MouseUpEventHandler += dimmableLightHandler;
deviceIMG.MouseUpEventHandler += dimmableLightHandler;
//collectionBtn.MouseUpEventHandler += (sender, e) =>
//{
// if (collectionBtn.IsSelected)
// {
// Room.Lists[0].DeleteDevice(device.FilePath);
// collectionBtn.IsSelected = false;
// if(Room.CurrentRoom==Room.Lists[0])
// {
// RefreshBodyView();
// }
// }
// else
// {
// Room.Lists[0].AddDevice(device.FilePath);
// collectionBtn.IsSelected = true;
// }
// //RefreshBodyView();
//};
collectionBtn.MouseUpEventHandler += collectionEvent;
//var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath);
//if (dev == null)
//{
// collectionBtn.IsSelected = false;
//}
//else
//{
// collectionBtn.IsSelected = true;
//}
}
else if (device.CommonDevice.Type == DeviceType.OnOffSwitch)
{
//按键
var panel = (Panel)device.CommonDevice;
}
}
}
}
else
{
ShowNoGatewayTip();
}
}
#endregion
#region ◆ 场景_____________________________
///
/// 显示没场景
///
private void ShowNoSceneTip()
{
var noScenceTip = new Button()
{
Height = Application.GetRealHeight(200),
TextID = R.MyInternationalizationString.NoScene,
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
Gravity = Gravity.Center,
};
functionSceneBodyView.AddChidren(noScenceTip);
}
///
/// 显示场景
///
private void ShowScene()
{
if (CanBindGateway() == false)
{
//选择场景
var sceneList = Room.CurrentRoom.SceneUIList;
if (sceneList == null)
{
return;
}
if (sceneList.Count == 0)
{
ShowNoSceneTip();
}
else
{
var sceneScrolView = new VerticalScrolViewLayout { };
functionSceneBodyView.AddChidren(sceneScrolView);
foreach (var scene in sceneList)
{
if (scene == null)
{
continue;
}
var sceneFL = new FrameLayout()
{
Height = Application.GetRealHeight(400),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Tag = scene
};
sceneScrolView.AddChidren(sceneFL);
var sceneRowLayout = new RowLayout()
{
Y = Application.GetRealHeight(30),
Height = Application.GetRealHeight(400 - 10 - 30),
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
Radius = CommonPage.BigFormRadius
};
sceneFL.AddChidren(sceneRowLayout);
var sceneItemFL = new FrameLayout()
{
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
Radius = CommonPage.BigFormRadius
};
sceneRowLayout.AddChidren(sceneItemFL);
var sceneImg = new Button()
{
UnSelectedImagePath = scene.IconPath,
Radius = CommonPage.BigFormRadius
};
sceneItemFL.AddChidren(sceneImg);
var hardBlackBG = new Button()
{
BackgroundColor = ZigbeeColor.Current.GXCBlack70Color,
SelectedBackgroundColor = ZigbeeColor.Current.GXCBlack80Color,
Radius = CommonPage.BigFormRadius
};
sceneItemFL.AddChidren(hardBlackBG);
var sceneNameBtn = new Button()
{
Text = scene.Name,
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextSize = 20
};
sceneItemFL.AddChidren(sceneNameBtn);
//编辑
var editBtn = new Device.CommonForm.RowLayoutEditButton
{
TextID = R.MyInternationalizationString.Edit,
Tag = scene
};
//删除
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
{
Tag = scene
};
if (!Room.CurrentRoom.IsSharedRoom)
{
sceneRowLayout.AddRightView(editBtn);
sceneRowLayout.AddRightView(deleteBtn);
}
EventHandler sceneDownHandler = (sender, e) =>
{
hardBlackBG.IsSelected = true;
};
sceneNameBtn.MouseDownEventHandler += sceneDownHandler;
hardBlackBG.MouseDownEventHandler += sceneDownHandler;
//调用场景
EventHandler sceneUpHandler = async (sender, e) =>
{
hardBlackBG.IsSelected = false;
//1成功 0失败
//后面补上相关提示
// Error参数含义
//1:网关无法解析命令数据。
//2:协调器正在升级或备份/恢复数据
//3:操作设备/组/场景不存在
//4:其他错误
//5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)
var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, 0);
if (sceneOpenAllData == null || sceneOpenAllData.sceneOpenData == null)
{
return;
}
if (sceneOpenAllData.sceneOpenData.Result == 0)
{
if (sceneOpenAllData.errorResponData == null)
{
return;
}
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail);
}
};
sceneNameBtn.MouseUpEventHandler += sceneUpHandler;
hardBlackBG.MouseUpEventHandler += sceneUpHandler;
//编辑场景
EventHandler editEvent = (sender, e) =>
{
SceneRoomUI.EditScene(scene, Room.CurrentRoom);
};
editBtn.MouseUpEventHandler += editEvent;
//删除场景
EventHandler delEvent = (sender, e) =>
{
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();
alert.ResultEventHandler += async (send1, e1) =>
{
if (e1)
{
//0 移除失败 1 移除成功 2 没有该场景
var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
{
return;
}
if (removeSceneAllData.removeSceneData.Result == 1)
{
//1成功
Room.CurrentRoom.RemoveScene(scene);
//RefreshBodyView();
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
}
else if (removeSceneAllData.removeSceneData.Result == 0)
{
//0 移除失败
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.DeleteSceneFail);
}
else if (removeSceneAllData.removeSceneData.Result == 2)
{
//2 没有该场景
Room.CurrentRoom.RemoveScene(scene);
//RefreshBodyView();
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
}
}
};
};
deleteBtn.MouseUpEventHandler += delEvent;
}
}
}
else
{
ShowNoGatewayTip();
}
}
#endregion
#region ◆ 切换住宅_________________________
///
/// 切换住宅
///
/// Home.
private void ChangeResidence(House home)
{
try
{
CommonPage.Loading.Start();
new System.Threading.Thread(async () =>
{
Config.Instance.HomeId = home.Id;
Global.CreateHomeDirectory(home.Id);
Config.Instance.Save();
//刷新个人中心的内存及线程
await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
Room.InitAllRoom();
Application.RunOnMainThread(() =>
{
Show();
CommonPage.Loading.Hide();
});
})
{ IsBackground = true }.Start();
}
catch (Exception ex)
{
Application.RunOnMainThread(() =>
{
CommonPage.Loading.Hide();
new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.CheckInternet), Language.StringByID(R.MyInternationalizationString.Close)).Show();
Console.WriteLine(ex.Message);
});
}
}
#endregion
#region ◆ 进行设备状态读取__________________
///
/// 判断是否可以进行设备状态读取。在回调中读取
///
/// Common device.
/// 回调处理--发送读取命令
/// Span. 默认30秒
public static void ReadStatus(CommonDevice commonDevice, Action action, int span = 30)
{
var threadName = commonDevice.GetHashCode().ToString();
if (null == threadList.Find((obj) => obj.Name == threadName))
{
var thread = new System.Threading.Thread(() =>
{
var dateTime = DateTime.Now;
while ((DateTime.Now - dateTime).TotalSeconds < 10)
{
System.Threading.Thread.Sleep(100);
if (commonDevice.Gateway == null)
{
return;
}
if (!commonDevice.Gateway.IsVirtual)
{
break;
}
}
lock (threadList)
{
threadList.RemoveAll((obj) => obj.Name == threadName);
}
//防止短时间内读取频繁
if (span < (DateTime.Now - commonDevice.LastDateTime).TotalSeconds)
{
action?.Invoke();
};
})
{ IsBackground = true, Name = threadName };
lock (threadList)
{
threadList.Add(thread);
}
thread.Start();
}
}
#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
}
}