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
}
}