using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.UserView;
using Shared.R;
using ZigBee.Device;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.Device.AC;
using Shared.Phone.UserCenter.DoorLock;
using Shared.Phone.Device.DeviceLogic;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Device.Category
{
///
/// Category.
///
public class Category : FrameLayout, ZigBee.Common.IStatus
{
#region ◆ 变量____________________________
///
/// The instance.
///
public static Category instance;
///
/// low_High
///
private const int low_High = 127;
///
/// 功能
///
private ButtonLineForm functionBtn;
///
/// 场景
///
private ButtonLineForm sceneBtn;
///
/// 自动化
///
private ButtonLineForm automationBtn;
///
/// 场景功能中部背景bodyView
///
public FrameLayout functionSceneBodyView;
///
/// 中部背景bodyView
///
public FrameLayout functionSceneAutoBodyView;
///
/// 相同的设备列表
///
public VerticalScrolViewLayout deviceListScrolView;
///
/// 设备是否在线标识--Online
///
private readonly string deviceStatus_Online = "Online";
///
/// 设备状态开关标识--Switch
///
private readonly string deviceStatus_OnOffStatus = "Switch";
///
/// 右上角添加按钮
///
private Device.CommonForm.SelectedStatuButton addBtn;
///
/// 网关
///
private ZbGateway zbGateway = null;
///
/// 网关列表
///
private List zbGatewayList = new List { };
///
/// 设备列表
///
private List commonDeviceList = new List { };
///
/// 是否发送控制命令成功了
///
private bool sendedControlCommand = false;
///
/// 当前功能类型按钮
///
private FunctionButton tempFunctionTypeBtn;
///
/// 功能类型按钮
///
//private FunctionButton functionTypeIMG;
///
/// 功能类型
///
private HorizontalScrolViewLayout functionTypeScrowView;
///
/// 设备类型RowLayout
///
//private FrameLayout typeRowLayout;
///
/// 楼层
///
private Button floorBtn;
///
/// 选择楼层
///
private Button selectFloorBtn;
///
/// 相同类型的设备列表
///
private Dictionary> typeDeviceDic;
///
/// 设备类型的图id
///
private Dictionary typeIdDic;
///
/// dList
///
private List devList;
///
/// sceneList
///
private List sceneList;
#endregion
#region ◆ 接口____________________________
///
/// 该接口将弃用 改用DeviceInfoChange()
///
/// Common.
public void Changed(CommonDevice common)
{
}
///
/// Changeds the IL ogic status.
///
/// Logic.
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
{
}
///
/// Changeds the IS cene status.
///
/// Scene.
public void ChangedISceneStatus(Scene scene)
{
}
///
/// 设备状态更新接口
/// type:如果为 DeviceInComingRespon:设备新上报
/// type:如果为 IASInfoReport:RemoveDeviceRespon
/// type:如果为 DeviceStatusReport:设备上报
/// type:如果为 IASInfoReport:IAS安防信息上报
/// type:如果为 OnlineStatusChange: 设备在线状态更新
///
/// Common.
/// Type tag.
public void DeviceInfoChange(CommonDevice common, string typeTag)
{
//设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
if (typeTag == "DeviceStatusReport")
{
Application.RunOnMainThread(() =>
{
try
{
if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0)
{
return;
}
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
{
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
continue;
}
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
{
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
//开关功能
if (common.DeviceStatusReport.CluterID == 6)
{
var light = deviceUI.CommonDevice as ToggleLight;
light.DeviceStatusReport = common.DeviceStatusReport;
light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData;
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = light.OnOffStatus == 1;
row.SetStatuText(deviceUI.GetDeviceStatu());
light.LastDateTime = DateTime.Now;
}
if (common.DeviceStatusReport.CluterID == 3)
{
deviceUI.CommonDevice.IsOnline = 1;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
}
break;
case DeviceType.AirSwitch:
//开关功能
if (common.DeviceStatusReport.CluterID == 6)
{
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
airSwitch.DeviceStatusReport = common.DeviceStatusReport;
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = airSwitch.OnOffStatus == 1;
row.SetStatuText(deviceUI.GetDeviceStatu());
airSwitch.LastDateTime = DateTime.Now;
}
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;
}
if (common.DeviceStatusReport.AttriBute[0].AttributeId == 8)
{
var row = rowLayout.GetChildren(0) as CategoryFunctionForWinRow;
//窗帘百分比
var rollerShade = deviceUI.CommonDevice as Rollershade;
rollerShade.DeviceStatusReport = common.DeviceStatusReport;
rollerShade.WcdCurrentPositionLiftPercentage = common.DeviceStatusReport.AttriBute[0].AttriButeData;
row.SetStatuText($"{Language.StringByID(R.MyInternationalizationString.Current)} { deviceUI.GetDeviceStatu()}");
row.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage != 0;
rollerShade.LastDateTime = DateTime.Now;
}
}
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 attriButeList = common.DeviceStatusReport.AttriBute;
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.DeviceStatusReport = common.DeviceStatusReport;
foreach (var attList in attriButeList)
{
var curTemp = (attList.AttriButeData / 100 < ACControlBase.Temperature_High && attList.AttriButeData / 100 > ACControlBase.Temperature_Low) ? attList.AttriButeData / 100 : ACControlBase.Temperature_Default;
switch (attList.AttributeId)
{
case 0:
ac.currentLocalTemperature = curTemp;
ac.LastDateTime = DateTime.Now;
break;
case 17:
ac.currentCoolingSetpoint = curTemp;
ac.LastDateTime = DateTime.Now;
break;
case 18:
ac.currentHeatingSetpoint = curTemp;
ac.LastDateTime = DateTime.Now;
break;
case 4096:
ac.currentAutoSetpoint = curTemp;
ac.LastDateTime = DateTime.Now;
break;
case 28:
ac.currentSystemMode = attList.AttriButeData;
ac.LastDateTime = DateTime.Now;
break;
case 4097:
//过虑网清洗标志:42
ac.CleanStatu = attList.AttriButeData == 42;
break;
}
}
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = ac.currentSystemMode != 0;
row.SetStatuText(deviceUI.GetDeviceStatu());
}
if (common.DeviceStatusReport.CluterID == 514)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
var attriButeList = common.DeviceStatusReport.AttriBute;
ac.DeviceStatusReport = common.DeviceStatusReport;
foreach (var attList in attriButeList)
{
switch (attList.AttributeId)
{
case 0:
ac.currentFanMode = attList.AttriButeData;
ac.LastDateTime = DateTime.Now;
break;
case 4096:
ac.currentFanSwingMode = attList.AttriButeData;
ac.LastDateTime = DateTime.Now;
break;
}
}
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = ac.currentSystemMode != 0;
row.SetStatuText(deviceUI.GetDeviceStatu());
}
if (common.DeviceStatusReport.CluterID == 3)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.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;
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = dimmableLight.OnOffStatus == 1;
row.SetStatuText(deviceUI.GetDeviceStatu());
dimmableLight.LastDateTime = DateTime.Now;
}
if (common.DeviceStatusReport.CluterID == 8)
{
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
dimmableLight.Level = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = dimmableLight.OnOffStatus == 1;
row.SetStatuText(deviceUI.GetDeviceStatu());
dimmableLight.LastDateTime = DateTime.Now;
}
if (common.DeviceStatusReport.CluterID == 3)
{
deviceUI.CommonDevice.IsOnline = 1;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
}
break;
case DeviceType.TemperatureSensor:
//温度
if (common.DeviceStatusReport.CluterID == 1026)
{
var tempera = deviceUI.CommonDevice as TemperatureSensor;
foreach (var data in common.DeviceStatusReport.AttriBute)
{
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
{
if (data.AttriButeData == 0)
{
tempera.Temperatrue = 0;
}
else if (data.AttriButeData > 32767)
{
//负数(特殊处理)
string strValue = (data.AttriButeData - 65536).ToString();
//小数点需要一位
strValue = strValue.Substring(0, strValue.Length - 1);
tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
}
else
{
//小数点需要一位
string strValue = data.AttriButeData.ToString();
strValue = strValue.Substring(0, strValue.Length - 1);
tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
}
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.SetStatuText(deviceUI.GetDeviceStatu());
}
}
}
//湿度
if (common.DeviceStatusReport.CluterID == 1029)
{
var tempera = deviceUI.CommonDevice as TemperatureSensor;
foreach (var data in common.DeviceStatusReport.AttriBute)
{
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
{
if (data.AttriButeData == 0)
{
tempera.Humidity = 0;
}
else
{
//小数点需要一位(湿度没有负数)
string strValue = data.AttriButeData.ToString();
strValue = strValue.Substring(0, strValue.Length - 1);
tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
tempera.LastDateTime = DateTime.Now;
}
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.SetStatuText(deviceUI.GetDeviceStatu());
}
}
}
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
}
});
}
else if (typeTag == "OnlineStatusChange")
{
Application.RunOnMainThread(() =>
{
try
{
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
{
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
continue;
}
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
{
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
deviceUI.CommonDevice.IsOnline = common.IsOnline;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
break;
case DeviceType.AirSwitch:
deviceUI.CommonDevice.IsOnline = common.IsOnline;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
break;
case DeviceType.WindowCoveringDevice:
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
deviceUI.CommonDevice.IsOnline = common.IsOnline;
break;
case DeviceType.DimmableLight:
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
deviceUI.CommonDevice.IsOnline = common.IsOnline;
break;
case DeviceType.Thermostat:
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
deviceUI.CommonDevice.IsOnline = common.IsOnline;
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
}
});
}
else if (typeTag == "IASInfoReport")
{
Application.RunOnMainThread(() =>
{
try
{
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
{
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
var deviceUI = rowLayout.Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
continue;
}
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
{
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.IASZone:
//开关功能
var ias = common as IASZone;
var iAS = deviceUI.CommonDevice as ZigBee.Device.IASZone;
iAS.iASInfo = ias.iASInfo;
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
row.IsSelected = iAS.iASInfo?.Alarm1 == 1;
row.SetStatuText(deviceUI.GetDeviceStatu());
iAS.LastDateTime = DateTime.Now;
break;
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
}
});
}
}
#endregion
#region ◆ 初始化__________________________
///
/// Removes from parent.
///
public override void RemoveFromParent()
{
ZbGateway.StatusList.Remove(this);
RemoveAllUpdateControlDeviceStatuAction();
base.RemoveFromParent();
}
///
/// 构造方法
///
public Category()
{
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
instance = this;
ZbGateway.StatusList.Add(this);
}
///
/// 显示界面--默认场景界面
///
/// 选中那个界面 0--功能 1--场景 2--自动化
public void Show(int selectedBtn = 1)
{
InitData();
RemoveAll();
#region topview
var topView = new FrameLayout()
{
Y = Application.GetRealHeight(104),
Height = Application.GetRealHeight(low_High),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
};
this.AddChidren(topView);
var title = new Button()
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(95),
Width = Application.GetRealWidth(CommonFormResouce.TopTitle_Width),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterLeft,
TextID = R.MyInternationalizationString.Category,
TextSize = 24,
TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
IsBold = true
};
topView.AddChidren(title);
addBtn = new SelectedStatuButton()
{
X = Application.GetRealWidth(953),
Width = Application.GetMinRealAverage(104),
Height = Application.GetMinRealAverage(104),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Add_Category.png",
SelectedImagePath = "Item/Add_Category.png"
};
topView.AddChidren(addBtn);
#endregion
#region midFL
var midFL = new FrameLayout
{
Y = topView.Bottom,
Height = Application.GetRealHeight(1549),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
AddChidren(midFL);
var functionSceneAutoBG = new FrameLayout()
{
Height = Application.GetRealHeight(low_High),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
midFL.AddChidren(functionSceneAutoBG);
//场景
sceneBtn = new ButtonLineForm(CommonFormResouce.X_Left, 34);
functionSceneAutoBG.AddChidren(sceneBtn);
sceneBtn.Init();
sceneBtn.SetTitle(R.MyInternationalizationString.Scence);
//功能
functionBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 + 20, 34);
functionSceneAutoBG.AddChidren(functionBtn);
functionBtn.Init();
functionBtn.SetTitle(R.MyInternationalizationString.Function);
functionBtn.X = sceneBtn.Right;
//自动化
automationBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 * 2 + 20 + 50, 34);
automationBtn.Init();
automationBtn.SetTitle(R.MyInternationalizationString.Automation);
automationBtn.X = functionBtn.Right;
//隐藏自动化
if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3)
{
functionSceneAutoBG.AddChidren(automationBtn);
}
floorBtn = new Button()
{
X = Application.GetRealWidth(750),
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(60),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterRight,
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
TextSize = 14,
IsBold = true
};
selectFloorBtn = new Button()
{
X = Application.GetRealWidth(950),
Width = Application.GetMinRealAverage(69),
Height = Application.GetMinRealAverage(69),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Drop_Down.png"
};
if (Config.Instance.Home.FloorDics.Count > 0)
{
floorBtn.Text = Config.Instance.Home.GetCurrentFloorName;
functionSceneAutoBG.AddChidren(floorBtn);
functionSceneAutoBG.AddChidren(selectFloorBtn);
}
functionSceneAutoBodyView = new FrameLayout
{
Y = functionSceneAutoBG.Bottom,
Height = Application.GetRealHeight(1423),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
midFL.AddChidren(functionSceneAutoBodyView);
if (selectedBtn == 0)
{
addBtn.Visible = false;
functionBtn.IsSelected = true;
}
else if (selectedBtn == 1)
{
addBtn.Visible = true;
sceneBtn.IsSelected = true;
}
else if (selectedBtn == 2)
{
addBtn.Visible = true;
automationBtn.IsSelected = true;
}
RefreshBodyView();
#endregion
//绑定按钮事件
BindEvent();
}
#endregion
#region ◆ 切换/添加 功能、场景、自动化________
///
/// 绑定按钮的事件
///
private void BindEvent()
{
//选择功能分栏
functionBtn.NameBtn.MouseUpEventHandler += FunctionBtn_MouseUpEventHandler;
//选择场景分栏
sceneBtn.NameBtn.MouseUpEventHandler += SceneBtn_MouseUpEventHandler;
//选中自动化
automationBtn.NameBtn.MouseUpEventHandler += AutomationBtn_MouseUpEventHandler;
//右上角添加按钮
addBtn.MouseUpEventHandler += AddBtn_MouseUpEventHandler;
selectFloorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler;
floorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler;
}
///
/// 选择楼层
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void SelectedFloor_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
var floors = new SelectFloor();
AddChidren(floors);
floors.Init(580, 330, Direction.Right);
floors.changeFloor = true;
floors.FloorAction += (floorId) =>
{
floorBtn.Text = Config.Instance.Home.GetFloorNameById(floorId);
Common.Room.CurrentRoom = Common.Room.CurrentRoom.GetLoveRoom();
RefreshBodyView();
};
}
///
/// 选择功能分栏
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void FunctionBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
functionBtn.IsSelected = true;
sceneBtn.IsSelected = false;
automationBtn.IsSelected = false;
addBtn.Visible = false;
RefreshBodyView();
}
///
/// 选择场景分栏
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void SceneBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
functionBtn.IsSelected = false;
sceneBtn.IsSelected = true;
automationBtn.IsSelected = false;
addBtn.Visible = true;
RefreshBodyView();
}
///
/// 选中自动化
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void AutomationBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
Common.Logic.LogicDviceList.Clear();
if (Common.Logic.LogicDviceList.Count == 0)
{
Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray());
}
functionBtn.IsSelected = false;
sceneBtn.IsSelected = false;
automationBtn.IsSelected = true;
addBtn.Visible = true;
RefreshBodyView();
}
///
/// 右上角添加按钮事件
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void AddBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
{
if (functionBtn.IsSelected)
{
//功能
}
else if (sceneBtn.IsSelected)
{
//添加场景
Add_Scene();
}
else if (automationBtn.IsSelected)
{
//添加自动化
Add_Automation();
}
}
///
/// 添加场景
///
private void Add_Scene()
{
var scene = new CategoryAddScene();
UserView.HomePage.Instance.AddChidren(scene);
UserView.HomePage.Instance.PageIndex += 1;
scene.Show();
scene.AddAction = () =>
{
ShowScene();
};
}
///
/// 添加自动化
///
private void Add_Automation()
{
//new一个新逻辑对象;
Common.Logic.CurrentLogic = new Common.Logic();
Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1);
var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage();
UserView.HomePage.Instance.AddChidren(addLogicPage);
UserView.HomePage.Instance.PageIndex += 1;
addLogicPage.Show();
}
///
/// HidenFloor
///
///
private void HidenFloor(bool statu)
{
selectFloorBtn.Visible = !statu;
floorBtn.Visible = !statu;
}
#endregion
#region ◆ 刷新____________________________
///
/// 刷新bodyView
///
public void RefreshBodyView()
{
functionSceneAutoBodyView.RemoveAll();
if (functionBtn.IsSelected)
{
HidenFloor(false);
ShowFunction();
}
else if (sceneBtn.IsSelected)
{
HidenFloor(false);
ShowScene();
}
else if (automationBtn.IsSelected)
{
HidenFloor(true);
ShowAutotion();
}
}
///
/// InitData
///
private void InitData()
{
typeDeviceDic = new Dictionary> { };
typeIdDic = new Dictionary { };
}
///
/// RefreshData
///
private void RefreshData(Common.Room room)
{
devList = room.DeviceUIList;
sceneList = room.SceneUIList;
typeDeviceDic.Clear();
typeIdDic.Clear();
foreach (var device in devList)
{
var info = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device.CommonDevice);
if (info.BeloneType == DeviceBeloneType.A干接点 || info.BeloneType == DeviceBeloneType.A中继器)
{
continue;
}
if (typeDeviceDic.ContainsKey(info.BeloneTextId) == false)
{
var sameDevList = new List { };
sameDevList.Add(device);
typeDeviceDic[info.BeloneTextId] = sameDevList;
}
else
{
typeDeviceDic[info.BeloneTextId].Add(device);
}
typeIdDic[info.BeloneTextId] = info.ConcreteType;
}
}
#endregion
#region ◆ 功能____________________________
///
/// 功能
///
public void ShowFunction()
{
AddRoomView();
}
///
/// 提示没有功能
///
private void ShowNoFunctionTip()
{
var noFunction = new Button()
{
Y = Application.GetRealHeight(320),
Width = Application.GetMinRealAverage(757),
Height = Application.GetMinRealAverage(435),
UnSelectedImagePath = "Item/NoFunction.png",
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noFunction);
var noFunctionTip = new Button()
{
Y = noFunction.Bottom + Application.GetRealHeight(32),
Height = Application.GetRealHeight(200),
Width = Application.GetRealWidth(700),
Gravity = Gravity.CenterHorizontal,
Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}", "\r\n"),
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
IsMoreLines = true
};
functionSceneBodyView.AddChidren(noFunctionTip);
}
///
/// RefreshFunction
///
///
private void RefreshFunction(Common.Room room)
{
RefreshData(room);
//移除监听
RemoveAllUpdateControlDeviceStatuAction();
functionSceneBodyView.RemoveAll();
if (typeDeviceDic.Count == 0)
{
ShowNoFunctionTip();
}
else
{
var functionTypeView1 = new FrameLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(160),
Width = Application.GetRealWidth(1028),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
functionSceneBodyView.AddChidren(functionTypeView1);
functionTypeView1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
var functionTypeView2 = new FrameLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Y = Application.GetRealHeight(150),
Height = Application.GetRealHeight(279 - 150),
Width = Application.GetRealWidth(1028),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
functionSceneBodyView.AddChidren(functionTypeView2);
functionTypeView2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
functionTypeScrowView = new HorizontalScrolViewLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(279),
Width = Application.GetRealWidth(1028),
};
functionSceneBodyView.AddChidren(functionTypeScrowView);
deviceListScrolView = new VerticalScrolViewLayout
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Y = Application.GetRealHeight(35 + 279),
Width = Application.GetRealWidth(1028),
Height = Application.GetRealHeight(942),
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
};
functionSceneBodyView.AddChidren(deviceListScrolView);
deviceListScrolView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
tempFunctionTypeBtn = new FunctionButton();
tempFunctionTypeBtn.Init("", "");
foreach (var deviceType in typeIdDic)
{
var typeRowLayout = new FrameLayout()
{
Width = Application.GetRealWidth(220),
};
functionTypeScrowView.AddChidren(typeRowLayout);
var functionTypeIMG = new FunctionButton()
{
Tag = deviceType.Key
};
string imgPath = string.Empty;
string imgSeletedPath = string.Empty;
Common.LocalDevice.Current.GetDeviceObjectIcon(deviceType.Value, ref imgPath, ref imgSeletedPath);
functionTypeIMG.Init(imgPath, imgSeletedPath);
functionTypeIMG.SetTitle(deviceType.Key);
typeRowLayout.AddChidren(functionTypeIMG);
functionTypeIMG.ClickBtn.MouseUpEventHandler += ShowSameTypeFunction;
if (functionTypeScrowView.ChildrenCount == 1)
{
ShowSameTypeFunction(functionTypeIMG.ImageBtn, null);
}
}
}
}
///
/// 显示相同类型的功能
///
/// typeSender.
/// The ${ParameterType} instance containing the event data.
private void ShowSameTypeFunction(object typeSender, MouseEventArgs mouseEventArgs)
{
tempFunctionTypeBtn.IsSelected = false;
tempFunctionTypeBtn = (typeSender as Button).Parent as FunctionButton;
((typeSender as Button).Parent as FunctionButton).IsSelected = true;
deviceListScrolView.RemoveAll();
var sameTypeList = new List { };
sameTypeList = typeDeviceDic[int.Parse((typeSender as Button).Tag.ToString())];
for (int i = 0; i < sameTypeList.Count; i++)
{
var deviceUI = sameTypeList[i];
new System.Threading.Thread(() =>
{
Application.RunOnMainThread(() =>
{
try
{
var deviceTypeRowLayout = new RowLayout()
{
Height = Application.GetRealHeight(127 + 35),
LineColor = ZigbeeColor.Current.GXCClearColor,
Tag = deviceUI,
SubViewWidth=Application.GetRealWidth(184)
};
deviceListScrolView.AddChidren(deviceTypeRowLayout);
if (deviceUI.CommonDevice.Type == DeviceType.OnOffOutput)
{
//灯
var light = deviceUI.CommonDevice as ToggleLight;
if (light.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (light.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(light, () =>
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI.CommonDevice);
});
}
else
{
//防止短时间内多次读取状态
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = light.OnOffStatus == 1;
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
deviceRow.IsSelected = (send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
light.SwitchControl(1);
}
else
{
light.SwitchControl(0);
}
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var lightControl = new Phone.Device.Light.OnOffControl();
UserView.HomePage.Instance.AddChidren(lightControl);
UserView.HomePage.Instance.PageIndex += 1;
lightControl.Show(deviceUI, Common.Room.CurrentRoom);
lightControl.action += (curDev, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.AirSwitch)
{
//空气开关
var airSwitch = deviceUI.CommonDevice as AirSwitch;
if (airSwitch.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (airSwitch.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(airSwitch, () =>
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI.CommonDevice);
});
}
else
{
if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.IsSelected = airSwitch.OnOffStatus == 1;
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
deviceRow.IsSelected = (send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
airSwitch.SwitchControl(1);
}
else
{
airSwitch.SwitchControl(0);
}
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var lightControl = new Phone.Device.Light.AirSwitchControl();
UserView.HomePage.Instance.AddChidren(lightControl);
UserView.HomePage.Instance.PageIndex += 1;
lightControl.Show(deviceUI, Common.Room.CurrentRoom);
lightControl.action += (curDev, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.DimmableLight)
{
//调光灯
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
if (dimmableLight.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (dimmableLight.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(dimmableLight, () =>
{
ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(deviceUI.CommonDevice);
});
}
else
{
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(deviceUI.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = dimmableLight.OnOffStatus == 1;
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
deviceRow.IsSelected = (send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
dimmableLight.SwitchControl(1);
}
else
{
dimmableLight.SwitchControl(0);
}
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var dimmableLightControl = new Phone.Device.Light.DimmableLightControl();
UserView.HomePage.Instance.AddChidren(dimmableLightControl);
UserView.HomePage.Instance.PageIndex += 1;
UserView.HomePage.Instance.ScrollEnabled = false;
dimmableLightControl.Show(deviceUI, Common.Room.CurrentRoom);
dimmableLightControl.action += (curDev, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.Thermostat)
{
//空调
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
if (ac.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (ac.Gateway.IsVirtual)
{
//发送读取状态命令
UserView.UserHomeView.ReadStatus(ac, () =>
{
ReadDeviceAttributeLogic.Instance.SendACStatuComand(deviceUI.CommonDevice);
});
}
else
{
//防止短时间内多次读取设备状态
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendACStatuComand(deviceUI.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = ac.currentSystemMode != 1;
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
{
zbGateway = deviceUI.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
deviceRow.IsSelected = (send2 as Button).IsSelected;
if ((send2 as Button).IsSelected)
{
ac.Open();
}
else
{
ac.Close();
}
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
//控制延时回调
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
};
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var acControl = new Phone.Device.AC.ACControl();
UserView.HomePage.Instance.AddChidren(acControl);
UserView.HomePage.Instance.PageIndex += 1;
UserView.HomePage.Instance.ScrollEnabled = false;
acControl.Show(deviceUI, Common.Room.CurrentRoom);
acControl.action += (curDev, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.WindowCoveringDevice)
{
//卷帘
var rollerShade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
if (rollerShade.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (rollerShade.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(rollerShade, () =>
{
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(deviceUI.CommonDevice);
});
}
else
{
//防止短时间内多次读取
if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(deviceUI.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionForWinRow(0, 35);
deviceRow.Init(deviceUI);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage != 0;
deviceRow.SetRollerShadeIcon(rollerShade.WcdType);
deviceTypeRowLayout.AddChidren(deviceRow);
if (rollerShade.WcdType == -1)
{
CommonPage.Loading.Start();
new System.Threading.Thread(() =>
{
Rollershade.ReadWcdTypeAction(rollerShade, () =>
{
Application.RunOnMainThread(() =>
{
deviceRow.SetRollerShadeIcon(rollerShade.WcdType);
CommonPage.Loading.Hide();
});
});
})
{ IsBackground = true }.Start();
}
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl();
UserView.HomePage.Instance.AddChidren(rollerShadeControl);
UserView.HomePage.Instance.PageIndex += 1;
UserView.HomePage.Instance.ScrollEnabled = false;
rollerShadeControl.Show(deviceUI, Common.Room.CurrentRoom);
rollerShadeControl.action += (curDev, curRoom) =>
{
ReFreshDeviceActionForWin(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceActionForWin(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.DoorLock)
{
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.HideSwitchBtn(true);
deviceTypeRowLayout.AddChidren(deviceRow);
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
{
var userDoorLockPage = new UserDoorLockPage(Common.Room.CurrentRoom, deviceUI);
HomePage.Instance.AddChidren(userDoorLockPage);
HomePage.Instance.PageIndex += 1;
userDoorLockPage.Show();
};
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.IASZone)
{
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = (deviceUI.CommonDevice as IASZone).iASInfo?.Alarm1 == 1;
deviceRow.HideSwitchBtn(true);
deviceTypeRowLayout.AddChidren(deviceRow);
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
else if (deviceUI.CommonDevice.Type == DeviceType.TemperatureSensor)
{
var tempera = deviceUI.CommonDevice as TemperatureSensor;
if (tempera.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (tempera.Gateway.IsVirtual)
{
UserHomeView.ReadStatus(tempera, () =>
{
if (tempera.SensorDiv == 1)
{
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(deviceUI.CommonDevice);
}
else if (tempera.SensorDiv == 2)
{
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(deviceUI.CommonDevice);
}
});
}
else
{
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - tempera.LastDateTime).TotalSeconds)
{
if (tempera.SensorDiv == 1)
{
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(deviceUI.CommonDevice);
}
else if (tempera.SensorDiv == 2)
{
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(deviceUI.CommonDevice);
}
}
}
})
{ IsBackground = true }.Start();
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.IsSelected = false;
deviceRow.HideSwitchBtn(true);
deviceTypeRowLayout.AddChidren(deviceRow);
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
}
else
{
var deviceRow = new CategoryFunctionRow(0, 35);
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
deviceRow.HideSwitchBtn(true);
deviceTypeRowLayout.AddChidren(deviceRow);
EventHandler deviceDetailHandler = (send2, e2) =>
{
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
UserView.HomePage.Instance.AddChidren(detailInfo);
UserView.HomePage.Instance.PageIndex += 1;
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
detailInfo.EditAction += (curDevice, curRoom) =>
{
ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow);
};
};
var editBtn = new CommonForm.RowLayoutEditButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(editBtn);
editBtn.MouseUpEventHandler += deviceDetailHandler;
}
}
//删除设备
EventHandler delEvent = (delSender, delE) =>
{
var alert = new UserCenter.ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.DeleteFunction));
alert.Show();
alert.ConfirmClickEvent += () =>
{
if (Common.Room.CurrentRoom.IsLove)
{
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.FileName);
deviceListScrolView.RemoveViewByTag((delSender as Button).Tag);
sameTypeList.Remove(deviceUI);
}
else
{
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.CommonDevice);
deviceListScrolView.RemoveViewByTag((delSender as Button).Tag);
sameTypeList.Remove(deviceUI);
if (Common.Room.CurrentRoom.GetLoveRoom().DeviceUIList.Find((obj) => obj.FileName == deviceUI.FileName) != null)
{
Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(deviceUI.FileName);
}
}
if (sameTypeList.Count == 0)
{
RefreshBodyView();
}
};
};
var delBtn = new CommonForm.RowLayoutDeleteButton()
{
Tag = deviceUI
};
if (Common.Room.CurrentRoom.IsSharedRoom == false)
{
deviceTypeRowLayout.AddRightView(delBtn);
delBtn.MouseUpEventHandler += delEvent;
}
}
catch { }
});
})
{ IsBackground = true }.Start();
}
}
///
/// ReFreshDeviceAction
///
///
///
///
///
private void ReFreshDeviceAction(DeviceUI deviceUI, Common.Room curRoom, List sameTypeList, VerticalScrolViewLayout devListScrolView, CategoryFunctionRow deviceRow)
{
if (Common.Room.CurrentRoom.IsLove)
{
deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
if (Common.Room.CurrentRoom.IsCollectInRoom(deviceUI.FileName) == false)
{
devListScrolView.RemoveViewByTag(deviceUI);
sameTypeList.Remove(deviceUI);
if (sameTypeList.Count == 0)
{
RefreshFunction(Common.Room.CurrentRoom);
}
}
}
else
{
if (curRoom.Id != Common.Room.CurrentRoom.Id)
{
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.FileName);
devListScrolView.RemoveViewByTag(deviceUI);
sameTypeList.Remove(deviceUI);
if (sameTypeList.Count == 0)
{
RefreshFunction(Common.Room.CurrentRoom);
}
}
else
{
deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
}
}
}
///
/// ReFreshDeviceAction
///
///
///
///
///
private void ReFreshDeviceActionForWin(DeviceUI deviceUI, Common.Room curRoom, List sameTypeList, VerticalScrolViewLayout devListScrolView, CategoryFunctionForWinRow deviceRow)
{
if (Common.Room.CurrentRoom.IsLove)
{
deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
if (Common.Room.CurrentRoom.IsCollectInRoom(deviceUI.FileName) == false)
{
devListScrolView.RemoveViewByTag(deviceUI);
sameTypeList.Remove(deviceUI);
if (sameTypeList.Count == 0)
{
RefreshFunction(Common.Room.CurrentRoom);
}
}
}
else
{
if (curRoom.Id != Common.Room.CurrentRoom.Id)
{
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.FileName);
devListScrolView.RemoveViewByTag(deviceUI);
sameTypeList.Remove(deviceUI);
if (sameTypeList.Count == 0)
{
RefreshFunction(Common.Room.CurrentRoom);
}
}
else
{
deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath);
deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI.CommonDevice));
}
}
}
///
/// AddRoomView
///
private void AddRoomView()
{
var roomFL = new HorizontalScrolViewLayout()
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Height = Application.GetRealHeight(170),
Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonFormResouce.X_Left),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
functionSceneAutoBodyView.AddChidren(roomFL);
//功能和场景bodyView
functionSceneBodyView = new FrameLayout()
{
Y = roomFL.Bottom,
Height = Application.GetRealHeight(973 + 279),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
functionSceneAutoBodyView.AddChidren(functionSceneBodyView);
RoomButton curBtn = new RoomButton(0, 0);
foreach (var room in Common.Room.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom())
{
var row = new FrameLayout()
{
Width = Application.GetRealWidth(255),
Height = Application.GetRealHeight(167)
};
roomFL.AddChidren(row);
RoomButton roomBtn = new RoomButton(0, 0);
roomBtn.Gravity = Gravity.Center;
roomBtn.Init();
roomBtn.SetTitle(room.Name);
row.AddChidren(roomBtn);
if (room.Id == Common.Room.CurrentRoom.Id)
{
roomBtn.IsSelected = true;
curBtn = roomBtn;
if (sceneBtn.IsSelected)
{
RefreshScene(room);
}
else
{
RefreshFunction(room);
}
}
roomBtn.ButtonClickEvent += (sender, e) =>
{
if (sender == curBtn)
{
return;
}
sender.IsSelected = true;
curBtn.IsSelected = false;
curBtn = sender;
Common.Room.CurrentRoom = room;
if (sceneBtn.IsSelected)
{
RefreshScene(room);
}
else
{
RefreshFunction(room);
}
};
}
}
#endregion
#region ◆ 场景____________________________
///
/// 选择场景--所有房间的所有场景
///
public void ShowScene()
{
AddRoomView();
}
///
/// RefreshScene
///
///
public void RefreshScene(Common.Room room)
{
RefreshData(room);
functionSceneBodyView.RemoveAll();
if (sceneList.Count == 0)
{
ShowNoSceneTip();
}
else
{
var sceneScrolView = new VerticalScrolViewLayout { };
functionSceneBodyView.AddChidren(sceneScrolView);
foreach (var scene in sceneList)
{
var sceneView = new SceneCategoryView(0, 0);
sceneScrolView.AddChidren(sceneView);
sceneView.Init(scene, room);
GetDelayScene(sceneScrolView);
}
}
}
///
/// 显示没有场景
///
private void ShowNoSceneTip()
{
var noFunction = new Button()
{
Y = Application.GetRealHeight(320),
Width = Application.GetMinRealAverage(757),
Height = Application.GetMinRealAverage(435),
UnSelectedImagePath = "Item/NoFunction.png",
Gravity = Gravity.CenterHorizontal
};
functionSceneBodyView.AddChidren(noFunction);
var noScenceTip = new Button()
{
Y = noFunction.Bottom + Application.GetRealHeight(32),
Height = Application.GetRealHeight(200),
Width = Application.GetRealWidth(700),
Gravity = Gravity.CenterHorizontal,
Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}", "\r\n"),
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
TextAlignment = TextAlignment.Center,
IsMoreLines = true
};
functionSceneBodyView.AddChidren(noScenceTip);
}
///
/// GetDelayScene
///
///
private async void GetDelayScene(VerticalScrolViewLayout scrolViewLayout)
{
var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync();
if (catDelaySceneResponseAllData == null)
{
return;
}
var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData;
if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0)
{
return;
}
var delayList = catDelaySceneResponseData.DelayScenesList;
for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++)
{
var sceneView = scrolViewLayout.GetChildren(i) as SceneCategoryView;
foreach (var delayScenesListResponseInfo in delayList)
{
if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id)
{
sceneView.scene.RemainTime = delayScenesListResponseInfo.RemainTime;
var remainTime = delayScenesListResponseInfo.RemainTime;
if (remainTime > 0)
{
new System.Threading.Thread(() =>
{
while (remainTime-- > 0)
{
System.Threading.Thread.Sleep(1000);
Application.RunOnMainThread(() =>
{
sceneView.SetTimeText(CommonFormResouce.GetTimeString(remainTime));
});
}
Application.RunOnMainThread(() =>
{
sceneView.scene.RemainTime = 0;
sceneView.SetTimeImage();
});
})
{ IsBackground = true }.Start();
}
break;
}
}
}
}
///
/// GetExecScene
///
///
private void GetExecScene(VerticalScrolViewLayout scrolViewLayout)
{
new System.Threading.Thread(() =>
{
})
{ IsBackground = true }.Start();
}
#endregion
#region ◆ 自动化__________________________
///
/// 自动化
///
private async void ShowAutotion()
{
functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
var bjFrameLayout = new FrameLayout
{
Width = Application.GetRealWidth(1080 - 58),
Height = Application.GetRealHeight(170),
BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
X = Application.GetRealWidth(58),
//Radius = (uint)Application.GetRealHeight(50),
Y = Application.GetRealHeight(30),
};
functionSceneAutoBodyView.AddChidren(bjFrameLayout);
bjFrameLayout.SetCornerWithSameRadius(25, HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerBottomLeft);
var sigBtn = new Button
{
Width = Application.GetMinRealAverage(84),
Height = Application.GetMinRealAverage(84),
UnSelectedImagePath = "ZigeeLogic/sign.png",
X = Application.GetRealWidth(58),
Gravity = Gravity.CenterVertical,
};
bjFrameLayout.AddChidren(sigBtn);
var recommendtextBtn = new Button
{
Width = Application.GetMinRealAverage(300),
Height = Application.GetMinRealAverage(84),
X = sigBtn.Right + Application.GetRealWidth(35),
TextAlignment = TextAlignment.CenterLeft,
//Text = "推荐模板",
TextID = MyInternationalizationString.logictemplate,
Gravity = Gravity.CenterVertical,
TextColor = ZigbeeColor.Current.LogicBtnSelectedColor,
TextSize = 15,
};
bjFrameLayout.AddChidren(recommendtextBtn);
var recommendswitchBtn = new Button
{
Width = Application.GetMinRealAverage(104),
Height = Application.GetMinRealAverage(63),
UnSelectedImagePath = "ZigeeLogic/logicclose.png",
SelectedImagePath = "ZigeeLogic/logicopen.png",
X = bjFrameLayout.Width - Application.GetRealWidth(104 + 58),
Gravity = Gravity.CenterVertical,
};
bjFrameLayout.AddChidren(recommendswitchBtn);
var scenehorizontalScrol = new HorizontalScrolViewLayout
{
Width = Application.GetRealWidth(1080 - 58),
X = Application.GetRealWidth(58),
Y = bjFrameLayout.Bottom + Application.GetRealHeight(30),
Height = Application.GetRealHeight(0),
};
functionSceneAutoBodyView.AddChidren(scenehorizontalScrol);
var logicScrolView = new VerticalScrolViewLayout
{
Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30),
BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
X = Application.GetRealWidth(58),
//Radius = (uint)Application.GetRealHeight(50),
Y = scenehorizontalScrol.Bottom,
};
functionSceneAutoBodyView.AddChidren(logicScrolView);
logicScrolView.SetCornerWithSameRadius(20, HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerBottomLeft);
recommendswitchBtn.MouseUpEventHandler += (sender, e) =>
{
int Yheight = 0;
recommendswitchBtn.IsSelected = !recommendswitchBtn.IsSelected;
scenehorizontalScrol.RemoveAll();
if (recommendswitchBtn.IsSelected)
{
scenehorizontalScrol.Height = Application.GetRealHeight(246);
Yheight = 20;
for (int i = 1; i < 4; i++)
{
var frameLayout = new FrameLayout
{
Width = Application.GetMinRealAverage(369 + 46),
Height = Application.GetMinRealAverage(246),
};
scenehorizontalScrol.AddChidren(frameLayout);
var logiciocnBtn = new Button
{
Width = Application.GetMinRealAverage(369),
Height = Application.GetMinRealAverage(246),
UnSelectedImagePath = "ZigeeLogic/" + i + ".png",
Tag = i,
};
frameLayout.AddChidren(logiciocnBtn);
var logicnameBtn = new Button
{
Width = Application.GetMinRealAverage(250),
Height = Application.GetMinRealAverage(80),
X = Application.GetRealWidth(23),
Y = Application.GetRealHeight(246 - 23 - 80),
TextAlignment = TextAlignment.CenterLeft,
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
TextSize = 14,
};
frameLayout.AddChidren(logicnameBtn);
if (i == 1)
{
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.onlight);
}
else if (i == 2)
{
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.offlight);
}
else if (i == 3)
{
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.automation1);
}
EventHandler iconclick = (sender1, e1) =>
{
Common.Logic.CurrentLogic = new Common.Logic();
Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
if (logiciocnBtn.Tag.ToString() == "3")
{
Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;
Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext);
var addLogicPage = new Logic.AddLogicPage();
HomePage.Instance.AddChidren(addLogicPage);
HomePage.Instance.PageIndex += 1;
addLogicPage.Show();
}
else
{
Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;
Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext);
Logic.TemplatePage templatePage = new Logic.TemplatePage();
Logic.TemplatePage.s = logiciocnBtn.Tag.ToString();
HomePage.Instance.AddChidren(templatePage);
HomePage.Instance.PageIndex += 1;
templatePage.Show();
}
};
logiciocnBtn.MouseUpEventHandler += iconclick;
logicnameBtn.MouseUpEventHandler += iconclick;
}
}
else
{
scenehorizontalScrol.Height = Application.GetRealHeight(0);
Yheight = 0;
}
logicScrolView.Y = scenehorizontalScrol.Bottom + Yheight;
logicScrolView.Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30) - Yheight;
Automationview(logicScrolView);
};
CommonPage.Loading.Start();
if (Common.Logic.LogicList.Count == 0)
{
var Idlist = await Logic.Send.GetLogicId(0);
if (Idlist.Count != 0)
{
var listlogic = await Logic.Send.ReadList(Idlist.Count, 0);
//foreach可能集合已被修改,枚举操作可能不会执行,可能出现崩溃(建议for)。
for (int j = 0; j < listlogic.Count; j++)
{
var logic = listlogic[j];
if (logic.LogicType != 0)
{
continue;
}
Common.Logic.LogicList.Add(logic);
}
}
}
//自动化
Automationview(logicScrolView);
CommonPage.Loading.Hide();
}
///
/// 自动化列表界面
///
/// Refresview.
private async void Automationview(VerticalScrolViewLayout refresview)
{
refresview.RemoveAll();
foreach (var logic in Common.Logic.LogicList)
{
var logicRowlayout = new RowLayout
{
Height = Application.GetRealHeight(190 + 30),
Width = Application.GetRealWidth(1080),
LineColor = ZigbeeColor.Current.LogicBackgroundColor,
BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
};
refresview.AddChidren(logicRowlayout);
var logicnameBtn = new Button
{
Height = Application.GetRealHeight(58),
Width = Application.GetRealWidth(350),
Text = logic.LogicName,
X = Application.GetRealWidth(12 + 46),
Y = Application.GetRealHeight(30),
TextAlignment = TextAlignment.CenterLeft,
TextColor = ZigbeeColor.Current.LogicTextBlackColor,
TextSize = 14,
};
logicRowlayout.AddChidren(logicnameBtn);
var logicswitchBtn = new Button
{
Width = Application.GetMinRealAverage(104),
Height = Application.GetMinRealAverage(63),
UnSelectedImagePath = "ZigeeLogic/logicclose.png",
SelectedImagePath = "ZigeeLogic/logicopen.png",
X = logicRowlayout.Width - Application.GetRealWidth(104 + 58 + 58),
Y = Application.GetRealHeight(58 + 30 + 9 + 30),
};
logicRowlayout.AddChidren(logicswitchBtn);
logicswitchBtn.MouseUpEventHandler += (sender1, e1) =>
{
logicswitchBtn.IsSelected = !logicswitchBtn.IsSelected;
if (logicswitchBtn.IsSelected)
{
//逻辑开
logic.IsEnable = 1;
StatusColor(logic, logicRowlayout, 1);
}
else
{
//逻辑关
logic.IsEnable = 0;
StatusColor(logic, logicRowlayout, 0);
}
Logic.Send.LogicControlSwitch(logic);
//Logic.Send.AddModifyLogic(logic);
};
if (logic.IsEnable == 1)
{
logicswitchBtn.IsSelected = true;
StatusColor(logic, logicRowlayout, 1);
}
else if (logic.IsEnable == 0)
{
logicswitchBtn.IsSelected = false;
StatusColor(logic, logicRowlayout, 0);
}
///编辑
var edit = new Button
{
BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1,
Text = Language.StringByID(MyInternationalizationString.edit),
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
};
logicRowlayout.AddRightView(edit);
edit.MouseUpEventHandler += (sender, e) =>
{
Common.Logic.CurrentLogic = logic;
var logicCommunalPage = new Logic.LogicCommunalPage();
HomePage.Instance.AddChidren(logicCommunalPage);
HomePage.Instance.PageIndex += 1;
logicCommunalPage.Show(() => { logicnameBtn.Text = logic.LogicName; Automationview(refresview); });
};
///删除
var del = new Button
{
BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1,
Text = Language.StringByID(MyInternationalizationString.del),
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
};
logicRowlayout.AddRightView(del);
del.MouseUpEventHandler += (sender, e) =>
{
var alert = new Alert(Language.StringByID(MyInternationalizationString.tip), Language.StringByID(MyInternationalizationString.doyouwanttodelete),
Language.StringByID(MyInternationalizationString.cancel), Language.StringByID(MyInternationalizationString.confrim));
alert.ResultEventHandler += (sender1, e1) =>
{
if (e1)
{
Common.Logic.LogicList.Remove(logic);
Automationview(refresview);
Logic.Send.DelLogic(logic.LogicId);
}
};
alert.Show();
};
var line = new Button
{
Y = Application.GetRealHeight(215),
Height = Application.GetRealHeight(5),
Width = Application.GetRealWidth(1080 - 58),
BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor,
X = Application.GetRealWidth(58),
};
logicRowlayout.AddChidren(line);
}
}
///
/// 显示图标的颜色
///
///
///
///
private void StatusColor(Common.Logic logic, RowLayout logicRowlayout, int intvalue)
{
var logictimeBtn = new Button
{
Height = Application.GetRealHeight(58),
Width = logicRowlayout.Width - Application.GetRealWidth(58 + 12 + 350 + 58),
Y = Application.GetRealHeight(30),
X = Application.GetRealWidth(365),
TextAlignment = TextAlignment.CenterRight,
TextColor = ZigbeeColor.Current.LogicListWeekTextColor,
};
logicRowlayout.AddChidren(logictimeBtn);
///显示执行周期
switch (logic.TimeAttribute.Repeat)
{
///0:只执行一次,执行后IsEnable值置;1,今年内执行;2:每天执行;3:每月执行;4:每年执行;5:周重复。
case 0:
{
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.executeonce);
}; break;
case 1: { }; break;
case 2:
{
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyday);
}; break;
case 3:
{
string len = "", value = "";
var stringvalue = Convert.ToString(logic.TimeAttribute.MonthDate, 2);
var str = stringvalue.Insert(0, new string('0', 32 - stringvalue.Length));
for (int j = 31; j >= 0; j--)
{
len += str.Substring(j, 1);
}
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
value += (j + 1).ToString() + ",";
}
}
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.monthly) + value.TrimEnd(',') + Language.StringByID(MyInternationalizationString.day);
}; break;
case 4:
{
Dictionary dictionary = new Dictionary();
///找出执行的月份和天数
if (logic.TimeAttribute.SelectMonDate.Count != 0)
{
for (int i = 0; i < logic.TimeAttribute.SelectMonDate.Count; i++)
{
var dayvalue = logic.TimeAttribute.SelectMonDate[i];
if (dayvalue != 0)
{
dictionary.Add(i + 1, dayvalue);
}
}
}
if (dictionary.Count != 0 && dictionary.Count == 1)
{
string len = "", leng = "";
int minvalue = 0, Maximum = 0;
foreach (var value in dictionary)
{
///取出月份
var month = value.Key;
///取出日数
var day = value.Value;
var maxvalue = Convert.ToString(day, 2);
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
for (int j = 31; j >= 0; j--)
{
len += str.Substring(j, 1);
}
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
minvalue = j + 1;
break;
}
}
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
Maximum = j + 1;
}
}
if (month.ToString().Length < 2)
{
leng = "0" + month.ToString();
}
else
{
leng = month.ToString();
}
if (minvalue == Maximum)
{
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString());
}
else
{
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-" + leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
}
}
}
else
{
int b = 0;
string stringtext = "";
foreach (var value in dictionary)
{
string len = "", leng = "";
int minvalue = 0, Maximum = 0;
///取出月份
var month = value.Key;
///取出日数
var day = value.Value;
var maxvalue = Convert.ToString(day, 2);
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
for (int j = 31; j >= 0; j--)
{
len += str.Substring(j, 1);
}
if (month.ToString().Length < 2)
{
leng = "0" + month.ToString();
}
else
{
leng = month.ToString();
}
if (b == 0)
{
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
minvalue = j + 1;
break;
}
}
stringtext += leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-";
}
if (b == dictionary.Count - 1)
{
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
Maximum = j + 1;
}
}
stringtext += leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
}
b++;
}
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + stringtext;
}
}; break;
case 5:
{
string len = "", text = "";
List listvalueInt = new List();
listvalueInt.Clear();
var maxvalue = Convert.ToString(logic.TimeAttribute.WeekDay, 2);
var str = maxvalue.Insert(0, new string('0', 8 - maxvalue.Length));
for (int j = 7; j >= 0; j--)
{
len += str.Substring(j, 1);
}
for (int j = 0; j < len.Length; j++)
{
var strvalue = len.Substring(j, 1);
if (strvalue == "1")
{
listvalueInt.Add(j + 1);
if ((j + 1) == 1)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.mon1) + ",";
//text += Language.StringByID(MyInternationalizationString.mon) + ",";
}
else if ((j + 1) == 2)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.tue1) + ",";
//text += Language.StringByID(MyInternationalizationString.tue) + ",";
}
else if ((j + 1) == 3)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.wed1) + ",";
//text += Language.StringByID(MyInternationalizationString.wed) + ",";
}
else if ((j + 1) == 4)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.thu1) + ",";
//text += Language.StringByID(MyInternationalizationString.thu) + ",";
}
else if ((j + 1) == 5)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.frl1) + ",";
//text += Language.StringByID(MyInternationalizationString.frl) + ",";
}
else if ((j + 1) == 6)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sat1) + ",";
//text += Language.StringByID(MyInternationalizationString.sat) + ",";
}
else if ((j + 1) == 7)
{
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sun1) + ",";
//text += Language.StringByID(MyInternationalizationString.sun) + ",";
}
}
}
//暂时隐藏掉,需要显示周末和工作日再放开;
//if (listvalueInt.Count == 5 && !listvalueInt.Contains(6) && !listvalueInt.Contains(7))
//{
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.workingday);
//}
//else if (listvalueInt.Count == 2 && listvalueInt.Contains(6) && listvalueInt.Contains(7))
//{
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.weekend);
//}
//else if (listvalueInt.Count == 7)
//{
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyday);
//}
//else
//{
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(',');
//}
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(',');
//btndisplaycycle.Text = text.TrimEnd(',');
}; break;
}
List indexlist = new List();
List iconIndexlist = new List();
for (int i = 0; i < logic.Actions.Count; i++)
{
var linkType = logic.Actions[i]["LinkType"].ToString();
var d = indexlist.Find((value) => { return value == linkType; });
if (d == null)
{
indexlist.Add(linkType);
}
}
if (indexlist.Contains("0"))
{
iconIndexlist.Add("0");
}
if (indexlist.Contains("2"))
{
iconIndexlist.Add("2");
}
if (indexlist.Contains("6"))
{
iconIndexlist.Add("6");
}
if (indexlist.Contains("7"))
{
iconIndexlist.Add("7");
}
for (int i = 0; i < iconIndexlist.Count; i++)
{
var iconindex = iconIndexlist[i];
var typebjBtn = new FrameLayout
{
Width = Application.GetRealWidth(82),
Height = Application.GetRealHeight(82),
X = Application.GetRealWidth(58) + Application.GetRealWidth(12 + (12 + 82 + 45 + 12) * i),
Y = Application.GetRealHeight(58 + 30 + 30),
Radius = (uint)Application.GetRealHeight(41),
BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
};
logicRowlayout.AddChidren(typebjBtn);
var typeIconBtn = new Button
{
Width = Application.GetRealWidth(58),
Height = Application.GetRealHeight(58),
Gravity = Gravity.Center,
};
typebjBtn.AddChidren(typeIconBtn);
var connectIconBtn = new Button
{
Y = typebjBtn.Y + Application.GetRealHeight(35),
X = Application.GetRealWidth(58) + Application.GetRealWidth((12 + 82 + 12) + (12 + 45 + 82 + 12) * i),
Width = Application.GetRealWidth(48),
Height = Application.GetRealHeight(15),
UnSelectedImagePath = "ZigeeLogic/connect.png",
};
logicRowlayout.AddChidren(connectIconBtn);
if (iconIndexlist.Count - 1 == i)
{
connectIconBtn.Visible = false;
}
switch (iconindex)
{
case "0":
{
if (intvalue == 1)
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/function1.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicFunction1Color;
}
else
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
}
}
break;
case "2":
{
if (intvalue == 1)
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/scene1.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicScene1Color;
}
else
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/noscene.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
}
}
break;
case "6":
{
if (intvalue == 1)
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/security1.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicSecurity1Color;
}
else
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nosecurity.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
}
}
break;
case "7":
{
if (intvalue == 1)
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/delay1.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicDelay1Color;
}
else
{
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nodelay.png";
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
}
}
break;
}
}
}
#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
}
}