using System;
|
using System.Collections.Generic;
|
using Shared.Common;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserView
|
{
|
/// <summary>
|
/// User page.
|
/// </summary>
|
public class UserPage : FrameLayout,ZigBee.Common.IStatus
|
{
|
#region ◆ 变量_______________________
|
/// <summary>
|
/// The user menu page.
|
/// </summary>
|
static UserPage userMenuPage;
|
/// <summary>
|
/// 底部单独菜单的宽度-360
|
/// </summary>
|
private static readonly int tabBarEnum_Width = CommonPage.AppRealWidth / 3;
|
/// <summary>
|
/// 底部按钮图片的高度-110
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Height = 110;
|
/// <summary>
|
/// 底部按钮图片的宽度-110
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Width = 110;
|
/// <summary>
|
/// 底部按钮图片的Y值 -5
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Y = 5;
|
/// <summary>
|
/// 底部按钮文字的高度 -50
|
/// </summary>
|
private static readonly int tabBarEnumName_Height = 50;
|
/// <summary>
|
/// 底部按钮文字的Y值 100
|
/// </summary>
|
private static readonly int tabBarEnumName_Y = tabBarEnumIMG_Height - 10;
|
#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")
|
{
|
try
|
{
|
for (int i = 0; i < Room.AllRoomDeviceUIList.Count; i++)
|
{
|
var deviceUI = Room.AllRoomDeviceUIList[i];
|
if (deviceUI.CommonDevice == null)
|
{
|
//设备为空
|
continue;
|
}
|
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
|
{
|
//判断是否为当前设备
|
continue;
|
}
|
switch (deviceUI.CommonDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
//开关功能
|
if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 6)
|
{
|
var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
|
onOffOutputLight.DeviceStatusReport = (common as ZigBee.Device.ToggleLight).DeviceStatusReport;
|
//记录、更新状态
|
if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
continue;
|
}
|
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
//记录回复时间
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 3)
|
{
|
var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
|
onOffOutputLight.IsOnline = 1;
|
//记录回复时间
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.AirSwitch:
|
//开关功能
|
if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 6)
|
{
|
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
|
airSwitch.DeviceStatusReport = (common as ZigBee.Device.AirSwitch).DeviceStatusReport;
|
//记录、更新状态
|
if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
|
//记录回复时间
|
airSwitch.LastDateTime = DateTime.Now;
|
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 3)
|
{
|
var airSwitch = deviceUI.CommonDevice as AirSwitch;
|
airSwitch.IsOnline = 1;
|
//记录回复时间
|
airSwitch.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.WindowCoveringDevice:
|
if ((common as ZigBee.Device.Rollershade).DeviceStatusReport.CluterID == 3)
|
{
|
var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
|
rollershade.IsOnline = 1;
|
//记录回复时间
|
rollershade.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.Thermostat:
|
//AC功能
|
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 513)
|
{
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
ac.DeviceStatusReport = (common as ZigBee.Device.AC).DeviceStatusReport;
|
var attriButeList = ac.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
continue;
|
}
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 17:
|
//此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
|
ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 18:
|
//此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
|
ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 28:
|
//此属性描述恒温设备正处于哪种模式
|
//Off = 0 Auto = 1 Cool = 3 Heat = 4 FanOnly = 7 Dry = 8
|
ac.currentSystemMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
}
|
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 3)
|
{
|
var ac = deviceUI.CommonDevice as AC;
|
ac.IsOnline = 1;
|
//记录回复时间
|
ac.LastDateTime = DateTime.Now;
|
|
}
|
break;
|
|
case DeviceType.DimmableLight:
|
//调光灯功能
|
//开关功能
|
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 6)
|
{
|
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
|
dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport;
|
//记录、更新状态
|
if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
//记录回复时间
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
//亮度
|
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 8)
|
{
|
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
|
dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport;
|
var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
continue;
|
}
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
//此属性表明当前亮度程度
|
dimmableLight.Level = attriButeList[0].AttriButeData;
|
dimmableLight.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 3)
|
{
|
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
|
dimmableLight.IsOnline = 1;
|
//记录回复时间
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"Error:{ex.Message}");
|
}
|
}
|
//设备在线状态上报
|
else if (typeTag == "OnlineStatusChange")
|
{
|
try
|
{
|
for (int i = 0; i < Room.AllRoomDeviceUIList.Count; i++)
|
{
|
var deviceUI = Room.AllRoomDeviceUIList[i];
|
if (deviceUI.CommonDevice == null)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
|
{
|
//判断是否为当前设备
|
continue;
|
}
|
switch (deviceUI.CommonDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
|
onOffOutputLight.IsOnline = (common as ToggleLight).IsOnline;
|
//记录回复时间
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.AirSwitch:
|
var airSwitch = deviceUI.CommonDevice as AirSwitch;
|
airSwitch.IsOnline = (common as AirSwitch).IsOnline;
|
//记录回复时间
|
airSwitch.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.WindowCoveringDevice:
|
var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
|
rollershade.IsOnline = (common as Rollershade).IsOnline;
|
//记录回复时间
|
rollershade.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.Thermostat:
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
ac.IsOnline = (common as ZigBee.Device.AC).IsOnline;
|
//记录回复时间
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.DimmableLight:
|
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
|
dimmableLight.IsOnline = (common as ZigBee.Device.DimmableLight).IsOnline;
|
//记录回复时间
|
dimmableLight.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"userpage功能刷新-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
|
|
/// <summary>
|
/// 用户界面
|
/// </summary>
|
/// <value>The instance.</value>
|
public static UserPage Instance
|
{
|
get
|
{
|
if (userMenuPage == null)
|
{
|
userMenuPage = new UserPage { };
|
}
|
return userMenuPage;
|
}
|
}
|
|
/// <summary>
|
/// Initializes a new instance of the <see cref="T:Shared.Phone.UserView.UserPage"/> class.
|
/// </summary>
|
public UserPage()
|
{
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.MainColor;
|
ZbGateway.StatusList.Add(this);
|
}
|
|
/// <summary>
|
/// 用户主体界面(中间部分)
|
/// </summary>
|
public FrameLayout BodyView = new FrameLayout
|
{
|
Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight),
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.MainColor,
|
};
|
/// <summary>
|
/// 用户菜单界面(底部部分)
|
/// </summary>
|
public FrameLayout BottomMenuView = new FrameLayout
|
{
|
Y = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight),
|
Height = Application.GetRealHeight(CommonPage.TabbarHeight),
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor,
|
};
|
|
#region 底部-主页按钮
|
/// <summary>
|
/// 底部-主页按钮
|
/// </summary>
|
public FrameLayout homePageFL = new FrameLayout
|
{
|
Width = Application.GetRealWidth(tabBarEnum_Width),
|
Height = Application.GetRealHeight(CommonPage.TabbarHeight),
|
|
};
|
/// <summary>
|
/// The home page image.
|
/// </summary>
|
public Button homePageIMG = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumIMG_Y),
|
Height = Application.GetMinRealAverage(tabBarEnumIMG_Height),
|
Width = Application.GetMinRealAverage(tabBarEnumIMG_Width),
|
UnSelectedImagePath = "Navigation/Home.png",
|
SelectedImagePath = "Navigation/HomeSelected.png",
|
IsSelected = true,
|
Gravity = Gravity.CenterHorizontal
|
};
|
/// <summary>
|
/// The name of the home page.
|
/// </summary>
|
public Button homePageName = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumName_Y),
|
Height = Application.GetRealHeight(tabBarEnumName_Height),
|
TextID = R.MyInternationalizationString.HomePage,
|
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor,
|
SelectedTextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlueColor,
|
IsSelected = true,
|
Gravity = Gravity.CenterHorizontal
|
};
|
#endregion
|
|
#region 分类-底部按钮
|
/// <summary>
|
/// 分类-底部按钮
|
/// </summary>
|
public FrameLayout categoryFL = new FrameLayout
|
{
|
X=Application.GetRealWidth(tabBarEnum_Width),
|
Width = Application.GetRealWidth(tabBarEnum_Width),
|
Height = Application.GetRealHeight(CommonPage.TabbarHeight)
|
};
|
/// <summary>
|
/// The category image.
|
/// </summary>
|
public Button categoryIMG = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumIMG_Y),
|
Height = Application.GetMinRealAverage(tabBarEnumIMG_Height),
|
Width = Application.GetMinRealAverage(tabBarEnumIMG_Width),
|
UnSelectedImagePath = "Navigation/Category.png",
|
SelectedImagePath = "Navigation/CategorySelected.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
/// <summary>
|
/// The name of the category.
|
/// </summary>
|
public Button categoryName = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumName_Y),
|
Height = Application.GetRealHeight(tabBarEnumName_Height),
|
TextID = R.MyInternationalizationString.Category,
|
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor,
|
SelectedTextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlueColor,
|
IsSelected = false,
|
Gravity = Gravity.CenterHorizontal
|
};
|
#endregion
|
|
#region 个人中心-底部按钮
|
/// <summary>
|
/// 个人中心-底部按钮
|
/// </summary>
|
public FrameLayout settingFL = new FrameLayout
|
{
|
X = Application.GetRealWidth(tabBarEnum_Width*2),
|
Width = Application.GetRealWidth(tabBarEnum_Width),
|
Height = Application.GetRealHeight(CommonPage.TabbarHeight)
|
};
|
/// <summary>
|
/// The setting image.
|
/// </summary>
|
public Button settingIMG = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumIMG_Y),
|
Height = Application.GetMinRealAverage(tabBarEnumIMG_Height),
|
Width = Application.GetMinRealAverage(tabBarEnumIMG_Width),
|
UnSelectedImagePath = "Navigation/Setting.png",
|
SelectedImagePath = "Navigation/SettingSelected.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
/// <summary>
|
/// 个人中心
|
/// </summary>
|
public Button settingName = new Button
|
{
|
Y = Application.GetRealHeight(tabBarEnumName_Y),
|
Height = Application.GetRealHeight(tabBarEnumName_Height),
|
TextID = R.MyInternationalizationString.Me,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor,
|
IsSelected = false,
|
Gravity = Gravity.CenterHorizontal
|
};
|
#endregion
|
|
#region 分割线
|
|
private FrameLayout bottomLine = new FrameLayout
|
{
|
Height = 3,
|
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
|
};
|
|
#endregion
|
|
EventHandler<MouseEventArgs> BottomEventHandler = (sender, e) =>
|
{
|
Room.GetAllRoomDeviceUIList();
|
|
Instance.homePageName.IsSelected = false;
|
Instance.homePageIMG.IsSelected = false;
|
|
Instance.categoryName.IsSelected = false;
|
Instance.categoryIMG.IsSelected = false;
|
|
Instance.settingName.IsSelected = false;
|
Instance.settingIMG.IsSelected = false;
|
|
Instance.BodyView.RemoveAll();
|
if (sender == Instance.homePageIMG || sender == Instance.homePageName)
|
{
|
//主页
|
Instance.homePageName.IsSelected = true;
|
Instance.homePageIMG.IsSelected = true;
|
var home = new UserHomeView { };
|
Instance.BodyView.AddChidren(home);
|
home.Show();
|
}
|
else if (sender == Instance.categoryIMG || sender==Instance.categoryName)
|
{
|
//分类
|
Instance.categoryName.IsSelected = true;
|
Instance.categoryIMG.IsSelected = true;
|
var category = new Phone.Device.Category.Category { };
|
Instance.BodyView.AddChidren(category);
|
category.Show();
|
}
|
else if (sender == Instance.settingIMG || sender==Instance.settingName)
|
{
|
//个人中心
|
Instance.settingName.IsSelected = true;
|
Instance.settingIMG.IsSelected = true;
|
var form = new UserCenter.Account.UserMainForm();
|
Instance.BodyView.AddChidren(form);
|
form.ShowForm();
|
}
|
};
|
|
/// <summary>
|
/// Fresh this instance.
|
/// </summary>
|
public void Fresh()
|
{
|
BottomEventHandler(Instance.homePageIMG, null);
|
}
|
|
/// <summary>
|
/// Inits the page.
|
/// </summary>
|
public void InitPage()
|
{
|
if (0 < ChildrenCount)
|
{
|
return;
|
}
|
|
AddChidren(BodyView);
|
AddChidren(BottomMenuView);
|
|
Instance.homePageFL.AddChidren(Instance.homePageIMG);
|
Instance.homePageFL.AddChidren(Instance.homePageName);
|
BottomMenuView.AddChidren(Instance.homePageFL);
|
|
Instance.categoryFL.AddChidren(Instance.categoryIMG);
|
Instance.categoryFL.AddChidren(Instance.categoryName);
|
BottomMenuView.AddChidren(Instance.categoryFL);
|
|
Instance.settingFL.AddChidren(Instance.settingIMG);
|
Instance.settingFL.AddChidren(Instance.settingName);
|
BottomMenuView.AddChidren(Instance.settingFL);
|
|
BottomMenuView.AddChidren(Instance.bottomLine);
|
|
homePageIMG.MouseUpEventHandler += BottomEventHandler;
|
homePageName.MouseUpEventHandler += BottomEventHandler;
|
|
categoryIMG.MouseUpEventHandler += BottomEventHandler;
|
categoryName.MouseUpEventHandler += BottomEventHandler;
|
|
settingIMG.MouseUpEventHandler += BottomEventHandler;
|
settingName.MouseUpEventHandler += BottomEventHandler;
|
}
|
}
|
}
|