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>
@@ -65,64 +65,80 @@
        /// </summary>
        private void InitTabSwitchControl()
        {
            //桌布控件
            frameLayoutDraw = new FrameLayout();
            frameLayoutDraw.Y = Application.GetRealHeight(590);
            frameLayoutDraw.Height = bodyFrameLayout.Height - Application.GetRealHeight(590);
            bodyFrameLayout.AddChidren(frameLayoutDraw);
            var frameBack = new FrameLayout();
            frameBack.Height = Application.GetRealHeight(1300);
            frameBack.Y = Application.GetRealHeight(444);
            frameBack.BackgroundColor = 0xa1ffffff;
            frameBack.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            bodyFrameLayout.AddChidren(frameBack);
            //临时的一个东西,用来计算真实值而已
            var btnTemp = new NormalViewControl(100, false);
            int realLogWidth = btnTemp.GetRealWidthByText(16, Language.StringByID(R.MyInternationalizationString.uSecurityLog));
            int realSensorWidth = btnTemp.GetRealWidthByText(16, Language.StringByID(R.MyInternationalizationString.uSensorStatu));
            btnTemp = null;
            //桌布控件
            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 FrameLayoutControl();
            var frameLog = new FrameLayoutStatuControl();
            frameLog.UseClickStatu = false;
            frameLog.Height = Application.GetRealHeight(123);
            frameLog.Width = realLogWidth;
            frameLog.X = Application.GetRealWidth(489) - realLogWidth;
            frameLog.Y = Application.GetRealHeight(467);
            bodyFrameLayout.AddChidren(frameLog);
            frameLog.Width = frameLogWidth;
            frameLog.X = (frameBack.Width - frameLogWidth - frameSensorWidth) / 2;
            frameLog.Y = Application.GetRealHeight(58);
            frameBack.AddChidren(frameLog);
            //标题
            var btnLog = new NormalViewControl(100, 63, true);
            btnLog.Width = realLogWidth;
            btnLog.TextAlignment = TextAlignment.CenterRight;
            btnLog.Width = frameLog.Width;
            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 FrameLayoutControl();
            var frameSensor = new FrameLayoutStatuControl();
            frameSensor.UseClickStatu = false;
            frameSensor.Height = frameLog.Height;
            frameSensor.Width = realSensorWidth;
            frameSensor.X = Application.GetRealWidth(550);
            frameSensor.Width = frameSensorWidth;
            frameSensor.X = frameLog.Right;
            frameSensor.Y = frameLog.Y;
            bodyFrameLayout.AddChidren(frameSensor);
            frameBack.AddChidren(frameSensor);
            //标题
            var btnSensor = new NormalViewControl(100, 63, true);
            btnSensor.Width = realSensorWidth;
            btnSensor.Width = frameSensor.Width;
            btnSensor.TextID = R.MyInternationalizationString.uSensorStatu;
            btnSensor.TextSize = 16;
            btnSensor.TextAlignment = TextAlignment.Center;
            btnSensor.TextColor = UserCenterColor.Current.TextColor2;
            frameSensor.AddChidren(btnSensor, ChidrenBindMode.BindEventOnly);
            btnSensor.IsBold = true;
            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) =>
@@ -130,8 +146,10 @@
                //字体大小和颜色变更
                btnSensor.TextColor = UserCenterColor.Current.TextGrayColor3;
                btnSensor.TextSize = 14;
                btnSensor.IsBold = false;
                btnLog.TextColor = UserCenterColor.Current.TextColor2;
                btnLog.TextSize = 16;
                btnLog.IsBold = true;
                btnLogLine.Visible = true;
                btnSensorLine.Visible = false;
@@ -148,8 +166,10 @@
                //字体大小和颜色变更
                btnSensor.TextColor = UserCenterColor.Current.TextColor2;
                btnSensor.TextSize = 16;
                btnSensor.IsBold = true;
                btnLog.TextColor = UserCenterColor.Current.TextGrayColor3;
                btnLog.TextSize = 14;
                btnLog.IsBold = false;
                btnLogLine.Visible = false;
                btnSensorLine.Visible = true;
@@ -183,7 +203,7 @@
                btnIcon.ButtonClickEvent += (sender, e) =>
                {
                    //菜单控件
                    var frameMenu = new TopRightMenuControl(2);
                    var frameMenu = new TopRightMenuControl(2, 2);
                    //防区列表
                    string menu1 = Language.StringByID(R.MyInternationalizationString.uGarrisonAreaList);
                    frameMenu.AddRowMenu(menu1, "Item/GarrisonList.png", "Item/GarrisonListSelected.png", () =>
@@ -231,7 +251,7 @@
            topFrameLayout.AddChidren(btnShortCut);
            btnShortCut.InitControl();
            if (UserCenterResourse.Option.SafetyShortcut == true)
            if (UserCenterResourse.ResidenceOption.SafetyShortcut == true)
            {
                //使用快捷方式
                btnShortCut.IsSelected = true;
@@ -243,9 +263,11 @@
                    //确定取消主页的「安防」捷径?
                    this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uCancelSafetyShortcutMsg), () =>
                    {
                        UserCenterResourse.Option.SafetyShortcut = false;
                        UserCenterResourse.Option.Save();
                        UserCenterResourse.ResidenceOption.SafetyShortcut = false;
                        UserCenterResourse.ResidenceOption.Save();
                        btnShortCut.IsSelected = false;
                        //取消主页的「安防」捷径的话,主页需要重新刷新
                        UserView.UserPage.Instance.RefreshAllForm = true;
                    });
                }
                else
@@ -253,9 +275,11 @@
                    //确定创建「安防」捷径到主页?
                    this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uCreatSafetyShortcutMsg), () =>
                    {
                        UserCenterResourse.Option.SafetyShortcut = true;
                        UserCenterResourse.Option.Save();
                        UserCenterResourse.ResidenceOption.SafetyShortcut = true;
                        UserCenterResourse.ResidenceOption.Save();
                        btnShortCut.IsSelected = true;
                        //创建主页的「安防」捷径的话,主页需要重新刷新
                        UserView.UserPage.Instance.RefreshAllForm = true;
                    });
                }
            };
@@ -304,7 +328,7 @@
            this.CloseProgressBar();
            //数据初始化完成后
            Application.RunOnMainThread(() =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                //初始化头部的那三个图标
                garrisonControl = new SafetyMasterControl();
@@ -421,6 +445,8 @@
                            }
                        }
                    }
                    //调整列表控件高度
                    listView.AdjustChidrenFrameHeight(listView.frameTable, Application.GetRealHeight(46));
                    //开启传感器报警监视
                    this.StartCheckDeviceAlarm();
                    //开启设备在线监测
@@ -445,11 +471,10 @@
            //自定义传感器状态控件
            var frameDevice = new SafetySensorStatuControl();
            listView.AddChidrenFrame(frameDevice);
            listView.AddChidren(frameDevice);
            frameDevice.InitControl(device);
            //添加阴影特效
            var btnTemp = new ButtonBase();
            btnTemp.AddBottomShadow(frameDevice);
            frameDevice.SetViewShadow(true);
            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
            this.dicSensorStatuView[mainkeys] = frameDevice;
@@ -482,7 +507,7 @@
                var control = this.dicSensorStatuView[mainkey];
                //获取传感器报警信息的翻译文本
                var msgInfo = HdlAlarmsLogic.Current.GetSensorAlarmInfo(device);
                Application.RunOnMainThread(() =>
                HdlThreadLogic.Current.RunMain(() =>
                {
                    control?.SetSensoReportInfo(msgInfo);
                });
@@ -522,69 +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;
                    }
                    Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, false, this.ReceiveDeviceStatuPush, ShowErrorMode.NO);
                    var deviceInfo = Common.LocalDevice.Current.ReadDeviceEpointDeviceInfo(device);
                    if (deviceInfo != null)
                    {
                        //设置设备在线状态
                        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);
                });
            }
        }
@@ -650,7 +665,7 @@
                }
                dicAlarm = null;
                Application.RunOnMainThread(() =>
                HdlThreadLogic.Current.RunMain(() =>
                {
                    if (this.Parent == null)
                    {
@@ -668,7 +683,7 @@
                    //执行初始化
                    TodaySafeguardFrame = new SafeguardLogControl();
                    TodaySafeguardFrame.Y = Application.GetRealHeight(10);
                    listView.AddChidrenFrame(TodaySafeguardFrame);
                    listView.AddChidren(TodaySafeguardFrame);
                    TodaySafeguardFrame.InitControl(nowDayKey, nowDayData);
                    //初始化其他日期的安防记录控件
@@ -676,7 +691,7 @@
                    {
                        otherDaySafeguardFrame = new FrameLayout();
                        otherDaySafeguardFrame.Height = Application.GetRealHeight(10);
                        listView.AddChidrenFrame(otherDaySafeguardFrame);
                        listView.AddChidren(otherDaySafeguardFrame);
                        foreach (var dayText in dicInfo.Keys)
                        {
                            //执行初始化
@@ -721,7 +736,7 @@
                }
            }
            Application.RunOnMainThread(() =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                if (this.TodaySafeguardFrame != null)
                {