using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.GatewayUpdate { /// /// 网关固件升级界面 /// public class GatewayFirmwareUpdateForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 当前选择的网关 /// private ZbGateway zbGateway = null; /// /// 升级固件信息(0:Linux新版本 1:协调器新版本 2~X:都是虚拟驱动的) /// private List listVersionInfo = null; /// /// 虚拟驱动号 /// private List listVode = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 当前选择的网关 public void ShowForm(ZbGateway i_zbGateway) { this.zbGateway = i_zbGateway; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate)); //初始化右上角菜单 this.InitTopRightMenu(); //初始化中部控件 this.InitMiddleFrame(); } /// /// 初始化中部控件 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); HdlThreadLogic.Current.RunThread(() => { //开启进度条 this.ShowProgressBar(); //获取网关新版本信息 this.listVersionInfo = HdlGatewayLogic.Current.GetGatewayAllNewVersion(this.zbGateway); if (listVersionInfo == null) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //虚拟驱动号 this.listVode = HdlGatewayLogic.Current.GetListVDDriveCode(this.zbGateway); //关闭进度条 this.CloseProgressBar(); HdlThreadLogic.Current.RunMain(() => { //初始化当前版本的控件 var yy = this.InitNowVersionControl(); if (listVersionInfo[0] != null || listVersionInfo[1] != null || listVersionInfo[2] != null) { //初始化新版本的控件 this.InitNewVersionControl(yy); } }); }); } /// /// 初始化当前版本的控件 /// private int InitNowVersionControl() { bodyFrameLayout.RemoveAll(); var frameBack = new FrameLayout(); frameBack.BackgroundColor = UserCenterColor.Current.White; frameBack.Height = Application.GetMinReal(800); bodyFrameLayout.AddChidren(frameBack); //当前固件版本 var btnTitle = new NormalViewControl(700, 65, true); btnTitle.X = ControlCommonResourse.XXLeft; btnTitle.Y = Application.GetRealHeight(30); btnTitle.TextID = R.MyInternationalizationString.uNowFirmwareVersion; btnTitle.TextSize = 15; frameBack.AddChidren(btnTitle); var listView = new VerticalListControl(12); listView.Y = Application.GetRealHeight(109); listView.Height = Application.GetRealHeight(800); frameBack.AddChidren(listView); //Linux var rowLinux = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowLinux); rowLinux.AddLeftCaption("Linux", 300); rowLinux.AddRightArrow(); rowLinux.ButtonClickEvent += (sender, e) => { var form = new GatewayLinuxInfoForm(); form.AddForm(this.zbGateway.GwId); }; //协调器 var rowCoordinator = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowCoordinator); rowCoordinator.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uCoordinator), 500); rowCoordinator.AddRightArrow(); rowCoordinator.ButtonClickEvent += (sender, e) => { var form = new GatewayCoordinatorInfoForm(); form.AddForm(this.zbGateway.GwId); }; if (this.listVode != null) { //虚拟驱动 var rowVirtual = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowVirtual); rowVirtual.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uVirtualDrive), 500); rowVirtual.AddRightArrow(); rowVirtual.ButtonClickEvent += (sender, e) => { var form = new GatewayVirtualDriveInfoForm(); form.AddForm(listVode); }; } //没有新版本 if (listVersionInfo[0] == null && listVersionInfo[1] == null && listVersionInfo[2] == null) { //最新固件版本 var rowNew = new FrameRowControl(); rowNew.UseClickStatu = false; listView.AddChidren(rowNew); rowNew.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNewFirmwareVersion), 500); rowNew.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uNothing), 500); } //划线 for (int i = 0; i < listView.ChildrenCount - 1; i++) { ((FrameRowControl)listView.GetChildren(i)).AddBottomLine(); } //调整真实高度 listView.AdjustRealHeight(Application.GetRealHeight(23)); frameBack.Height = listView.Bottom; return frameBack.Bottom; } /// /// 初始化新版本的控件 /// private void InitNewVersionControl(int YY) { var frameBack = new FrameLayout(); frameBack.Y = YY + Application.GetRealHeight(35); frameBack.BackgroundColor = UserCenterColor.Current.White; frameBack.Height = Application.GetMinReal(832); bodyFrameLayout.AddChidren(frameBack); //最新固件版本 var btnTitle = new NormalViewControl(700, 65, true); btnTitle.X = ControlCommonResourse.XXLeft; btnTitle.Y = Application.GetRealHeight(30); btnTitle.TextID = R.MyInternationalizationString.uNewFirmwareVersion; btnTitle.TextSize = 15; frameBack.AddChidren(btnTitle); var listView = new VerticalListControl(12); listView.Y = Application.GetRealHeight(109); listView.Height = frameBack.Height - Application.GetRealHeight(109); frameBack.AddChidren(listView); //Linux if (listVersionInfo[0] != null) { var rowLinux = new FrameRowControl(listView.rowSpace / 2); rowLinux.UseClickStatu = false; listView.AddChidren(rowLinux); rowLinux.AddLeftCaption("Linux", 300); rowLinux.AddMostRightView(Common.LocalDevice.Current.AppendVersion(listVersionInfo[0].FirmwareVersion), 300); rowLinux.AddBottomLine(); } //协调器 if (listVersionInfo[1] != null) { var rowCoordinator = new FrameRowControl(listView.rowSpace / 2); rowCoordinator.UseClickStatu = false; listView.AddChidren(rowCoordinator); rowCoordinator.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uCoordinator), 500); rowCoordinator.AddMostRightView(Common.LocalDevice.Current.AppendVersion(listVersionInfo[1].FirmwareVersion), 300); rowCoordinator.AddBottomLine(); } //虚拟驱动 if (listVersionInfo[2] != null) { var rowVirtual = new FrameRowControl(listView.rowSpace / 2); rowVirtual.UseClickStatu = false; listView.AddChidren(rowVirtual); rowVirtual.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uVirtualDrive), 500); rowVirtual.AddMostRightView(Common.LocalDevice.Current.AppendVersion(listVersionInfo[2].FirmwareVersion), 300); rowVirtual.AddBottomLine(); } //添加固件介绍行 this.AddUpdateContent(listView); //升级 var btnUpdate = new BottomClickButton(); btnUpdate.TextID = R.MyInternationalizationString.uLevelUp; bodyFrameLayout.AddChidren(btnUpdate); btnUpdate.ButtonClickEvent += (sender, e) => { ZbGateway realway = null; if (HdlGatewayLogic.Current.GetRealGateway(ref realway, zbGateway) == false) { //错误:网关对象丢失 string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg); this.ShowMassage(ShowMsgType.Error, msg); return; } HdlThreadLogic.Current.RunThread(() => { //网关升级 DoGatewayUpdate(realway); }); }; } #endregion #region ■ 右上角菜单_________________________ /// /// 初始化右上角菜单 /// private void InitTopRightMenu() { if (UserCenterResourse.HideOption.DeviceHistory != 1) { return; } var btnIcon = new MostRightIconControl(69, 69); btnIcon.UnSelectedImagePath = "Item/More.png"; topFrameLayout.AddChidren(btnIcon); btnIcon.InitControl(); btnIcon.ButtonClickEvent += ((sender, e) => { //显示右上角菜单界面 this.ShowTopRightMenu(); }); } /// /// 显示右上角菜单界面 /// private void ShowTopRightMenu() { var frame = new TopRightMenuControl(1, 2); //历史版本 var deviceMenu = Language.StringByID(R.MyInternationalizationString.uHistoryVersion); frame.AddRowMenu(deviceMenu, "", "", () => { var form = new GatewayHistoryFirmwareVersionForm(); form.AddForm(zbGateway, listVersionInfo[2], listVersionInfo[1], listVersionInfo[0], listVode); form.SelectFirmwareInfoEvent += (info1,info2,info3,listCode) => { listVersionInfo[2] = info1; listVersionInfo[1] = info2; listVersionInfo[0] = info3; listVode = listCode; //初始化当前版本的控件 var yy = this.InitNowVersionControl(); if (listVersionInfo[0] != null || listVersionInfo[1] != null || listVersionInfo[2] != null) { //初始化新版本的控件 this.InitNewVersionControl(yy); } }; }); } #endregion #region ■ 添加固件介绍行_____________________ /// /// 添加固件介绍行 /// /// 列表控件 private void AddUpdateContent(VerticalListControl listContent) { //修改内容 var frameContent = new FrameLayout(); frameContent.Height = Application.GetRealHeight(87); listContent.AddChidren(frameContent); var btnContent = new NormalViewControl(500, 87, true); btnContent.X = ControlCommonResourse.XXLeft; btnContent.Y = Application.GetRealHeight(28); btnContent.TextID = R.MyInternationalizationString.uEditorContent; btnContent.TextSize = 12; frameContent.AddChidren(btnContent); foreach (var info in this.listVersionInfo) { if (info == null) { continue; } foreach (var msg in info.UpdateContent) { var btnRow = new FrameRowControl(); btnRow.UseClickStatu = false; btnRow.Height = Application.GetRealHeight(40); listContent.AddChidren(btnRow); var btnMsg = btnRow.AddLeftCaption(msg, 965); btnMsg.TextSize = 10; btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3; } } //添加底部空白间隙 var frameSpace3 = new FrameLayout(); frameSpace3.Height = Application.GetRealHeight(58); listContent.AddChidren(frameSpace3); } #endregion #region ■ 网关升级___________________________ /// /// 网关升级 /// private void DoGatewayUpdate(ZbGateway realway) { //打开进度条 ProgressFormBar.Current.Start(); //网关升级 var updateLogic = new HdlGatewayUpdateLogic(realway, listVersionInfo[2], listVersionInfo[1], listVersionInfo[0]); //更新状态变化的事件 updateLogic.UpdateStatuChangedEvent += (div, msg) => { HdlThreadLogic.Current.RunMain(() => { if (div == -1) { //异常 this.ShowMassage(ShowMsgType.Tip, msg); ProgressFormBar.Current.Close(); } else if (div == 0) { //一般信息 ProgressFormBar.Current.SetMsg(msg); } else if (div == 1) { //升级完成 ProgressFormBar.Current.Close(); this.ShowMassage(ShowMsgType.Tip, msg); HdlThreadLogic.Current.RunMain(() => { //初始化中部控件 this.InitMiddleFrame(); }); } }); }; //进度值改变事件 updateLogic.ProgressEvent += (value) => { ProgressFormBar.Current.SetValue(value); }; //网关升级开始 updateLogic.StartUpdateReady(); //关闭事件 ProgressFormBar.Current.CloseEvent += () => { //升级对象 string gwId = realway.GwId; if (FirmwareUpdateResourse.dicUpdateList.ContainsKey(gwId) == true && FirmwareUpdateResourse.dicUpdateList[gwId].IsFinishUpdate == true) { //如果网关已经升级完成,界面关闭时,则移除内存 FirmwareUpdateResourse.dicUpdateList[gwId].Dispose(); FirmwareUpdateResourse.dicUpdateList.Remove(gwId); } }; } #endregion } }