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();
}
}
}