HDL Home App 第二版本 旧平台金堂用 正在使用
hxb
2022-08-30 25429f085093d89d543a0b90e30d0d62d1b7dac9
ZigbeeApp/Shared/Phone/UserCenter/Safety/SafetyManagementMainForm.cs
@@ -15,7 +15,7 @@
        /// <summary>
        /// 桌布控件,用于存放或者移除功能块控件(Tab控件专用)
        /// </summary>
        private FrameLayout frameLayoutDraw = null;
        private NormalFrameLayout frameLayoutDraw = null;
        /// <summary>
        /// 安防控件
        /// </summary>
@@ -73,17 +73,28 @@
            bodyFrameLayout.AddChidren(frameBack);
            //桌布控件
            frameLayoutDraw = new FrameLayout();
            frameLayoutDraw = new NormalFrameLayout();
            frameLayoutDraw.Y = Application.GetRealHeight(181);
            frameLayoutDraw.Height = frameBack.Height - Application.GetRealHeight(181);
            frameBack.AddChidren(frameLayoutDraw);
            //计算宽度使用
            var btnTemp = new ButtonBase();
            btnTemp.TextSize = 16;
            btnTemp.IsBold = true;
            btnTemp.TextID = R.MyInternationalizationString.uSecurityLog;
            int frameLogWidth = btnTemp.GetRealWidthByText() + Application.GetRealWidth(30);
            btnTemp.TextID = R.MyInternationalizationString.uSensorStatu;
            int frameSensorWidth = btnTemp.GetRealWidthByText() + Application.GetRealWidth(30);
            //安防记录(点击范围有点小,需要扩大它的点击范围)
            var frameLog = new FrameLayoutStatuControl();
            frameLog.UseClickStatu = false;
            frameLog.Height = Application.GetRealHeight(123);
            frameLog.Width = Application.GetRealWidth(273);
            frameLog.X = Application.GetRealWidth(259);
            frameLog.Width = frameLogWidth;
            frameLog.X = (frameBack.Width - frameLogWidth - frameSensorWidth) / 2;
            frameLog.Y = Application.GetRealHeight(58);
            frameBack.AddChidren(frameLog);
            //标题
@@ -92,21 +103,22 @@
            btnLog.TextAlignment = TextAlignment.Center;
            btnLog.TextID = R.MyInternationalizationString.uSecurityLog;
            btnLog.TextColor = UserCenterColor.Current.TextGrayColor3;
            frameLog.AddChidren(btnLog, ChidrenBindMode.BindEventOnly);
            frameLog.AddChidren(btnLog, ChidrenBindMode.BindEvent);
            //底线
            var btnLogLine = new NormalViewControl(40, 10, true);
            btnLogLine.Y = Application.GetRealHeight(86);
            btnLogLine.X = btnLog.X + btnLog.Width / 2 - Application.GetRealWidth(40) / 2;
            //btnLogLine.X = btnLog.X + btnLog.Width / 2 - Application.GetRealWidth(40) / 2;
            btnLogLine.Gravity = Gravity.CenterHorizontal;
            btnLogLine.Radius = (uint)Application.GetRealHeight(10) / 2;
            btnLogLine.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
            frameLog.AddChidren(btnLogLine, ChidrenBindMode.BindEventOnly);
            frameLog.AddChidren(btnLogLine, ChidrenBindMode.BindEvent);
            btnLogLine.Visible = false;
            //传感器状态(点击范围有点小,需要扩大它的点击范围)
            var frameSensor = new FrameLayoutStatuControl();
            frameSensor.UseClickStatu = false;
            frameSensor.Height = frameLog.Height;
            frameSensor.Width = frameLog.Width;
            frameSensor.Width = frameSensorWidth;
            frameSensor.X = frameLog.Right;
            frameSensor.Y = frameLog.Y;
            frameBack.AddChidren(frameSensor);
@@ -118,14 +130,15 @@
            btnSensor.TextAlignment = TextAlignment.Center;
            btnSensor.TextColor = UserCenterColor.Current.TextColor2;
            btnSensor.IsBold = true;
            frameSensor.AddChidren(btnSensor, ChidrenBindMode.BindEventOnly);
            frameSensor.AddChidren(btnSensor, ChidrenBindMode.BindEvent);
            //底线
            var btnSensorLine = new NormalViewControl(40, 10, true);
            btnSensorLine.BackgroundColor = UserCenterColor.Current.TextOrangeColor;
            btnSensorLine.Y = btnLogLine.Y;
            btnSensorLine.X = btnSensor.X + btnSensor.Width / 2 - Application.GetRealWidth(40) / 2;
            //btnSensorLine.X = btnSensor.X + btnSensor.Width / 2 - Application.GetRealWidth(40) / 2;
            btnSensorLine.Gravity = Gravity.CenterHorizontal;
            btnSensorLine.Radius = (uint)Application.GetRealHeight(10) / 2;
            frameSensor.AddChidren(btnSensorLine, ChidrenBindMode.BindEventOnly);
            frameSensor.AddChidren(btnSensorLine, ChidrenBindMode.BindEvent);
            //安防记录Tab
            frameLog.ButtonClickEvent += (sender, e) =>
@@ -253,6 +266,8 @@
                        UserCenterResourse.ResidenceOption.SafetyShortcut = false;
                        UserCenterResourse.ResidenceOption.Save();
                        btnShortCut.IsSelected = false;
                        //取消主页的「安防」捷径的话,主页需要重新刷新
                        UserView.UserPage.Instance.RefreshAllForm = true;
                    });
                }
                else
@@ -263,6 +278,8 @@
                        UserCenterResourse.ResidenceOption.SafetyShortcut = true;
                        UserCenterResourse.ResidenceOption.Save();
                        btnShortCut.IsSelected = true;
                        //创建主页的「安防」捷径的话,主页需要重新刷新
                        UserView.UserPage.Instance.RefreshAllForm = true;
                    });
                }
            };
@@ -311,7 +328,7 @@
            this.CloseProgressBar();
            //数据初始化完成后
            Application.RunOnMainThread(() =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                //初始化头部的那三个图标
                garrisonControl = new SafetyMasterControl();
@@ -454,7 +471,7 @@
            //自定义传感器状态控件
            var frameDevice = new SafetySensorStatuControl();
            listView.AddChidrenFrame(frameDevice);
            listView.AddChidren(frameDevice);
            frameDevice.InitControl(device);
            //添加阴影特效
            frameDevice.SetViewShadow(true);
@@ -530,78 +547,59 @@
            //从设备列表中获取在线状态
            HdlThreadLogic.Current.RunThread(() =>
            {
                //首先获取这些传感器所在的网关
                var listWay = new List<ZbGateway>();
                foreach (var device in listDevice)
                {
                    ZbGateway realWay = null;
                    //是否存在真实物理网关
                    if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
                    {
                        continue;
                    }
                    listWay.Add(realWay);
                }
                foreach (var zbway in listWay)
                {
                    if (this.Parent == null)
                    {
                        //界面关闭
                        return;
                    }
                    int statu = 0;
                    var list = Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
                    if (statu != -1)
                    var deviceInfo = Common.LocalDevice.Current.ReadDeviceEpointDeviceInfo(device);
                    if (deviceInfo != null)
                    {
                        for (int i = 0; i < list.Count; i++)
                        {
                            //设置设备在线状态
                            this.ReceiveDeviceStatuPush(list[i]);
                        }
                        //设置设备在线状态
                        this.ReceiveDeviceStatuPush(device, deviceInfo);
                    }
                    System.Threading.Thread.Sleep(50);
                }
            });
            }, ShowErrorMode.NO);
        }
        /// <summary>
        /// 接受设备在线推送
        /// </summary>
        /// <param name="device"></param>
        private void ReceiveDeviceStatuPush(CommonDevice device)
        private void ReceiveDeviceStatuPush(CommonDevice device, CommonDevice.DeviceInfoData deviceInfo)
        {
            if (this.Parent == null)
            {
                //界面关闭
                return;
            }
            lock (objOnlineLock)
            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
            if (this.dicSensorStatuView.ContainsKey(mainkeys) == true)
            {
                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
                if (this.dicSensorStatuView.ContainsKey(mainkeys) == true)
                CommonDevice Loacldevice = Common.LocalDevice.Current.GetDevice(mainkeys);
                if (Loacldevice == null)
                {
                    CommonDevice Loacldevice = Common.LocalDevice.Current.GetDevice(mainkeys);
                    if (Loacldevice == null)
                    {
                        return;
                    }
                    //在线状态一样的话,不需要刷新
                    if (Loacldevice.IsOnline == device.IsOnline)
                    {
                        return;
                    }
                    //保存状态
                    Loacldevice.IsOnline = device.IsOnline;
                    Loacldevice.ReSave();
                    //因为这是推送过来的,我不保证那一瞬间这个东西会不会被移除
                    var control = this.dicSensorStatuView[mainkeys];
                    Application.RunOnMainThread(() =>
                    {
                        //设置控件的在线状态文本效果
                        control?.SetOnlineStatu(device.IsOnline == 1);
                    });
                    return;
                }
                //在线状态一样的话,不需要刷新
                if (Loacldevice.IsOnline == deviceInfo.IsOnline)
                {
                    return;
                }
                //保存状态
                Loacldevice.IsOnline = deviceInfo.IsOnline;
                //因为这是推送过来的,我不保证那一瞬间这个东西会不会被移除
                var control = this.dicSensorStatuView[mainkeys];
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //设置控件的在线状态文本效果
                    bool bolOnline = Common.LocalDevice.Current.CheckDeviceIsOnline(device);
                    control?.SetOnlineStatu(bolOnline);
                });
            }
        }
@@ -667,7 +665,7 @@
                }
                dicAlarm = null;
                Application.RunOnMainThread(() =>
                HdlThreadLogic.Current.RunMain(() =>
                {
                    if (this.Parent == null)
                    {
@@ -685,7 +683,7 @@
                    //执行初始化
                    TodaySafeguardFrame = new SafeguardLogControl();
                    TodaySafeguardFrame.Y = Application.GetRealHeight(10);
                    listView.AddChidrenFrame(TodaySafeguardFrame);
                    listView.AddChidren(TodaySafeguardFrame);
                    TodaySafeguardFrame.InitControl(nowDayKey, nowDayData);
                    //初始化其他日期的安防记录控件
@@ -693,7 +691,7 @@
                    {
                        otherDaySafeguardFrame = new FrameLayout();
                        otherDaySafeguardFrame.Height = Application.GetRealHeight(10);
                        listView.AddChidrenFrame(otherDaySafeguardFrame);
                        listView.AddChidren(otherDaySafeguardFrame);
                        foreach (var dayText in dicInfo.Keys)
                        {
                            //执行初始化
@@ -738,7 +736,7 @@
                }
            }
            Application.RunOnMainThread(() =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                if (this.TodaySafeguardFrame != null)
                {