using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.Device
{
///
/// 固件升级画面
///
public class DeviceFirmwareUpdateForm : DialogCommonForm
{
#region ■ 变量声明___________________________
///
/// 设备的Mac地址
///
private string deviceMac = string.Empty;
///
/// 设备成功升级完成的回调函数
///
public Action FinishUpdateEvent = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// ota设备对象
/// 固件升级信息
public void ShowForm(OTADevice device, FirmwareVersionInfo deviceFirmware)
{
this.deviceMac = device.DeviceAddr;
//初始化中部信息
this.InitMiddleFrame(device, deviceFirmware);
}
///
/// 初始化中部信息
///
/// ota设备对象
/// 固件升级信息
private void InitMiddleFrame(OTADevice device, FirmwareVersionInfo deviceFirmware)
{
var frameBack = new FrameLayout();
frameBack.Width = Application.GetRealWidth(674);
frameBack.Height = Application.GetRealHeight(386);
frameBack.BackgroundColor = UserCenterColor.Current.White;
frameBack.Gravity = Gravity.CenterHorizontal;
frameBack.Y = Application.GetRealHeight(683);
frameBack.Radius = 6;
bodyFrameLayout.AddChidren(frameBack);
//进度显示文本
var btnText = new NormalViewControl(frameBack.Width, Application.GetRealHeight(58), false);
btnText.Y = Application.GetRealHeight(248);
btnText.TextColor = UserCenterColor.Current.TextGrayColor1;
btnText.TextAlignment = TextAlignment.Center;
//btnText.Text = "升级中";
frameBack.AddChidren(btnText);
//进度条
var btnProRow = new FrameLayout();
btnProRow.Gravity = Gravity.CenterHorizontal;
btnProRow.Y = Application.GetRealHeight(161);
btnProRow.Width = Application.GetRealWidth(559);
btnProRow.Height = Application.GetRealHeight(29);
btnProRow.BackgroundColor = 0xfff5f5f5;
btnProRow.Radius = (uint)Application.GetRealHeight(29) / 2;
frameBack.AddChidren(btnProRow);
var btnProgressBar = new FrameLayout();
btnProgressBar.Width = 0;
btnProgressBar.Height = btnProRow.Height;
btnProgressBar.Radius = btnProRow.Radius;
btnProgressBar.BackgroundColor = 0xfffb744a;
btnProgressBar.Radius = (uint)Application.GetRealHeight(29) / 2;
btnProRow.AddChidren(btnProgressBar);
//进度值文本
var frameProgress = new FrameLayout();
frameProgress.Width = Application.GetRealWidth(84);
frameProgress.Height = Application.GetRealHeight(60);
frameProgress.Y = Application.GetRealHeight(86);
frameBack.AddChidren(frameProgress);
frameProgress.X = btnProRow.X + btnProgressBar.Right - frameProgress.Width / 2;
var btnProgressPic = new PicViewControl(84, 60);
btnProgressPic.UnSelectedImagePath = "Item/ProgressMsg.png";
frameProgress.AddChidren(btnProgressPic);
var btnProgressView = new NormalViewControl(84, 32, true);
btnProgressView.TextSize = 10;
btnProgressView.TextAlignment = TextAlignment.Center;
btnProgressView.Text = "0%";
frameProgress.AddChidren(btnProgressView);
//设备升级
this.DeviceUpdateMethod(device, deviceFirmware, btnText, btnProgressView, frameProgress, btnProgressBar, btnProRow.Width);
}
#endregion
#region ■ 设备升级___________________________
///
/// 设备升级
///
/// 设备对象
/// 固件信息
/// 标题控件
/// 进度值文本的显示控件
/// 进度值能够移动的那个框控件
/// 进度条
/// 进度条容器的最大宽度
private void DeviceUpdateMethod(OTADevice device, FirmwareVersionInfo deviceFirmware, NormalViewControl btnText,
NormalViewControl btnProgressView, FrameLayout frameProgress, FrameLayout btnProgressBar, int ProRowWidth)
{
//设备升级
var updateLogic = new HdlDeviceUpdateLogic(device, deviceFirmware);
//更新状态变化的事件
updateLogic.UpdateStatuChangedEvent += (div, msg) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
if (div == -1)
{
//异常
this.ShowMassage(ShowMsgType.Tip, msg);
this.CloseForm();
}
else if (div == 0)
{
//一般信息
btnText.Text = msg;
}
else if (div == 1)
{
//升级完成
this.ShowMassage(ShowMsgType.Tip, msg);
//调用回调函数
this.FinishUpdateEvent?.Invoke();
this.CloseForm();
}
else if (div == 2)
{
//主动终止升级
this.CloseForm();
}
});
};
//进度值改变事件
updateLogic.ProgressEvent += (value) =>
{
Application.RunOnMainThread(() =>
{
//进度条
decimal result = value / 100;
int width = (int)(result * ProRowWidth);
btnProgressBar.Width = width;
//文本显示
btnProgressView.Text = value + "%";
//文本显示的那个图片框移动
frameProgress.X = ControlCommonResourse.XXLeft + btnProgressBar.Right - frameProgress.Width / 2;
});
};
//设备升级开始
updateLogic.StartUpdateReady();
//终止升级
btnText.ButtonClickEvent += (sender, e) =>
{
//再次调用,内部条件达成时,可以选择终止升级
updateLogic.StartUpdateReady();
};
}
#endregion
#region ■ 界面关闭___________________________
///
/// 画面关闭
///
public override void CloseFormBefore()
{
//安卓可以点击系统的返回键
UserView.HomePage.Instance.ScrollEnabled = true;
Shared.Common.CommonPage.BackKeyCanClick = true;
//升级对象
if (FirmwareUpdateResourse.dicDeviceUpdateList.ContainsKey(deviceMac) == true
&& FirmwareUpdateResourse.dicDeviceUpdateList[deviceMac].IsFinishUpdate == true)
{
//如果设备已经升级完成,界面关闭时,则移除内存
FirmwareUpdateResourse.dicDeviceUpdateList[deviceMac].Dispose();
FirmwareUpdateResourse.dicDeviceUpdateList.Remove(deviceMac);
}
this.FinishUpdateEvent = null;
base.CloseFormBefore();
}
#endregion
}
}