using System; using System.Collections.Generic; using Shared.Common; using ZigBee.Device; using Shared.Phone.Device.AC; namespace Shared.Phone.UserView { /// /// User page. /// public class UserPage : FrameLayout,ZigBee.Common.IStatus { #region ◆ 变量_______________________ /// /// The user menu page. /// static UserPage userMenuPage; /// /// 底部单独菜单的宽度-360 /// private static readonly int tabBarEnum_Width = CommonPage.AppRealWidth / 3; /// /// 底部按钮图片的高度 /// private static readonly int tabBarEnumIMG_Height = 98; /// /// 底部按钮图片的宽度 /// private static readonly int tabBarEnumIMG_Width = 138; /// /// 底部按钮图片的Y值 /// private static readonly int tabBarEnumIMG_Y = 3; /// /// 底部按钮文字的高度 /// private static readonly int tabBarEnumName_Height = 40; /// /// 底部按钮文字的Y值 /// private static readonly int tabBarEnumName_Y = 104; #endregion #region ◆ 接口____________________________ /// /// 该接口将弃用 !!!!!! /// 改用DeviceInfoChange() /// /// The changed. /// Common. public void Changed(CommonDevice common) { } /// /// 设备状态更新接口 /// type:如果为 DeviceInComingRespon:设备新上报 /// type:如果为 IASInfoReport:RemoveDeviceRespon /// type:如果为 DeviceStatusReport:设备上报 /// type:如果为 IASInfoReport:IAS安防信息上报 /// type:如果为 OnlineStatusChange: 设备在线状态更新 /// /// Common. /// Type tag. public void DeviceInfoChange(CommonDevice common, string typeTag) { //设备上报状态中 当CluterID=3,就证明该设备在线,直接标记 if (typeTag == "DeviceStatusReport") { 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.DeviceStatusReport.CluterID == 6) { var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight; onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport; //记录、更新状态 if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0) { continue; } onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData; //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; } //当CluterID=3,就证明该设备在线,直接标记 if (common.DeviceStatusReport.CluterID == 3) { var onOffOutputLight = deviceUI.CommonDevice as ToggleLight; onOffOutputLight.IsOnline = 1; //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; } break; case DeviceType.AirSwitch: //开关功能 if (common.DeviceStatusReport.CluterID == 6) { var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch; airSwitch.DeviceStatusReport = common.DeviceStatusReport; //记录、更新状态 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.DeviceStatusReport.CluterID == 3) { var airSwitch = deviceUI.CommonDevice as AirSwitch; airSwitch.IsOnline = 1; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; } break; case DeviceType.WindowCoveringDevice: if (common.DeviceStatusReport.CluterID == 258) { var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade; rollershade.DeviceStatusReport = common.DeviceStatusReport; var attriButeList = rollershade.DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { continue; } switch (attriButeList[0].AttributeId) { case 0: rollershade.WcdType = attriButeList[0].AttriButeData; rollershade.LastDateTime = DateTime.Now; break; } } if (common.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.DeviceStatusReport.CluterID == 513) { var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.DeviceStatusReport = common.DeviceStatusReport; var attriButeList = ac.DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { continue; } 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 4096: //此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。 ac.currentAutoSetpoint = (attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default; 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.DeviceStatusReport.CluterID == 3) { var ac = deviceUI.CommonDevice as AC; ac.IsOnline = 1; //记录回复时间 ac.LastDateTime = DateTime.Now; } break; case DeviceType.DimmableLight: //调光灯功能 //开关功能 if (common.DeviceStatusReport.CluterID == 6) { var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.DeviceStatusReport = common.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.DeviceStatusReport.CluterID == 8) { var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.DeviceStatusReport = common.DeviceStatusReport; var attriButeList = dimmableLight.DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { continue; } switch (attriButeList[0].AttributeId) { case 0: //此属性表明当前亮度程度 dimmableLight.Level = attriButeList[0].AttriButeData; dimmableLight.LastDateTime = DateTime.Now; break; } } //当CluterID=3,就证明该设备在线,直接标记 if (common.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.IsOnline; //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; break; case DeviceType.AirSwitch: var airSwitch = deviceUI.CommonDevice as AirSwitch; airSwitch.IsOnline = common.IsOnline; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; break; case DeviceType.WindowCoveringDevice: var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade; rollershade.IsOnline = common.IsOnline; //记录回复时间 rollershade.LastDateTime = DateTime.Now; break; case DeviceType.Thermostat: var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.IsOnline = common.IsOnline; //记录回复时间 ac.LastDateTime = DateTime.Now; break; case DeviceType.DimmableLight: var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.IsOnline = common.IsOnline; //记录回复时间 dimmableLight.LastDateTime = DateTime.Now; break; } } } catch (Exception ex) { System.Console.WriteLine($"userpage功能刷新-Error:{ex.Message}"); } } } /// /// Changeds the IL ogic status. /// /// Logic. public void ChangedILogicStatus(ZigBee.Device.Logic logic) { //throw new NotImplementedException(); } /// /// Changeds the IS cene status. /// /// Scene. public void ChangedISceneStatus(Scene scene) { //throw new NotImplementedException(); } #endregion /// /// 用户界面 /// /// The instance. public static UserPage Instance { get { if (userMenuPage == null) { userMenuPage = new UserPage { }; } return userMenuPage; } } /// /// Initializes a new instance of the class. /// public UserPage() { BackgroundColor = Shared.Common.ZigbeeColor.Current.MainColor; ZbGateway.StatusList.Add(this); } /// /// 用户主体界面(中间部分) /// public FrameLayout BodyView = new FrameLayout { Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight), BackgroundColor = Shared.Common.ZigbeeColor.Current.MainColor, }; /// /// 用户菜单界面(底部部分) /// 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 底部-主页按钮 /// /// 底部-主页按钮 /// public FrameLayout homePageFL = new FrameLayout { Width = Application.GetRealWidth(tabBarEnum_Width), Height = Application.GetRealHeight(CommonPage.TabbarHeight), }; /// /// The home page image. /// 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 }; /// /// The name of the home page. /// 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 分类-底部按钮 /// /// 分类-底部按钮 /// public FrameLayout categoryFL = new FrameLayout { X=Application.GetRealWidth(tabBarEnum_Width), Width = Application.GetRealWidth(tabBarEnum_Width), Height = Application.GetRealHeight(CommonPage.TabbarHeight) }; /// /// The category image. /// 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 }; /// /// The name of the category. /// 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 个人中心-底部按钮 /// /// 个人中心-底部按钮 /// public FrameLayout settingFL = new FrameLayout { X = Application.GetRealWidth(tabBarEnum_Width*2), Width = Application.GetRealWidth(tabBarEnum_Width), Height = Application.GetRealHeight(CommonPage.TabbarHeight) }; /// /// The setting image. /// 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 }; /// /// 个人中心 /// 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 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) { //主页 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.UserMain.UserMainForm(); Instance.BodyView.AddChidren(form); form.ShowForm(); } }; /// /// Fresh this instance. /// public void Fresh() { BottomEventHandler(Instance.homePageIMG, null); } /// /// Inits the page. /// 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; } } }