using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DeviceAirConditioner
{
///
/// 中央空调的模块升级界面
///
public class ACZbGatewayModuleUpdateForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 设备Ota
///
private OTADevice otaDevice = null;
///
/// 设备
///
private CommonDevice deviceAc = null;
///
/// 前回选择的控件
///
private NormalSelectControl oldSelectContr = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 设备
public void ShowForm(CommonDevice i_deviceAc)
{
this.deviceAc = i_deviceAc;
this.otaDevice = Common.LocalDevice.Current.GetOTADevice(i_deviceAc.DeviceAddr);
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditioningModule));
//初始化中部信息
this.InitMiddleFrame();
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
//清空bodyFrame
this.ClearBodyFrame();
var frameBack = new FrameLayout();
frameBack.Height = Application.GetRealHeight(3);
frameBack.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(frameBack);
var listView = new VerticalListControl(29);
listView.Y = frameBack.Bottom;
listView.Height = bodyFrameLayout.Height - frameBack.Height;
listView.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(listView);
//初始化空调模块列表
this.InitAirConditioningModuleList(listView);
}
#endregion
#region ■ 初始化空调模块列表_________________
///
/// 初始化空调模块列表
///
private void InitAirConditioningModuleList(VerticalListControl listView)
{
var list = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.ZigbeeDevice, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
var listUpdate = new List();
foreach (var data in list)
{
if (data.Name.EndsWith(".bin") == true)
{
//只要.bin文件
listUpdate.Add(data);
}
}
if (listUpdate.Count == 0)
{
//没有可升级的空调模块
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAirConditioningUpdateModule));
return;
}
HdlThreadLogic.Current.RunMainInThread(() =>
{
for (int i = 0; i < listUpdate.Count; i++)
{
//添加模块行
this.AddModuleRow(listView, listUpdate[i], i.ToString(), i != listUpdate.Count - 1);
}
//调整高度
listView.AdjustRealHeightByBottomButton(Application.GetRealHeight(23));
//升级
var btnUpdate = new BottomClickButton();
btnUpdate.TextID = R.MyInternationalizationString.uLevelUp;
bodyFrameLayout.AddChidren(btnUpdate);
btnUpdate.ButtonClickEvent += (sender, e) =>
{
var selectInfo = this.GetSelectFirmware(listView, listUpdate);
if (selectInfo == null)
{
//没有选择固件
return;
}
//设备升级
HdlThreadLogic.Current.RunThread(() =>
{
this.DoDeviceUpdate(selectInfo);
});
};
});
}
///
/// 添加模块行
///
///
///
///
private void AddModuleRow(VerticalListControl listView, FirmwareVersionInfo info, string mainkeys,bool addLine)
{
//获取空调模块的名字
string textView = this.GetAirConditioningModuleName(info);
var row = new NormalSelectControl(textView, listView.rowSpace / 2);
row.MainKeys = mainkeys;
listView.AddChidren(row);
row.InitControl("Device/AirConditionerEpoint.png");
if (addLine == true)
{
row.AddBottomLine();
}
row.ButtonClickEvent += (sender, e) =>
{
//取消
if (row.IsSelected == true)
{
row.IsSelected = false;
oldSelectContr = null;
return;
}
//选择
row.IsSelected = true;
if (oldSelectContr != null)
{
oldSelectContr.IsSelected = false;
}
oldSelectContr = row;
};
}
///
/// 获取空调模块的名字
///
///
///
private string GetAirConditioningModuleName(FirmwareVersionInfo info)
{
string textView = string.Empty;
if (info.Name.Contains("IRACC_DAK") == true)
{
//大金空调模块
textView = Language.StringByID(R.MyInternationalizationString.uDakAirConditioningModule);
}
else if (info.Name.Contains("IRACC_HIC") == true)
{
//重工空调模块
textView = Language.StringByID(R.MyInternationalizationString.uHicAirConditioningModule);
}
else if (info.Name.Contains("IRACC_HITACHI") == true)
{
//日立空调模块
textView = Language.StringByID(R.MyInternationalizationString.uHitachiAirConditioningModule);
}
else if (info.Name.Contains("IRACC_SAEC") == true)
{
//电机空调模块
textView = Language.StringByID(R.MyInternationalizationString.uSaecAirConditioningModule);
}
else if (info.Name.Contains("IRACC_TOSHIBA") == true)
{
//东芝空调模块
textView = Language.StringByID(R.MyInternationalizationString.uToshibaAirConditioningModule);
}
else if (info.Name.Contains("IRACC_GREE") == true)
{
//格力空调模块
textView = Language.StringByID(R.MyInternationalizationString.uGreeAirConditioningModule);
}
else if (info.Name.Contains("IRACC_MIDEA") == true)
{
//美的空调模块
textView = Language.StringByID(R.MyInternationalizationString.uMideaAirConditioningModule);
}
else
{
//空调升级模块
textView = Language.StringByID(R.MyInternationalizationString.uAirConditioningUpdateModule);
}
return textView;
}
#endregion
#region ■ 一般方法___________________________
///
/// 获取选择的升级固件
///
///
///
///
private FirmwareVersionInfo GetSelectFirmware(VerticalListControl listView, List listInfo)
{
int contrCount = listView.ChildrenCount;
for (int i = 0; i < contrCount; i++)
{
var myView = listView.GetChildren(i) as NormalSelectControl;
if (myView == null || myView.IsSelected == false)
{
continue;
}
return listInfo[i];
}
return null;
}
#endregion
#region ■ 设备升级___________________________
///
/// 设备升级
///
private void DoDeviceUpdate(FirmwareVersionInfo updateInfo)
{
//打开进度条
ProgressFormBar.Current.Start();
//设备升级
var updateLogic = new HdlACZbGatewayUpdateLogic(deviceAc, updateInfo);
//更新状态变化的事件
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.CloseForm();
});
}
});
};
//进度值改变事件
updateLogic.ProgressEvent += (value) =>
{
ProgressFormBar.Current.SetValue(value);
};
//设备升级开始
updateLogic.StartUpdateReady();
//关闭事件
ProgressFormBar.Current.CloseEvent += () =>
{
//升级对象
if (FirmwareUpdateResourse.dicUpdateList.ContainsKey(deviceAc.DeviceAddr) == true
&& FirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].IsFinishUpdate == true)
{
//如果设备已经升级完成,界面关闭时,则移除内存
FirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].Dispose();
FirmwareUpdateResourse.dicUpdateList.Remove(deviceAc.DeviceAddr);
}
};
}
#endregion
}
}