using Shared.Common;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.MainPage
{
///
/// 主页(注意,BodyFrameLyout是场景和功能的桌布)
///
public class HomeMainPageForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// The instance.
///
public static HomeMainPageForm Instance;
///
/// 整个界面的上下滑动控件
///
private VerticalFrameControl listBodyContr = null;
///
/// 房间的滑动容器控件
///
private HorizontalPages roomPageView = null;
///
/// 设备卡片控件(主键为:设备主键)
///
private Dictionary dicDeviceCardControl = new Dictionary();
///
/// 场景卡片控件(主键为:场景ID)
///
private Dictionary dicSceneCardControl = new Dictionary();
///
/// 楼层名字控件
///
private NormalViewControl btnFloorName = null;
///
/// 房间正在变更中
///
private bool isRoomChanging = false;
#endregion
#region ■ 初始化_____________________________
///
/// 界面显示
///
public void ShowForm()
{
this.FormID = "HomeMainPageForm";
Instance = this;
//先初始化左滑房间列表界面(在反射里面初始化)
if (LeftListRoomViewFrom.Instance == null) { }
//整个背景的上下滑动控件
if (this.listBodyContr == null)
{
this.listBodyContr = new VerticalFrameControl();
listBodyContr.Height = this.Height;
listBodyContr.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
this.AddChidren(listBodyContr);
}
else
{
//清除全部
this.listBodyContr.frameTable.RemoveAll();
listBodyContr.RecoverTableHeight();
}
//初始化头部控件
this.InitTopFrameLayoutControl();
//初始化中间控件
this.InitMidFrameLayoutControl();
//添加设备状态上报事件
this.AddNormalDeviceReportEvent();
//添加传感器状态上报事件
this.AddSensorDeviceReportEvent();
//开启传感器状态还原的线程
this.StartRecoverSenorStatuThread();
}
///
/// 初始化头部控件
///
private void InitTopFrameLayoutControl()
{
//头部容器
base.topFrameLayout = new NormalFrameLayout();
topFrameLayout.Y = Application.GetRealHeight(60);
topFrameLayout.Height = Application.GetRealHeight(127);
topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
listBodyContr.frameTable.AddChidren(topFrameLayout);
//楼层图标
var btnFloorIcon = new IconViewControl(69);
btnFloorIcon.X = HdlControlResourse.XXLeft;
btnFloorIcon.Gravity = Gravity.CenterVertical;
btnFloorIcon.UnSelectedImagePath = "Item/Floor.png";
topFrameLayout.AddChidren(btnFloorIcon);
//拥有楼层
this.btnFloorName = null;
if (Config.Instance.Home.FloorDics.Count > 0)
{
//拥有楼层的时候,点击才有效
btnFloorIcon.ButtonClickEvent += (sender, e) =>
{
//显示选择楼层的界面
this.ShowSelectFloorForm(btnFloorName);
};
//楼层名
this.btnFloorName = new NormalViewControl(500, 100, true);
btnFloorName.X = btnFloorIcon.Right;
btnFloorName.Gravity = Gravity.CenterVertical;
btnFloorName.TextColor = ZigbeeColor.Current.GXCTextColor;
btnFloorName.Text = Config.Instance.Home.GetCurrentFloorName;
btnFloorName.IsBold = true;
btnFloorName.Width = btnFloorName.GetRealWidthByText() + Application.GetRealWidth(20);
topFrameLayout.AddChidren(btnFloorName);
btnFloorName.ButtonClickEvent += (sender, e) =>
{
//显示选择楼层的界面
this.ShowSelectFloorForm(btnFloorName);
};
}
//可视对讲快捷方式
Shared.Phone.Device.VideoIntercom.VideoMachine.AccountSupportVideo(topFrameLayout);
//安防快捷方式
if (HdlUserCenterResourse.ResidenceOption.SafetyShortcut)
{
var btnSafety = new Controls.SafetyShortcutControl();
btnSafety.X = Application.GetRealWidth(860);
btnSafety.Gravity = Gravity.CenterVertical;
topFrameLayout.AddChidren(btnSafety);
}
//消息图标
var btnMessage = new MessageManagementControl();
btnMessage.X = Application.GetRealWidth(953);
btnMessage.Gravity = Gravity.CenterVertical;
btnMessage.UnSelectedImagePath = "Item/Message.png";
btnMessage.SelectedImagePath = "Item/MessageSelected.png";
topFrameLayout.AddChidren(btnMessage);
//住宅名字
var btnHouseName = new NormalViewControl(700, 95, true);
btnHouseName.X = HdlControlResourse.XXLeft;
btnHouseName.Y = Application.GetRealHeight(161);
btnHouseName.TextSize = 24;
btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
btnHouseName.IsBold = true;
btnHouseName.Text = Config.Instance.Home.Name;
btnHouseName.Width = btnHouseName.GetRealWidthByText() + Application.GetRealWidth(100);
this.listBodyContr.frameTable.AddChidren(btnHouseName);
//切换住宅
btnHouseName.MouseLongEventHandler += (sender, e) =>
{
if (Config.Instance.HomeFilePathList.Count == 0)
{
//当前住宅为空,请先建立住宅
this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst));
}
else
{
var selectHouse = new Category.SelectHouseForm();
selectHouse.Init();
selectHouse.HouseAction = (houseId) =>
{
//切换住宅
this.ChangeResidence(HdlResidenceLogic.Current.GetHouseByHouseId(houseId));
};
}
};
}
///
/// 初始化中间控件
///
private void InitMidFrameLayoutControl()
{
//成员身份不允许添加网关
if (HdlUserCenterResourse.ResidenceOption.AuthorityNo == 3)
{
//初始化场景,功能的切换控件
this.InitSceneFunctionSwitchControl();
//初始化房间滑动控件
this.InitRoomHorizontalPagesControl();
return;
}
//检测是否绑定有网关
if (Common.Config.Instance.Home.IsVirtually == false && this.CheckHadBindGateway() == false)
{
//显示没有绑定过网关的界面
this.ShowNoGatewayTip();
}
else
{
//初始化场景,功能的切换控件
this.InitSceneFunctionSwitchControl();
//初始化房间滑动控件
this.InitRoomHorizontalPagesControl();
}
}
///
/// 初始化场景,功能的切换控件
///
private void InitSceneFunctionSwitchControl()
{
//功能和场景的背景图
var functionSceneView = new FrameLayout();
functionSceneView.Y = Application.GetRealHeight(861);
functionSceneView.Width = Application.GetRealWidth(832);
functionSceneView.Height = Application.GetRealHeight(167);
functionSceneView.Gravity = Gravity.CenterHorizontal;
functionSceneView.BackgroundImagePath = "Item/SceneFunctionBG.png";
this.listBodyContr.frameTable.AddChidren(functionSceneView);
//场景
var btnScene = new NormalViewControl(350, 100, true);
btnScene.X = Application.GetRealWidth(30);
btnScene.Y = Application.GetRealHeight(12);
btnScene.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
btnScene.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
btnScene.TextID = R.MyInternationalizationString.Scence;
btnScene.TextSize = 15;
btnScene.TextAlignment = TextAlignment.Center;
functionSceneView.AddChidren(btnScene);
//功能
var btnFunction = new NormalViewControl(360, 100, true);
btnFunction.X = Application.GetRealWidth(430);
btnFunction.Y = Application.GetRealHeight(12);
btnFunction.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
btnFunction.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
btnFunction.TextSize = 15;
btnFunction.TextID = R.MyInternationalizationString.Function;
btnFunction.TextAlignment = TextAlignment.Center;
functionSceneView.AddChidren(btnFunction);
if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 1)
{
btnScene.IsSelected = true;
btnScene.TextSize = 17;
btnScene.IsBold = true;
}
else if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
{
btnFunction.IsSelected = true;
btnFunction.TextSize = 17;
btnFunction.IsBold = true;
}
//功能和场景bodyView
this.bodyFrameLayout = new NormalFrameLayout();
bodyFrameLayout.Y = functionSceneView.Bottom;
bodyFrameLayout.Height = this.listBodyContr.frameTable.Height - functionSceneView.Bottom;
bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
this.listBodyContr.frameTable.AddChidren(bodyFrameLayout);
//选择功能分栏
btnFunction.ButtonClickEvent += (sender, e) =>
{
if (btnFunction.IsSelected == true)
{
return;
}
//功能分支选择
HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 2;
btnScene.IsSelected = false;
btnScene.TextSize = 15;
btnScene.IsBold = false;
btnFunction.IsSelected = true;
btnFunction.TextSize = 17;
btnFunction.IsBold = true;
//刷新设备桌布控件
this.RefreshBodyView();
};
//选择场景分栏
btnScene.ButtonClickEvent += (sender, e) =>
{
if (btnScene.IsSelected == true)
{
return;
}
//场景分支选择
HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 1;
btnScene.IsSelected = true;
btnScene.TextSize = 17;
btnScene.IsBold = true;
btnFunction.IsSelected = false;
btnFunction.TextSize = 15;
btnFunction.IsBold = false;
//刷新设备桌布控件
this.RefreshBodyView();
};
}
///
/// 提示用户没有网关,并快速跳转到添加网关界面
///
private void ShowNoGatewayTip()
{
var bg = new PicViewControl(717, 478);
bg.Y = Application.GetRealHeight(302);
bg.Gravity = Gravity.CenterHorizontal;
bg.UnSelectedImagePath = "Item/NoBindGW.png";
this.listBodyContr.frameTable.AddChidren(bg);
var tip = new NormalViewControl(this.GetPictrueRealSize(717), this.GetPictrueRealSize(58), false);
tip.Y = bg.Bottom + Application.GetRealHeight(35);
tip.Gravity = Gravity.CenterHorizontal;
tip.TextID = R.MyInternationalizationString.NewAccountNeedBingGW;
tip.TextColor = ZigbeeColor.Current.GXCTextGrayColor;
tip.TextAlignment = TextAlignment.Center;
this.listBodyContr.frameTable.AddChidren(tip);
var addBG = new PicViewControl(971, 366);
addBG.Y = tip.Bottom + Application.GetRealHeight(176);
addBG.UnSelectedImagePath = "Item/VirtualFrame.png";
addBG.Gravity = Gravity.CenterHorizontal;
this.listBodyContr.frameTable.AddChidren(addBG);
var addGatewayBtn = new IconViewControl(89);
addGatewayBtn.Y = tip.Bottom + Application.GetRealHeight(271);
addGatewayBtn.UnSelectedImagePath = "Item/Add_GW.png";
addGatewayBtn.Gravity = Gravity.CenterHorizontal;
this.listBodyContr.frameTable.AddChidren(addGatewayBtn);
addGatewayBtn.ButtonClickEvent += (sender, e) =>
{
var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
form.AddForm();
};
var addTip = new PicViewControl(717, 58);
addTip.Y = addGatewayBtn.Bottom + Application.GetRealHeight(23);
addTip.Gravity = Gravity.CenterHorizontal;
addTip.TextID = R.MyInternationalizationString.AddSmartGW;
addTip.TextColor = ZigbeeColor.Current.GXCTextBlackColor;
addTip.TextAlignment = TextAlignment.Center;
this.listBodyContr.frameTable.AddChidren(addTip);
addTip.ButtonClickEvent += (sender, e) =>
{
var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
form.AddForm();
};
}
#endregion
#region ■ 初始化房间滑动控件_________________
///
/// 初始化房间滑动控件
///
private void InitRoomHorizontalPagesControl()
{
//左右滑动控件的背景容器
var frameBack = new FrameLayout();
frameBack.Y = Application.GetRealHeight(302);
frameBack.Width = this.Width;
frameBack.Height = Application.GetRealHeight(478);
this.listBodyContr.frameTable.AddChidren(frameBack);
//房间滑动控件左边的虚拟图片
var mLeftImageView = new ImageView();
mLeftImageView.ImagePath = "RoomIcon/19.jpg";
mLeftImageView.Radius = (uint)Application.GetRealHeight(17);
mLeftImageView.Width = Application.GetRealWidth(717);
mLeftImageView.Height = Application.GetRealHeight(478);
//房间滑动控件右边的虚拟图片
var mRightImageView = new ImageView();
mRightImageView.ImagePath = "RoomIcon/19.jpg";
mRightImageView.Radius = (uint)Application.GetRealHeight(17);
mRightImageView.Width = mLeftImageView.Width;
mRightImageView.Height = mLeftImageView.Height;
this.roomPageView = new HorizontalPages();
roomPageView.Width = frameBack.Width;
roomPageView.Height = frameBack.Height;
frameBack.AddChidren(roomPageView);
//突出边距
roomPageView.TCBJ = Application.GetRealWidth(124);
//两个page之间的间距
roomPageView.JMBJ = Application.GetRealWidth(58);
//在这个控件的下面添加阴影效果
var btnRoomBottomShadow = new NormalViewControl(717, 81, true);
btnRoomBottomShadow.Y = frameBack.Bottom;
btnRoomBottomShadow.Gravity = Gravity.CenterHorizontal;
btnRoomBottomShadow.UnSelectedImagePath = "Room/RoomCardShadow.png";
this.listBodyContr.frameTable.AddChidren(btnRoomBottomShadow);
//设置控制最左和最右2边填充的假背景View,不设置不显示,需要在AddChidren 前调用该方法
roomPageView.SetLeftAndRightImageView(mLeftImageView, mRightImageView);
//当前房间
var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
if (HdlRoomLogic.Current.NowMainPageRoom == null)
{
HdlRoomLogic.Current.NowMainPageRoom = listRoom[0];
}
var curIndex = 0;
for (int i = 0; i < listRoom.Count; i++)
{
var roomView = new RoomView(0, 0);
roomPageView.AddChidren(roomView);
roomView.Init(listRoom[i]);
if (listRoom[i].Id == HdlRoomLogic.Current.NowMainPageRoom.Id)
{
//当前房间,则显示那些数据出来
roomView.HideName(false);
//当前索引
curIndex = i;
}
else
{
roomView.HideName(true);
}
}
//在房间卡片左边添加遮罩
var btnRoomLeftShadow = new FrameLayout();
btnRoomLeftShadow.Width = Application.GetRealWidth(124);
btnRoomLeftShadow.Height = roomPageView.Height - roomPageView.JMBJ * 2;
btnRoomLeftShadow.Gravity = Gravity.CenterVertical;
btnRoomLeftShadow.BackgroundColor = 0x1c000000;
btnRoomLeftShadow.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
//frameBack.AddChidren(btnRoomLeftShadow);//暂时不加遮罩
//在房间卡片右边添加遮罩
var btnRoomRightShadow = new FrameLayout();
btnRoomRightShadow.Width = btnRoomLeftShadow.Width;
btnRoomRightShadow.Height = btnRoomLeftShadow.Height;
btnRoomRightShadow.X = Application.GetRealWidth(956);
btnRoomRightShadow.Gravity = Gravity.CenterVertical;
btnRoomRightShadow.BackgroundColor = btnRoomLeftShadow.BackgroundColor;
btnRoomRightShadow.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerBottomLeft);
//frameBack.AddChidren(btnRoomRightShadow);//暂时不加遮罩
//控件开始滑动的事件
roomPageView.StartScrollAction += () =>
{
this.isRoomChanging = true;
//开始滑动时,隐藏当前的数据显示
(roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(true);
btnRoomLeftShadow.Visible = false;
btnRoomRightShadow.Visible = false;
btnRoomBottomShadow.Visible = false;
};
roomPageView.EndScrollAction += () =>
{
curIndex = roomPageView.PageIndex;
//前一张卡片
if (roomPageView.GetChildren(curIndex - 1) != null)
{
(roomPageView.GetChildren(curIndex - 1) as RoomView).HideName(true);
}
//当前卡片
if (roomPageView.GetChildren(curIndex) != null)
{
(roomPageView.GetChildren(curIndex) as RoomView).HideName(false);
}
//下一张卡片
if (roomPageView.GetChildren(curIndex + 1) != null)
{
(roomPageView.GetChildren(curIndex + 1) as RoomView).HideName(true);
}
btnRoomLeftShadow.Visible = true;
btnRoomRightShadow.Visible = true;
btnRoomBottomShadow.Visible = true;
//切换当前房间
HdlRoomLogic.Current.NowMainPageRoom = listRoom[curIndex];
//刷新设备桌布控件
this.isRoomChanging = false;
this.RefreshBodyView();
};
//设置房间的初始选择
roomPageView.PageIndex = curIndex;
//如果索引是第一个时,它触发不了事件,需要手动触发
if (curIndex == 0)
{
roomPageView.EndScrollAction();
}
}
///
/// 设置房间的滑动容器控件选择指定的房间(供外部调用)
///
///
public void SetRoomPageViewSelect(Room room)
{
if (roomPageView == null)
{
//当没有绑定有网关,左滑时,点击房间列表,则不鸟它
return;
}
var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
for (int i = 0; i < listRoom.Count; i++)
{
if (room.Id == listRoom[i].Id)
{
if (roomPageView.PageIndex != i)
{
//不相同时才刷新
roomPageView.PageIndex = i;
}
break;
}
}
//重置一下楼层名字
if (this.btnFloorName != null)
{
btnFloorName.Text = Config.Instance.Home.GetCurrentFloorName;
}
}
#endregion
#region ■ 功能分支___________________________
///
/// 显示功能
///
private void ShowFunction()
{
//先清空缓存
bodyFrameLayout.RemoveAll();
bodyFrameLayout.Height = Application.GetRealHeight(750);
this.listBodyContr.RecoverTableHeight();
this.dicSceneCardControl = new Dictionary();
this.dicDeviceCardControl = new Dictionary();
var listDevice = new List();
foreach (var mainkeys in HdlRoomLogic.Current.NowMainPageRoom.ListDevice)
{
var device = HdlDeviceCommonLogic.Current.GetDevice(mainkeys);
//判断该设备能否显示在主页
if (HdlDeviceCommonLogic.Current.CanShowInHomeHomeMainPage(device) == false)
{
continue;
}
listDevice.Add(device);
}
//当前房间的设备数
if (listDevice.Count == 0)
{
//还没有功能哦
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.NoFunction_Tip));
return;
}
//设备列表容器控件
var listDeviceBackContr = new FrameLayout();
listDeviceBackContr.Height = bodyFrameLayout.Height;
bodyFrameLayout.AddChidren(listDeviceBackContr);
HdlThreadLogic.Current.RunThread(() =>
{
//初始化设备卡片列表控件
this.InitDeviceListCardControl(listDeviceBackContr, listDevice);
});
}
///
/// 初始化设备卡片列表控件
///
///
private void InitDeviceListCardControl(FrameLayout listDeviceBackContr, List listDevice)
{
//设备计数
int contrCount = 0;
//X轴坐标(图片左边有余白)
int XX = this.GetPictrueRealSize(44);
//Y轴坐标
int YY = 0;
var listContr = new List();
foreach (var device in listDevice)
{
if (this.isRoomChanging == true || listDeviceBackContr.Parent == null)
{
//放弃初始化控件
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
Controls.DeviceCardCommon cardContr = null;
//窗帘
if (device.Type == DeviceType.WindowCoveringDevice)
{
cardContr = new Controls.DeviceCurtainCardControl();
}
//继电器
else if (device.Type == DeviceType.OnOffOutput)
{
cardContr = new Controls.DeviceRelayCardControl();
}
//空气开关
else if (device.Type == DeviceType.AirSwitch)
{
cardContr = new Controls.DeviceAirSwitchCardControl();
}
//空调
else if (device.Type == DeviceType.Thermostat)
{
cardContr = new Controls.DeviceAcCardControl();
}
//新风
else if (device.Type == DeviceType.FreshAir)
{
cardContr = new Controls.DeviceFreshAirCardControl();
}
// PM2.5
else if (device.Type == DeviceType.PMSensor)
{
cardContr = new Controls.DevicePmSensorCardControl();
}
//彩灯(调光器)
else if (device.Type == DeviceType.DimmableLight)
{
cardContr = new Controls.DeviceColorLightCardControl();
}
//传感器
else if (device.Type == DeviceType.IASZone)
{
cardContr = new Controls.DeviceSensorCardControl();
}
//温湿度
else if (device.Type == DeviceType.TemperatureSensor)
{
cardContr = new Controls.DeviceTemperatureCardControl();
}
//门锁
else if (device.Type == DeviceType.DoorLock)
{
cardContr = new Controls.DeviceDoorLockCardControl();
}
//色温灯
else if (device.Type == DeviceType.ColorTemperatureLight)
{
cardContr = new Controls.DeviceColorTemperatureCardControl();
}
//无法识别
else
{
cardContr = new Controls.DeviceCardCommon();
}
//初始化卡片
cardContr.X = XX;
cardContr.Y = YY;
listDeviceBackContr.AddChidren(cardContr);
cardContr.InitControl(device, HdlRoomLogic.Current.NowMainPageRoom);
//卡片需要被移除的事件
cardContr.CardNeedRemoveEvent += () =>
{
//重置设备卡片控件坐标(卡片需要被删除专用)
this.ResetDeviceCardControlLocation(HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device));
};
//设备计数
contrCount++;
//卡片左右两边有14的余白,每两个后,X轴重置
XX = contrCount % 2 == 0 ? this.GetPictrueRealSize(44) : cardContr.Right + this.GetPictrueRealSize(20);
if (contrCount % 2 == 0)
{
//没两个之后,Y轴递增
YY = cardContr.Bottom + this.GetPictrueRealSize(15);
}
//控件记录到缓存中
this.dicDeviceCardControl[HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device)] = cardContr;
//加缓存,然后发命令
listContr.Add(cardContr);
if (contrCount == listDevice.Count)
{
//调整桌布大小
if (contrCount > 4)
{
bodyFrameLayout.Height = listDeviceBackContr.GetChildren(listDeviceBackContr.ChildrenCount - 1).Bottom;
listDeviceBackContr.Height = bodyFrameLayout.Height;
this.listBodyContr.frameTable.Height = bodyFrameLayout.Bottom;
}
HdlThreadLogic.Current.RunThread(() =>
{
while (listDeviceBackContr.Parent != null)
{
bool hadSend = false;
for (int i = 0; i < listContr.Count; i++)
{
if (listDeviceBackContr.Parent == null)
{
return;
}
//如果还没有接收到数据,则再次发送
if (listContr[i].ReceiveResponeResultStatu() == false)
{
//发送获取状态的命令
listContr[i].SendStatuComand();
hadSend = true;
System.Threading.Thread.Sleep(200);
}
}
if (hadSend == false)
{
//如果已经全部回路都接收了网关回复,则不再二次发送
break;
}
System.Threading.Thread.Sleep(2000);
}
}, ShowErrorMode.NO);
}
});
if (contrCount > 6)
{
//让它呈现一种直接一次性刷出来的效果
System.Threading.Thread.Sleep(50);
}
}
}
#endregion
#region ■ 重置设备卡片控件坐标_______________
///
/// 重置设备卡片控件坐标(卡片需要被删除专用)
///
/// 需要被删除的卡片主键
private void ResetDeviceCardControlLocation(string deleteKey)
{
if (this.dicDeviceCardControl.ContainsKey(deleteKey) == false)
{
//如果列表里面没有这个控件的话
return;
}
var deleteContr = this.dicDeviceCardControl[deleteKey];
//设备计数
int contrCount = 0;
bool canMove = false;
int YY = 0;
foreach (var mainkey in this.dicDeviceCardControl.Keys)
{
if (deleteKey == mainkey)
{
//如果已经到了要删除的卡片,删除掉它,然后它之后的卡片全部向上移动
canMove = true;
continue;
}
//设备计数
contrCount++;
//卡片左右两边有14的余白,每两个后,X轴重置
int XX = 0;
if (contrCount % 2 == 1)
{
//第一个固定44
XX = this.GetPictrueRealSize(44);
}
else
{
//第二个是44+控件宽度+20余白
XX = this.GetPictrueRealSize(44) + this.dicDeviceCardControl[mainkey].Width + this.GetPictrueRealSize(20);
}
//每两个之后,并且是第一个的时候,Y轴递增
if (contrCount > 2 && contrCount % 2 == 1)
{
//求商
int value = contrCount / 2;
//控件的底部有15的间隔
YY = value * (this.dicDeviceCardControl[mainkey].Height + this.GetPictrueRealSize(15));
}
if (canMove == true)
{
//移动控件
this.dicDeviceCardControl[mainkey].X = XX;
this.dicDeviceCardControl[mainkey].Y = YY;
}
}
//去找一下这个控件的列表容器
var listView = deleteContr.Parent as FrameLayout;
//删除掉那张卡片的主键
deleteContr.RemoveFromParent();
this.dicDeviceCardControl.Remove(deleteKey);
//调整桌布高度
if (listView.ChildrenCount >= 4)
{
bodyFrameLayout.Height = listView.GetChildren(listView.ChildrenCount - 1).Bottom;
listView.Height = bodyFrameLayout.Height;
this.listBodyContr.frameTable.Height = bodyFrameLayout.Bottom;
}
}
#endregion
#region ■ 场景分支___________________________
///
/// 显示场景
///
private void ShowScene()
{
//先清空缓存
bodyFrameLayout.RemoveAll();
bodyFrameLayout.Height = Application.GetRealHeight(750);
this.listBodyContr.RecoverTableHeight();
this.dicSceneCardControl = new Dictionary();
this.dicDeviceCardControl = new Dictionary();
var listScene = new List();
foreach (int sceneId in HdlRoomLogic.Current.NowMainPageRoom.ListSceneId)
{
var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
if (sceneUi == null)
{
//这个场景不见了
continue;
}
listScene.Add(sceneUi);
}
if (listScene.Count == 0)
{
//还没有场景哦
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.NoScene_Tip));
return;
}
//列表控件
var listSceneBackContr = new FrameLayout();
listSceneBackContr.Height = bodyFrameLayout.Height;
bodyFrameLayout.AddChidren(listSceneBackContr);
HdlThreadLogic.Current.RunThread(() =>
{
//初始化场景卡片列表控件
this.InitSceneListCardControl(listSceneBackContr, listScene);
});
}
///
/// 初始化场景卡片列表控件
///
///
private void InitSceneListCardControl(FrameLayout listSceneBackContr, List listScene)
{
//场景计数
int contrCount = 0;
//X轴坐标(图片左边有余白)
int XX = this.GetPictrueRealSize(44);
//Y轴坐标
int YY = 0;
foreach (var sceneUi in listScene)
{
if (this.isRoomChanging == true || listSceneBackContr.Parent == null)
{
//放弃初始化控件
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
//初始化卡片
var cardContr = new Controls.SceneCardControl();
cardContr.X = XX;
cardContr.Y = YY;
listSceneBackContr.AddChidren(cardContr);
cardContr.InitControl(sceneUi);
//卡片需要被移除的事件
cardContr.CardNeedRemoveEvent += () =>
{
//重置设备卡片控件坐标(卡片需要被删除专用)
this.ResetSceneCardControlLocation(sceneUi.Id);
};
//设备计数
contrCount++;
//每两个后,X轴重置
XX = contrCount % 2 == 0 ? this.GetPictrueRealSize(44) : cardContr.Right + this.GetPictrueRealSize(20);
if (contrCount % 2 == 0)
{
//没两个之后,Y轴递增
YY = cardContr.Bottom + this.GetPictrueRealSize(15);
}
//控件记录到缓存中
this.dicSceneCardControl[sceneUi.Id] = cardContr;
if (contrCount == listScene.Count)
{
//调整桌布高度
if (contrCount > 4)
{
bodyFrameLayout.Height = listSceneBackContr.GetChildren(listSceneBackContr.ChildrenCount - 1).Bottom;
listSceneBackContr.Height = bodyFrameLayout.Height;
this.listBodyContr.frameTable.Height = bodyFrameLayout.Bottom;
}
HdlThreadLogic.Current.RunThread(() =>
{
//设置目前场景的延迟状态
this.SetSceneDelayTime(listSceneBackContr);
});
}
});
if (contrCount > 6)
{
//让它呈现一种一次性显示出来的效果
System.Threading.Thread.Sleep(50);
}
}
}
///
/// 设置场景的延迟状态
///
///
private async void SetSceneDelayTime(FrameLayout listSceneBackContr)
{
await System.Threading.Tasks.Task.Delay(1500);
if (listSceneBackContr.Parent == null)
{
//控件已经被移除
return;
}
//等待1.5秒之后,获取延迟状态
var result = await Scene.CatDelaySceneAsync();
if (result == null || result.catDelaySceneResponseData == null)
{
return;
}
if (listSceneBackContr.Parent == null)
{
//控件已经被移除
return;
}
foreach (var data in result.catDelaySceneResponseData.DelayScenesList)
{
var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ScenesId);
if (sceneUi == null)
{
continue;
}
if (this.dicSceneCardControl.ContainsKey(data.ScenesId) == false)
{
continue;
}
//修改剩余延迟时间
sceneUi.RemainTime = data.RemainTime;
HdlThreadLogic.Current.RunMain(() =>
{
//刷新卡片信息
this.dicSceneCardControl[data.ScenesId].RefreshControlInfo(sceneUi);
});
}
}
#endregion
#region ■ 重置场景卡片控件坐标_______________
///
/// 重置场景卡片控件坐标(卡片需要被删除专用)
///
/// 需要被删除的卡片主键
private void ResetSceneCardControlLocation(int deleteId)
{
if (this.dicSceneCardControl.ContainsKey(deleteId) == false)
{
//如果列表里面没有这个控件的话
return;
}
var deleteContr = this.dicSceneCardControl[deleteId];
//设备计数
int contrCount = 0;
bool canMove = false;
int YY = 0;
foreach (var sceneId in this.dicSceneCardControl.Keys)
{
if (deleteId == sceneId)
{
//如果已经到了要删除的卡片,删除掉它,然后它之后的卡片全部向上移动
canMove = true;
continue;
}
//设备计数
contrCount++;
//每两个后,X轴重置
int XX = 0;
if (contrCount % 2 == 1)
{
//第一个固定44
XX = this.GetPictrueRealSize(44);
}
else
{
//第二个是44+控件宽度+20余白
XX = this.GetPictrueRealSize(44) + this.dicSceneCardControl[sceneId].Width + this.GetPictrueRealSize(20);
}
//每两个之后,并且是第一个时,Y轴递增
if (contrCount > 2 && contrCount % 2 == 1)
{
//求商
int value = contrCount / 2;
//控件的底部有15的间隔
YY = value * (this.dicSceneCardControl[sceneId].Height + this.GetPictrueRealSize(15));
}
if (canMove == true)
{
//移动控件
this.dicSceneCardControl[sceneId].X = XX;
this.dicSceneCardControl[sceneId].Y = YY;
}
}
//去找一下这个控件的列表容器
var listView = deleteContr.Parent as FrameLayout;
//删除掉那张卡片的主键
deleteContr.RemoveFromParent();
this.dicSceneCardControl.Remove(deleteId);
//调整桌布高度
if (listView.ChildrenCount >= 4)
{
bodyFrameLayout.Height = listView.GetChildren(listView.ChildrenCount - 1).Bottom;
listView.Height = bodyFrameLayout.Height;
this.listBodyContr.frameTable.Height = bodyFrameLayout.Bottom;
}
}
#endregion
#region ■ 刷新桌布控件_______________________
///
/// 刷新设备桌布控件
///
public void RefreshBodyView()
{
bodyFrameLayout.RemoveAll();
//让界面别闪烁
HdlThreadLogic.Current.RunMainInThread(() =>
{
if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
{
//功能
this.ShowFunction();
}
else
{
//场景
this.ShowScene();
}
});
}
#endregion
#region ■ 切换住宅___________________________
///
/// 切换住宅
///
/// Home.
private void ChangeResidence(House home)
{
HdlThreadLogic.Current.RunThread(() =>
{
this.ShowProgressBar();
//切换住宅
var result = HdlResidenceLogic.Current.SwitchResidence(home.Id);
HdlThreadLogic.Current.RunMain(() =>
{
if (result == true)
{
//刷新界面
this.ShowForm();
}
this.CloseProgressBar();
});
});
}
#endregion
#region ■ 一般设备状态上报___________________
///
/// 添加一般设备状态上报事件
///
private void AddNormalDeviceReportEvent()
{
//设备属性上报(缓存的修改交由 HdlGatewayReceiveLogic 处理)
HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceStatus", ReceiveComandDiv.A设备属性上报, (report) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
//处理一般设备的上报数据
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
{
//刷新卡片信息
var locadevice = HdlDeviceCommonLogic.Current.GetDevice(mainKeys);
//已经接收到网关的反馈 2020.05.09:删除Ack主题
this.dicDeviceCardControl[mainKeys].SetHadGetResponeResultStatu();
//刷新控件
if (locadevice.Type != DeviceType.IASZone)
{
//传感器不需要属性上报(但是那个球型传感器居然会属性上报)
this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
}
else if (report.DeviceStatusReport.CluterID == 1)
{
//这个是电量推送
this.dicDeviceCardControl[mainKeys].RefreshBatteryStatu();
}
}
}, ShowErrorMode.NO);
});
//设备在线上报(缓存的修改交由 HdlGatewayReceiveLogic 处理)
HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceOnline", ReceiveComandDiv.A设备在线上报, (report) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
{
//刷新卡片状态
bool bolOnline = HdlDeviceCommonLogic.Current.CheckDeviceIsOnline(report);
this.dicDeviceCardControl[mainKeys].SetCardOnlineStatu(bolOnline);
return;
}
}, ShowErrorMode.NO);
});
}
#endregion
#region ■ 传感器状态上报_____________________
///
/// 添加传感器状态上报事件
///
private void AddSensorDeviceReportEvent()
{
//传感器上报(缓存的修改交由 HdlGatewayReceiveLogic 处理)
HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewSensor", ReceiveComandDiv.A传感器上报, (report) =>
{
HdlThreadLogic.Current.RunMain(() =>
{
//处理传感器上报数据
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
{
//开启卡片闪烁特效
this.dicDeviceCardControl[mainKeys].StartCardLightAppeal();
}
}, ShowErrorMode.NO);
});
}
#endregion
#region ■ 传感器状态还原_____________________
///
/// 开启传感器状态还原的线程
///
private void StartRecoverSenorStatuThread()
{
HdlThreadLogic.Current.RunThread(() =>
{
while (this.Parent != null)
{
try
{
var dicControl = this.dicDeviceCardControl;
foreach (var contr in dicControl.Values)
{
//如果是传感器,则刷新状态
if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
&& ((IASZone)contr.device).iASInfo == null)
{
HdlThreadLogic.Current.RunMain(() =>
{
//设备状态必须刷新
string statuText = HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(contr.device);
contr.SetDeviceStatuText(statuText);
//传感器切换为灰色状态
contr.SwitchCardStatuAppeal(false);
}, ShowErrorMode.NO);
}
}
System.Threading.Thread.Sleep(8000);
}
catch { System.Threading.Thread.Sleep(3000); }
}
});
}
#endregion
#region ■ 切换楼层___________________________
///
/// 显示选择楼层的界面
///
private void ShowSelectFloorForm(NormalViewControl btnFloor)
{
var floorFL = new Category.SelectFloorForm();
floorFL.CurFloorId = Config.Instance.Home.CurrentFloorId;
this.AddChidren(floorFL);
floorFL.Init(35, 153);
floorFL.FloorAction = (floorId) =>
{
btnFloor.Text = HdlResidenceLogic.Current.GetFloorNameById(floorId);
Config.Instance.Home.CurrentFloorId = floorId;
HdlRoomLogic.Current.NowMainPageRoom = HdlRoomLogic.Current.GetLoveRoom();
//分类界面需要刷新
UserView.UserPage.Instance.RefreshCategoryForm = true;
this.ShowForm();
};
}
#endregion
#region ■ 界面关闭___________________________
///
/// 界面关闭
///
public override void CloseFormBefore()
{
//把静态变量的这个东西置空
Instance = null;
HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceOnline");
HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceStatus");
HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewSensor");
base.CloseFormBefore();
}
#endregion
#region ■ 一般方法___________________________
///
/// 检测是否绑定有网关
///
private bool CheckHadBindGateway()
{
//获取本地已经绑定的网关
var gatewayList = HdlGatewayLogic.Current.GetAllLocalGateway();
if (gatewayList.Count == 0)
{
return false;
}
return true;
}
#endregion
#region ■ 界面重新激活事件___________________
///
/// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
///
public override int FormActionAgainEvent()
{
CommonPage.Instance.IsDrawerLockMode = false;
return 1;
}
#endregion
}
}