using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.GatewayManage { /// /// 网关固件升级的画面 /// public class GatewayFirmwareUpdateForm : EditorCommonForm { /// /// 要升级的网关 /// private ZbGateway upDatezbGateway = null; /// /// 虚拟设备的固件信息 /// private FirmwareVersionInfo virtualFirmware = null; /// /// 协调器新版本的固件信息 /// private FirmwareVersionInfo coordinatorFirmware = null; /// /// 网关新版本的固件信息 /// private FirmwareVersionInfo gatewayFirmware = null; /// /// 虚拟驱动号 /// private List listVode = null; /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 网关 /// 虚拟设备的固件信息 /// 协调器新版本的固件信息 /// 网关新版本的固件信息 /// 虚拟驱动 public void ShowForm(ZbGateway i_zbGateway, FirmwareVersionInfo i_virtualFirmware, FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware, List i_listVode) { this.upDatezbGateway = i_zbGateway; this.virtualFirmware = i_virtualFirmware; this.coordinatorFirmware = i_coordinatorFirmware; this.gatewayFirmware = i_gatewayFirmware; this.listVode = i_listVode; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate)); var btnIcon = new MostRightIconControl(69, 69); btnIcon.UnSelectedImagePath = "Item/More.png"; topFrameLayout.AddChidren(btnIcon); btnIcon.InitControl(); btnIcon.ButtonClickEvent += (sender, e) => { //菜单控件 var frameMenu = new TopRightMenuControl(1); //历史版本 string menu1 = Language.StringByID(R.MyInternationalizationString.uHistoryVersion); frameMenu.AddRowMenu(menu1, "", "", () => { var form = new GatewayHistoryFirmwareVersionForm(); form.AddForm(upDatezbGateway, virtualFirmware, coordinatorFirmware, gatewayFirmware, this.listVode); form.FormCloseAction += ((virtualFirmware1, coordinatorFirmware1, gatewayFirmware1, listVode1) => { //如果这个东西正在升级。则不刷新历史版本 string gwID = HdlGatewayLogic.Current.GetGatewayId(upDatezbGateway); if (FirmwareUpdateResourse.dicGatewayUpdateList.ContainsKey(gwID) == false) { //重新刷新界面 this.ShowForm(upDatezbGateway, virtualFirmware1, coordinatorFirmware1, gatewayFirmware1, listVode1); } }); }); }; //初始化中部控件 this.InitMiddleFrame(); } /// /// 初始化中部控件 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); //没有新版本 if (virtualFirmware == null && coordinatorFirmware == null && gatewayFirmware == null) { //显示已经是新版本 this.ShowIsMostNewVersion(); } else { //显示存在最新版本 this.ShowIsHadNewVersion(); } } /// /// 显示已经是新版本 /// private void ShowIsMostNewVersion() { //如果选择的是历史版本,则同步 string gwID = HdlGatewayLogic.Current.GetGatewayId(upDatezbGateway); if (FirmwareUpdateResourse.dicGatewayUpdateList.ContainsKey(gwID) == true) { var btnUpdateControl = FirmwareUpdateResourse.dicGatewayUpdateList[gwID]; bodyFrameLayout.AddChidren(btnUpdateControl); //初始化升级控件 this.InitGatewayUpdateControl(btnUpdateControl); return; } //当前程序版本 var btnVersionMsg = new NormalViewControl(800, true); btnVersionMsg.TextID = R.MyInternationalizationString.uIsMostNewVersion; btnVersionMsg.Y = Application.GetRealHeight(100); btnVersionMsg.TextAlignment = TextAlignment.Center; btnVersionMsg.Gravity = Gravity.CenterHorizontal; bodyFrameLayout.AddChidren(btnVersionMsg); //版本 var btnVersion = new NormalViewControl(800, true); var linVersion = HdlGatewayLogic.Current.GetGwInfoAttribute(upDatezbGateway, "LinuxFWVersion"); btnVersion.Text = Common.LocalDevice.Current.AppendVersion(Convert.ToInt32(linVersion)); btnVersion.Y = btnVersionMsg.Bottom + Application.GetRealHeight(10); btnVersion.TextAlignment = TextAlignment.Center; btnVersion.Gravity = Gravity.CenterHorizontal; bodyFrameLayout.AddChidren(btnVersion); } /// /// 显示存在最新版本 /// private void ShowIsHadNewVersion() { //升级控件 GatewayFirmwareUpdateControl btnUpdateControl = null; string gwID = HdlGatewayLogic.Current.GetGatewayId(upDatezbGateway); if (FirmwareUpdateResourse.dicGatewayUpdateList.ContainsKey(gwID) == true) { btnUpdateControl = FirmwareUpdateResourse.dicGatewayUpdateList[gwID]; bodyFrameLayout.AddChidren(btnUpdateControl); } else { btnUpdateControl = new GatewayFirmwareUpdateControl(null, this.upDatezbGateway, this.virtualFirmware, this.coordinatorFirmware, this.gatewayFirmware); bodyFrameLayout.AddChidren(btnUpdateControl); btnUpdateControl.InitChidrenControl(); } //初始化升级控件 this.InitGatewayUpdateControl(btnUpdateControl); } /// /// 初始化升级控件 /// /// private void InitGatewayUpdateControl(GatewayFirmwareUpdateControl btnUpdateControl) { //升级:注意此处还没有处理事件还原 BottomClickButton btnUpdate = btnUpdateControl.btnUpdateButton; if (btnUpdate == null) { btnUpdate = new BottomClickButton(); btnUpdate.UseClickStatu = false; btnUpdate.TextID = R.MyInternationalizationString.uLevelUp; btnUpdate.Gravity = Gravity.BottomCenter; btnUpdate.Radius = 0; btnUpdate.Width = Application.CurrentWidth; btnUpdate.ButtonClickEvent += (sender, e) => { if (btnUpdateControl.UpdateStatu == UpdateStatuMode.UpdateSuccess) { //升级成功的时候,如果单击此按钮,则关闭界面 this.CloseForm(); return; } //进入执行更新操作准备阶段 btnUpdateControl.StartUpdateReady(); }; } btnUpdateControl.btnUpdateButton = btnUpdate; bodyFrameLayout.AddChidren(btnUpdate); var listView = new VerticalScrolViewLayout(); listView.Y = btnUpdateControl.Bottom; listView.Height = bodyFrameLayout.Height - btnUpdateControl.Height - btnUpdate.Height; bodyFrameLayout.AddChidren(listView); //获取更新内容 List listmsg = new List(); if (btnUpdateControl.virtualFirmware != null) { listmsg.AddRange(btnUpdateControl.virtualFirmware.UpdateContent); } if (btnUpdateControl.coordinatorFirmware != null) { if (listmsg.Count > 0) { listmsg.Add(string.Empty); } listmsg.AddRange(btnUpdateControl.coordinatorFirmware.UpdateContent); } if (btnUpdateControl.gatewayFirmware != null) { if (listmsg.Count > 0) { listmsg.Add(string.Empty); } listmsg.AddRange(btnUpdateControl.gatewayFirmware.UpdateContent); } //做成更新内容控件 NormalViewControl btnTemp = null; foreach (string msg in listmsg) { var btnmsg = new NormalViewControl(listView.Width, false); btnmsg.X = ControlCommonResourse.XXLeft; if (btnTemp != null) { btnmsg.Y = btnTemp.Bottom + Application.GetRealHeight(5); } btnmsg.Text = msg; listView.AddChidren(btnmsg); btnTemp = btnmsg; } } /// /// 画面关闭 /// public override void CloseForm() { //升级控件 string mainKeys = HdlGatewayLogic.Current.GetGatewayId(upDatezbGateway); if (FirmwareUpdateResourse.dicGatewayUpdateList.ContainsKey(mainKeys) == true && FirmwareUpdateResourse.dicGatewayUpdateList[mainKeys].IsFinishUpdate == true) { //如果网关已经升级完成,界面关闭时,则移除内存 FirmwareUpdateResourse.dicGatewayUpdateList.Remove(mainKeys); } base.CloseForm(); } } }