黄学彪
2020-04-02 9904031f5291daaf56985146bb671f25e18ebbdf
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
@@ -25,10 +25,6 @@
        #region  变量申明
        /// <summary>
        /// IsDrawerLockMode
        /// </summary>
        public bool IsDrawerLockMode;
        /// <summary>
        /// 当前门锁
        /// </summary>
        ZigBee.Device.DoorLock doorLock;
@@ -52,6 +48,10 @@
        /// 保留上一次音量
        /// </summary>
        bool canOpenNormallyMode = false;
        /// <summary>
        /// IsDrawerLockMode[主页左滑]
        /// </summary>
        public bool IsDrawerLockMode;
        /// <summary>
        /// 当前电量
        /// </summary>
@@ -211,6 +211,12 @@
            {
                ReadDoorLockUserInfo();
            }
            else
            {
                string msg1 = Language.StringByID(R.MyInternationalizationString.DoorLockOffLine);
                this.ShowTipMsg(msg1);
                return;
            }
        }
        /// <summary>
@@ -305,7 +311,10 @@
                TextSize = 10,
                TextAlignment = TextAlignment.CenterLeft,
            };
            midTopFrameLayout.AddChidren(btnCurrentPowerText);
            midTopFrameLayout.AddChidren(btnCurrentPowerText);
#if Android
            btnCurrentPowerText.X = btnStatus.Right + Application.GetRealWidth(20);
#endif
            //门锁开/关图片
            btnDoorLockPic = new Button()
@@ -517,13 +526,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 = progressValue.ToString() + "%",
            };
            diyImageVerticalSeekBar = new DiyImageVerticalSeekBar()
@@ -539,7 +549,7 @@
                ProgressTextColor = ZigbeeColor.Current.LogicBtnCancelColor,
                ProgressTextSize = 12,//显示百分比字体大小 
                SeekBarViewHeight = Application.GetRealHeight(17),//进度条的宽度
                Progress = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100,
                Progress = progressValue,
            };
            progressBackground.AddChidren(progressText);
            progressBackground.AddChidren(diyImageVerticalSeekBar);
@@ -561,7 +571,7 @@
                    curVolume = comandValueTemp;
                }
                currentVolume = curVolume;
                progressText.Text = curVolume.ToString();
                progressText.Text = e.ToString() + "%";
            };
        }
@@ -582,7 +592,21 @@
                var tempDoor = (ZigBee.Device.DoorLock)tempDevice;
                if (tempDoor.doorLockOperatingEventNotificationCommand != null)
                {
                    Application.RunOnMainThread(() => { NomallyOpenModeInvalidDialog(true); });
                    //非主人不弹这个窗口
                    if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                    {
                        return;
                    }
                    //非管理员的密码,不弹这个窗口
                    if (tempDoor.doorLockOperatingEventNotificationCommand.UserID > 9)
                    {
                        return;
                    }
                    if (canOpenNormallyMode)
                    {
                        Application.RunOnMainThread(() => { NomallyOpenModeInvalidDialog(true); });
                    }
                }
            }
@@ -624,25 +648,102 @@
                    {
                        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;
                            }
                            NormallyOpenModeValue(tempRes);
                            Application.RunOnMainThread(() =>
                            {
                                UpdateNomallyOpenStatus();
                            });
                        }
                    }
                    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(() =>
                    {
                        UpdateNomallyOpenStatus();
                        CommonPage.Loading.Hide();
                    });
                }
@@ -732,15 +833,13 @@
            //开锁事件
            EventHandler<MouseEventArgs> hander1 = async (sender, e) =>
            {
                if (DoorLockCommonInfo.IsDoorLockNormallyMode == true)
                {
                    string msg0 = Language.StringByID(R.MyInternationalizationString.CurrentNormallyOpenMode);
                    this.ShowTipMsg(msg0);
                }
                else
                {
                    OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
                }
                //常开模式下,点击开锁无效
                if (btnNormallyOpen.IsSelected == true)
                {
                    this.ShowMassage(ShowMsgType.Remind, "当前状态为常开模式");
                    return;
                }
                OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
            };
            openFrameLayout.MouseUpEventHandler += hander1;
            btnDoorOpenPic.MouseUpEventHandler += hander1;
@@ -748,9 +847,16 @@
            //关锁事件
            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 +874,6 @@
                {
                    VolumeDialog(progressText, diyImageVerticalSeekBar);
                }
                else
                {
                    var volumeMsg = Language.StringByID(R.MyInternationalizationString.NoSupport);
                    this.ShowTipMsg(volumeMsg);
                }
            };
            btnVolumeFrameLayout.MouseDownEventHandler += handerVolume;
            btnVolume.MouseDownEventHandler += handerVolume;
@@ -781,16 +882,8 @@
            //常开模式点击事件
            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;
@@ -831,39 +924,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 +984,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)
                {
@@ -938,13 +999,29 @@
        }
        #endregion
        #region 常开模式
        #region 常开模式
        /// <summary>
        /// 门锁常开模式值
        /// </summary>
        public void NormallyOpenModeValue(bool value)
        {
            string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
            if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
            {
                doorLock.IsDoorLockNormallyMode[key] = value;
            }
            else
            {
                doorLock.IsDoorLockNormallyMode.Add(key, value);
            }
        }
        /// <summary>
        /// 常开模式处理
        /// </summary>
        private async void NomallyOpenDialog()
        {
            if (btnNormallyOpen.IsSelected)
            if (!btnNormallyOpen.IsSelected)
            {
                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                {
@@ -964,10 +1041,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,19 +1050,19 @@
                        {
                            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;
                            //每次重新设置常开,默认时间都是12小时
                            DoorLockCommonInfo.NormallyOpenModeInvalidTime = 12;
                            NormallyOpenModeValue(true);
                            UpdateNomallyOpenStatus();
                            CommonPage.Loading.Hide();
@@ -997,9 +1071,12 @@
                            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);
                            };
                            alertNomallyModeIsTurnOn.InvalidClickEvent += async () =>
                            {
@@ -1021,6 +1098,11 @@
        /// </summary>
        public void NomallyOpenModeInvalidDialog(bool IsFromReport = false)
        {
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
                //this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
                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);
@@ -1030,49 +1112,63 @@
                alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm);
            }
            alert.Show();
            alert.MsgControlClickEvent += async () =>
            {
                if (IsFromReport)
                {
                    //取消常开
                    NormallyOpenModeValue(false);
                    UpdateNomallyOpenStatus();
                }
                else
                {
                    //保持常开
                    NormallyOpenModeValue(true);
                    UpdateNomallyOpenStatus();
                }
            };
            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;
                 }
             };
            {
                //保持常开
                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);
                        NormallyOpenModeValue(false);
                        UpdateNomallyOpenStatus();
                        return;
                    }
                    if (result.defaultControlResponseData.status != 0)
                    {
                        string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
                        this.ShowTipMsg(msg1);
                        NormallyOpenModeValue(false);
                        UpdateNomallyOpenStatus();
                        return;
                    }
                    else
                    {
                        NormallyOpenModeValue(true);
                        UpdateNomallyOpenStatus();
                        CommonPage.Loading.Hide();
                    }
                }
                else
                {
                    NormallyOpenModeValue(true);
                    UpdateNomallyOpenStatus();
                }
            };
            alert.ConfirmClickEvent += async () =>
            {
                //确认取消常开
                if (IsFromReport)
                {
                    DoorLockCommonInfo.IsDoorLockNormallyMode = false;
                    btnNormallyOpen.IsSelected = false;
                    NormallyOpenModeValue(true);
                    UpdateNomallyOpenStatus();
                }
                else
@@ -1083,22 +1179,22 @@
                    {
                        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;
                        NormallyOpenModeValue(false);
                        UpdateNomallyOpenStatus();
                        string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess);
                        this.ShowTipMsg(msg2);
                        Shared.Phone.Device.Logic.SkipView.LockCloseLogic(doorLock);
                        //
                    }
                }
            };
@@ -1114,10 +1210,7 @@
            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]+$");
@@ -1135,7 +1228,8 @@
                }
                var temp = int.Parse(obj);
                DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp;
                btnNormallyOpen.IsSelected = true;
                Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime,doorLock);
                //调用自动化接口设置失效时间
            };
        }
        /// <summary>
@@ -1145,11 +1239,11 @@
        {
            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[key] == true)
            {
                btnNormallyOpen.IsSelected = true;
                btnDoorLockPic.IsSelected = true;
@@ -1157,19 +1251,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