using System; namespace Shared.SimpleControl.Phone { public class GenericDialog { /// /// /// private static GenericDialog m_Current = null; /// /// /// public static GenericDialog Current { get { if (m_Current == null) { m_Current = new GenericDialog (); } return m_Current; } } /// /// /// /// /// /// public void ShowModifyRemarksDialog (Common commonDevice, byte[] commonBytes, Button btnEquipment, Action successAction) { Dialog dialog = new Dialog (); var dialogView = new FrameLayout () { Gravity = Gravity.Center, Width = Application.GetRealWidth (500), Height = Application.GetRealHeight (300), BackgroundColor = SkinStyle.Current.DialogColor, Radius = 5, BorderColor = SkinStyle.Current.Transparent, BorderWidth = 1, }; dialog.AddChidren (dialogView); var etDeviceName = new EditText () { Y = Application.GetRealHeight (80), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth (350), Height = Application.GetRealHeight (70), //Text = commonDevice.Name, Text = commonDevice.Name.TrimEnd (), TextAlignment = TextAlignment.Center, TextColor = SkinStyle.Current.TextColor, Radius = 1, BorderWidth = 1, BorderColor = SkinStyle.Current.BorderColor, }; dialogView.AddChidren (etDeviceName); etDeviceName.TextChangeEventHandler += (sender, e) => { byte [] remakeBytes = CommonPage.MyEncodingGB2312.GetBytes (etDeviceName.Text.Trim ()); if (remakeBytes.Length > 20) { etDeviceName.Text = CommonPage.MyEncodingGB2312.GetString (remakeBytes, 0, 20); new Alert ("", ErrorCode.RemarkLengthExceededTheLimit, "Close").Show (); } }; var dialogBottomView = new FrameLayout () { Y = Application.GetRealHeight (213), Height = Application.GetRealHeight (90), BackgroundColor = SkinStyle.Current.Black50Transparent, }; dialogView.AddChidren (dialogBottomView); var btnClose = new Button () { Width = Application.GetRealWidth (250), TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.cancel, TextColor = SkinStyle.Current.TextColor, BackgroundColor = SkinStyle.Current.ButtonColor, }; dialogBottomView.AddChidren (btnClose); btnClose.MouseUpEventHandler += (ddss, dddsss) => { dialog.Close (); }; var editor = new Button () { X = btnClose.Right + 1, Width = Application.GetRealWidth (250), TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.SAVE, TextColor = SkinStyle.Current.TextColor, BackgroundColor = SkinStyle.Current.ButtonColor, }; dialogBottomView.AddChidren (editor); editor.MouseUpEventHandler += (dff, ffd) => { string remakeStr = etDeviceName.Text.Trim (); if (string.IsNullOrEmpty (remakeStr)) { //备注不能为空 new Alert ("", ErrorCode.RemarksCannotBeEmpty, "Close").Show (); return; } byte [] remakeBytes = CommonPage.MyEncodingGB2312.GetBytes (remakeStr); if (remakeBytes.Length > 20) { new Alert ("", ErrorCode.RemarkLengthExceededTheLimit, "Close").Show (); return; } MainPage.Loading.Start (); //byte [] remakeBytes = CommonPage.MyEncodingGB2312.GetBytes (etDeviceName.Text.Trim ()); System.Threading.Tasks.Task.Run (() => { byte [] updateBytes = null; if (commonDevice.Type == DeviceType.LightSwitchSocket) { updateBytes = Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, commonDevice.SubnetID, commonDevice.DeviceID, new byte [] { commonDevice.BigClass, 1, commonDevice.LoopID }); } else { updateBytes = Control.ControlBytesSendHasReturn (Command.ReadDeviceLoopInfo, commonDevice.SubnetID, commonDevice.DeviceID, new byte [] { commonDevice.BigClass, commonDevice.MinClass, commonDevice.LoopID }); } if (updateBytes == null) { Application.RunOnMainThread (() => { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Language.StringByID (R.MyInternationalizationString.Close)).Show (); MainPage.Loading.Hide (); dialog.Close (); }); return; } byte [] uBytes = new byte [20]; Array.Copy (remakeBytes, 0, uBytes, 0, remakeBytes.Length < 20 ? remakeBytes.Length : 20); Array.Copy (uBytes, 0, updateBytes, 3, 20 < uBytes.Length ? 20 : uBytes.Length); byte [] reBytes = Control.ControlBytesSendHasReturn (Command.SetDeviceLoopInfo, commonDevice.SubnetID, commonDevice.DeviceID, updateBytes); if (reBytes != null) { Application.RunOnMainThread (() => { btnEquipment.Text = commonDevice.Name = etDeviceName.Text.Trim (); if (commonDevice.Type == DeviceType.InfraredMode) { //2020-07-03 修复红外电视修改后变红外模块问题 InfraredMode mTV = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (commonBytes)); if (mTV == null) { IO.FileUtils.SaveEquipmentMessage (commonDevice, commonDevice.LoopID.ToString ()); } else { mTV.Name = etDeviceName.Text.Trim (); IO.FileUtils.SaveEquipmentMessage (mTV, mTV.LoopID.ToString ()); } } else { IO.FileUtils.SaveEquipmentMessage (commonDevice, commonDevice.LoopID.ToString ()); } //IO.FileUtils.SaveEquipmentMessage (commonDevice, commonDevice.LoopID.ToString ()); MainPage.Loading.Hide (); dialog.Close (); }); //修改成功回调 successAction?.Invoke (); } else { Application.RunOnMainThread (() => { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.FailureToModify), Language.StringByID (R.MyInternationalizationString.Close)).Show (); MainPage.Loading.Hide (); dialog.Close (); }); } }); }; dialog.Show (); } /// /// 修改备注成功后刷新房间设备列表的备注 /// /// public void RefreshRemark (Common commonDevice) { try { foreach (var room in Room.Lists) { foreach (var common in room.DeviceList) { if (common.CommonLoopID != commonDevice.CommonLoopID || common.Type != commonDevice.Type) { continue; } common.Name = commonDevice.Name; } } } catch { Utlis.WriteLine ("RefreshRemark 失败"); } } } }