陈嘉乐
2020-04-27 18b93d511dc764b469d7c4a7e755f7274f89cdb4
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
old mode 100644 new mode 100755
@@ -14,21 +14,19 @@
        /// </summary>
        /// <param name="room"></param>
        /// <param name="doorLock"></param>
        public UserDoorLockPage(Shared.Common.Room room, CommonDevice doorLock)
        public UserDoorLockPage(Room room, CommonDevice doorLock)
        {
            //徐梅的门锁界面打开(网关全局接收时使用)
            ControlCommonResourse.IsDoorLockPageOpen = true;
            this.doorLock = doorLock as ZigBee.Device.DoorLock;
            currentRoom = room;
            deviceUI = doorLock;
            BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
            BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor;
            ZbGateway.StatusList.Add(this);
        }
        #region  变量申明
        /// <summary>
        /// IsDrawerLockMode
        /// </summary>
        public bool IsDrawerLockMode;
        /// <summary>
        /// 当前门锁
        /// </summary>
        ZigBee.Device.DoorLock doorLock;
@@ -52,6 +50,10 @@
        /// 保留上一次音量
        /// </summary>
        bool canOpenNormallyMode = false;
        /// <summary>
        /// IsDrawerLockMode[主页左滑]
        /// </summary>
        public bool IsDrawerLockMode;
        /// <summary>
        /// 当前电量
        /// </summary>
@@ -88,6 +90,7 @@
        /// 设置FrameLayout
        /// </summary>
        FrameLayout btnFuncSetFrameLayout;
        FrameLayout progressFrameLayoutMatch;
        /// <summary>
        /// 点击开布局
        /// </summary>
@@ -168,6 +171,14 @@
        ///  当前音量
        /// </summary>
        int currentVolume = -1;
        /// <summary>
        /// waitClickTime
        /// </summary>
        DateTime waitClickTime = DateTime.MaxValue;
        /// <summary>
        /// IsClick
        /// </summary>
        bool IsClick = true;
        #endregion
        /// <summary>
@@ -197,8 +208,8 @@
            btnFuncSet = new Button
            {
                X = Application.GetRealWidth(103),
                Height = Application.GetRealHeight(69),
                Width = Application.GetRealWidth(69),
                Height = Application.GetMinReal(69),
                Width = Application.GetMinReal(69),
                UnSelectedImagePath = "DoorLock/SettingIcon.png",
            };
            btnFuncSetFrameLayout.AddChidren(btnFuncSet);
@@ -210,6 +221,12 @@
            if (doorLock.IsOnline == 1)
            {
                ReadDoorLockUserInfo();
            }
            else
            {
                string msg1 = Language.StringByID(R.MyInternationalizationString.DoorLockOffLine);
                this.ShowTipMsg(msg1);
                return;
            }
        }
@@ -253,8 +270,8 @@
            midTopFrameLayout.AddChidren(btnRecordFrameLayout);
            btnRecord = new Button()
            {
                Width = Application.GetRealWidth(69),
                Height = Application.GetRealHeight(69),
                Width = Application.GetMinReal(69),
                Height = Application.GetMinReal(69),
                X = Application.GetRealWidth(46),
                Y = Application.GetRealHeight(46),
                UnSelectedImagePath = "DoorLock/RecordIcon.png",
@@ -271,8 +288,8 @@
            midTopFrameLayout.AddChidren(btnCollectFrameLayout);
            btnCollect = new Button()
            {
                Width = Application.GetRealWidth(69),
                Height = Application.GetRealHeight(69),
                Width = Application.GetMinReal(69),
                Height = Application.GetMinReal(69),
                X = Application.GetRealWidth(15),
                Y = Application.GetRealHeight(46),
                UnSelectedImagePath = "Item/Collection.png",
@@ -305,13 +322,16 @@
                TextSize = 10,
                TextAlignment = TextAlignment.CenterLeft,
            };
            midTopFrameLayout.AddChidren(btnCurrentPowerText);
            midTopFrameLayout.AddChidren(btnCurrentPowerText);
#if Android
            btnCurrentPowerText.X = btnStatus.Right + Application.GetRealWidth(20);
#endif
            //门锁开/关图片
            btnDoorLockPic = new Button()
            {
                Width = Application.GetRealWidth(383),
                Height = Application.GetRealHeight(343),
                Width = Application.GetMinReal(383),
                Height = Application.GetMinReal(343),
                X = Application.GetRealWidth(161),
                Y = Application.GetRealHeight(415),
                UnSelectedImagePath = "DoorLock/DoorLockPicClose.png",
@@ -347,30 +367,37 @@
            };
            btnFrameLayout.AddChidren(closeFrameLayout);
            progressFrameLayoutMatch = new FrameLayout()
            {
                Width = Application.GetRealHeight(84),//639-35
                Height = Application.GetRealHeight(446),
                X = Application.GetMinReal(51),
                BackgroundColor = ZigbeeColor.Current.XMWhite,
            };
            btnFrameLayout.AddChidren(progressFrameLayoutMatch);
            var progressFrameLayout = new FrameLayout()
            {
                Width = Application.GetRealWidth(9),//639-35
                Height = Application.GetRealHeight(446),
                X = Application.GetRealWidth(95),
                Y = Application.GetRealHeight(0),
                Width = Application.GetRealHeight(17),//639-35
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.XMVerticalSeekBar,
            };
            btnFrameLayout.AddChidren(progressFrameLayout);
            progressFrameLayoutMatch.AddChidren(progressFrameLayout);
            progressButton = new Button()
            {
                Width = Application.GetRealWidth(84),//639-35
                Height = Application.GetRealHeight(93),
                X = Application.GetRealWidth(58),
                Width = Application.GetMinReal(84),//639-35
                Height = Application.GetMinReal(93),
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(347),
                UnSelectedImagePath = "DoorLock/UnLockButton.png",
            };
            btnFrameLayout.AddChidren(progressButton);
            progressFrameLayoutMatch.AddChidren(progressButton);
            btnDoorOpenPic = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(164),
                Y = Application.GetRealHeight(6),
                UnSelectedImagePath = "DoorLock/DoorLockOpen.png",
@@ -379,8 +406,8 @@
            btnDoorClosePic = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(164),
                Y = Application.GetRealHeight(117),
                UnSelectedImagePath = "DoorLock/DoorLockClose.png",
@@ -391,8 +418,8 @@
            //电量
            btnPower = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(253),
                Y = Application.GetRealHeight(994),
                UnSelectedImagePath = "DoorLock/PowerOffline.png",
@@ -410,8 +437,8 @@
            midTopFrameLayout.AddChidren(btnVolumeFrameLayout);
            btnVolume = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(40),
                Y = Application.GetRealHeight(40),
                UnSelectedImagePath = "DoorLock/VolumeIcon.png",
@@ -430,8 +457,8 @@
            midTopFrameLayout.AddChidren(btnNormallyOpenFrameLayout);
            btnNormallyOpen = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(40),
                Y = Application.GetRealHeight(40),
                UnSelectedImagePath = "DoorLock/NormallyOpen.png",
@@ -463,8 +490,8 @@
            #region 当前房间
            var btnCurrentRoomPic = new Button()
            {
                Width = Application.GetRealWidth(81),
                Height = Application.GetRealHeight(81),
                Width = Application.GetMinReal(81),
                Height = Application.GetMinReal(81),
                X = Application.GetRealWidth(58),
                Y = Application.GetRealHeight(29),
                UnSelectedImagePath = "DoorLock/RoomPic.png",
@@ -517,13 +544,14 @@
            };
            flMain.AddChidren(progressBackground);
            //var progressValue = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100;
            progressText = new Button()
            {
                Height = Application.GetRealHeight(58),
                Y = Application.GetRealHeight(89),
                TextColor = ZigbeeColor.Current.XMGray2,
                TextAlignment = TextAlignment.Center,
                Text = currentVolume.ToString(),
                Text = currentVolume.ToString() + "%",
            };
            diyImageVerticalSeekBar = new DiyImageVerticalSeekBar()
@@ -539,29 +567,16 @@
                ProgressTextColor = ZigbeeColor.Current.LogicBtnCancelColor,
                ProgressTextSize = 12,//显示百分比字体大小 
                SeekBarViewHeight = Application.GetRealHeight(17),//进度条的宽度
                Progress = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100,
                Progress = currentVolume,
            };
            progressBackground.AddChidren(progressText);
            progressBackground.AddChidren(diyImageVerticalSeekBar);
            diyImageVerticalSeekBar.OnProgressChangedEvent += (sender, e) =>
            {
                int curVolume = -1;
                if (e == 0)
                {
                    curVolume = 0;
                }
                else if (e == 100)
                {
                    curVolume = 14;
                }
                else
                {
                    int comandValue = e;
                    int comandValueTemp = (comandValue * 100) / (Convert.ToInt32(((float)100 / 15) * 100));
                    curVolume = comandValueTemp;
                }
                curVolume = e;
                currentVolume = curVolume;
                progressText.Text = curVolume.ToString();
                progressText.Text = e.ToString() + "%";
            };
        }
@@ -580,9 +595,28 @@
            if (typeTag == "DoorLockProgrammingEventNotificationCommand" && tempDevice != null)
            {
                var tempDoor = (ZigBee.Device.DoorLock)tempDevice;
                if (tempDoor.doorLockOperatingEventNotificationCommand != null)
                if (tempDevice.DeviceEpoint == doorLock.DeviceEpoint
                                     && tempDevice.DeviceAddr == doorLock.DeviceAddr)
                {
                    Application.RunOnMainThread(() => { NomallyOpenModeInvalidDialog(true); });
                    if (tempDoor.doorLockOperatingEventNotificationCommand != null)
                    {
                        //非主人不弹这个窗口
                        if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                        {
                            return;
                        }
                        string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                        if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
                        {
                            if (doorLock.IsDoorLockNormallyMode[key] == true)
                            {
                                if (canOpenNormallyMode)
                                {
                                    Application.RunOnMainThread(() => { NomallyOpenModeInvalidDialog(true); });
                                }
                            }
                        }
                    }
                }
            }
@@ -601,7 +635,6 @@
                                Application.RunOnMainThread(() =>
                                {
                                    currentPower = dataReport.AttriButeData;
                                    waitGetDoorLockPower = DateTime.MaxValue;
                                    UpdatePower();
                                });
                            }
@@ -624,20 +657,104 @@
                    {
                        CommonPage.Loading.Start("");
                    });
                    //是否支持常开
                    canOpenNormallyMode = DoorLockCommonInfo.CanNormallyOpen(doorLock);
                    if (canOpenNormallyMode)
                    {
                        //获取门锁常开模式
                        var resultRes = await DoorLockCommonInfo.GetNormallyOpenMode(doorLock);
                        if (resultRes == null)
                        {
                            Application.RunOnMainThread(() =>
                            {
                                btnNormallyOpen.UnSelectedImagePath = "DoorLock/NormallyOpenOffline.png";
                                btnNormallyOpen.Enable = false;
                                string msg = Language.StringByID(R.MyInternationalizationString.GetNormallyOpenModeFailed);
                                this.ShowTipMsg(msg);
                            });
                        }
                        else
                        {
                            var tempRes = false;
                            if (resultRes == true)
                            {
                                tempRes = true;
                            }
                            else
                            {
                                tempRes = false;
                            }
                            DoorLockCommonInfo.NormallyOpenModeValue(doorLock, tempRes);
                            Application.RunOnMainThread(async () =>
                            {
                                var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist();
                                if (resTemp == 1)
                                {
                                    HaveLogicNormallyOpenMode = true;
                                }
                                else if (resTemp == 0)
                                {
                                    HaveLogicNormallyOpenMode = false;
                                }
                            });
                        }
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            btnNormallyOpenFrameLayout.Width = Application.GetRealWidth(0);
                        });
                    }
                    //是否支持音量
                    canVolume = DoorLockCommonInfo.CanVolume(doorLock);
                    if (canVolume)
                    {
                        //读取音量
                        var resultRes = await doorLock.GetVolumeAsync();
                        if (resultRes == null || resultRes.volumeResponseData == null)
                        {
                            var listDevice = new List<CommonDevice> { };
                            listDevice.Add(doorLock);
                            var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice);
                            if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone)
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.GetVolumeFailed);
                                    this.ShowTipMsg(volumeMsg);
                                });
                            }
                        }
                        else
                        {
                            volumeData = resultRes.volumeResponseData;
                            Application.RunOnMainThread(() =>
                            {
                                UpdateVolume();
                            });
                        }
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            btnVolumeFrameLayout.Width = Application.GetRealWidth(0);
                            btnPower.X = Application.GetRealWidth(444);
                        });
                    }
                    //读取门锁电量:簇ID:1 属性ID 33
                    doorLock.ReadAttri(Cluster_ID.Power, AttriButeId.DoorLockPower);
                    //上报电量等1秒
                    System.Threading.Thread.Sleep(1000);
                    //获取门锁常开模式
                    await DoorLockCommonInfo.GetNormallyOpenMode(doorLock);
                    //读取音量
                    ReadVolume();
                }
                catch { }
                catch (Exception ex)
                {
                    var mess = ex.Message;
                }
                finally
                {
                    Application.RunOnMainThread(() =>
@@ -671,10 +788,13 @@
            //设置
            EventHandler<MouseEventArgs> btnFuncSetHander = (sender, e) =>
            {
                var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(doorLock);
                //打开其他界面时前移除
                RemoveFromParent();
                var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(currentRoom, doorLock);
                Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting);
                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
                functionSetting.Show();
                functionSetting.devicNameAction += (deviceRename) =>
                {
                    if (!string.IsNullOrEmpty(deviceRename))
@@ -715,15 +835,11 @@
                btnCollect.IsSelected = !btnCollect.IsSelected;
                if (btnCollect.IsSelected)
                {
                    HdlRoomLogic.Current.AddLoveDevice(deviceUI);//收藏
                    //Test
                    HaveLogicNormallyOpenMode = true;
                    HdlRoomLogic.Current.AddLoveDevice(deviceUI);//收藏
                }
                else
                {
                    HdlRoomLogic.Current.DeleteLoveDevice(deviceUI);//取消收藏
                    //Test
                    HaveLogicNormallyOpenMode = false;
                    HdlRoomLogic.Current.DeleteLoveDevice(deviceUI);//取消收藏
                }
            };
            btnCollectFrameLayout.MouseDownEventHandler += handerCollect;
@@ -732,11 +848,26 @@
            //开锁事件
            EventHandler<MouseEventArgs> hander1 = async (sender, e) =>
            {
                if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
                string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
                {
                    string msg0 = Language.StringByID(R.MyInternationalizationString.CurrentNormallyOpenMode);
                    this.ShowTipMsg(msg0);
                }
                    if (doorLock.IsDoorLockNormallyMode[key] == true)
                    {
                        if (canOpenNormallyMode)
                        {
                            NomallyOpenModeInvalidDialog(false);
                        }
                        else
                        {
                            OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
                        }
                    }
                    else
                    {
                        OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
                    }
                }
                else
                {
                    OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
@@ -744,13 +875,24 @@
            };
            openFrameLayout.MouseUpEventHandler += hander1;
            btnDoorOpenPic.MouseUpEventHandler += hander1;
            if (progressButton.Y == Application.GetRealHeight(10))
            {
                progressFrameLayoutMatch.MouseUpEventHandler += hander1;
            }
            //关锁事件
            EventHandler<MouseEventArgs> hander2 = (sender, e) =>
            {
                if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
                if (canOpenNormallyMode)
                {
                    NomallyOpenModeInvalidDialog();
                    var key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                    if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
                    {
                        if (doorLock.IsDoorLockNormallyMode[key] == true)
                        {
                            NomallyOpenModeInvalidDialog();
                        }
                    }
                }
                else
                {
@@ -768,11 +910,6 @@
                {
                    VolumeDialog(progressText, diyImageVerticalSeekBar);
                }
                else
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.NoSupport);
                    this.ShowTipMsg(volumeMsg);
                }
            };
            btnVolumeFrameLayout.MouseDownEventHandler += handerVolume;
            btnVolume.MouseDownEventHandler += handerVolume;
@@ -781,16 +918,7 @@
            //常开模式点击事件
            EventHandler<MouseEventArgs> handerNormallyOpen = (sender, e) =>
            {
                if (canOpenNormallyMode)
                {
                    btnNormallyOpen.IsSelected = !btnNormallyOpen.IsSelected;
                    NomallyOpenDialog();
                }
                else
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.NoSupport);
                    this.ShowTipMsg(volumeMsg);
                }
                NomallyOpenDialog();
            };
            btnNormallyOpenFrameLayout.MouseUpEventHandler += handerNormallyOpen;
            btnNormallyOpen.MouseUpEventHandler += handerNormallyOpen;
@@ -812,15 +940,15 @@
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power40.png";
            }
            else if (currentPower <= 60 && currentPower > 40 || currentPower == 60)
            else if (currentPower <= 60 && currentPower > 40)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power60.png";
            }
            else if (currentPower <= 80 && currentPower >= 60)
            else if (currentPower <= 80 && currentPower > 60)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power80.png";
            }
            else if (currentPower <= 100 && currentPower >= 80)
            else if (currentPower <= 100 && currentPower > 80)
            {
                btnPower.UnSelectedImagePath = "DoorLock/Power100.png";
            }
@@ -831,39 +959,7 @@
        }
        #endregion
        #region 音量
        /// <summary>
        /// 读取音量
        /// </summary>
        private async void ReadVolume()
        {
            //获取门锁音量
            if (!canVolume)
            {
                return;
            }
            var resultRes = await doorLock.GetVolumeAsync();
            if (resultRes == null || resultRes.volumeResponseData == null)
            {
                var listDevice = new List<CommonDevice> { };
                listDevice.Add(doorLock);
                var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice);
                if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone)
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                    this.ShowTipMsg(volumeMsg);
                }
            }
            else
            {
                volumeData = resultRes.volumeResponseData;
                Application.RunOnMainThread(() =>
                {
                    UpdateVolume();
                });
            }
        }
        #region 音量
        /// <summary>
        /// 更新音量
        /// </summary>
@@ -923,12 +1019,12 @@
                        return;
                    }
                    Application.RunOnMainThread(() =>
                   {
                       var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeSuccess);
                       this.ShowTipMsg(volumeMsg);
                       oldVolume = currentVolume;
                       CommonPage.Loading.Hide();
                   });
                    {
                        var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeSuccess);
                        this.ShowTipMsg(volumeMsg);
                        oldVolume = currentVolume;
                        CommonPage.Loading.Hide();
                    });
                }
                catch (Exception ex)
                {
@@ -944,11 +1040,11 @@
        /// </summary>
        private async void NomallyOpenDialog()
        {
            if (btnNormallyOpen.IsSelected)
            if (!btnNormallyOpen.IsSelected)
            {
                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                {
                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.OnlyMasterOperate));
                    return;
                }
@@ -964,10 +1060,7 @@
                    var confirm = Language.StringByID(R.MyInternationalizationString.Confrim);
                    var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, confirm);
                    alert.Show();
                    alert.CancelClickEvent += () =>
                    {
                        btnNormallyOpen.IsSelected = false;
                    };
                    alert.ConfirmClickEvent += async () =>
                    {
                        Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
@@ -976,37 +1069,30 @@
                        {
                            string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                            this.ShowTipMsg(msg0);
                            btnNormallyOpen.IsSelected = false;
                            return;
                        }
                        if (result.defaultControlResponseData.status != 0)
                        {
                            string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                            this.ShowTipMsg(msg1);
                            btnNormallyOpen.IsSelected = false;
                            return;
                        }
                        else
                        {
                            DoorLockCommonInfo.IsDoorLockNormallyMode = true;
                            UpdateNomallyOpenStatus();
                            CommonPage.Loading.Hide();
                            //添加App开启常开模式的历史记录
                            HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(this.doorLock, 9001, string.Empty);
                            //每次重新设置常开,默认时间都是12小时
                            DoorLockCommonInfo.NormallyOpenModeInvalidTime = 12;
                            DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true);
                            Application.RunOnMainThread(() =>
                            {
                                UpdateNomallyOpenStatus();
                                CommonPage.Loading.Hide();
                            });
                            //常开模式开启提示
                            string msgNomallyModeIsTurnOn = Language.StringByID(R.MyInternationalizationString.NomallyModeIsTurnOn);
                            var doorLockInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockInValidSetting);
                            var alertNomallyModeIsTurnOn = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.DoorLockLogic, msgNomallyModeIsTurnOn, doorLockInValidSetting);
                            alertNomallyModeIsTurnOn.Show();
                            alertNomallyModeIsTurnOn.LogicClickEvent += () =>
                            {
                                //自动化
                                Shared.Phone.Device.Logic.SkipView.SkipAddLogic(2,doorLock);
                            };
                            alertNomallyModeIsTurnOn.InvalidClickEvent += async () =>
                            {
                                NomallyOpenModeInvalidTimeDialog();
                            };
                            AlreadyOpenNormallyMode();
                        }
                    };
                };
@@ -1023,6 +1109,11 @@
        /// </summary>
        public void NomallyOpenModeInvalidDialog(bool IsFromReport = false)
        {
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
                this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.OnlyMasterOperate));
                return;
            }
            string msg = Language.StringByID(R.MyInternationalizationString.NomallyModeIsCanceled).Replace("{0}", "\r\n");
            var confirm = Language.StringByID(R.MyInternationalizationString.SureCancel);
            var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.NomallyOpenMode, msg, confirm);
@@ -1032,82 +1123,220 @@
                alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm);
            }
            alert.Show();
            alert.CancelClickEvent += async () =>
             {
                 //保持常开
                 if (IsFromReport)
                 {
                     Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                     var result = await doorLock.SetNormallyOpenModeFuncAsync(true);
                     if (result == null || result.defaultControlResponseData == null)
                     {
                         string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                         this.ShowTipMsg(msg0);
                         btnNormallyOpen.IsSelected = false;
                         DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                         return;
                     }
                     if (result.defaultControlResponseData.status != 0)
                     {
                         string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                         this.ShowTipMsg(msg1);
                         btnNormallyOpen.IsSelected = false;
                         DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                         return;
                     }
                     else
                     {
                         DoorLockCommonInfo.IsDoorLockNormallyMode = true;
                         btnNormallyOpen.IsSelected = true;
                         UpdateNomallyOpenStatus();
                         CommonPage.Loading.Hide();
                     }
                 }
                 else
                 {
                     btnNormallyOpen.IsSelected = true;
                 }
             };
            alert.ConfirmClickEvent += async () =>
            alert.MsgControlClickEvent += async () =>
            {
                //确认取消常开
                if (IsFromReport)
                {
                    DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                    btnNormallyOpen.IsSelected = false;
                    UpdateNomallyOpenStatus();
                    //上报“常开模式”已被取消,app默认了“常开模式”被取消
                    DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false);
                    Application.RunOnMainThread(() =>
                    {
                        UpdateNomallyOpenStatus();
                    });
                    //删除已经失效的“常开模式”的逻辑
                    if (HaveLogicNormallyOpenMode)
                    {
                        var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3);
                        //if (resTemp == 3)
                        //{
                        //    string msg0 = Language.StringByID(R.MyInternationalizationString.CancelLogicNormallyModeFailed);
                        //    this.ShowTipMsg(msg0);
                        //}
                    }
                }
                else
                {
                    //app默认“常开模式”还是开启
                    DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true);
                    Application.RunOnMainThread(() =>
                    {
                        UpdateNomallyOpenStatus();
                    });
                }
            };
            alert.CancelClickEvent += async () =>
            {
                if (IsFromReport)
                {
                    //上报“常开模式”已被取消
                    Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                    //先删除已失效的“常开模式”的逻辑
                    if (HaveLogicNormallyOpenMode)
                    {
                        var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3);
                        //if (resTemp == 3)
                        //{
                        //    string msg0 = Language.StringByID(R.MyInternationalizationString.CancelLogicNormallyModeFailed2);
                        //    this.ShowTipMsg(msg0);
                        //    return;
                        //}
                    }
                    //app重新开启“常开模式”
                    var result = await doorLock.SetNormallyOpenModeFuncAsync(true);
                    if (result == null || result.defaultControlResponseData == null)
                    {
                        string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                        this.ShowTipMsg(msg0);
                        DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false);
                        Application.RunOnMainThread(() =>
                        {
                            UpdateNomallyOpenStatus();
                        });
                        return;
                    }
                    if (result.defaultControlResponseData.status != 0)
                    {
                        string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                        this.ShowTipMsg(msg1);
                        DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false);
                        Application.RunOnMainThread(() =>
                        {
                            UpdateNomallyOpenStatus();
                        });
                        return;
                    }
                    else
                    {
                        //保持“常开成功”
                        DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true);
                        Application.RunOnMainThread(() =>
                        {
                            UpdateNomallyOpenStatus();
                        });
                        //创建常开模式的特殊逻辑
                        var resu = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock);
                        //if (!resu)
                        //{
                        //    string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed);
                        //    this.ShowTipMsg(msg0);
                        //}
                        CommonPage.Loading.Hide();
                    }
                }
                else
                {
                    //app操作不取消“常开模式”
                    DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true);
                    Application.RunOnMainThread(() =>
                    {
                        UpdateNomallyOpenStatus();
                    });
                }
            };
            alert.ConfirmClickEvent += async () =>
            {
                if (IsFromReport)
                {
                    //上报门锁“常开模式”已经取消,现在app确认“常开模式”取消
                    DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false);
                    Application.RunOnMainThread(() =>
                    {
                        UpdateNomallyOpenStatus();
                    });
                    //删除已经失效的“常开模式”的逻辑
                    if (HaveLogicNormallyOpenMode)
                    {
                        var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3);
                        //if (resTemp == 3)
                        //{
                        //    string msg0 = Language.StringByID(R.MyInternationalizationString.CancelLogicNormallyModeFailed);
                        //    this.ShowTipMsg(msg0);
                        //}
                    }
                }
                else
                {
                    //app操作取消“常开模式”
                    Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                    var result = await doorLock.SetNormallyOpenModeFuncAsync(false);
                    if (result == null || result.defaultControlResponseData == null)
                    {
                        string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
                        this.ShowTipMsg(msg0);
                        btnNormallyOpen.IsSelected = true;
                        return;
                    }
                    if (result.defaultControlResponseData.status != 0)
                    {
                        string msg1 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeFailed);
                        this.ShowTipMsg(msg1);
                        btnNormallyOpen.IsSelected = true;
                        return;
                    }
                    else
                    {
                        DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                        UpdateNomallyOpenStatus();
                    {
                        //添加App开启常开模式的历史记录
                        HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(this.doorLock, 9002, string.Empty);
                        //app确认取消“常开模式”成功
                        DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false);
                        Application.RunOnMainThread(() =>
                        {
                            UpdateNomallyOpenStatus();
                        });
                        //删除设置常开模式创建的逻辑
                        if (HaveLogicNormallyOpenMode)
                        {
                            var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3);
                            //因为目前机制问题,逻辑经常失败,所以不提示,后期机制要改,重新做一个这个界面
                            //if (resTemp == 3)
                            //{
                            //    string msg0 = Language.StringByID(R.MyInternationalizationString.CancelLogicNormallyModeFailed);
                            //    this.ShowTipMsg(msg0);
                            //}
                            //else if (resTemp == 2)
                            //{
                            //    string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess);
                            //    this.ShowTipMsg(msg2);
                            //}
                        }
                        string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess);
                        this.ShowTipMsg(msg2);
                        //
                    }
                }
            };
        }
        ///// <summary>
        /// <summary>
        /// 已经开启常开模式提示
        /// </summary>
        public void AlreadyOpenNormallyMode()
        {
            //常开模式开启提示
            string msgNomallyModeIsTurnOn = Language.StringByID(R.MyInternationalizationString.NomallyModeIsTurnOn);
            var doorLockInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockInValidSetting);
            var alertNomallyModeIsTurnOn = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.DoorLockLogic, msgNomallyModeIsTurnOn, doorLockInValidSetting);
            alertNomallyModeIsTurnOn.Show();
            alertNomallyModeIsTurnOn.MsgControlClickEvent += async () =>
            {
                //默认创建常开模式的特殊逻辑
                var res = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock);
                //if (!res)
                //{
                //string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed);
                // this.ShowTipMsg(msg0);
                //return;
                //}
            };
            //点击自动化
            alertNomallyModeIsTurnOn.LogicClickEvent += () =>
            {
                //逻辑调用前记得移除
                ZbGateway.StatusList.Remove(this);
                //调用逻辑界面
                Shared.Phone.Device.Logic.SkipView.SkipAddLogic(2, doorLock);
            };
            alertNomallyModeIsTurnOn.InvalidClickEvent += async () =>
            {
                NomallyOpenModeInvalidTimeDialog();
            };
        }
        /// <summary>
        /// 常开模式失效时间处理
        /// </summary>
        private void NomallyOpenModeInvalidTimeDialog()
@@ -1117,31 +1346,26 @@
            var timeConfrim = Language.StringByID(R.MyInternationalizationString.Confrim);
            var alertTimeInValidSetting = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting, timeConfrim);
            alertTimeInValidSetting.Show();
            alertTimeInValidSetting.CancelClickEvent += () =>
            {
                btnNormallyOpen.IsSelected = true;
            };
            alertTimeInValidSetting.InvalidTimeAction += (obj) =>
            {
                Regex rg = new Regex("^[0-9]+$");
                if (!rg.IsMatch(obj))
                {
                    //必须是数字
                    string msg0 = Language.StringByID(R.MyInternationalizationString.NormallyOpenModeInvalidTimeTip);
                    this.ShowTipMsg(msg0);
                    string msgTimeInValidSetting2 = Language.StringByID(R.MyInternationalizationString.DoorLockOpenAllTheTime);
                    var timeConfrim2 = Language.StringByID(R.MyInternationalizationString.Confrim);
                    var alertTimeInValidSetting2 = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting2, timeConfrim2);
                    alertTimeInValidSetting2.Show();
                    return;
                }
                var temp = int.Parse(obj);
                DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp;
                Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime,doorLock);
                btnNormallyOpen.IsSelected = true;
            };
            alertTimeInValidSetting.InvalidTimeAction += async (obj) =>
             {
                 //常开模式失效时间设置成功
                 var temp = int.Parse(obj);
                 DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp;
                 //默认创建常开模式的特殊逻辑
                 var res = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock);
                 if (!res)
                 {
                     //默认创建常开模式失败
                     string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed);
                     var alert = new UserCenter.ShowMsgControl(UserCenter.ShowMsgType.Normal, msg0, Language.StringByID(R.MyInternationalizationString.confrim));
                     alert.Show();
                     //二次加载弹窗 常开模式开启提示
                     NomallyOpenModeInvalidTimeDialog();
                 }
             };
        }
        /// <summary>
        /// 常开模式状态更新
        /// </summary>
@@ -1149,11 +1373,15 @@
        {
            if (!canOpenNormallyMode)
            {
                btnNormallyOpen.UnSelectedImagePath = "DoorLock/NormallyOpenOffline.png";
                btnNormallyOpen.Enable = false;
                btnNormallyOpenFrameLayout.Width = Application.GetRealWidth(0);
                return;
            }
            if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
            string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
            if (!doorLock.IsDoorLockNormallyMode.ContainsKey(key))
            {
                return;
            }
            if (doorLock.IsDoorLockNormallyMode[key] == true)
            {
                btnNormallyOpen.IsSelected = true;
                btnDoorLockPic.IsSelected = true;
@@ -1161,19 +1389,12 @@
                btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.DoorLockOpen);
            }
            else if (DoorLockCommonInfo.IsDoorLockNormallyMode == false)
            else if (doorLock.IsDoorLockNormallyMode[key] == false)
            {
                btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose);
                btnDoorLockPic.IsSelected = false;
                btnNormallyOpen.IsSelected = false;
                progressButton.Y = Application.GetRealHeight(347);
            }
            else
            {
                btnNormallyOpen.UnSelectedImagePath = "DoorLock/NormallyOpenOffline.png";
                btnNormallyOpen.Enable = false;
                string msg = Language.StringByID(R.MyInternationalizationString.GetNormallyOpenModeFailed);
                this.ShowTipMsg(msg);
            }
        }
        #endregion
@@ -1191,13 +1412,13 @@
            btnDoorOpenPic.Enable = false;
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
                var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
                var result = await DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
                if (result == false)
                {
                    var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
                    var result1 = await DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
                    if (result1 == true)
                    {
                        RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                        RemoteUnlockRequest(currentRoom, deviceUI, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                        devicNameSecAction += (deviceRename) =>
                        {
                            if (!string.IsNullOrEmpty(deviceRename))
@@ -1227,7 +1448,7 @@
            }
            else
            {
                RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                RemoteUnlockRequest(currentRoom, deviceUI, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
                devicNameSecAction += (deviceRename) =>
                {
                    if (!string.IsNullOrEmpty(deviceRename))
@@ -1250,6 +1471,8 @@
        /// </summary>
        public override void RemoveFromParent()
        {
            //徐梅的门锁界面关闭(网关全局接收时使用)
            ControlCommonResourse.IsDoorLockPageOpen = false;
            if (IsDrawerLockMode)
            {
                CommonPage.Instance.IsDrawerLockMode = false;