using Shared.Phone.UserCenter;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.MainPage.ControlForm
|
{
|
/// <summary>
|
/// 主页深度卡片的底层共通
|
/// </summary>
|
public class DeviceDetailCardCommonForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 界面关闭事件
|
/// </summary>
|
public Action<CommonDevice> FormCloseEvent = null;
|
/// <summary>
|
/// 设备对象
|
/// </summary>
|
public CommonDevice device = null;
|
/// <summary>
|
/// 当前选择的房间对象(再次刷新界面时,这个东西有可能是null)
|
/// </summary>
|
public Common.Room nowSelectRoom = null;
|
/// <summary>
|
/// 标记它是由哪个控件调起的
|
/// </summary>
|
public ViewGroup RowOrCardControl = null;
|
/// <summary>
|
/// 状态控件
|
/// </summary>
|
private NormalViewControl btnStatu = null;
|
/// <summary>
|
/// 设备名称控件
|
/// </summary>
|
private NormalViewControl btnDeviceName = null;
|
/// <summary>
|
/// 房间名称
|
/// </summary>
|
private NormalViewControl btnRoomName = null;
|
/// <summary>
|
/// 是否获取网关反馈的结果 0:没有获取得到 1:已经获取得到
|
/// </summary>
|
public int ResponeResult = 0;
|
/// <summary>
|
/// 当前端点的功能类型
|
/// </summary>
|
private DeviceFunctionType nowDeviceFuncType = DeviceFunctionType.A未定义;
|
/// <summary>
|
/// 白色背景的宽度
|
/// </summary>
|
private int backFrameWidth = 0;
|
/// <summary>
|
/// 白色背景的高度
|
/// </summary>
|
private int backFrameHeight = 0;
|
/// <summary>
|
/// 当前的文本
|
/// </summary>
|
private string CurrentText = string.Empty;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_device">设备对象</param>
|
/// <param name="i_nowSelectRoom">房间</param>
|
/// <param name="i_backWidth">白色背景的宽度(非真实值)</param>
|
/// <param name="i_backHeight">白色背景的高度(非真实值)</param>
|
public void ShowForm(CommonDevice i_device, Common.Room i_nowSelectRoom, int i_backWidth, int i_backHeight)
|
{
|
this.CurrentText = Language.StringByID(R.MyInternationalizationString.Current) + " ";
|
this.nowSelectRoom = i_nowSelectRoom;
|
this.backFrameWidth = i_backWidth;
|
this.backFrameHeight = i_backHeight;
|
|
//更多
|
var btnMore = new MostRightIconControl(69, 69);
|
btnMore.UnSelectedImagePath = "Item/More.png";
|
topFrameLayout.AddChidren(btnMore);
|
btnMore.InitControl();
|
btnMore.ButtonClickEvent += (sender, e) =>
|
{
|
var detailInfo = new DeviceDetailInfoForm();
|
detailInfo.AddForm(device, nowSelectRoom);
|
};
|
|
//初始化中部信息
|
this.InitMiddleFrame(i_device);
|
//添加设备上报事件
|
this.AddDeviceReportEvent();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
/// <param name="i_device">设备对象</param>
|
/// <param name="backWidth">白色背景的宽度(非真实值)</param>
|
/// <param name="backHeight">白色背景的高度(非真实值)</param>
|
private void InitMiddleFrame(CommonDevice i_device)
|
{
|
this.device = i_device;
|
this.nowDeviceFuncType = device.DfunctionType;
|
|
//清空bodyFrame
|
this.ClearBodyFrame();
|
|
//白色背景控件
|
var frameWhiteBack = new FrameLayout();
|
frameWhiteBack.Y = Application.GetRealHeight(115);
|
frameWhiteBack.Width = Application.GetRealWidth(this.backFrameWidth);
|
frameWhiteBack.Height = Application.GetRealHeight(this.backFrameHeight);
|
frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
|
frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
|
frameWhiteBack.Gravity = Gravity.CenterHorizontal;
|
bodyFrameLayout.AddChidren(frameWhiteBack);
|
|
//设备名称
|
this.btnDeviceName = new NormalViewControl(100, 60, true);
|
btnDeviceName.Y = Application.GetRealHeight(46);
|
btnDeviceName.TextSize = 15;
|
btnDeviceName.IsBold = true;
|
btnDeviceName.Text = HdlDeviceCommonLogic.Current.GetDeviceEpointName(i_device);
|
btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
|
btnDeviceName.TextAlignment = TextAlignment.Center;
|
btnDeviceName.Gravity = Gravity.CenterHorizontal;
|
frameWhiteBack.AddChidren(btnDeviceName);
|
|
//状态
|
this.btnStatu = new NormalViewControl(700, 42, true);
|
btnStatu.Y = btnDeviceName.Bottom + Application.GetRealHeight(12);
|
btnStatu.TextSize = 10;
|
btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
|
btnStatu.TextAlignment = TextAlignment.Center;
|
btnStatu.Gravity = Gravity.CenterHorizontal;
|
frameWhiteBack.AddChidren(btnStatu);
|
|
//房间的黑色背景
|
var frameRoomBlack = new FrameLayout();
|
frameRoomBlack.Height = Application.GetRealHeight(138);
|
frameRoomBlack.Width = frameWhiteBack.Width;
|
frameRoomBlack.BackgroundColor = 0xff232323;
|
frameRoomBlack.Radius= (uint)Application.GetRealHeight(17);
|
frameRoomBlack.Gravity = Gravity.BottomCenter;
|
frameWhiteBack.AddChidren(frameRoomBlack);
|
|
//让上部变直角(因为安卓这里,单独指定左下和右下角圆角的话,圆不了)
|
var frameTemp = new FrameLayout();
|
frameTemp.Height = Application.GetRealHeight(30);
|
frameTemp.Width = frameWhiteBack.Width;
|
frameTemp.BackgroundColor = frameRoomBlack.BackgroundColor;
|
frameRoomBlack.AddChidren(frameTemp);
|
|
//房间图标
|
var btnRoomIcon = new IconViewControl(81);
|
btnRoomIcon.X = HdlControlResourse.XXLeft;
|
btnRoomIcon.UnSelectedImagePath = "Item/Room.png";
|
btnRoomIcon.Gravity = Gravity.CenterVertical;
|
frameRoomBlack.AddChidren(btnRoomIcon);
|
|
//房间名称
|
this.btnRoomName = new NormalViewControl(600, 52, true);
|
btnRoomName.X = btnRoomIcon.Right + Application.GetRealWidth(12);
|
btnRoomName.TextSize = 12;
|
btnRoomName.TextColor = UserCenterColor.Current.White;
|
btnRoomName.Gravity = Gravity.CenterVertical;
|
if (this.nowSelectRoom != null)
|
{
|
btnRoomName.Text = this.nowSelectRoom.Name;
|
}
|
else
|
{
|
//未分配
|
btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
|
}
|
frameRoomBlack.AddChidren(btnRoomName);
|
|
//收藏
|
var btnCollect = new IconBigViewControl(69, 69);
|
btnCollect.UnSelectedImagePath = "Item/Collection.png";
|
btnCollect.SelectedImagePath = "Item/CollectionSelected.png";
|
btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_device);
|
frameWhiteBack.AddChidren(btnCollect);
|
btnCollect.InitControl();
|
btnCollect.X = Application.GetRealWidth(850) - btnCollect.XOffset;
|
btnCollect.Y = Application.GetRealHeight(35) - btnCollect.YOffset;
|
btnCollect.ButtonClickEvent += (sender, e) =>
|
{
|
//状态取反
|
btnCollect.IsSelected = !btnCollect.IsSelected;
|
if (btnCollect.IsSelected == false)
|
{
|
//取消收藏
|
HdlRoomLogic.Current.DeleteLoveDevice(i_device);
|
}
|
else
|
{
|
//添加收藏
|
HdlRoomLogic.Current.AddLoveDevice(i_device);
|
}
|
};
|
|
//底层初始化中部控件完成之后,调用各自界面的初始化函数
|
this.InitMiddleFrameAfter(frameWhiteBack);
|
}
|
|
/// <summary>
|
/// 底层初始化中部控件完成之后
|
/// </summary>
|
/// <param name="frameWhiteBack">白色背景控件</param>
|
public virtual void InitMiddleFrameAfter(FrameLayout frameWhiteBack)
|
{
|
}
|
|
#endregion
|
|
#region ■ 是否获取网关反馈的结果_____________
|
|
/// <summary>
|
/// 检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
|
/// </summary>
|
/// <param name="listControl">需要限制不能点击的控件(超时时,它会还原Select状态)</param>
|
/// <param name="lastAction">函数运行完成后的回调函数。参数false:没有等到网关回复 true:接收到了网关回复</param>
|
public void StartCheckResponeResult(List<ButtonBase> listControl, Action<bool> lastAction = null)
|
{
|
this.ResponeResult = 0;
|
|
//先让指定控件不能点击
|
foreach (var myContr in listControl)
|
{
|
myContr.CanClick = false;
|
}
|
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
int waitime = 40;
|
while (waitime > 0)
|
{
|
System.Threading.Thread.Sleep(100);
|
if (this.ResponeResult == 1)
|
{
|
//已经获取得到数据
|
break;
|
}
|
waitime--;
|
//2秒的时候,还是接受不到的话,强制再次刷新设备状态
|
if (waitime == 20)
|
{
|
//从新发送获取设备的状态(强制)
|
this.device.HadReadDeviceStatu = false;
|
if (this.RowOrCardControl != null)
|
{
|
this.RowOrCardControl.GetType().InvokeMember("SendStatuComand", System.Reflection.BindingFlags.InvokeMethod, null, this.RowOrCardControl, null);
|
}
|
}
|
}
|
if (waitime <= 0 && this.Parent != null)
|
{
|
//没有获取得到结果
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL));
|
msgContr.Show();
|
});
|
}
|
//开关按钮可以再点击
|
foreach (var myContr in listControl)
|
{
|
myContr.CanClick = true;
|
}
|
//函数运行完成的回调函数
|
lastAction?.Invoke(this.ResponeResult == 1);
|
lastAction = null;
|
});
|
}
|
|
/// <summary>
|
/// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport)
|
/// </summary>
|
/// <param name="comandDiv">命令区分</param>
|
/// <param name="report">上报数据</param>
|
public virtual bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report)
|
{
|
return false;
|
}
|
|
/// <summary>
|
/// 添加设备上报事件
|
/// </summary>
|
private void AddDeviceReportEvent()
|
{
|
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(this.device);
|
//属性上报
|
HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceDetailCardAttribute" + mainKeys, ReceiveComandDiv.A设备属性上报, (report) =>
|
{
|
string mainKey2 = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
|
if (mainKeys != mainKey2)
|
{
|
//不是同一个东西
|
return;
|
}
|
//检测结果
|
if (this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, report) == true)
|
{
|
//结果已经接收到
|
this.ResponeResult = 1;
|
}
|
});
|
}
|
|
#endregion
|
|
#region ■ 界面重新激活事件___________________
|
|
/// <summary>
|
/// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
|
/// </summary>
|
public override int FormActionAgainEvent()
|
{
|
//如果不是喜爱房间的话,它的房间有可能被切换了
|
if (this.nowSelectRoom == null || this.nowSelectRoom.IsLove == false)
|
{
|
this.nowSelectRoom = HdlRoomLogic.Current.GetRoomByDevice(this.device);
|
}
|
//如果功能类型变更了
|
if (this.nowDeviceFuncType != this.device.DfunctionType)
|
{
|
//重新刷新界面,初始化中部信息
|
this.InitMiddleFrame(this.device);
|
}
|
else
|
{
|
//刷新名字
|
this.btnDeviceName.Text = HdlDeviceCommonLogic.Current.GetDeviceEpointName(this.device);
|
btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
|
btnDeviceName.Gravity = Gravity.CenterHorizontal;
|
if (this.nowSelectRoom == null)
|
{
|
//未分配
|
this.btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
|
}
|
else
|
{
|
this.btnRoomName.Text = this.nowSelectRoom.Name;
|
}
|
}
|
|
return 1;
|
}
|
|
#endregion
|
|
#region ■ 界面关闭___________________________
|
|
/// <summary>
|
/// 界面关闭
|
/// </summary>
|
public override void CloseFormBefore()
|
{
|
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(this.device);
|
HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceDetailCardAttribute" + mainKeys);
|
|
//回调函数
|
this.FormCloseEvent?.Invoke(this.device);
|
this.FormCloseEvent = null;
|
|
base.CloseFormBefore();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 设置状态文本(不需要指定【当前两个字】)
|
/// </summary>
|
/// <param name="text"></param>
|
public void SetStatuText(string text)
|
{
|
this.btnStatu.Text = this.CurrentText + text;
|
}
|
|
/// <summary>
|
/// 设置PM2.5传感器状态文本(不需要指定【当前两个字】)
|
/// </summary>
|
/// <param name="text"></param>
|
public void SetPmTwoPointFiveStatuText(string text)
|
{
|
this.btnStatu.Text = text;
|
}
|
|
/// <summary>
|
/// 重新设置设备名字控件和状态控件的Y轴
|
/// </summary>
|
/// <param name="i_NameY">设备名字控件的Y轴(真实值)</param>
|
/// <param name="i_StatuY">状态控件的Y轴(真实值)</param>
|
public void ResetDeviceNameAndStatuPoint(int i_NameY, int i_StatuY)
|
{
|
btnDeviceName.Y = i_NameY;
|
btnStatu.Y = i_StatuY;
|
}
|
|
#endregion
|
}
|
}
|