using System;
|
using System.Collections.Generic;
|
using Shared.Common;
|
using Shared.Phone.Device.AC;
|
using ZigBee.Device;
|
using Shared.Phone.Device.CommonForm;
|
|
namespace Shared.Phone.UserView
|
{
|
|
/// <summary>
|
/// 主页
|
/// </summary>
|
public class UserHomeView : FrameLayout, ZigBee.Common.IStatus
|
{
|
#region ◆ 变量____________________________
|
/// <summary>
|
/// 设备是否在线标识--Online
|
/// </summary>
|
private readonly string deviceStatus_Online = "Online";
|
/// <summary>
|
/// 设备状态开关标识--Switch
|
/// </summary>
|
private readonly string deviceStatus_OnOffStatus = "Switch";
|
/// <summary>
|
/// 功能ScrolViewLayout
|
/// </summary>
|
private VerticalScrolViewLayout deviceVerticalScrolViewLayout;
|
/// <summary>
|
/// 功能和场景bodyView
|
/// </summary>
|
private FrameLayout functionSceneBodyView;
|
|
/// <summary>
|
/// The height of the room page view. -- 550
|
/// </summary>
|
private static readonly int roomPageView_Height = 550;
|
/// <summary>
|
/// 功能卡片高度 --250
|
/// </summary>
|
private static readonly int deviceFL_Height = 250;
|
/// <summary>
|
/// 功能按键
|
/// </summary>
|
private Button functionBtn;
|
|
/// <summary>
|
/// 读取设备状态的线程列表
|
/// </summary>
|
private static List<System.Threading.Thread> threadList = new List<System.Threading.Thread> { };
|
|
/// <summary>
|
/// 网关
|
/// </summary>
|
private ZbGateway zbGateway = null;
|
/// <summary>
|
/// 网关列表
|
/// </summary>
|
private List<ZbGateway> zbGatewayList = new List<ZbGateway> { };
|
/// <summary>
|
/// 设备列表
|
/// </summary>
|
private List<CommonDevice> commonDeviceList = new List<CommonDevice> { };
|
/// <summary>
|
/// 是否发送控制命令成功了
|
/// </summary>
|
private bool sendedControlCommand = false;
|
|
/// <summary>
|
/// 延时 300毫秒
|
/// </summary>
|
private readonly int sleepSpan = 300;
|
|
|
private FrameLayout itemView=new FrameLayout();
|
/// <summary>
|
/// floorBtn
|
/// </summary>
|
private Button floorBtn;
|
#endregion
|
|
#region ◆ 接口____________________________
|
|
/// <summary>
|
/// 该接口将弃用 !!!!!!
|
/// 改用DeviceInfoChange()
|
/// </summary>
|
/// <returns>The changed.</returns>
|
/// <param name="common">Common.</param>
|
public void Changed(CommonDevice common)
|
{
|
|
}
|
|
/// <summary>
|
/// 设备状态更新接口
|
/// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
|
/// <para>type:如果为 IASInfoReport:RemoveDeviceRespon</para>
|
/// <para>type:如果为 DeviceStatusReport:设备上报</para>
|
/// <para>type:如果为 IASInfoReport:IAS安防信息上报</para>
|
/// <para>type:如果为 OnlineStatusChange: 设备在线状态更新</para>
|
/// </summary>
|
/// <param name="common">Common.</param>
|
/// <param name="typeTag">Type tag.</param>
|
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 deviceUI = rowFL.Tag as DeviceUI;
|
if (deviceUI.CommonDevice == null || rowFL.ChildrenCount == 0)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
|
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
|
{
|
//判断是否为当前设备
|
continue;
|
}
|
var frameLayout = rowFL.GetChildren(0) as FrameLayout;
|
switch (deviceUI.CommonDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
|
onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
|
|
//记录、更新状态
|
if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
continue;
|
}
|
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
//记录回复时间
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.AirSwitch:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
|
airSwitch.DeviceStatusReport = common.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;
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
//记录回复时间
|
airSwitch.LastDateTime = DateTime.Now;
|
}
|
}
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.WindowCoveringDevice:
|
if (common.DeviceStatusReport.CluterID == 258)
|
{
|
if (common.DeviceStatusReport.AttriBute[0].AttributeId == 0)
|
{
|
//窗帘类型
|
var rollerShade = deviceUI.CommonDevice as Rollershade;
|
rollerShade.DeviceStatusReport = common.DeviceStatusReport;
|
rollerShade.WcdType = common.DeviceStatusReport.AttriBute[0].AttriButeData;
|
rollerShade.LastDateTime = DateTime.Now;
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
}
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.Thermostat:
|
//AC功能
|
if (common.DeviceStatusReport.CluterID == 513)
|
{
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
ac.DeviceStatusReport = common.DeviceStatusReport;
|
var attriButeList = ac.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
continue;
|
}
|
|
var curTemp = (attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
ac.currentLocalTemperature = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 17:
|
//此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
|
ac.currentCoolingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 18:
|
//此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
|
ac.currentHeatingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 4096:
|
//此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。
|
ac.currentAutoSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 28:
|
//此属性描述恒温设备正处于哪种模式
|
ac.currentSystemMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
}
|
if (common.DeviceStatusReport.CluterID == 514)
|
{
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
var attriButeList = common.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
return;
|
}
|
ac.DeviceStatusReport = common.DeviceStatusReport;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
ac.currentFanMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 4096:
|
ac.currentFanSwingMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
var ac = deviceUI.CommonDevice as AC;
|
ac.IsOnline = 1;
|
ac.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.DimmableLight:
|
//调光灯功能
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
|
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
|
//记录、更新状态
|
if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
//记录回复时间
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
|
//亮度
|
if (common.DeviceStatusReport.CluterID == 8)
|
{
|
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
|
dimmableLight.DeviceStatusReport = common.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;
|
(rowFL.GetChildren(0) as FunctionMainView).IsSelected = true;
|
(rowFL.GetChildren(0) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
|
break;
|
}
|
}
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"Error:{ex.Message}");
|
}
|
});
|
}
|
|
}
|
/// <summary>
|
/// Changeds the IL ogic status.
|
/// </summary>
|
/// <param name="logic">Logic.</param>
|
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
|
{
|
//throw new NotImplementedException();
|
}
|
/// <summary>
|
/// Changeds the IS cene status.
|
/// </summary>
|
/// <param name="scene">Scene.</param>
|
public void ChangedISceneStatus(Scene scene)
|
{
|
//throw new NotImplementedException();
|
}
|
#endregion
|
|
#region ◆ 初始化__________________________
|
|
/// <summary>
|
/// Removes from parent.
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
RemoveStatuList();
|
base.RemoveFromParent();
|
}
|
|
private void RemoveStatuList()
|
{
|
ZbGateway.StatusList.Remove(this);
|
RemoveAllUpdateControlDeviceStatuAction();
|
}
|
|
/// <summary>
|
/// 主页 --我的家
|
/// </summary>
|
public UserHomeView()
|
{
|
ZbGateway.StatusList.Add(this);
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
|
}
|
|
/// <summary>
|
/// 显示界面
|
/// </summary>
|
public void Show()
|
{
|
this.RemoveAll();
|
|
#region topview
|
var topFrameLayout = new FrameLayout()
|
{
|
Y=Application.GetRealHeight(60),
|
Height = Application.GetRealHeight(127),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
|
};
|
AddChidren(topFrameLayout);
|
|
var floor = new Button
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Width = Application.GetMinRealAverage(69),
|
Height = Application.GetMinRealAverage(69),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/Floor.png"
|
};
|
topFrameLayout.AddChidren(floor);
|
|
floorBtn = new Button
|
{
|
X=floor.Right,
|
Width=Application.GetRealWidth(500),
|
Height=Application.GetRealHeight(100),
|
Gravity = Gravity.CenterVertical,
|
TextAlignment =TextAlignment.CenterLeft,
|
TextColor=ZigbeeColor.Current.GXCTextColor,
|
Text=Config.Instance.Home.GetCurrentFloorName
|
};
|
topFrameLayout.AddChidren(floorBtn);
|
|
var messageBtn = new Button()
|
{
|
X = Application.GetRealWidth(953),
|
Width = Application.GetMinRealAverage(69),
|
Height = Application.GetMinRealAverage(69),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/Message.png",
|
SelectedImagePath="Item/MessageSelected.png"
|
};
|
topFrameLayout.AddChidren(messageBtn);
|
|
var residecneName = new Button()
|
{
|
X=Application.GetRealWidth(CommonFormResouce.X_Left),
|
Y = Application.GetRealHeight(161),
|
Width = Application.GetRealWidth(700),
|
Height = Application.GetRealHeight(95),
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
|
TextSize = 24,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor
|
};
|
if(Config.Instance.Home.IsOthreShare)
|
{
|
residecneName.Text = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){Config.Instance.Home.Name}";
|
}
|
AddChidren(residecneName);
|
|
floor.MouseUpEventHandler += SelectFloor;
|
floorBtn.MouseUpEventHandler += SelectFloor;
|
//切换住宅
|
residecneName.MouseLongEventHandler += (send, e) =>
|
{
|
var tempHomeBtn = send as Button;
|
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 bg = new Button
|
{
|
X = Application.GetRealWidth(35),
|
Y = Application.GetRealHeight(248),
|
Width = Application.GetMinRealAverage(449),
|
Height = Application.GetMinRealAverage(478),
|
UnSelectedImagePath = "Item/SelectHouse"
|
};
|
closeBGview.AddChidren(bg);
|
|
var changeHomeFL = new FrameLayout()
|
{
|
X = Application.GetRealWidth(35),
|
Y = Application.GetRealHeight(271),
|
Height = Application.GetRealHeight(449),
|
Width = Application.GetRealWidth(440),
|
Radius = CommonPage.BigFormRadius,
|
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
|
};
|
closeBGview.AddChidren(changeHomeFL);
|
|
var changeHomeBtn = new Button()
|
{
|
X = Application.GetRealWidth(80),
|
Width = Application.GetRealWidth(350),
|
Height = Application.GetRealHeight(150),
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
TextID = R.MyInternationalizationString.ChangeHome,
|
TextAlignment = TextAlignment.CenterLeft
|
};
|
changeHomeFL.AddChidren(changeHomeBtn);
|
|
var scrolView = new VerticalScrolViewLayout()
|
{
|
Y = changeHomeBtn.Bottom,
|
Height = Application.GetMinRealAverage(305-10)
|
};
|
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(150)
|
};
|
scrolView.AddChidren(rowView);
|
var pointBtn = new Device.CommonForm.SelectedStatuButton()
|
{
|
X=Application.GetRealWidth(80),
|
Width = Application.GetMinRealAverage(80),
|
Height = Application.GetMinRealAverage(80),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/House.png",
|
SelectedImagePath = "Item/HouseSelected.png",
|
IsSelected = home.Id == Config.Instance.Home.Id
|
};
|
rowView.AddChidren(pointBtn);
|
var nameBtn = new Device.CommonForm.SelectedStatuButton()
|
{
|
X = Application.GetRealWidth(173),
|
Width = Application.GetRealWidth(280),
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = home.Name,
|
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
|
SelectedTextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
IsSelected = home.Id == Config.Instance.Home.Id
|
};
|
if(home.IsOthreShare)
|
{
|
nameBtn.Text = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){home.Name}";
|
}
|
rowView.AddChidren(nameBtn);
|
|
EventHandler<MouseEventArgs> selectedResidenceHandler = (send1, e1) =>
|
{
|
if (Config.Instance.Home.FileName == homeFilePath)
|
{
|
return;
|
}
|
clickCheckBtn.IsSelected = false;
|
clickNameBtn.IsSelected = false;
|
pointBtn.IsSelected = true;
|
nameBtn.IsSelected = true;
|
|
residecneName.Text = home.Name;
|
if(home.IsOthreShare)
|
{
|
nameBtn.Text = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){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;
|
if (home.IsOthreShare)
|
{
|
residecneName.Text = nameBtn.Text = $"({Language.StringByID(R.MyInternationalizationString.Shared)}){home.Name}";
|
}
|
}
|
else
|
{
|
pointBtn.IsSelected = false;
|
nameBtn.IsSelected = false;
|
}
|
};
|
}
|
};
|
//消息
|
messageBtn.MouseUpEventHandler += (send, e) =>
|
{
|
var roomList = new Shared.Phone.Device.Room.RoomManagement();
|
HomePage.Instance.AddChidren(roomList);
|
HomePage.Instance.PageIndex += 1;
|
roomList.Show();
|
};
|
|
#endregion
|
|
if(CanBindGateway()==false)
|
{
|
var roomPageView = new PageLayout()
|
{
|
Y = Application.GetRealHeight(302),
|
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.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom())
|
{
|
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();
|
//};
|
if(room.IsLove)
|
{
|
return;
|
}
|
var editRoom = new Device.Room.EditRoom();
|
HomePage.Instance.AddChidren(editRoom);
|
HomePage.Instance.PageIndex += 1;
|
editRoom.Show(room);
|
editRoom.action += () =>
|
{
|
Show();
|
};
|
|
};
|
}
|
}
|
else
|
{
|
Room.CurrentRoom = Room.Lists[0];
|
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 = Application.GetRealHeight(861),
|
Width=Application.GetRealWidth(832),
|
Height = Application.GetRealHeight(167),
|
Gravity=Gravity.CenterHorizontal,
|
BackgroundImagePath="Item/SceneFunctionBG.png"
|
};
|
AddChidren(functionSceneView);
|
|
//场景
|
var sceneBtn = new Button()
|
{
|
X = Application.GetRealWidth(30),
|
Y = Application.GetRealHeight(12),
|
Width = Application.GetRealWidth(350),
|
Height = Application.GetRealHeight(100),
|
TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
|
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
TextID = R.MyInternationalizationString.Scence,
|
IsSelected = false
|
};
|
functionSceneView.AddChidren(sceneBtn);
|
|
//场景
|
functionBtn = new Button()
|
{
|
X = Application.GetRealWidth(430),
|
Y = Application.GetRealHeight(12),
|
Width = Application.GetRealWidth(360),
|
Height = Application.GetRealHeight(100),
|
TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
|
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
TextID = R.MyInternationalizationString.Function,
|
IsSelected = false
|
};
|
functionSceneView.AddChidren(functionBtn);
|
|
//功能和场景bodyView
|
functionSceneBodyView = new FrameLayout()
|
{
|
Y = functionSceneView.Bottom,
|
Height = Application.GetRealHeight(750),
|
Gravity = Gravity.CenterHorizontal,
|
BackgroundColor=ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
AddChidren(functionSceneBodyView);
|
|
//选择功能分栏
|
functionBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
sceneBtn.IsSelected = false;
|
functionBtn.IsSelected = true;
|
RefreshBodyView();
|
};
|
//选择场景分栏
|
sceneBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
functionBtn.IsSelected = false;
|
sceneBtn.IsSelected = true;
|
RefreshBodyView();
|
};
|
|
RefreshBodyView();
|
|
roomPageView.PageChange += (sender, e) =>
|
{
|
//切换当前房间
|
Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.Lists[roomPageView.PageIndex];
|
RefreshBodyView();
|
};
|
}
|
else
|
{
|
ShowNoGatewayTip();
|
}
|
|
}
|
|
#endregion
|
|
#region ◆ 刷新____________________________
|
/// <summary>
|
/// RefreshBodyView
|
/// </summary>
|
public void RefreshBodyView()
|
{
|
if (Room.CanInitAllRoom == false)
|
{
|
return;
|
}
|
functionSceneBodyView.RemoveAll();
|
if (functionBtn.IsSelected)
|
{
|
ShowFunction();
|
}
|
else
|
{
|
ShowScene();
|
}
|
}
|
|
/// <summary>
|
/// SelectFloor
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="mouseEventArgs"></param>
|
public void SelectFloor(object sender,MouseEventArgs mouseEventArgs)
|
{
|
var floorFL = new Phone.Device.Category.SelectFloor();
|
AddChidren(floorFL);
|
floorFL.Init(35, 153);
|
floorFL.FloorAction = (floorName) =>
|
{
|
floorBtn.Text = floorName;
|
Show();
|
};
|
}
|
|
#endregion
|
|
#region ◆ 检测是否绑定了网关________________
|
|
/// <summary>
|
/// 当没有绑定网关时,是否有权限添加网关
|
/// </summary>
|
/// <returns><c>true</c>, if bing gateway was caned, <c>false</c> otherwise.</returns>
|
private bool CanBindGateway()
|
{
|
if (HadBindGateway() == false && (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 2))
|
{
|
return true;
|
}
|
return false;
|
}
|
|
/// <summary>
|
/// 是否绑定了网关
|
/// </summary>
|
/// <returns><c>true</c>, if bind gateway was haded, <c>false</c> otherwise.</returns>
|
private bool HadBindGateway()
|
{
|
var gatewayList = UserCenter.HdlGatewayLogic.Current.GetAllLocalGateway();
|
if (gatewayList.Count == 0)
|
{
|
return false;
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 提示用户没有网关,并快速跳转到添加网关界面
|
/// </summary>
|
private void ShowNoGatewayTip()
|
{
|
var bg = new Button
|
{
|
Y = Application.GetRealHeight(302),
|
Width = Application.GetMinRealAverage(717),
|
Height = Application.GetMinRealAverage(478),
|
Gravity = Gravity.CenterHorizontal,
|
UnSelectedImagePath = "Item/NoBindGW.png"
|
};
|
AddChidren(bg);
|
|
var tip = new Button
|
{
|
Y = Application.GetRealHeight(815),
|
Width = Application.GetMinRealAverage(717),
|
Height = Application.GetMinRealAverage(58),
|
Gravity = Gravity.CenterHorizontal,
|
TextID = R.MyInternationalizationString.NewAccountNeedBingGW,
|
TextColor = ZigbeeColor.Current.GXCTextGrayColor
|
};
|
AddChidren(tip);
|
|
var addBG = new Button
|
{
|
Y = Application.GetRealHeight(1048),
|
Height = Application.GetMinRealAverage(366),
|
Width = Application.GetMinRealAverage(971),
|
UnSelectedImagePath = "Item/VirtualFrame.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
AddChidren(addBG);
|
|
var addGatewayBtn = new Button()
|
{
|
Y = Application.GetRealHeight(1143),
|
Height = Application.GetMinRealAverage(89),
|
Width = Application.GetMinRealAverage(89),
|
UnSelectedImagePath = "Item/Add_GW.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
AddChidren(addGatewayBtn);
|
addGatewayBtn.MouseUpEventHandler += GoToAddGateWay;
|
|
var addTip = new Button
|
{
|
Y = Application.GetRealHeight(1256),
|
Width = Application.GetMinRealAverage(717),
|
Height = Application.GetMinRealAverage(58),
|
Gravity = Gravity.CenterHorizontal,
|
TextID = R.MyInternationalizationString.AddSmartGW,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor
|
};
|
AddChidren(addTip);
|
addTip.MouseUpEventHandler += GoToAddGateWay;
|
}
|
|
/// <summary>
|
/// 前往添加网关界面
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs)
|
{
|
var selectNewGateWayForm = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm { };
|
selectNewGateWayForm.AddForm();
|
}
|
|
#endregion
|
|
#region ◆ 功能_____________________________
|
|
/// <summary>
|
/// 显示没有功能
|
/// </summary>
|
private void ShowNoFunctionTip()
|
{
|
var noFunction = new Button
|
{
|
Y = Application.GetRealHeight(69),
|
Width = Application.GetMinRealAverage(683),
|
Height = Application.GetMinRealAverage(392),
|
Gravity = Gravity.CenterHorizontal,
|
UnSelectedImagePath = "Item/NoFunction.png"
|
};
|
functionSceneBodyView.AddChidren(noFunction);
|
|
var noFunctionTip = new Button()
|
{
|
Y=noFunction.Bottom,
|
Height = Application.GetRealHeight(200),
|
Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}","\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
IsMoreLines=true
|
};
|
functionSceneBodyView.AddChidren(noFunctionTip);
|
}
|
|
/// <summary>
|
/// 显示功能
|
/// </summary>
|
private void ShowFunction()
|
{
|
//选择功能--直接从房间的devicelist中获取
|
var deviceList = Room.CurrentRoom.DeviceUIList;
|
if (deviceList == null)
|
{
|
return;
|
}
|
|
if (deviceList.Count == 0)
|
{
|
ShowNoFunctionTip();
|
}
|
else
|
{
|
deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { };
|
|
functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout);
|
for(int i=0;i<deviceList.Count;i++)
|
{
|
int t = i % 2;
|
int tt = i / 2;
|
int xx = 43 + i % 2 * (20 + 487);
|
int yy = 14;
|
var device = deviceList[i];
|
if (device == null || device.CommonDevice == null)
|
{
|
continue;
|
}
|
|
if (i % 2 == 0)
|
{
|
itemView = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(14 + 348),
|
Tag = device
|
};
|
deviceVerticalScrolViewLayout.AddChidren(itemView);
|
}
|
|
|
//删除设备
|
EventHandler<MouseEventArgs> 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<MouseEventArgs> collectionEvent = (sender, e) =>
|
{
|
if ((sender as Button).IsSelected)
|
{
|
Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(device.FileName);
|
(sender as Button).IsSelected = false;
|
}
|
else
|
{
|
Shared.Common.Room.CurrentRoom.GetLoveRoom().AddDevice(device.FileName);
|
(sender as Button).IsSelected = true;
|
}
|
if (Room.CurrentRoom.IsLove)
|
{
|
RefreshBodyView();
|
}
|
};
|
|
//////判断设备是否支持的属性 如开关等控制
|
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 lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(rollerShade.DeviceEpointName);
|
//lightView.SetStatu(true);
|
lightView.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
|
lightView.SetCollect(true);
|
|
lightView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
|
|
(device.CommonDevice as Rollershade).CurtainUpDownStopControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(CommonFormResouce.GetSwitchStatu(true));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
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);
|
|
(device.CommonDevice as Rollershade).CurtainUpDownStopControl(0);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(CommonFormResouce.GetSwitchStatu(false));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl();
|
UserView.HomePage.Instance.AddChidren(rollerShadeControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
UserView.HomePage.Instance.ScrollEnabled = false;
|
//rollerShadeControl.action = RefreshBodyView;
|
rollerShadeControl.Show(device, Room.CurrentRoom);
|
};
|
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
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 lightView = new FunctionMainView(xx,yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
|
lightView.IsSelected = light.OnOffStatus==1;
|
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(Room.CurrentRoom,device.FileName));
|
|
var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FileName);
|
if (dev == null)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
|
lightView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
|
|
light.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
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);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
if (device.CommonDevice.DfunctionType == DeviceFunctionType.A开关)
|
{
|
var lightControl = new Phone.Device.Light.OnOffControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(device, Room.CurrentRoom);
|
}
|
else if (device.CommonDevice.DfunctionType == DeviceFunctionType.A插座)
|
{
|
var lightControl = new Phone.Device.Light.PlugControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(device, Room.CurrentRoom);
|
}
|
else
|
{
|
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);
|
}
|
};
|
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
|
}
|
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.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
airSwitch.ReadOnOffStatus();
|
}
|
}
|
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(airSwitch.DeviceEpointName);
|
//lightView.SetStatu(true);
|
lightView.IsSelected = airSwitch.OnOffStatus == 1;
|
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(Room.CurrentRoom, device.FileName));
|
|
lightView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
|
|
airSwitch.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
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);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
var lightControl = new Phone.Device.Light.AirSwitchControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(device, Room.CurrentRoom);
|
};
|
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
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.ReadLocalTemperature();
|
ac.ReadCoolingSetpoint();
|
ac.ReadHeatingSetpoint();
|
ac.ReadAutoSetpoint();
|
ac.ReadFanMode();
|
ac.ReadSystemMode();
|
ac.ReadSystemFansSwingMode();
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取设备状态
|
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
ac.ReadLocalTemperature();
|
ac.ReadCoolingSetpoint();
|
ac.ReadHeatingSetpoint();
|
ac.ReadAutoSetpoint();
|
ac.ReadFanMode();
|
ac.ReadSystemMode();
|
ac.ReadSystemFansSwingMode();
|
}
|
}
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
|
lightView.IsSelected = ac.currentSystemMode != 0;
|
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(Room.CurrentRoom, device.FileName));
|
|
lightView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
|
|
ac.Open();
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
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();
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
var lightControl = new Phone.Device.AC.ACControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(device, Room.CurrentRoom);
|
};
|
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
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();
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取设备状态
|
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
dimmableLight.ReadOnOffStatus();
|
}
|
}
|
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
|
lightView.IsSelected = dimmableLight.OnOffStatus == 1;
|
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(Room.CurrentRoom, device.FileName));
|
|
var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FileName);
|
if (dev == null)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
|
lightView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
|
|
dimmableLight.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
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);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
lightView.CardBG.MouseUpEventHandler += (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);
|
};
|
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
else if (device.CommonDevice.Type == DeviceType.OnOffSwitch)
|
{
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(device.GetDeviceStatu());
|
lightView.SetDeviceName(device.CommonDevice.DeviceEpointName);
|
//lightView.SetStatu(true);
|
lightView.IsSelected = true;
|
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(Room.CurrentRoom, device.FileName));
|
}
|
}
|
}
|
|
}
|
|
#endregion
|
|
#region ◆ 场景_____________________________
|
|
/// <summary>
|
/// 显示没场景
|
/// </summary>
|
private void ShowNoSceneTip()
|
{
|
var noScene = new Button
|
{
|
Y = Application.GetRealHeight(69),
|
Width = Application.GetMinRealAverage(683),
|
Height = Application.GetMinRealAverage(392),
|
Gravity = Gravity.CenterHorizontal,
|
UnSelectedImagePath = "Item/NoFunction.png"
|
};
|
functionSceneBodyView.AddChidren(noScene);
|
var noScenceTip = new Button()
|
{
|
Y=noScene.Bottom,
|
Height = Application.GetRealHeight(200),
|
Text =Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}","\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
IsMoreLines=true
|
};
|
functionSceneBodyView.AddChidren(noScenceTip);
|
}
|
|
/// <summary>
|
/// 显示场景
|
/// </summary>
|
private void ShowScene()
|
{
|
//选择场景
|
var sceneList = Room.CurrentRoom.SceneUIList;
|
if (sceneList == null)
|
{
|
return;
|
}
|
if (sceneList.Count == 0)
|
{
|
ShowNoSceneTip();
|
}
|
else
|
{
|
var sceneScrolView = new VerticalScrolViewLayout { };
|
functionSceneBodyView.AddChidren(sceneScrolView);
|
for(int i=0;i<sceneList.Count;i++)
|
{
|
var scene = sceneList[i];
|
int xx = 43 + i % 2 * (20 + 487);
|
int yy = 14;
|
if (scene == null)
|
{
|
continue;
|
}
|
|
if (i % 2 == 0)
|
{
|
itemView = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(14 + 348),
|
Tag = scene
|
};
|
sceneScrolView.AddChidren(itemView);
|
}
|
|
var sceneView = new SceneMainView(xx, yy);
|
itemView.AddChidren(sceneView);
|
sceneView.Init();
|
sceneView.SetSceneNameText(scene.Name);
|
sceneView.SetIcon($"SceneIcon/{i}.png");
|
sceneView.SetCollect(Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName));
|
|
if (scene.SceneDelayTime == 0)
|
{
|
sceneView.SetTimeImage();
|
}
|
else
|
{
|
sceneView.SetTimeText(scene.SceneDelayTime.ToString());
|
}
|
|
sceneView.TimeButton.MouseUpEventHandler += (sender, e) =>
|
{
|
var timeSelect = new SelectTime();
|
CommonPage.Instance.AddChidren(timeSelect);
|
timeSelect.TempTime = scene.DelayTime;
|
timeSelect.Init();
|
timeSelect.TimeAction = (t) =>
|
{
|
scene.SceneDelayTime = t;
|
if(t>0)
|
{
|
sceneView.SetTimeText(CommonFormResouce.GetTimeString(scene.SceneDelayTime));
|
}
|
else
|
{
|
sceneView.SetTimeImage();
|
}
|
};
|
|
};
|
|
//调用场景
|
EventHandler<MouseEventArgs> sceneUpHandler = async (sender, e) =>
|
{
|
//1成功 0失败
|
//后面补上相关提示
|
// Error参数含义
|
//<para>1:网关无法解析命令数据。</para>
|
//<para>2:协调器正在升级或备份/恢复数据
|
//<para>3:操作设备/组/场景不存在</para>
|
//<para>4:其他错误</para>
|
//<para>5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)</para>
|
var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
|
if (sceneOpenAllData == null || sceneOpenAllData.sceneOpenData == null)
|
{
|
return;
|
}
|
if (sceneOpenAllData.sceneOpenData.Result == 0)
|
{
|
if (sceneOpenAllData.errorResponData == null)
|
{
|
return;
|
}
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail);
|
}
|
};
|
//收藏
|
EventHandler<MouseEventArgs> collectionEvent = (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
//scene.IsCollected = true;
|
Room.CurrentRoom.GetLoveRoom().AddScene(scene);
|
}
|
else
|
{
|
//scene.IsCollected = false;
|
Room.CurrentRoom.GetLoveRoom().RemoveScene(scene);
|
}
|
scene.Save();
|
|
//if ((sender as Button).IsSelected)
|
//{
|
// scene.Collect(false);
|
// (sender as Button).IsSelected = false;
|
//}
|
//else
|
//{
|
// scene.Collect(true);
|
// (sender as Button).IsSelected = true;
|
//}
|
//scene.Save();
|
//if (Room.CurrentRoom.IsLove)
|
//{
|
// RefreshBodyView();
|
//}
|
|
};
|
|
sceneView.CollectButton.MouseUpEventHandler += collectionEvent;
|
sceneView.MouseUpEventHandler += sceneUpHandler;
|
sceneView.SceneIcon.MouseUpEventHandler+= sceneUpHandler;
|
sceneView.SceneNameButton.MouseUpEventHandler += sceneUpHandler;
|
|
}
|
}
|
|
}
|
|
#endregion
|
|
#region ◆ 切换住宅_________________________
|
/// <summary>
|
/// 切换住宅
|
/// </summary>
|
/// <param name="home">Home.</param>
|
private void ChangeResidence(House home)
|
{
|
try
|
{
|
CommonPage.Loading.Start();
|
new System.Threading.Thread(async () =>
|
{
|
Config.Instance.HomeId = home.Id;
|
Config.Instance.Home = House.GetHouseByFilePath(home.FileName);
|
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 ◆ 进行设备状态读取__________________
|
|
/// <summary>
|
/// 判断是否可以进行设备状态读取。在回调中读取
|
/// </summary>
|
/// <param name="commonDevice">Common device.</param>
|
/// <param name="action">回调处理--发送读取命令</param>
|
/// <param name="span">Span. 默认30秒</param>
|
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 ◆ 控制状态_________________________
|
|
/// <summary>
|
/// 显示设备控制状态
|
/// </summary>
|
/// <param name="command">Command.</param>
|
/// <param name="objValue">Object value.</param>
|
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);
|
}
|
|
/// <summary>
|
/// 移除全部更新控制设备的action
|
/// </summary>
|
private void RemoveAllUpdateControlDeviceStatuAction()
|
{
|
foreach (var gateway in zbGatewayList)
|
{
|
//移除action
|
if (gateway != null)
|
{
|
gateway.ReportAction -= UpdateDeviceControllStatu;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 移除单个控制设备的更新状态action
|
/// </summary>
|
/// <param name="gateway">Gateway.</param>
|
private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway)
|
{
|
//移除action
|
if (gateway != null)
|
{
|
gateway.ReportAction -= UpdateDeviceControllStatu;
|
}
|
}
|
|
/// <summary>
|
/// 添加需要监控回调状态的网关和设备
|
/// </summary>
|
/// <param name="gatewayList">Gateway list.</param>
|
/// <param name="gateway">Gateway.</param>
|
/// <param name="deviceList">Device list.</param>
|
/// <param name="common">Common.</param>
|
private void AddZbGateway(List<ZbGateway> gatewayList, ZbGateway gateway, List<CommonDevice> 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
|
}
|
}
|