using System;
|
using System.Collections.Generic;
|
using Shared.Common;
|
using ZigBee.Device;
|
using Shared.Phone.Device.AC;
|
using System.Text;
|
using Shared.Phone.Device.Account;
|
|
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>
|
/// 底部按钮图片的高度
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Height = 98;
|
/// <summary>
|
/// 底部按钮图片的宽度
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Width = 138;
|
/// <summary>
|
/// 底部按钮图片的Y值
|
/// </summary>
|
private static readonly int tabBarEnumIMG_Y = 3;
|
/// <summary>
|
/// 底部按钮文字的高度
|
/// </summary>
|
private static readonly int tabBarEnumName_Height = 40;
|
/// <summary>
|
/// 底部按钮文字的Y值
|
/// </summary>
|
private static readonly int tabBarEnumName_Y = 98;
|
#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)
|
{
|
var myDevice = LocalDevice.Current.GetDevice(common.DeviceAddr, common.DeviceEpoint);
|
if (myDevice == null)
|
{
|
return;
|
}
|
//设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
|
if (typeTag == "DeviceStatusReport")
|
{
|
try
|
{
|
if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
switch (myDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var onOffOutputLight = (ToggleLight)myDevice;
|
onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
|
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
myDevice.IsOnline = 1;
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.AirSwitch:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var airSwitch = (AirSwitch)myDevice;
|
airSwitch.DeviceStatusReport = common.DeviceStatusReport;
|
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
|
airSwitch.LastDateTime = DateTime.Now;
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
myDevice.IsOnline = 1;
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.WindowCoveringDevice:
|
if (common.DeviceStatusReport.CluterID == 258)
|
{
|
var rollershade = (Rollershade)myDevice;
|
rollershade.DeviceStatusReport = common.DeviceStatusReport;
|
var attriButeList = rollershade.DeviceStatusReport.AttriBute;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
rollershade.WcdType = attriButeList[0].AttriButeData;
|
rollershade.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
myDevice.IsOnline = 1;
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.Thermostat:
|
//AC功能
|
if (common.DeviceStatusReport.CluterID == 513)
|
{
|
var ac = (AC)myDevice;
|
ac.DeviceStatusReport = common.DeviceStatusReport;
|
var attriButeList = ac.DeviceStatusReport.AttriBute;
|
foreach (var attList in attriButeList)
|
{
|
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
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:
|
ac.CleanStatu = attList.AttriButeData == 42;
|
break;
|
}
|
}
|
}
|
|
if (common.DeviceStatusReport.CluterID == 514)
|
{
|
var ac = (AC)myDevice;
|
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;
|
}
|
}
|
}
|
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
myDevice.IsOnline = 1;
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.DimmableLight:
|
//调光灯功能
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var dimmableLight = (DimmableLight)myDevice;
|
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
|
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
//亮度
|
if (common.DeviceStatusReport.CluterID == 8)
|
{
|
var dimmableLight = (DimmableLight)myDevice;
|
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
|
var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
dimmableLight.Level = attriButeList[0].AttriButeData;
|
dimmableLight.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
myDevice.IsOnline = 1;
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.TemperatureSensor:
|
//温度
|
if (common.DeviceStatusReport.CluterID == 1026)
|
{
|
var tempera = (TemperatureSensor)myDevice;
|
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, "."));
|
}
|
}
|
}
|
}
|
//湿度
|
if (common.DeviceStatusReport.CluterID == 1029)
|
{
|
var tempera = (TemperatureSensor)myDevice;
|
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;
|
}
|
}
|
}
|
}
|
break;
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"Error:{ex.Message}");
|
}
|
}
|
//设备在线状态上报
|
else if (typeTag == "OnlineStatusChange")
|
{
|
myDevice.IsOnline = common.IsOnline;
|
//记录回复时间
|
myDevice.LastDateTime = DateTime.Now;
|
}
|
else if (typeTag == "IASInfoReport")
|
{
|
try
|
{
|
switch (myDevice.Type)
|
{
|
case DeviceType.IASZone:
|
var iAS = (IASZone)myDevice;
|
iAS.iASInfo = (common as IASZone).iASInfo;
|
iAS.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
catch { }
|
}
|
}
|
/// <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);
|
Shared.Application.LocationAction += (lon, lat) =>
|
{
|
AccountLogic.Instance.ReceiveAppLatAndLon(lon.ToString(), lat.ToString());
|
};
|
}
|
|
/// <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.GXCBottomColor,
|
};
|
|
#region 分割线
|
|
private Button bottomLine = new Button
|
{
|
Height = 1,
|
BackgroundColor = ZigbeeColor.Current.GXCBottomLineColor
|
};
|
|
#endregion
|
|
#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.GXCTextBottomUnSelectedColor,
|
SelectedTextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor2,
|
IsSelected = true,
|
Gravity = Gravity.CenterHorizontal,
|
TextSize = 10
|
};
|
#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.GXCTextBottomUnSelectedColor,
|
SelectedTextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor2,
|
IsSelected = false,
|
Gravity = Gravity.CenterHorizontal,
|
TextSize=10
|
};
|
#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 = Shared.Common.ZigbeeColor.Current.GXCTextBottomUnSelectedColor,
|
SelectedTextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor2,
|
IsSelected = false,
|
Gravity = Gravity.CenterHorizontal,
|
TextSize = 10
|
};
|
#endregion
|
|
|
EventHandler<MouseEventArgs> BottomEventHandler = (sender, e) =>
|
{
|
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)
|
{
|
//主页
|
CommonPage.Instance.IsDrawerLockMode = false;
|
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)
|
{
|
//分类
|
CommonPage.Instance.IsDrawerLockMode = true;
|
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)
|
{
|
//个人中心
|
CommonPage.Instance.IsDrawerLockMode = true;
|
Instance.settingName.IsSelected = true;
|
Instance.settingIMG.IsSelected = true;
|
var form = new UserCenter.UserMain.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);
|
|
BottomMenuView.AddChidren(Instance.bottomLine);
|
|
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);
|
|
homePageIMG.MouseUpEventHandler += BottomEventHandler;
|
homePageName.MouseUpEventHandler += BottomEventHandler;
|
|
categoryIMG.MouseUpEventHandler += BottomEventHandler;
|
categoryName.MouseUpEventHandler += BottomEventHandler;
|
|
settingIMG.MouseUpEventHandler += BottomEventHandler;
|
settingName.MouseUpEventHandler += BottomEventHandler;
|
}
|
}
|
}
|