using System;
|
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserCenter.Safety
|
{
|
/// <summary>
|
/// 安防管理的主界面★
|
/// </summary>
|
public class SafetyManagementMainForm : UserCenterCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 桌布控件,用于存放或者移除功能块控件(Tab控件专用)
|
/// </summary>
|
private FrameLayout frameLayoutDraw = null;
|
/// <summary>
|
/// Tab的选择。1:安防记录Tab 2:传感器状态Tab
|
/// </summary>
|
private int TabSelectIndex = 2;
|
/// <summary>
|
/// 在家布防的桌布控件,三个图标(设置了内部防区的)
|
/// </summary>
|
private StatuFrameLayout frameTableThreeIcon = null;
|
/// <summary>
|
/// 布防的桌布控件,两个图标(没有设置内部防区的)
|
/// </summary>
|
private StatuFrameLayout frameTableTwoIcon = null;
|
/// <summary>
|
/// 布防的图标(没有设置内部防区显示的图标)
|
/// </summary>
|
private IconViewControl btnAtHomeIconTwo = null;
|
/// <summary>
|
/// 在家布防的图标(设置了内部防区显示的图标)
|
/// </summary>
|
private IconViewControl btnAtHomeIconThree = null;
|
/// <summary>
|
/// 离家布防的图标
|
/// </summary>
|
private IconViewControl btnRemoveHomeIcon = null;
|
/// <summary>
|
/// 在线状态的锁
|
/// </summary>
|
private object objOnlineLock = new object();
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
public void ShowForm()
|
{
|
//设置头部信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.SafetyManagement));
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
private void InitMiddleFrame()
|
{
|
//初始化头部的那三个图标
|
FrameLayout frameLayout = this.InitTopImageControl();
|
//初始化Tab控件
|
this.InitTabSwitchControl(frameLayout.Bottom);
|
if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
|
{
|
//初始化右上角图标
|
this.InitTopRightIcon();
|
}
|
//初始化全部内存信息
|
this.InitAllMemoryData();
|
}
|
|
/// <summary>
|
/// 初始化头部的那三个图标
|
/// </summary>
|
private FrameLayout InitTopImageControl()
|
{
|
int height = 400;
|
//三个图标的各自frameLayout的宽度
|
int width = 320;
|
|
//最外层
|
var frameLayout = new FrameLayout();
|
frameLayout.Height = Application.GetRealHeight(height);
|
bodyFrameLayout.AddChidren(frameLayout);
|
|
#region ■ 两个图的(很麻烦的东西)_____
|
|
//包含两个图的桌布 -> 没有设置内部防区(至于底部)
|
this.frameTableTwoIcon = new StatuFrameLayout(width * 2, height);
|
frameTableTwoIcon.Gravity = Gravity.Center;
|
frameTableTwoIcon.Visible = false;
|
frameLayout.AddChidren(frameTableTwoIcon);
|
//布防的桌布
|
var frameGarrison = new StatuFrameLayout(width, height);
|
frameTableTwoIcon.AddChidren(frameGarrison);
|
//布防的图标
|
this.btnAtHomeIconTwo = new IconViewControl(162);
|
btnAtHomeIconTwo.Y = Application.GetRealHeight(90);
|
btnAtHomeIconTwo.UnSelectedImagePath = "Safeguard/ProtectionAtHome.png";
|
btnAtHomeIconTwo.SelectedImagePath = "Safeguard/ProtectionAtHomeSelected.png";
|
btnAtHomeIconTwo.Gravity = Gravity.CenterHorizontal;
|
frameGarrison.AddChidren(btnAtHomeIconTwo, ChidrenBindMode.BindEventOnly);
|
//布防的文字
|
var btnAtHomeViewTwo = new ViewNormalControl(width, true);
|
btnAtHomeViewTwo.Y = btnAtHomeIconTwo.Bottom;
|
btnAtHomeViewTwo.TextID = R.MyInternationalizationString.uAtHomeGarrison;
|
btnAtHomeViewTwo.TextAlignment = TextAlignment.Center;
|
frameGarrison.AddChidren(btnAtHomeViewTwo, ChidrenBindMode.BindEventOnly);
|
//在家布防
|
frameGarrison.MouseUpEvent = (sender, e) =>
|
{
|
if (btnAtHomeIconTwo.IsSelected == false)
|
{
|
this.SetSafetyGarrisonModeInAtHome();
|
}
|
};
|
|
//撤防的桌布
|
var frameReGarrisonTwo = new StatuFrameLayout(width, height);
|
frameReGarrisonTwo.X = frameGarrison.Right;
|
frameTableTwoIcon.AddChidren(frameReGarrisonTwo);
|
//撤防的图标
|
var btnReGarrisonIconTwo = new IconViewControl(162);
|
btnReGarrisonIconTwo.Y = btnAtHomeIconTwo.Y;
|
btnReGarrisonIconTwo.UnSelectedImagePath = "Safeguard/WithdrawGarrison.png";
|
btnReGarrisonIconTwo.SelectedImagePath = "Safeguard/WithdrawGarrisonSelected.png";
|
btnReGarrisonIconTwo.Gravity = Gravity.CenterHorizontal;
|
frameReGarrisonTwo.AddChidren(btnReGarrisonIconTwo);
|
//撤防的文字
|
var btnReGarrisonTextTwo = new ViewNormalControl(width, true);
|
btnReGarrisonTextTwo.Y = btnAtHomeViewTwo.Y;
|
btnReGarrisonTextTwo.TextID = R.MyInternationalizationString.uWithdrawGarrison;
|
btnReGarrisonTextTwo.TextAlignment = TextAlignment.Center;
|
frameReGarrisonTwo.AddChidren(btnReGarrisonTextTwo, ChidrenBindMode.BindEventOnly);
|
|
//撤防
|
frameReGarrisonTwo.MouseUpEvent = (sender, e) =>
|
{
|
this.RemoveSafetyGarrisonMode();
|
};
|
|
#endregion
|
|
|
#region ■ 三个图的(很麻烦的东西)_____
|
|
//包含三个图的 -> 设置了内部防区(至于上部)
|
this.frameTableThreeIcon = new StatuFrameLayout(width * 3, height);
|
this.frameTableThreeIcon.Visible = false;
|
frameTableThreeIcon.Gravity = Gravity.Center;
|
frameLayout.AddChidren(frameTableThreeIcon);
|
//在家布防的桌布
|
var frameAtHome = new StatuFrameLayout(width, height);
|
frameTableThreeIcon.AddChidren(frameAtHome);
|
//在家布防的图标
|
this.btnAtHomeIconThree = new IconViewControl(162);
|
btnAtHomeIconThree.Y = Application.GetRealHeight(90);
|
btnAtHomeIconThree.UnSelectedImagePath = "Safeguard/ProtectionAtHome.png";
|
btnAtHomeIconThree.SelectedImagePath = "Safeguard/ProtectionAtHomeSelected.png";
|
btnAtHomeIconThree.Gravity = Gravity.CenterHorizontal;
|
frameAtHome.AddChidren(btnAtHomeIconThree, ChidrenBindMode.BindEventOnly);
|
//在家布防的文字
|
var btnAtHomeView = new ViewNormalControl(width, true);
|
btnAtHomeView.Y = btnAtHomeIconThree.Bottom;
|
btnAtHomeView.TextID = R.MyInternationalizationString.uAtHomeGarrison;
|
btnAtHomeView.TextAlignment = TextAlignment.Center;
|
frameAtHome.AddChidren(btnAtHomeView, ChidrenBindMode.BindEventOnly);
|
//在家布防
|
frameAtHome.MouseUpEvent = (sender, e) =>
|
{
|
if (btnAtHomeIconThree.IsSelected == false)
|
{
|
this.SetSafetyGarrisonModeInAtHome();
|
}
|
};
|
|
//离家布防的桌布
|
var frameRemoveHome = new StatuFrameLayout(width, height);
|
frameRemoveHome.X = frameAtHome.Right;
|
frameTableThreeIcon.AddChidren(frameRemoveHome);
|
//离家布防的图标
|
this.btnRemoveHomeIcon = new IconViewControl(162);
|
btnRemoveHomeIcon.Y = btnAtHomeIconTwo.Y;
|
btnRemoveHomeIcon.UnSelectedImagePath = "Safeguard/ProtectionRemoveHome.png";
|
btnRemoveHomeIcon.SelectedImagePath = "Safeguard/ProtectionRemoveHomeSelected.png";
|
btnRemoveHomeIcon.Gravity = Gravity.CenterHorizontal;
|
frameRemoveHome.AddChidren(btnRemoveHomeIcon, ChidrenBindMode.BindEventOnly);
|
//离家布防的文字
|
var btnRemoveHomeView = new ViewNormalControl(width, true);
|
btnRemoveHomeView.Y = btnAtHomeView.Y;
|
btnRemoveHomeView.TextID = R.MyInternationalizationString.uRemoveHomeGarrison;
|
btnRemoveHomeView.TextAlignment = TextAlignment.Center;
|
frameRemoveHome.AddChidren(btnRemoveHomeView, ChidrenBindMode.BindEventOnly);
|
//离家布防
|
frameRemoveHome.MouseUpEvent = (sender, e) =>
|
{
|
if (btnRemoveHomeIcon.IsSelected == false)
|
{
|
this.SetSafetyGarrisonModeInRemoveHome();
|
}
|
};
|
|
//撤防的桌布
|
var frameReGarrisonThree = new StatuFrameLayout(width, height);
|
frameReGarrisonThree.X = frameRemoveHome.Right;
|
frameTableThreeIcon.AddChidren(frameReGarrisonThree);
|
//撤防的图标
|
var btnReGarrisonIconThree = new IconViewControl(162);
|
btnReGarrisonIconThree.Y = btnAtHomeIconTwo.Y;
|
btnReGarrisonIconThree.UnSelectedImagePath = "Safeguard/WithdrawGarrison.png";
|
btnReGarrisonIconThree.SelectedImagePath = "Safeguard/WithdrawGarrisonSelected.png";
|
btnReGarrisonIconThree.Gravity = Gravity.CenterHorizontal;
|
frameReGarrisonThree.AddChidren(btnReGarrisonIconThree);
|
//撤防的文字
|
var btnReGarrisonTextThree = new ViewNormalControl(width, true);
|
btnReGarrisonTextThree.Y = btnAtHomeView.Y;
|
btnReGarrisonTextThree.TextID = R.MyInternationalizationString.uWithdrawGarrison;
|
btnReGarrisonTextThree.TextAlignment = TextAlignment.Center;
|
frameReGarrisonThree.AddChidren(btnReGarrisonTextThree, ChidrenBindMode.BindEventOnly);
|
|
//撤防
|
frameReGarrisonThree.MouseUpEvent = (sender, e) =>
|
{
|
this.RemoveSafetyGarrisonMode();
|
};
|
|
#endregion
|
|
return frameLayout;
|
}
|
|
/// <summary>
|
/// 初始化Tab控件
|
/// </summary>
|
/// <param name="YY">Yy.</param>
|
private void InitTabSwitchControl(int YY)
|
{
|
//Tab切换控件
|
var frameSwich = new FrameLayout();
|
frameSwich.Y = YY;
|
frameSwich.Height = Application.GetRealHeight(150);
|
bodyFrameLayout.AddChidren(frameSwich);
|
|
//安防记录
|
var btnLog = new ViewNormalControl(frameSwich.Width / 2, Application.GetRealHeight(100))
|
{
|
Gravity = Gravity.CenterVertical,
|
TextID = R.MyInternationalizationString.uSecurityLog,
|
TextAlignment = TextAlignment.Center
|
};
|
frameSwich.AddChidren(btnLog);
|
|
//传感器状态
|
var btnSensor = new ViewNormalControl(frameSwich.Width / 2, Application.GetRealHeight(100))
|
{
|
Gravity = Gravity.CenterVertical,
|
X = frameSwich.Width / 2,
|
TextID = R.MyInternationalizationString.uSensorStatu,
|
TextColor = UserCenterColor.Current.SelectTextColor,
|
TextAlignment = TextAlignment.Center
|
};
|
frameSwich.AddChidren(btnSensor);
|
|
//线
|
var btnLine = new ProgressLine();
|
btnLine.Gravity = Gravity.BottomLeft;
|
frameSwich.AddChidren(btnLine);
|
btnLine.SetValue(50, false);
|
|
//桌布控件
|
frameLayoutDraw = new FrameLayout();
|
frameLayoutDraw.Y = frameSwich.Bottom;
|
frameLayoutDraw.Height = bodyFrameLayout.Height - frameSwich.Bottom;
|
bodyFrameLayout.AddChidren(frameLayoutDraw);
|
|
//安防记录Tab
|
btnLog.MouseUpEventHandler += (sender, e) =>
|
{
|
btnSensor.TextColor = Common.ZigbeeColor.Current.TextColor;
|
btnLog.TextColor = UserCenterColor.Current.SelectTextColor;
|
btnLine.SetValue(50);
|
this.TabSelectIndex = 1;
|
|
//显示安防记录
|
this.SetSafeguardLogToForm();
|
};
|
|
//传感器状态Tab
|
btnSensor.MouseUpEventHandler += (sender, e) =>
|
{
|
btnSensor.TextColor = UserCenterColor.Current.SelectTextColor;
|
btnLog.TextColor = Common.ZigbeeColor.Current.TextColor;
|
btnLine.SetValue(50, false);
|
this.TabSelectIndex = 2;
|
|
//显示传感器列表
|
this.SetSensorDataToForm();
|
};
|
}
|
|
/// <summary>
|
/// 初始化右上角图标
|
/// </summary>
|
private void InitTopRightIcon()
|
{
|
var btnIcon = new TopLayoutMostRightView();
|
btnIcon.UnSelectedImagePath = "Item/More.png";
|
btnIcon.SelectedImagePath = "Item/MoreSelected.png";
|
topFrameLayout.AddChidren(btnIcon);
|
btnIcon.MouseUpEventHandler += (sender, e) =>
|
{
|
//菜单控件
|
var frameMenu = new TopRightMenuControl(this, 2);
|
//防区列表
|
string menu1 = Language.StringByID(R.MyInternationalizationString.uGarrisonAreaList);
|
frameMenu.AddRowMenu(menu1, (obj) =>
|
{
|
var form = new GarrisonAreaListMenuForm();
|
form.AddForm(form);
|
});
|
//密码设置
|
string menu2 = Language.StringByID(R.MyInternationalizationString.uPasswordSettion);
|
frameMenu.AddRowMenu(menu2, (obj) =>
|
{
|
var form = new PasswordMainForm();
|
form.AddForm(form);
|
});
|
};
|
}
|
|
#endregion
|
|
#region ■ 初始化全部缓存_____________________
|
|
/// <summary>
|
/// 初始化全部内存信息
|
/// </summary>
|
private async void InitAllMemoryData()
|
{
|
//开启进度条
|
this.ShowProgressBar();
|
|
//正在与网关通讯中,请稍后
|
this.SetProgressValue(Language.StringByID(R.MyInternationalizationString.uConnectToGatewayPleaseWait));
|
|
//检测主网关
|
var result = await this.CheckMainGateway();
|
if (result == false)
|
{
|
//关闭进度条
|
this.CloseProgressBar(ShowReLoadMode.YES);
|
//网关回复超时,请稍后再试
|
string msg = Language.StringByID(R.MyInternationalizationString.uGatewayResponseTimeOut);
|
this.ShowTip(msg);
|
|
return;
|
}
|
|
//安防信息初始化中,请稍后
|
this.SetProgressValue(Language.StringByID(R.MyInternationalizationString.uGarrisonInfoInittingPleaseWait));
|
|
//刷新安防信息
|
result = await this.RefreshSafeguardInfo();
|
if (result == false)
|
{
|
//关闭进度条
|
this.CloseProgressBar(ShowReLoadMode.YES);
|
//网关回复超时,请稍后再试
|
string msg = Language.StringByID(R.MyInternationalizationString.uGatewayResponseTimeOut);
|
this.ShowTip(msg);
|
|
return;
|
}
|
|
//获取当前的安防模式
|
var data = await Common.LocalSafeguard.Current.GetSafetyMode();
|
if (data != null)
|
{
|
//根据布防模式,设置图标的选择状态
|
this.SetIconStatuByGarrisonMode((GarrisonMode)data.ModeId);
|
}
|
|
//设置按钮可视状态
|
this.SetButtonVisible();
|
|
//设置传感器数据到画面
|
this.SetSensorDataToForm();
|
|
//关闭进度条
|
this.CloseProgressBar();
|
}
|
|
/// <summary>
|
/// 检测主网关
|
/// </summary>
|
/// <returns></returns>
|
private async Task<bool> CheckMainGateway()
|
{
|
int count = 0;
|
//等待主网关
|
while (ZbGateway.MainGateWay == null)
|
{
|
await Task.Delay(500);
|
count++;
|
if (count == 10)
|
{
|
return false;
|
}
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 刷新安防信息
|
/// </summary>
|
/// <returns></returns>
|
private async Task<bool> RefreshSafeguardInfo()
|
{
|
int count = 0;
|
while (true)
|
{
|
//从网关刷新安防信息,直到能够读取为止
|
var result = await Common.LocalSafeguard.Current.ReFreshByGateway(ShowErrorMode.NO);
|
if (result == true)
|
{
|
break;
|
}
|
count++;
|
if (count == 5)
|
{
|
return false;
|
}
|
await Task.Delay(1000);
|
}
|
return true;
|
}
|
|
#endregion
|
|
#region ■ 布防撤防___________________________
|
|
/// <summary>
|
/// 在家布防
|
/// </summary>
|
private async void SetSafetyGarrisonModeInAtHome()
|
{
|
//打开进度条
|
this.ShowProgressBar();
|
|
//在家布防
|
GarrisonMode mode = await Common.LocalSafeguard.Current.SetSafetyGarrisonByModel(GarrisonMode.AtHome);
|
|
//关闭进度条
|
this.CloseProgressBar();
|
|
if (mode == GarrisonMode.None)
|
{
|
return;
|
}
|
//根据布防模式,设置图标的选择状态
|
this.SetIconStatuByGarrisonMode(mode);
|
if (mode == GarrisonMode.RemoveGarrison)
|
{
|
return;
|
}
|
|
//如果设置有内部防区
|
if (Common.LocalSafeguard.Current.IsHadInternalDefenseArea() == true)
|
{
|
//在家布防设置成功
|
string msg = Language.StringByID(R.MyInternationalizationString.uSetAtHomeGarrisonSuccess);
|
this.ShowNormalMsg(msg);
|
}
|
else
|
{
|
//布防设置成功
|
string msg = Language.StringByID(R.MyInternationalizationString.uSetGarrisonSuccess);
|
this.ShowNormalMsg(msg);
|
}
|
//添加布防上报的行控件
|
this.AddSafeguardLogPushRow(null);
|
}
|
|
/// <summary>
|
/// 离家布防
|
/// </summary>
|
private async void SetSafetyGarrisonModeInRemoveHome()
|
{
|
//打开进度条
|
this.ShowProgressBar();
|
|
//离家布防
|
GarrisonMode mode = await Common.LocalSafeguard.Current.SetSafetyGarrisonByModel(GarrisonMode.RemoveHome);
|
|
//关闭进度条
|
this.CloseProgressBar();
|
|
if (mode == GarrisonMode.None)
|
{
|
return;
|
}
|
//根据布防模式,设置图标的选择状态
|
this.SetIconStatuByGarrisonMode(mode);
|
if (mode == GarrisonMode.RemoveGarrison)
|
{
|
return;
|
}
|
|
//离家布防设置成功
|
string msg = Language.StringByID(R.MyInternationalizationString.uSetRemoveHomeGarrisonSuccess);
|
this.ShowNormalMsg(msg);
|
|
//添加布防上报的行控件
|
this.AddSafeguardLogPushRow(null);
|
}
|
|
/// <summary>
|
/// 撤防
|
/// </summary>
|
private async void RemoveSafetyGarrisonMode()
|
{
|
//打开进度条
|
this.ShowProgressBar();
|
|
//撤防
|
bool result = await Common.LocalSafeguard.Current.RemoveSafetyGarrison(GarrisonMode.RemoveGarrison, false);
|
|
//关闭进度条
|
this.CloseProgressBar();
|
|
if (result == false)
|
{
|
return;
|
}
|
//根据布防模式,设置图标的选择状态
|
this.SetIconStatuByGarrisonMode(GarrisonMode.RemoveGarrison);
|
|
//撤防成功
|
string msg = Language.StringByID(R.MyInternationalizationString.uRemoveGarrisonSuccess);
|
this.ShowNormalMsg(msg);
|
|
//添加布防上报的行控件
|
this.AddSafeguardLogPushRow(null);
|
}
|
|
/// <summary>
|
/// 根据布防模式,设置图标的选择状态
|
/// </summary>
|
/// <param name="mode"></param>
|
private void SetIconStatuByGarrisonMode(GarrisonMode mode)
|
{
|
//在家布防
|
if (mode == GarrisonMode.AtHome)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
this.btnAtHomeIconTwo.IsSelected = true;
|
this.btnAtHomeIconThree.IsSelected = true;
|
this.btnRemoveHomeIcon.IsSelected = false;
|
});
|
}
|
//离家布防
|
else if (mode == GarrisonMode.RemoveHome)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
this.btnAtHomeIconTwo.IsSelected = false;
|
this.btnAtHomeIconThree.IsSelected = false;
|
this.btnRemoveHomeIcon.IsSelected = true;
|
});
|
}
|
//撤防
|
else if (mode == GarrisonMode.RemoveGarrison)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
this.btnAtHomeIconTwo.IsSelected = false;
|
this.btnAtHomeIconThree.IsSelected = false;
|
this.btnRemoveHomeIcon.IsSelected = false;
|
});
|
}
|
}
|
|
/// <summary>
|
/// 检测是否已经配置有用户密码,如果没有配置有密码,则跳转界面,并且返回false
|
/// </summary>
|
/// <returns></returns>
|
private async Task<bool> CheckHadConfigureUserPsw()
|
{
|
if (UserCenterResourse.UserInfo.AuthorityNo == 3)
|
{
|
//成员的时候,不检测这个东西
|
return true;
|
}
|
var result = await Common.LocalSafeguard.Current.CheckHadConfigureUserPsw();
|
if (result == -1)
|
{
|
//出现异常
|
return false;
|
}
|
if (result == 0)
|
{
|
//请先设置用户密码,再执行操作
|
string msg = Language.StringByID(R.MyInternationalizationString.uPleaseConfigurePswBeforeOperation);
|
this.ShowTip(msg);
|
|
Application.RunOnMainThread(() =>
|
{
|
var form = new PasswordMainForm();
|
form.AddForm(form);
|
});
|
return false;
|
}
|
return true;
|
}
|
|
#endregion
|
|
#region ■ 界面关闭___________________________
|
|
/// <summary>
|
/// 画面关闭
|
/// </summary>
|
/// <param name="isCloseForm">是否关闭界面,false的时候,只会调用关闭函数里面的附加功能</param>
|
public override void CloseForm(bool isCloseForm = true)
|
{
|
//移除全部监听事件
|
this.RemoveAllListenEvent();
|
|
base.CloseForm(isCloseForm);
|
}
|
|
/// <summary>
|
/// 移除全部监听事件
|
/// </summary>
|
private void RemoveAllListenEvent()
|
{
|
DeviceAttributeLogic.Current.RemoveEvent("SafetyManagementMainFormOnline");
|
DeviceAttributeLogic.Current.RemoveEvent("SafetyManagementMainFormAlarm");
|
DeviceAttributeLogic.Current.RemoveEvent("SafetyManagementMainFormReceivePushOnline");
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 设置布防按钮的可视状态
|
/// </summary>
|
public void SetButtonVisible()
|
{
|
//设置有内部防区
|
if (Common.LocalSafeguard.Current.IsHadInternalDefenseArea() == true)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
//在家布防显示
|
this.frameTableThreeIcon.Visible = true;
|
this.frameTableTwoIcon.Visible = false;
|
});
|
}
|
else
|
{
|
Application.RunOnMainThread(() =>
|
{
|
//在家布防不显示
|
this.frameTableThreeIcon.Visible = false;
|
this.frameTableTwoIcon.Visible = true;
|
});
|
}
|
}
|
|
#endregion
|
|
#region ■ 传感器相关_________________________
|
|
/// <summary>
|
/// 传感器的状态控件
|
/// </summary>
|
private Dictionary<string, RowMostRightTextView> dicSensorStatuView = new Dictionary<string, RowMostRightTextView>();
|
/// <summary>
|
/// 传感器的报警控件
|
/// </summary>
|
private Dictionary<string, RowMostRightTextView> dicSensorAlertView = new Dictionary<string, RowMostRightTextView>();
|
|
#region 添加传感器行_
|
|
/// <summary>
|
/// 设置传感器数据到画面
|
/// </summary>
|
private void SetSensorDataToForm()
|
{
|
if (this.TabSelectIndex != 2)
|
{
|
return;
|
}
|
//移除全部监听事件
|
this.RemoveAllListenEvent();
|
|
this.dicSensorStatuView.Clear();
|
this.dicSensorAlertView.Clear();
|
|
//添加列表控件
|
frameLayoutDraw.RemoveAll();
|
var listView = new VerticalScrolViewLayout();
|
listView.Height = frameLayoutDraw.Height;
|
frameLayoutDraw.AddChidren(listView);
|
|
new System.Threading.Thread(() =>
|
{
|
//获取安防的全部传感器设备的信息
|
var dicDevice = Common.LocalSafeguard.Current.GetAllSensorDeviceInfo();
|
var listDevice = new List<CommonDevice>();
|
|
foreach (var zoneId in dicDevice.Keys)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
foreach (var Info in dicDevice[zoneId])
|
{
|
//添加行
|
this.AddSensorStatuRow(listView, zoneId, Info);
|
|
//收集传感器
|
var tempDevice = Common.LocalDevice.Current.GetDevice(Info.MacAddr, Info.Epoint);
|
if (tempDevice != null)
|
{
|
listDevice.Add(tempDevice);
|
}
|
}
|
//最后一个防区的时候,开启各种监视线程
|
if (zoneId == dicDevice.Count)
|
{
|
//开启传感器报警监视
|
this.StartCheckDeviceAlarm();
|
|
//开启设备在线监测
|
this.StartCheckDeviceOnline(listDevice);
|
}
|
});
|
}
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
/// 添加传感器状态的行
|
/// </summary>
|
/// <param name="listView"></param>
|
/// <param name="zoneID">防区ID</param>
|
/// <param name="sensorInfo">传感器的信息</param>
|
private void AddSensorStatuRow(VerticalScrolViewLayout listView, int zoneID, Safeguard.ZoneDeviceListData sensorInfo)
|
{
|
CommonDevice device = Common.LocalDevice.Current.GetDevice(sensorInfo.MacAddr, sensorInfo.Epoint);
|
if (device == null)
|
{
|
return;
|
}
|
|
//设备控件
|
var rowDevice = new DeviceRoomViewRow(listView, device);
|
rowDevice.ChangedChidrenBindMode(rowDevice.btnIcon, ChidrenBindMode.BindEventOnly);
|
rowDevice.ChangedChidrenBindMode(rowDevice.btnDevie, ChidrenBindMode.BindEventOnly);
|
rowDevice.ChangedChidrenBindMode(rowDevice.btnRoom, ChidrenBindMode.BindEventOnly);
|
string GarrisonText = Common.LocalSafeguard.Current.GetGarrisonText(zoneID);
|
rowDevice.btnDevie.Text = rowDevice.btnDevie.Text + "(" + GarrisonText + ")";
|
|
//状态(初始值:离线)
|
var btnStatu = new RowMostRightTextView();
|
btnStatu.Gravity = Gravity.Frame;
|
btnStatu.Y = rowDevice.btnDevie.Y;
|
if (device.IsOnline == 0)
|
{
|
//离线
|
btnStatu.TextID = R.MyInternationalizationString.uOffLine;
|
btnStatu.TextColor = UserCenterColor.Current.Gray;
|
}
|
else
|
{
|
//在线
|
btnStatu.TextID = R.MyInternationalizationString.uOnline;
|
btnStatu.TextColor = UserCenterColor.Current.Green;
|
}
|
rowDevice.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly);
|
|
//报警信息
|
var btnAlert = new RowMostRightTextView();
|
btnAlert.TextColor = UserCenterColor.Current.Red;
|
btnAlert.Gravity = Gravity.Frame;
|
btnAlert.Y = rowDevice.btnRoom.Y;
|
rowDevice.AddChidren(btnAlert);
|
//扩大控件宽度
|
btnAlert.Width += Application.GetRealWidth(200);
|
btnAlert.X -= Application.GetRealWidth(200);
|
|
string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
|
this.dicSensorStatuView[mainkeys] = btnStatu;
|
this.dicSensorAlertView[mainkeys] = btnAlert;
|
}
|
|
#endregion
|
|
#region 传感器报警_
|
|
/// <summary>
|
/// 开启传感器报警监视
|
/// </summary>
|
private void StartCheckDeviceAlarm()
|
{
|
DeviceAttributeLogic.Current.AddSafetyAlarmEvent("SafetyManagementMainFormAlarm", this.SetAlarmInfoByInterfaceResult);
|
}
|
|
/// <summary>
|
/// 根据接口推送,设置报警信息
|
/// </summary>
|
/// <param name="common"></param>
|
/// <param name="safetyDevice">是否是安防设备报警</param>
|
private void SetAlarmInfoByInterfaceResult(CommonDevice common, bool safetyDevice)
|
{
|
if (safetyDevice == false)
|
{
|
return;
|
}
|
//添加安防设备上报的行控件
|
this.AddSafeguardLogPushRow(common);
|
|
string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(common);
|
if (this.dicSensorAlertView.ContainsKey(mainkey) == false)
|
{
|
return;
|
}
|
var control = this.dicSensorAlertView[mainkey];
|
|
//获取传感器报警信息的翻译文本
|
var msgInfo = Common.LocalSafeguard.Current.GetSensorAlarmInfo(common);
|
if (msgInfo == null)
|
{
|
return;
|
}
|
Application.RunOnMainThread(() =>
|
{
|
control.Text = msgInfo.AlarmMsg;
|
});
|
}
|
|
#endregion
|
|
#region 在线状态_
|
|
/// <summary>
|
/// 开启设备在线监测
|
/// </summary>
|
/// <param name="listDevice">传感器列表</param>
|
private void StartCheckDeviceOnline(List<CommonDevice> listDevice)
|
{
|
if (listDevice.Count == 0)
|
{
|
return;
|
}
|
//添加接受网关自动推送的事件
|
DeviceAttributeLogic.Current.AddReceiveDeviceOnlinePushEvent("SafetyManagementMainFormReceivePushOnline", this.ReceiveDeviceStatuPush);
|
//从设备列表中获取在线状态
|
new System.Threading.Thread(async () =>
|
{
|
//首先获取这些传感器所在的网关
|
var listWay = new List<ZbGateway>();
|
foreach (var device in listDevice)
|
{
|
ZbGateway realWay = null;
|
//是否存在真实物理网关
|
if (Common.LocalGateway.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
|
{
|
continue;
|
}
|
listWay.Add(realWay);
|
}
|
foreach (var zbway in listWay)
|
{
|
if (this.Parent == null)
|
{
|
//界面关闭
|
return;
|
}
|
await Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, this.ReceiveDeviceStatuPush, ShowErrorMode.NO);
|
}
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
/// 接受设备在线推送(不要忘记最后它会推送一个Null的东西过来)
|
/// </summary>
|
/// <param name="device"></param>
|
private void ReceiveDeviceStatuPush(CommonDevice device)
|
{
|
if (this.Parent == null || device == null)
|
{
|
//界面关闭
|
return;
|
}
|
|
lock (objOnlineLock)
|
{
|
string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
|
if (this.dicSensorStatuView.ContainsKey(mainkeys) == true)
|
{
|
//因为这是推送过来的,我不保证那一瞬间这个东西会不会被移除
|
var control = this.dicSensorStatuView[mainkeys];
|
CommonDevice Loacldevice = Common.LocalDevice.Current.GetDevice(mainkeys);
|
if (Loacldevice != null)
|
{
|
//在线状态一样的话,不需要刷新
|
if (Loacldevice.IsOnline == device.IsOnline)
|
{
|
return;
|
}
|
//保存状态
|
Loacldevice.IsOnline = device.IsOnline;
|
Loacldevice.ReSave();
|
}
|
|
Application.RunOnMainThread(() =>
|
{
|
//设置控件的在线状态文本效果
|
this.SetControlOnlineStatu(control, device.IsOnline == 1);
|
});
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置控件的在线状态文本效果
|
/// </summary>
|
/// <param name="button"></param>
|
/// <param name="IsOnline"></param>
|
private void SetControlOnlineStatu(ButtonCommon button, bool IsOnline)
|
{
|
if (IsOnline == true)
|
{
|
//在线
|
button.TextID = R.MyInternationalizationString.uOnline;
|
button.TextColor = UserCenterColor.Current.Green;
|
}
|
else
|
{
|
//离线
|
button.TextID = R.MyInternationalizationString.uOffLine;
|
button.TextColor = UserCenterColor.Current.Gray;
|
}
|
}
|
|
#endregion
|
|
#endregion
|
|
#region ■ 安防记录相关_______________________
|
|
/// <summary>
|
/// 当日的安防记录的FrameLayout
|
/// </summary>
|
private SpecialFrameLayout TodaySafeguardFrame = null;
|
/// <summary>
|
/// 其他日期的安防记录的FrameLayout
|
/// </summary>
|
private SpecialFrameLayout otherDaySafeguardFrame = null;
|
/// <summary>
|
/// 当日的安防记录的行
|
/// </summary>
|
private List<SafeguardLogRowView> listNowDayLogRow = new List<SafeguardLogRowView>();
|
|
/// <summary>
|
/// 设置安防记录到界面
|
/// </summary>
|
private void SetSafeguardLogToForm()
|
{
|
if (this.TabSelectIndex != 1)
|
{
|
return;
|
}
|
//移除全部监听事件
|
this.RemoveAllListenEvent();
|
|
this.dicSensorStatuView.Clear();
|
this.dicSensorAlertView.Clear();
|
this.listNowDayLogRow.Clear();
|
|
frameLayoutDraw.RemoveAll();
|
var listView = new VerticalScrolViewLayout();
|
listView.Height = frameLayoutDraw.Height;
|
frameLayoutDraw.AddChidren(listView);
|
|
var frame = new SpecialFrameLayout(listView.Height, 0);
|
listView.AddChidren(frame);
|
|
new System.Threading.Thread(() =>
|
{
|
var dicInfo = Common.LocalSafeguard.Current.GetSafeguardAlarmInfo();
|
Application.RunOnMainThread(() =>
|
{
|
//初始化当日的安防记录控件
|
this.InitTodaySafeguardLogControl(frame, dicInfo);
|
//初始化其他日期的安防记录控件
|
this.InitOtherDaySafeguardLogControl(frame, dicInfo);
|
|
//控件内部bug对应
|
frame.RemoveFromParent();
|
listView.AddChidren(frame);
|
|
//开启传感器报警监视
|
this.StartCheckDeviceAlarm();
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
/// 初始化当日的安防记录控件
|
/// </summary>
|
/// <param name="frameLayout"></param>
|
/// <param name="dicInfo"></param>
|
private void InitTodaySafeguardLogControl(SpecialFrameLayout frameLayout, Dictionary<string, List<SafeguardAlarmInfo>> dicInfo)
|
{
|
string nowDayKey = DateTime.Now.ToString("yyyyMMdd");
|
string month = nowDayKey.Substring(4, 2);
|
string day = nowDayKey.Substring(6, 2);
|
|
//日期
|
var btnDayTitle = new ViewNormalControl(800, true);
|
btnDayTitle.TextSize = 18;
|
btnDayTitle.Y = Application.GetRealHeight(30);
|
btnDayTitle.X = ControlCommonResourse.XXLeft;
|
btnDayTitle.Text = month + Language.StringByID(R.MyInternationalizationString.Month) + day + Language.StringByID(R.MyInternationalizationString.Day);
|
frameLayout.AddChidren(btnDayTitle);
|
|
//记录容器
|
this.TodaySafeguardFrame = new SpecialFrameLayout(100, 0);
|
this.TodaySafeguardFrame.Y = btnDayTitle.Bottom;
|
frameLayout.AddChidren(this.TodaySafeguardFrame);
|
|
//没有记录
|
if (dicInfo.ContainsKey(nowDayKey) == false)
|
{
|
//今日无任何报警记录
|
var btnView = new ViewNormalControl(800, true);
|
btnView.TextSize = 16;
|
btnView.TextAlignment = TextAlignment.Center;
|
btnView.TextID = R.MyInternationalizationString.uNowDayNotHadAlarmLog;
|
btnView.TextColor = UserCenterColor.Current.TextGrayColor;
|
btnView.Gravity = Gravity.CenterHorizontal;
|
this.TodaySafeguardFrame.AddChidren(btnView, HeightAutoMode.IncreaseOnly);
|
return;
|
}
|
|
//添加记录行
|
foreach (var info in dicInfo[nowDayKey])
|
{
|
var row = new SafeguardLogRowView(this.TodaySafeguardFrame, info);
|
this.listNowDayLogRow.Add(row);
|
}
|
//调整控件高度
|
this.TodaySafeguardFrame.IncreaseHeightByMode(null);
|
frameLayout.IncreaseHeightByMode(null);
|
//移除当日
|
dicInfo.Remove(nowDayKey);
|
}
|
|
/// <summary>
|
/// 初始化其他日期的安防记录控件
|
/// </summary>
|
/// <param name="frameLayout"></param>
|
/// <param name="dicInfo"></param>
|
private void InitOtherDaySafeguardLogControl(SpecialFrameLayout frameLayout, Dictionary<string, List<SafeguardAlarmInfo>> dicInfo)
|
{
|
//记录容器
|
this.otherDaySafeguardFrame = new SpecialFrameLayout(100, 0);
|
this.otherDaySafeguardFrame.Y = this.TodaySafeguardFrame.Bottom;
|
frameLayout.AddChidren(this.otherDaySafeguardFrame);
|
if (dicInfo.Count == 0)
|
{
|
return;
|
}
|
foreach (string dayText in dicInfo.Keys)
|
{
|
string month = dayText.Substring(4, 2);
|
string day = dayText.Substring(6, 2);
|
//日期
|
var btnDayTitle = new ViewNormalControl(800, true);
|
btnDayTitle.X = ControlCommonResourse.XXLeft;
|
btnDayTitle.TextSize = 18;
|
btnDayTitle.Text = month + Language.StringByID(R.MyInternationalizationString.Month) + day + Language.StringByID(R.MyInternationalizationString.Day);
|
var view = this.otherDaySafeguardFrame.GetChildren(this.otherDaySafeguardFrame.ChildrenCount - 1);
|
if (view != null)
|
{
|
btnDayTitle.Y = view.Bottom;
|
}
|
this.otherDaySafeguardFrame.AddChidren(btnDayTitle);
|
//添加记录行
|
foreach (var info in dicInfo[dayText])
|
{
|
var row = new SafeguardLogRowView(this.otherDaySafeguardFrame, info);
|
}
|
}
|
|
//调整控件高度
|
this.otherDaySafeguardFrame.IncreaseHeightByMode(null);
|
frameLayout.IncreaseHeightByMode(null);
|
}
|
|
/// <summary>
|
/// 添加安防设备上报的行控件
|
/// </summary>
|
/// <param name="device">设备对象,为null时是布防</param>
|
private void AddSafeguardLogPushRow(CommonDevice device)
|
{
|
if (this.TabSelectIndex != 1 || Common.LocalSafeguard.Current.listAlarmInfo.Count == 0)
|
{
|
return;
|
}
|
var info = Common.LocalSafeguard.Current.listAlarmInfo[0];
|
|
if (device != null)
|
{
|
string mainkey1 = Common.LocalDevice.Current.GetDeviceMainKeys(info.DeviceAddr, info.DeviceEpoint);
|
string mainkey2 = Common.LocalDevice.Current.GetDeviceMainKeys(device);
|
if (mainkey1 != mainkey2)
|
{
|
//不是同一个东西
|
return;
|
}
|
}
|
|
Application.RunOnMainThread(() =>
|
{
|
if (this.listNowDayLogRow.Count == 0)
|
{
|
//清空msg
|
this.TodaySafeguardFrame.RemoveAll();
|
}
|
//添加行(置顶)
|
var row = new SafeguardLogRowView(null, info);
|
this.TodaySafeguardFrame.AddChidren(row);
|
row.InitControl();
|
|
int height = row.Height;
|
//原有控件往下移动
|
for (int i = 0; i < this.listNowDayLogRow.Count; i++)
|
{
|
this.listNowDayLogRow[i].Y += height;
|
}
|
//变更大小
|
this.TodaySafeguardFrame.IncreaseHeightByMode(null);
|
//其他日期往下移动
|
this.otherDaySafeguardFrame.Y = this.TodaySafeguardFrame.Bottom;
|
|
//变更父容器大小
|
var fatherFrame = (SpecialFrameLayout)this.otherDaySafeguardFrame.Parent;
|
fatherFrame.IncreaseHeightByMode(null);
|
|
this.listNowDayLogRow.Add(row);
|
});
|
}
|
|
#endregion
|
|
#region ■ 界面重新激活事件___________________
|
|
/// <summary>
|
/// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
|
/// </summary>
|
public override void FormActionAgainEvent()
|
{
|
//设置布防按钮的可视状态
|
this.SetButtonVisible();
|
if (this.TabSelectIndex == 1)
|
{
|
//设置安防记录到界面
|
this.SetSafeguardLogToForm();
|
}
|
else if (this.TabSelectIndex == 2)
|
{
|
//设置传感器数据到画面
|
this.SetSensorDataToForm();
|
}
|
}
|
|
#endregion
|
}
|
}
|