using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserCenter.GatewayUpdate
|
{
|
/// <summary>
|
/// 网关固件升级界面
|
/// </summary>
|
public class GatewayFirmwareUpdateForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 当前选择的网关
|
/// </summary>
|
private ZbGateway zbGateway = null;
|
/// <summary>
|
/// 升级固件信息(0:Linux新版本 1:协调器新版本 2~X:都是虚拟驱动的)
|
/// </summary>
|
private List<FirmwareVersionInfo> listVersionInfo = null;
|
/// <summary>
|
/// 虚拟驱动号
|
/// </summary>
|
private List<ZbGatewayData.DriveCodeObj> listVode = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_zbGateway">当前选择的网关</param>
|
public void ShowForm(ZbGateway i_zbGateway)
|
{
|
this.zbGateway = i_zbGateway;
|
|
//设置标题信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate));
|
|
//初始化右上角菜单
|
this.InitTopRightMenu();
|
|
//初始化中部控件
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部控件
|
/// </summary>
|
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);
|
}
|
});
|
});
|
}
|
|
/// <summary>
|
/// 初始化当前版本的控件
|
/// </summary>
|
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 = HdlControlResourse.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;
|
}
|
|
/// <summary>
|
/// 初始化新版本的控件
|
/// </summary>
|
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 = HdlControlResourse.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(HdlDeviceCommonLogic.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(HdlDeviceCommonLogic.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(HdlDeviceCommonLogic.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 ■ 右上角菜单_________________________
|
|
/// <summary>
|
/// 初始化右上角菜单
|
/// </summary>
|
private void InitTopRightMenu()
|
{
|
if (HdlUserCenterResourse.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();
|
});
|
}
|
|
/// <summary>
|
/// 显示右上角菜单界面
|
/// </summary>
|
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 ■ 添加固件介绍行_____________________
|
|
/// <summary>
|
/// 添加固件介绍行
|
/// </summary>
|
/// <param name="listContent">列表控件</param>
|
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 = HdlControlResourse.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 ■ 网关升级___________________________
|
|
/// <summary>
|
/// 网关升级
|
/// </summary>
|
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 (HdlFirmwareUpdateResourse.dicUpdateList.ContainsKey(gwId) == true
|
&& HdlFirmwareUpdateResourse.dicUpdateList[gwId].IsFinishUpdate == true)
|
{
|
//如果网关已经升级完成,界面关闭时,则移除内存
|
HdlFirmwareUpdateResourse.dicUpdateList[gwId].Dispose();
|
HdlFirmwareUpdateResourse.dicUpdateList.Remove(gwId);
|
}
|
};
|
}
|
|
#endregion
|
}
|
}
|