using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter.Device { /// /// 固件升级画面 /// public class DeviceFirmwareUpdateForm : DialogCommonForm { #region ■ 变量声明___________________________ /// /// 设备的Mac地址 /// private string deviceMac = string.Empty; /// /// 设备成功升级完成的回调函数 /// public Action FinishUpdateEvent = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// ota设备对象 /// 固件升级信息 public void ShowForm(OTADevice device, FirmwareVersionInfo deviceFirmware) { this.deviceMac = device.DeviceAddr; //初始化中部信息 this.InitMiddleFrame(device, deviceFirmware); } /// /// 初始化中部信息 /// /// ota设备对象 /// 固件升级信息 private void InitMiddleFrame(OTADevice device, FirmwareVersionInfo deviceFirmware) { var frameBack = new FrameLayout(); frameBack.Width = Application.GetRealWidth(674); frameBack.Height = Application.GetRealHeight(386); frameBack.BackgroundColor = UserCenterColor.Current.White; frameBack.Gravity = Gravity.CenterHorizontal; frameBack.Y = Application.GetRealHeight(683); frameBack.Radius = 6; bodyFrameLayout.AddChidren(frameBack); //进度显示文本 var btnText = new NormalViewControl(frameBack.Width, Application.GetRealHeight(58), false); btnText.Y = Application.GetRealHeight(248); btnText.TextColor = UserCenterColor.Current.TextGrayColor1; btnText.TextAlignment = TextAlignment.Center; //btnText.Text = "升级中"; frameBack.AddChidren(btnText); //进度条 var btnProRow = new FrameLayout(); btnProRow.Gravity = Gravity.CenterHorizontal; btnProRow.Y = Application.GetRealHeight(161); btnProRow.Width = Application.GetRealWidth(559); btnProRow.Height = Application.GetRealHeight(29); btnProRow.BackgroundColor = 0xfff5f5f5; btnProRow.Radius = (uint)Application.GetRealHeight(29) / 2; frameBack.AddChidren(btnProRow); var btnProgressBar = new FrameLayout(); btnProgressBar.Width = 0; btnProgressBar.Height = btnProRow.Height; btnProgressBar.Radius = btnProRow.Radius; btnProgressBar.BackgroundColor = 0xfffb744a; btnProgressBar.Radius = (uint)Application.GetRealHeight(29) / 2; btnProRow.AddChidren(btnProgressBar); //进度值文本 var frameProgress = new FrameLayout(); frameProgress.Width = Application.GetRealWidth(84); frameProgress.Height = Application.GetRealHeight(60); frameProgress.Y = Application.GetRealHeight(86); frameBack.AddChidren(frameProgress); frameProgress.X = btnProRow.X + btnProgressBar.Right - frameProgress.Width / 2; var btnProgressPic = new PicViewControl(84, 60); btnProgressPic.UnSelectedImagePath = "Item/ProgressMsg.png"; frameProgress.AddChidren(btnProgressPic); var btnProgressView = new NormalViewControl(84, 32, true); btnProgressView.TextSize = 10; btnProgressView.TextAlignment = TextAlignment.Center; btnProgressView.Text = "0%"; frameProgress.AddChidren(btnProgressView); //设备升级 this.DeviceUpdateMethod(device, deviceFirmware, btnText, btnProgressView, frameProgress, btnProgressBar, btnProRow.Width); } #endregion #region ■ 设备升级___________________________ /// /// 设备升级 /// /// 设备对象 /// 固件信息 /// 标题控件 /// 进度值文本的显示控件 /// 进度值能够移动的那个框控件 /// 进度条 /// 进度条容器的最大宽度 private void DeviceUpdateMethod(OTADevice device, FirmwareVersionInfo deviceFirmware, NormalViewControl btnText, NormalViewControl btnProgressView, FrameLayout frameProgress, FrameLayout btnProgressBar, int ProRowWidth) { //设备升级 var updateLogic = new HdlDeviceUpdateLogic(device, deviceFirmware); //更新状态变化的事件 updateLogic.UpdateStatuChangedEvent += (div, msg) => { if (div == -1) { //异常 this.ShowMassage(ShowMsgType.Tip, msg); this.CloseForm(); } else if (div == 0) { //一般信息 btnText.Text = msg; } else if (div == 1) { //升级完成 this.ShowMassage(ShowMsgType.Tip, msg); //调用回调函数 this.FinishUpdateEvent?.Invoke(); this.CloseForm(); } else if (div == 2) { //主动终止升级 this.CloseForm(); } }; //进度值改变事件 updateLogic.ProgressEvent += (value) => { Application.RunOnMainThread(() => { //进度条 decimal result = value / 100; int width = (int)(result * ProRowWidth); btnProgressBar.Width = width; //文本显示 btnProgressView.Text = value + "%"; //文本显示的那个图片框移动 frameProgress.X = ControlCommonResourse.XXLeft + btnProgressBar.Right - frameProgress.Width / 2; }); }; //设备升级开始 updateLogic.StartUpdateReady(); //终止升级 btnText.ButtonClickEvent += (sender, e) => { //再次调用,内部条件达成时,可以选择终止升级 updateLogic.StartUpdateReady(); }; } #endregion #region ■ 界面关闭___________________________ /// /// 画面关闭 /// public override void CloseForm() { //安卓可以点击系统的返回键 UserView.HomePage.Instance.ScrollEnabled = true; Shared.Common.CommonPage.BackKeyCanClick = true; //升级对象 if (FirmwareUpdateResourse.dicDeviceUpdateList.ContainsKey(deviceMac) == true && FirmwareUpdateResourse.dicDeviceUpdateList[deviceMac].IsFinishUpdate == true) { //如果设备已经升级完成,界面关闭时,则移除内存 FirmwareUpdateResourse.dicDeviceUpdateList[deviceMac].Dispose(); FirmwareUpdateResourse.dicDeviceUpdateList.Remove(deviceMac); } this.FinishUpdateEvent = null; base.CloseForm(); } #endregion } }