using System; using System.Collections.Generic; using System.Globalization; using Shared.Common; using Shared.Phone.Device.CommonForm; using Shared.Phone.Device.DeviceLogic; using Shared.Phone.UserCenter; using Shared.Phone.UserView; using ZigBee.Device; namespace Shared.Phone.Device.Room { public class EditRoom : FrameLayout, ZigBee.Common.IStatus { #region ◆ 变量____________________________ /// /// bodyFrameLayout /// private FrameLayout bodyFrameLayout; /// /// The room. /// public Shared.Common.Room room; /// /// The action. /// public Action action; /// /// backGround /// private ImageView backGround; /// /// IconPathType /// public int IconPathType; /// /// OldBackgroundImagePath /// private string OldBackgroundImagePath; /// /// OldIconPathType /// public int OldIconPathType; public CommonDevice temperDevice; public CommonDevice humidDevice; DeviceInfoRow temperatureRow; DeviceInfoRow humidityRow; #endregion #region ◆ 接口__________________________ /// /// 设备状态更新接口 /// type:如果为 DeviceInComingRespon:设备新上报 /// type:如果为 IASInfoReport:RemoveDeviceRespon /// type:如果为 DeviceStatusReport:设备上报 /// type:如果为 IASInfoReport:IAS安防信息上报 /// type:如果为 OnlineStatusChange: 设备在线状态更新 /// /// Common. /// Type tag. public void DeviceInfoChange(CommonDevice common, string typeTag) { if (typeTag == "DeviceStatusReport") { Application.RunOnMainThread(() => { try { if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0) { return; } //是否为当前设备 if ((temperDevice?.DeviceEpoint != common.DeviceEpoint || temperDevice?.DeviceAddr != common.DeviceAddr) && (humidDevice?.DeviceEpoint != common.DeviceEpoint || humidDevice?.DeviceAddr != common.DeviceAddr)) { return; } //if (common.Type == DeviceType.TemperatureSensor) //{ if (common.DeviceStatusReport.CluterID == 1026) { foreach (var data in common.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { //0℃ temperatureRow.NameText.Text = "--℃"; room.Temperatrue = 0; } else if (data.AttriButeData > 32767) { //负数(特殊处理) string strValue = (data.AttriButeData - 65536).ToString(); //小数点需要一位 strValue = strValue.Substring(0, strValue.Length - 1); temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "℃"; room.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } else { //小数点需要一位 string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "℃"; room.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } } } } else if (common.DeviceStatusReport.CluterID == 1029) { foreach (var data in common.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { //0 humidityRow.NameText.Text = "--%"; room.Humidity = 0; } else { //小数点需要一位(湿度没有负数) string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); humidityRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; room.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } } } } //} } catch (Exception ex) { System.Console.WriteLine($"Error:{ex.Message}"); } }); } } #endregion public EditRoom() { ZbGateway.StatusList.Add(this); BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; } /// /// Show this instance. /// public void Show(Shared.Common.Room r) { room = r; IconPathType = r.BackgroundImageType; OldIconPathType = r.BackgroundImageType; if (IconPathType != 0) { OldBackgroundImagePath = r.BackgroundImage; } AddTop(); AddBodyView(); } public override void RemoveFromParent() { ZbGateway.StatusList.Remove(this); CommonPage.Instance.IsDrawerLockMode = false; base.RemoveFromParent(); } #region Add____________________________________ /// /// AddTop /// public void AddTop() { var top = new TopFrameLayout(); AddChidren(top); top.InitTopview(); top.SetTopTitle(R.MyInternationalizationString.EditRoom); top.backButton.MouseUpEventHandler += (sender, e) => { RemoveFromParent(); }; } /// /// AddBodyView /// public void AddBodyView() { bodyFrameLayout = new FrameLayout() { Y = Application.GetRealHeight(184), Height = Application.GetRealHeight(1737), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor, }; AddChidren(bodyFrameLayout); var backGround1 = new ImageView() { Y = Application.GetRealHeight(60), Width = Application.GetMinRealAverage(916), Height = Application.GetMinRealAverage(487), Gravity = Gravity.CenterHorizontal, ImagePath = "Room/Room_Rectangle.png" }; bodyFrameLayout.AddChidren(backGround1); backGround = new ImageView() { Y = Application.GetRealHeight(60), Width = Application.GetMinRealAverage(887), Height = Application.GetMinRealAverage(444), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetMinRealAverage(CommonFormResouce.BigFormRadius), ImagePath = room.BackgroundImageType == 0 ? room.BackgroundImage : System.IO.Path.Combine(Config.Instance.FullPath, room.BackgroundImage) }; bodyFrameLayout.AddChidren(backGround); if (room.BackgroundImageType != 0) { backGround.ImageBytes = Shared.IO.FileUtils.ReadFile(backGround.ImagePath); } backGround.MouseUpEventHandler += backGroundIMGHander; var infoFL = new FrameLayout { Y = Application.GetRealHeight(562), Height = Application.GetRealHeight(1175), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; bodyFrameLayout.AddChidren(infoFL); var rectCornerID = HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight; infoFL.SetCornerWithSameRadius(Application.GetRealHeight(50), rectCornerID); var infoEdit = new Button { X = Application.GetRealWidth(CommonFormResouce.X_Left), Y = Application.GetRealHeight(80), Height = Application.GetRealHeight(60), Width = Application.GetRealWidth(700), TextID = R.MyInternationalizationString.EditInfo, TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor, TextAlignment = TextAlignment.CenterLeft, TextSize = 15 }; infoFL.AddChidren(infoEdit); var nameRow = new DeviceInfoEditRow(170); nameRow.Init(); nameRow.SetTipTitle($"{Language.StringByID(R.MyInternationalizationString.RoomName)} :"); nameRow.SetTitle(room.Name); infoFL.AddChidren(nameRow); if (room.IsLove) { nameRow.NameText.Enable = false; } var floorRow = new DeviceInfoRow(308); floorRow.Init(); floorRow.SetTipTitle($"{Language.StringByID(R.MyInternationalizationString.BelongFloor)} :"); if (Config.Instance.Home.FloorDics.Count > 0 && room.IsLove == false) { infoFL.AddChidren(floorRow); } floorRow.SetTitle(HdlResidenceLogic.Current.GetFloorNameById(room.FloorId)); floorRow.ClickBtn.MouseUpEventHandler += (sender, e) => { if (Config.Instance.Home.FloorDics != null) { List floorIds = new List { }; List floorNames = new List { }; foreach (var floor in Config.Instance.Home.FloorDics) { floorIds.Add(floor.Key); floorNames.Add(floor.Value); } PickerView.Show(floorNames, (index) => { room.FloorId = floorIds[index]; floorRow.SetTitle(HdlResidenceLogic.Current.GetFloorNameById(room.FloorId)); }, floorIds.IndexOf(room.FloorId), Language.StringByID(R.MyInternationalizationString.BelongFloor), Language.StringByID(R.MyInternationalizationString.Confrim), Language.StringByID(R.MyInternationalizationString.Cancel)); } }; temperatureRow = new DeviceInfoRow(446); temperatureRow.Init(); temperatureRow.SetTipTitle(R.MyInternationalizationString.Temperature); temperatureRow.NameText.TextAlignment = TextAlignment.CenterRight; infoFL.AddChidren(temperatureRow); temperatureRow.ClickBtn.MouseUpEventHandler += (sender, e) => { var tem = new RoomTemperatureSetting { }; HomePage.Instance.AddChidren(tem); HomePage.Instance.PageIndex += 1; tem.tempDevice = Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); tem.Show(room); tem.selectDeviceAction = (selectTemp) => { if (selectTemp == null) { return; } room.TemperatrueDevice = $"{selectTemp.DeviceAddr}{selectTemp.DeviceEpoint}"; temperDevice=Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); temperatureRow.SetTitle(R.MyInternationalizationString.Getting); //发送获取温度的命令 ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(selectTemp); }; }; if (string.IsNullOrEmpty(room.TemperatrueDevice) == false) { temperatureRow.SetTitle(room.Temperatrue == 0 ? "--℃" : $"{room.Temperatrue}℃"); //发送获取温度的命令 temperDevice = Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(temperDevice); } else { temperatureRow.SetTitle(R.MyInternationalizationString.No); } humidityRow = new DeviceInfoRow(585); humidityRow.Init(); humidityRow.SetTipTitle(R.MyInternationalizationString.Humidity); humidityRow.NameText.TextAlignment = TextAlignment.CenterRight; infoFL.AddChidren(humidityRow); humidityRow.ClickBtn.MouseUpEventHandler += (sender, e) => { var tem = new RoomHumiditySetting { }; HomePage.Instance.AddChidren(tem); HomePage.Instance.PageIndex += 1; tem.tempDevice = Common.LocalDevice.Current.GetDevice(room.HumidityDevice); tem.Show(room); tem.selectDeviceAction = (selectTemp) => { if (selectTemp == null) { return; } room.HumidityDevice = $"{selectTemp.DeviceAddr}{selectTemp.DeviceEpoint}"; humidDevice = Common.LocalDevice.Current.GetDevice(room.HumidityDevice); humidityRow.SetTitle(R.MyInternationalizationString.Getting); //发送获取湿度的命令 ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(selectTemp); }; }; if (string.IsNullOrEmpty(room.HumidityDevice) == false) { humidityRow.SetTitle(room.Humidity == 0 ? "--%" : $"{room.Humidity}%"); //发送获取湿度的命令 humidDevice = Common.LocalDevice.Current.GetDevice(room.HumidityDevice); ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(humidDevice); } else { humidityRow.SetTitle(R.MyInternationalizationString.No); } if (Config.Instance.Home.FloorDics.Count == 0 || room.IsLove) { temperatureRow.Y = Application.GetRealHeight(308); humidityRow.Y = Application.GetRealHeight(446); } var confirm = new Device.CommonForm.CompleteButton(1700, 900, 127); confirm.SetTitle(R.MyInternationalizationString.Save); AddChidren(confirm); confirm.MouseUpEventHandler += (sender, e) => { var tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var fileName = $"RoomIcon_{tradeTime}.png"; room.Name = nameRow.NameText.Text.Trim(); if (OldIconPathType != 0) { Shared.IO.FileUtils.DeleteFile(System.IO.Path.Combine(Config.Instance.FullPath, OldBackgroundImagePath)); HdlAutoBackupLogic.DeleteFile(OldBackgroundImagePath); } if (IconPathType == 0) { room.BackgroundImage = backGround.ImagePath; } else { Shared.IO.FileUtils.WriteFileByBytes(System.IO.Path.Combine(Config.Instance.FullPath, fileName), backGround.ImageBytes); HdlAutoBackupLogic.AddOrEditorFile(fileName); room.BackgroundImage = fileName; } room.BackgroundImageType = IconPathType; room.Save(); action?.Invoke(); RemoveFromParent(); }; } /// /// 选择背景图 /// /// /// private void backGroundIMGHander(object sender, MouseEventArgs e) { if (room != null && room.IsSharedRoom) { RoomCommon.ShowTipRoomIsShared(); return; } int selectRow_Height = 150; int selectRow_Width = 1034; var selectFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCDailogBackGroundColor }; AddChidren(selectFL); var itemFL = new FrameLayout() { Y = Application.GetRealHeight(1276), Height = Application.GetRealHeight(450), Width = Application.GetRealWidth(selectRow_Width), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetRealHeight(35), BackgroundColor = ZigbeeColor.Current.GXCTextWhiteColor }; selectFL.AddChidren(itemFL); //itemFL.Animate = Animate.DownToUp; var selectLocalPicture = new Button() { Height = Application.GetRealHeight(selectRow_Height) - 1, TextID = R.MyInternationalizationString.LocalPicture, TextColor = ZigbeeColor.Current.GXCTextSelectedColor4, TextSize = 17 }; itemFL.AddChidren(selectLocalPicture); var selectLocalLine = new Button() { Y = selectLocalPicture.Bottom, Height = 1, BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor2 }; itemFL.AddChidren(selectLocalLine); var selectPhotographBtn = new Button() { Y = selectLocalLine.Bottom, Height = Application.GetRealHeight(selectRow_Height) - 1, TextID = R.MyInternationalizationString.Photograph, TextColor = ZigbeeColor.Current.GXCTextSelectedColor4, TextSize = 17 }; itemFL.AddChidren(selectPhotographBtn); var selectPhotographLine = new Button() { Y = selectPhotographBtn.Bottom, Height = 1, BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor2, }; itemFL.AddChidren(selectPhotographLine); var selectAblumsBtn = new Button() { Y = selectPhotographLine.Bottom, Height = Application.GetRealHeight(selectRow_Height) - 1, TextID = R.MyInternationalizationString.MyAblums, TextColor = ZigbeeColor.Current.GXCTextSelectedColor4, TextSize = 17 }; itemFL.AddChidren(selectAblumsBtn); var cancelBtn = new Button() { Y = Application.GetRealHeight(1742), Height = Application.GetRealHeight(selectRow_Height), Width = Application.GetRealWidth(selectRow_Width), Gravity = Gravity.CenterHorizontal, TextID = R.MyInternationalizationString.Cancel, TextColor = ZigbeeColor.Current.GXCTextSelectedColor4, BackgroundColor = ZigbeeColor.Current.GXCTextWhiteColor, Radius = (uint)Application.GetRealHeight(35), TextSize = 17 }; selectFL.AddChidren(cancelBtn); selectLocalPicture.MouseUpEventHandler += (send, ee) => { selectFL.RemoveFromParent(); var localPic = new AddRoomSelectPicByLocal(); Shared.Phone.UserView.HomePage.Instance.AddChidren(localPic); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; localPic.Show(); localPic.action = (imgPath) => { IconPathType = 0; backGround.ImageBytes = null; backGround.ImagePath = imgPath; }; }; selectPhotographBtn.MouseUpEventHandler += (send, ee) => { selectFL.RemoveFromParent(); var tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var fileName = $"RoomIcon_{tradeTime}.png"; //通过相机拍照裁剪 CropImage.TakePicture((imagePath) => { if (string.IsNullOrEmpty(imagePath)) { return; } if (IconPathType != 0) { Global.DeleteFilebyHomeId(backGround.ImagePath); } IconPathType = 1; backGround.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); backGround.ImagePath = imagePath; System.IO.File.Delete(imagePath); }, fileName, 2, 1); }; selectAblumsBtn.MouseUpEventHandler += (send, ee) => { selectFL.RemoveFromParent(); var tradeTime = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var fileName = $"RoomIcon_{tradeTime}.png"; //从相册选择图片裁剪 CropImage.SelectPicture((imagePath) => { if (string.IsNullOrEmpty(imagePath)) { return; } if (IconPathType != 0) { Global.DeleteFilebyHomeId(backGround.ImagePath); } IconPathType = 2; backGround.ImageBytes = Shared.IO.FileUtils.ReadFile(imagePath); backGround.ImagePath = imagePath; System.IO.File.Delete(imagePath); }, fileName, 2, 1); }; cancelBtn.MouseUpEventHandler += (send, ee) => { selectFL.RemoveFromParent(); }; selectFL.MouseUpEventHandler += (send, ee) => { selectFL.RemoveFromParent(); }; } #endregion } }