From 3272ca5b51e19f7f8a827b0f68400570a547fe60 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 28 四月 2020 15:02:44 +0800
Subject: [PATCH] 2020-04-28-1

---
 ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs | 1481 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 1,302 insertions(+), 179 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
index 4044118..31d2467 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
@@ -1,4 +1,6 @@
 锘縰sing System;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
 using Shared.Common;
 using ZigBee.Device;
 
@@ -6,85 +8,233 @@
 {
     public class UserDoorLockPage : DoorLockCommonLayout, ZigBee.Common.IStatus
     {
-        public UserDoorLockPage(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes accountObj)
+        #region 鐣岄潰
+        /// <summary>
+        ///  鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="room"></param>
+        /// <param name="doorLock"></param>
+        public UserDoorLockPage(Room room, CommonDevice doorLock)
         {
-            this.doorLock = doorLock;
-            //currentRoom = room;Shared.Common.Room room, 
-            BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
-            ZigBee.Device.ZbGateway.StatusList.Add(this);
+            //寰愭鐨勯棬閿佺晫闈㈡墦寮�(缃戝叧鍏ㄥ眬鎺ユ敹鏃朵娇鐢�)
+            ControlCommonResourse.IsDoorLockPageOpen = true;
+            this.doorLock = doorLock as ZigBee.Device.DoorLock;
+            currentRoom = room;
+            deviceUI = doorLock;
+            BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor;
+            ZbGateway.StatusList.Add(this);
         }
 
-        #region 鈼� 鍙橀噺鐢虫槑__________________________
+        #region  鍙橀噺鐢虫槑
+        /// <summary>
+        /// 褰撳墠闂ㄩ攣
+        /// </summary>
         ZigBee.Device.DoorLock doorLock;
-        FrameLayout bottomFrameLayout;
-        Shared.Common.Room currentRoom;
+        /// <summary>
+        /// 闊抽噺鏁版嵁
+        /// </summary>
+        ZigBee.Device.DoorLock.VolumeResponseData volumeData = null;
+        /// <summary>
+        /// 绛夊緟鑾峰彇鐢甸噺鐨勭瓑寰呮椂闂�
+        /// </summary>
+        DateTime waitGetDoorLockPower = DateTime.MaxValue;
+        /// <summary>
+        /// 閫昏緫涓槸鍚︽湁甯稿紑妯″紡
+        /// </summary>
+        private bool HaveLogicNormallyOpenMode = false;
+        /// <summary>
+        /// 褰撳墠鐢甸噺
+        /// </summary>
+        bool canVolume = false;
+        /// <summary>
+        /// 淇濈暀涓婁竴娆¢煶閲�
+        /// </summary>
+        bool canOpenNormallyMode = false;
+        /// <summary>
+        /// IsDrawerLockMode[涓婚〉宸︽粦]
+        /// </summary>
+        public bool IsDrawerLockMode;
+        /// <summary>
+        /// 褰撳墠鐢甸噺
+        /// </summary>
+        int currentPower = 0;
+        /// <summary>
+        /// 淇濈暀涓婁竴娆¢煶閲�
+        /// </summary>
+        int oldVolume = -1;
+        /// <summary>
+        /// 褰撳墠鎴块棿
+        /// </summary>
+        Room currentRoom;
+        /// <summary>
+        /// 璁惧UI瀵硅薄
+        /// </summary>
+        CommonDevice deviceUI;
+        /// <summary>
+        /// 璁剧疆浜屾楠岃瘉Action
+        /// </summary>
         Action action;
+        /// <summary>
+        /// 涓儴甯冨眬涓棬閿佸悕绉版樉绀�
+        /// </summary>
+        Button btnDoorLockTitle;
+        /// <summary>
+        /// 鍒嗕韩
+        /// </summary>
+        Button btnShare;
+        /// <summary>
+        /// 璁剧疆
+        /// </summary>
+        Button btnFuncSet;
+        /// <summary>
+        /// 璁剧疆FrameLayout
+        /// </summary>
+        FrameLayout btnFuncSetFrameLayout;
+        FrameLayout progressFrameLayoutMatch;
+        /// <summary>
+        /// 鐐瑰嚮寮�甯冨眬
+        /// </summary>
+        private FrameLayout openFrameLayout;
+        /// <summary>
+        /// 鐐瑰嚮鍏冲竷灞�
+        /// </summary>
+        private FrameLayout closeFrameLayout;
+        /// <summary>
+        /// 鎵撳紑鍥剧墖
+        /// </summary>
+        Button btnDoorOpenPic;
+        /// <summary>
+        /// 鎼滆棌UI
+        /// </summary>
+        FrameLayout btnCollectFrameLayout;
+        /// <summary>
+        /// 鎼滆棌
+        /// </summary>
+        Button btnCollect;
+        /// <summary>
+        /// 璁板綍UI
+        /// </summary>
+        FrameLayout btnRecordFrameLayout;
+        /// <summary>
+        /// 璁板綍鎸夐挳
+        /// </summary>
+        Button btnRecord;
+        /// <summary>
+        /// 褰撳墠鐘舵��
+        /// </summary>
+        Button btnStatus;
+        /// <summary>
+        /// 褰撳墠鐢甸噺鏂囨湰
+        /// </summary>
+        Button btnCurrentPowerText;
+        /// <summary>
+        /// 杩涘害鎸夐挳
+        /// </summary>
+        Button progressButton;
+        /// <summary>
+        /// 杩涘害
+        /// </summary>
+        DiyImageVerticalSeekBar diyImageVerticalSeekBar;
+        /// <summary>
+        /// 杩涘害鏂囨湰
+        /// </summary>
+        Button progressText;
+        /// <summary>
+        /// 闂ㄩ攣鍏冲浘鐗�
+        /// </summary>
+        Button btnDoorClosePic;
+        /// <summary>
+        /// 闂ㄩ攣寮�/鍏冲浘鐗�
+        /// </summary>
+        Button btnDoorLockPic;
+        /// <summary>
+        /// 鐢甸噺
+        /// </summary>
+        Button btnPower;
+        /// <summary>
+        /// 甯稿紑
+        /// </summary>
+        Button btnNormallyOpen;
+        /// <summary>
+        /// 闊抽噺
+        /// </summary>
+        Button btnVolume;
+        /// <summary>
+        /// 甯稿紑FrameLayout
+        /// </summary>
+        FrameLayout btnNormallyOpenFrameLayout;
+        /// <summary>
+        /// 闊抽噺FrameLayout
+        /// </summary>
+        FrameLayout btnVolumeFrameLayout;
+        /// <summary>
+        /// 聽褰撳墠闊抽噺
+        /// </summary>
+        int currentVolume = -1;
+        /// <summary>
+        /// waitClickTime
+        /// </summary>
+        DateTime waitClickTime = DateTime.MaxValue;
+        /// <summary>
+        /// IsClick
+        /// </summary>
+        bool IsClick = true;
         #endregion
 
         /// <summary>
         /// UI鏄剧ず 
         /// </summary>
         public void Show()
-        {
-            this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.DoorLock));
-
-            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
-            {
-                RemoveFromParent();
-            };
-            this.btnBack.MouseUpEventHandler += eHandlerBack;
-            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
+        {
+            this.TopFrameLayout(this, "");
             this.MidFrameLayout(this);
 
-            var btnShare = new Button
+            btnShare = new Button
             {
                 X = Application.GetRealWidth(850 - 116),
                 Height = Application.GetRealHeight(69),
-                Width = Application.GetRealWidth(69),
+                Width = Application.GetRealWidth(0),
             };
             this.titleFrameLayout.AddChidren(btnShare);
 
-            var btnFuncSet = new Button
+            btnFuncSetFrameLayout = new FrameLayout
             {
-                X = Application.GetRealWidth(953 - 116),
+                X = Application.GetRealWidth(850 - 116),
                 Height = Application.GetRealHeight(69),
-                Width = Application.GetRealWidth(69),
+                Width = Application.GetRealWidth(69 * 2 + 58),
+            };
+            this.titleFrameLayout.AddChidren(btnFuncSetFrameLayout);
+
+            btnFuncSet = new Button
+            {
+                X = Application.GetRealWidth(103),
+                Height = Application.GetMinReal(69),
+                Width = Application.GetMinReal(69),
                 UnSelectedImagePath = "DoorLock/SettingIcon.png",
             };
-            this.titleFrameLayout.AddChidren(btnFuncSet);
-            btnFuncSet.MouseDownEventHandler += (sender, e) =>
-            {
-                if (UserCenterResourse.UserInfo.AuthorityNo == 1)
-                {
-                    var userDoorLockPage = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(doorLock);
-                    Shared.Phone.UserView.HomePage.Instance.AddChidren(userDoorLockPage);
-                    Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
-                    userDoorLockPage.Show();
-                }
-                else
-                {
-                    var userDoorLockPage = new Shared.Phone.UserCenter.DoorLock.FunctionSettingSub(doorLock);
-                    Shared.Phone.UserView.HomePage.Instance.AddChidren(userDoorLockPage);
-                    Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
-                    userDoorLockPage.Show();
-                }
-            };
+            btnFuncSetFrameLayout.AddChidren(btnFuncSet);
 
-            btnShare.MouseDownEventHandler += (sender, e) =>
-            {
-                var doorLock = new ZigBee.Device.DoorLock();
-                var memberManagement = new Shared.Phone.UserCenter.DoorLock.MemberManagement(doorLock);
-                Shared.Phone.UserView.HomePage.Instance.AddChidren(memberManagement);
-                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
-                memberManagement.Show();
-            };
+            MidFrameLayoutUI();
 
-            MidFrameLayoutContent();
+            ClickHandle();
+
+            if (doorLock.IsOnline == 1)
+            {
+                ReadDoorLockUserInfo();
+            }
+            else
+            {
+                string msg1 = Language.StringByID(R.MyInternationalizationString.DoorLockOffLine);
+                this.ShowTipMsg(msg1);
+                return;
+            }
         }
 
-        public void MidFrameLayoutContent()
+        /// <summary>
+        /// 涓儴甯冨眬
+        /// </summary>
+        public void MidFrameLayoutUI()
         {
-            #region UI
             var midTopFrameLayout = new FrameLayout()
             {
                 X = Application.GetRealWidth(58),
@@ -92,93 +242,96 @@
                 Height = Application.GetRealHeight(1238),
                 Width = Application.GetRealWidth(965),
                 BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                Radius = 6,
             };
             this.midFrameLayout.AddChidren(midTopFrameLayout);
 
-            var btnDoorLockTitle = new Button()
+            //闂ㄩ攣鏍囬
+            btnDoorLockTitle = new Button()
             {
                 Width = Application.GetRealWidth(250),
                 Height = Application.GetRealHeight(60),
                 X = Application.GetRealWidth(372),
                 Y = Application.GetRealHeight(46),
-                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
-                Text = Language.StringByID(R.MyInternationalizationString.SmartDoorLock),
+                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                 TextSize = 15,
                 TextAlignment = TextAlignment.Center,
+                IsBold = true,
             };
             midTopFrameLayout.AddChidren(btnDoorLockTitle);
 
-            var btnRecord = new Button()
+            //璁板綍
+            btnRecordFrameLayout = new FrameLayout()
             {
-                Width = Application.GetRealWidth(69),
-                Height = Application.GetRealHeight(69),
-                X = Application.GetRealWidth(752),
+                Width = Application.GetRealWidth(69 + 15 + 46),
+                Height = Application.GetRealHeight(69 + 46 * 2),
+                X = Application.GetRealWidth(752 - 46),
+            };
+            midTopFrameLayout.AddChidren(btnRecordFrameLayout);
+            btnRecord = new Button()
+            {
+                Width = Application.GetMinReal(69),
+                Height = Application.GetMinReal(69),
+                X = Application.GetRealWidth(46),
                 Y = Application.GetRealHeight(46),
                 UnSelectedImagePath = "DoorLock/RecordIcon.png",
             };
-            midTopFrameLayout.AddChidren(btnRecord);
-            btnRecord.MouseDownEventHandler += (sender, e) =>
-            {
-                var doorLock = new ZigBee.Device.DoorLock();
-                var doorLockRecord = new Shared.Phone.UserCenter.DoorLock.HistoryRecordPage(doorLock);
-                Shared.Phone.UserView.HomePage.Instance.AddChidren(doorLockRecord);
-                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
-                doorLockRecord.Show();
-            };
+            btnRecordFrameLayout.AddChidren(btnRecord);
 
-            var btnCollect = new Button()
+            //鎼滆棌UI
+            btnCollectFrameLayout = new FrameLayout()
             {
-                Width = Application.GetRealWidth(69),
-                Height = Application.GetRealHeight(69),
-                X = Application.GetRealWidth(850),
+                Width = Application.GetRealWidth(69 + 15 + 46),
+                Height = Application.GetRealHeight(69 + 46 * 2),
+                X = Application.GetRealWidth(850 - 15),
+            };
+            midTopFrameLayout.AddChidren(btnCollectFrameLayout);
+            btnCollect = new Button()
+            {
+                Width = Application.GetMinReal(69),
+                Height = Application.GetMinReal(69),
+                X = Application.GetRealWidth(15),
                 Y = Application.GetRealHeight(46),
                 UnSelectedImagePath = "Item/Collection.png",
                 SelectedImagePath = "Item/CollectionSelected.png"
             };
-            midTopFrameLayout.AddChidren(btnCollect);
-            btnCollect.MouseDownEventHandler += (sender, e) =>
+            btnCollectFrameLayout.AddChidren(btnCollect);
+
+            //褰撳墠鐘舵��
+            btnStatus = new Button()
             {
-                btnCollect.IsSelected = !btnCollect.IsSelected;
-                if (btnCollect.IsSelected)
-                {
-                    // Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(doorLock.FileName); //鍙栨秷鏀惰棌
-                }
-                else
-                {
-                    //Shared.Common.Room.CurrentRoom.GetLoveRoom().AddDevice(doorLock.FileName);//鏀惰棌
-                }
-            };
-
-            var btnCurrentText = new Button()
-            {
-                Width = Application.GetRealWidth(100),
+                Width = Application.GetRealWidth(132 + 351),
                 Height = Application.GetRealHeight(40),
-                X = Application.GetRealWidth(415),
                 Y = Application.GetRealHeight(118),
-                Text = Language.StringByID(R.MyInternationalizationString.Current),
+                Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose),
                 TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
                 TextSize = 10,
-                TextAlignment = TextAlignment.CenterLeft,
-            };
-            midTopFrameLayout.AddChidren(btnCurrentText);
-
-            var btnStatus = new Button()
-            {
-                Width = Application.GetRealWidth(200),
-                Height = Application.GetRealHeight(40),
-                X = btnCurrentText.Right,
-                Y = Application.GetRealHeight(118),
-                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
-                Text = Language.StringByID(R.MyInternationalizationString.CLose),
-                TextSize = 10,
-                TextAlignment = TextAlignment.CenterLeft,
+                TextAlignment = TextAlignment.CenterRight,
             };
             midTopFrameLayout.AddChidren(btnStatus);
 
-            var btnDoorLockPic = new Button()
+            //褰撳墠鐢甸噺
+            btnCurrentPowerText = new Button()
             {
-                Width = Application.GetRealWidth(383),
-                Height = Application.GetRealHeight(343),
+                Width = Application.GetRealWidth(133 + 348),
+                Height = Application.GetRealHeight(40),
+                X = btnStatus.Right,
+                Y = Application.GetRealHeight(118),
+                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                Text = Language.StringByID(R.MyInternationalizationString.DoorLockPower) + "%",
+                TextSize = 10,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            midTopFrameLayout.AddChidren(btnCurrentPowerText);
+#if Android
+            btnCurrentPowerText.X = btnStatus.Right + Application.GetRealWidth(20);
+#endif
+
+            //闂ㄩ攣寮�/鍏冲浘鐗�
+            btnDoorLockPic = new Button()
+            {
+                Width = Application.GetMinReal(383),
+                Height = Application.GetMinReal(343),
                 X = Application.GetRealWidth(161),
                 Y = Application.GetRealHeight(415),
                 UnSelectedImagePath = "DoorLock/DoorLockPicClose.png",
@@ -186,9 +339,10 @@
             };
             midTopFrameLayout.AddChidren(btnDoorLockPic);
 
+            #region 寮�/鍏崇偣鍑诲竷灞�
             var btnFrameLayout = new FrameLayout()
             {
-                Width = Application.GetRealWidth(420 - 46),//639-35
+                Width = Application.GetRealWidth(420 - 46),
                 Height = Application.GetRealHeight(446),
                 X = btnDoorLockPic.Right,
                 Y = Application.GetRealHeight(354),
@@ -196,7 +350,7 @@
             };
             midTopFrameLayout.AddChidren(btnFrameLayout);
 
-            var openFrameLayout = new FrameLayout()
+            openFrameLayout = new FrameLayout()
             {
                 Width = Application.GetRealWidth(420),//639-35
                 Height = Application.GetRealHeight(446 / 2),
@@ -204,7 +358,7 @@
             };
             btnFrameLayout.AddChidren(openFrameLayout);
 
-            var closeFrameLayout = new FrameLayout()
+            closeFrameLayout = new FrameLayout()
             {
                 Width = Application.GetRealWidth(420),//639-35
                 Height = Application.GetRealHeight(446 / 2),
@@ -213,46 +367,114 @@
             };
             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);
 
-            var progressButton = new Button()
+            progressButton = new Button()
             {
-                Width = Application.GetRealWidth(81),//639-35
-                Height = Application.GetRealHeight(89),
-                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",
-                SelectedImagePath = "DoorLock/UnLockButton.png",
             };
-            btnFrameLayout.AddChidren(progressButton);
+            progressFrameLayoutMatch.AddChidren(progressButton);
 
-            var btnDoorOpenPic = new Button()
+            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",
             };
             openFrameLayout.AddChidren(btnDoorOpenPic);
 
-            var btnDoorClosePic = new Button()
+            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",
             };
             closeFrameLayout.AddChidren(btnDoorClosePic);
+            #endregion
+
+            //鐢甸噺
+            btnPower = new Button()
+            {
+                Width = Application.GetMinReal(81),
+                Height = Application.GetMinReal(81),
+                X = Application.GetRealWidth(253),
+                Y = Application.GetRealHeight(994),
+                UnSelectedImagePath = "DoorLock/PowerOffline.png",
+            };
+            midTopFrameLayout.AddChidren(btnPower);
+
+            //闊抽噺
+            btnVolumeFrameLayout = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(81 + 80),
+                Height = Application.GetRealHeight(81 + 80),
+                X = Application.GetRealWidth(444 - 40),
+                Y = Application.GetRealHeight(994 - 40),
+            };
+            midTopFrameLayout.AddChidren(btnVolumeFrameLayout);
+            btnVolume = new Button()
+            {
+                Width = Application.GetMinReal(81),
+                Height = Application.GetMinReal(81),
+                X = Application.GetRealWidth(40),
+                Y = Application.GetRealHeight(40),
+                UnSelectedImagePath = "DoorLock/VolumeIcon.png",
+                SelectedImagePath = "DoorLock/VolumeIconOn.png",
+            };
+            btnVolumeFrameLayout.AddChidren(btnVolume);
+
+            //甯稿紑
+            btnNormallyOpenFrameLayout = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(81 + 80),
+                Height = Application.GetRealHeight(81 + 80),
+                X = Application.GetRealWidth(631 - 40),
+                Y = Application.GetRealHeight(994 - 40),
+            };
+            midTopFrameLayout.AddChidren(btnNormallyOpenFrameLayout);
+            btnNormallyOpen = new Button()
+            {
+                Width = Application.GetMinReal(81),
+                Height = Application.GetMinReal(81),
+                X = Application.GetRealWidth(40),
+                Y = Application.GetRealHeight(40),
+                UnSelectedImagePath = "DoorLock/NormallyOpen.png",
+                SelectedImagePath = "DoorLock/NormallyOpenOn.png",
+            };
+            btnNormallyOpenFrameLayout.AddChidren(btnNormallyOpen);
+
+            #region 鑳屾櫙鍦嗚璁剧疆
+            var btnCurrentTopFrameLayout = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(50),
+                Width = Application.GetRealWidth(965),
+                BackgroundColor = ZigbeeColor.Current.XMBlack,
+                Y = Application.GetRealHeight(1100),
+            };
+            midTopFrameLayout.AddChidren(btnCurrentTopFrameLayout);
 
             var btnCurrentFrameLayout = new FrameLayout()
             {
@@ -260,13 +482,16 @@
                 Height = Application.GetRealHeight(138),
                 Y = Application.GetRealHeight(1100),
                 BackgroundColor = ZigbeeColor.Current.XMBlack,
+                Radius = 6,
             };
             midTopFrameLayout.AddChidren(btnCurrentFrameLayout);
+            #endregion
 
+            #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",
@@ -279,83 +504,981 @@
                 Height = Application.GetRealHeight(49),
                 X = Application.GetRealWidth(150),
                 Y = Application.GetRealHeight(46),
-                // Text = currentRoom.Name,
+                Text = currentRoom.Name,
                 TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
                 TextSize = 12,
                 TextAlignment = TextAlignment.CenterLeft,
             };
             btnCurrentFrameLayout.AddChidren(btnCurrentRoomName);
-            #endregion
-
-            EventHandler<MouseEventArgs> hander1 = async (sender, e) =>
-             {
-                 if (UserCenterResourse.UserInfo.AuthorityNo != 1)
-                 {
-                     var result = await Shared.Phone.UserCenter.DoorLock.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);
-                         if (result1 == true)
-                         {
-                             RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus);
-                         }
-                         else
-                         {
-                             new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.NoAccess), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(this.btnTip);
-                         }
-                     }
-                     else
-                     {
-                         new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.AccountIsFreezed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(this.btnTip);
-                     }
-                 }
-                 else
-                 {
-                     RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus);
-                 }
-             };
-            openFrameLayout.MouseUpEventHandler += hander1;
-            btnDoorOpenPic.MouseUpEventHandler += hander1;
-            EventHandler<MouseEventArgs> hander2 = (sender, e) =>
-            {
-                btnDoorLockPic.IsSelected = false;
-                progressButton.Y = Application.GetRealHeight(347);
-            };
-            closeFrameLayout.MouseUpEventHandler += hander2;
-            btnDoorClosePic.MouseUpEventHandler += hander2;
+            #endregion 
         }
 
-        #region 鈼� 鎺ュ彛瀹炵幇__________________________
+        #region 闊抽噺寮圭獥
         /// <summary>
-        /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange()
+        /// 杩涘害鏉�
         /// </summary>
-        /// <returns>The changed.</returns>
-        /// <param name="common">Common.</param>
-        public void Changed(CommonDevice common)
+        private void VolumeDialog(Button progressText, DiyImageVerticalSeekBar diyImageVerticalSeekBar)
         {
+            var dialog = new Dialog { };
+            dialog.Show();
+            var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
+            dialog.AddChidren(flMain);
+            flMain.MouseUpEventHandler += (sender11, e11) =>
+            {
+                dialog.Close();
 
+                //璁剧疆闊抽噺
+                if (currentVolume != oldVolume)
+                {
+                    SetVolume(currentVolume);
+                }
+            };
+
+            var progressBackground = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(271),
+                Height = Application.GetRealHeight(700),
+                X = Application.GetRealWidth(403),
+                Y = Application.GetRealHeight(582),
+                BackgroundImagePath = "DoorLock/ProgressBackground.png",
+            };
+            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() + "%",
+            };
+
+            diyImageVerticalSeekBar = new DiyImageVerticalSeekBar()
+            {
+                Width = Application.GetRealWidth(271),
+                Height = Application.GetRealHeight(447 + 63),
+                Y = Application.GetRealHeight(155),
+                IsProgressTextShow = false,//鏄剧ず鐧惧垎姣�
+                ProgressBarColor = ZigbeeColor.Current.XMProgressBarColor,//閫変腑杩涘害鏉¢鑹�
+                SeekBarBackgroundColor = ZigbeeColor.Current.XMSeekBarBackgroundColor,//閫変腑杩涘害鏉¢鑹�
+                ThumbImagePath = "DoorLock/UnLockButton.png",//杩涘害鏉℃寜閽浘鏍�
+                ThumbImageHeight = Application.GetRealHeight(81),//杩涘害鏉℃寜閽浘鏍囩殑楂樺害锛堥粯璁ゆ鏂瑰舰锛氬鍜岄珮涓�鏍凤級
+                ProgressTextColor = ZigbeeColor.Current.LogicBtnCancelColor,
+                ProgressTextSize = 12,//鏄剧ず鐧惧垎姣斿瓧浣撳ぇ灏� 
+                SeekBarViewHeight = Application.GetRealHeight(17),//杩涘害鏉$殑瀹藉害
+                Progress = currentVolume,
+            };
+            progressBackground.AddChidren(progressText);
+            progressBackground.AddChidren(diyImageVerticalSeekBar);
+            diyImageVerticalSeekBar.OnProgressChangedEvent += (sender, e) =>
+            {
+                int curVolume = -1;
+                curVolume = e;
+                currentVolume = curVolume;
+                progressText.Text = e.ToString() + "%";
+            };
         }
+
+        #endregion
+        #endregion
+
+        #region 澶勭悊鎺ュ彛鏁版嵁
         /// <summary>
         /// 澶勭悊鍙樺寲浜嬩欢
         /// </summary>
         /// <param name="common"></param>
         /// <param name="typeTag"></param>
-        public void DeviceInfoChange(CommonDevice common, string typeTag)
+        public void DeviceInfoChange(CommonDevice tempDevice, string typeTag)
         {
+            //鏈烘寮�閿佷笂鎶ャ�傚鐞嗗父寮�鐘舵�侊紝寮�鍏崇姸鎬�
+            if (typeTag == "DoorLockProgrammingEventNotificationCommand" && tempDevice != null)
+            {
+                var tempDoor = (ZigBee.Device.DoorLock)tempDevice;
+                if (tempDevice.DeviceEpoint == doorLock.DeviceEpoint
+                                     && tempDevice.DeviceAddr == doorLock.DeviceAddr)
+                {
+                    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); });
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (typeTag == "DeviceStatusReport" && tempDevice != null)
+            {
+                if (tempDevice != null)
+                {
+                    if (tempDevice.DeviceEpoint == doorLock.DeviceEpoint
+                                      && tempDevice.DeviceAddr == doorLock.DeviceAddr)
+                    {
+                        if (tempDevice.DeviceStatusReport != null && tempDevice.DeviceStatusReport.AttriBute != null)
+                        {
+                            var dataReport = tempDevice.DeviceStatusReport.AttriBute[0];
+                            if (tempDevice.DeviceStatusReport.CluterID == 1 && dataReport.AttributeId == 33)
+                            {
+                                Application.RunOnMainThread(() =>
+                                {
+                                    currentPower = dataReport.AttriButeData;
+                                    UpdatePower();
+                                });
+                            }
+                        }
+                    }
+                }
+            }
         }
+
         /// <summary>
-        /// Changeds the IL ogic status.
+        /// 鍒濆鍖栨暟鎹�
         /// </summary>
-        /// <param name="logic">Logic.</param>
-        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
+        void ReadDoorLockUserInfo()
         {
+            System.Threading.Tasks.Task.Run(async () =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        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 灞炴�D 33
+                    doorLock.ReadAttri(Cluster_ID.Power, AttriButeId.DoorLockPower);
+                    //涓婃姤鐢甸噺绛�1绉�
+                    System.Threading.Thread.Sleep(1000);
+                }
+                catch (Exception ex)
+                {
+                    var mess = ex.Message;
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        UpdateNomallyOpenStatus();
+                        CommonPage.Loading.Hide();
+                    });
+                }
+            });
         }
+
+        #endregion
+
+        #region 鍏叡浜嬩欢澶勭悊 
         /// <summary>
-        /// Changeds the IS cene status.
+        /// 浜嬩欢澶勭悊 
         /// </summary>
-        /// <param name="scene">Scene.</param>
-        public void ChangedISceneStatus(Scene scene)
+        public void ClickHandle()
         {
+            //闂ㄩ攣鏍囬
+            btnDoorLockTitle.Text = Common.LocalDevice.Current.GetDeviceMacName(doorLock);
+
+            //杩斿洖
+            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
+            {
+                RemoveFromParent();
+            };
+            this.btnBack.MouseUpEventHandler += eHandlerBack;
+            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
+
+            //璁剧疆
+            EventHandler<MouseEventArgs> btnFuncSetHander = (sender, e) =>
+            {
+                //鎵撳紑鍏朵粬鐣岄潰鏃跺墠绉婚櫎
+                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))
+                    {
+                        btnDoorLockTitle.Text = deviceRename;
+                        //鏀规埧闂�
+                        HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
+                        deviceUI.ReSave();
+                    }
+                };
+            };
+            btnFuncSetFrameLayout.MouseDownEventHandler += btnFuncSetHander;
+            btnFuncSet.MouseDownEventHandler += btnFuncSetHander;
+
+            //鎼滆棌鐘舵��
+            if (HdlRoomLogic.Current.IsCollectInRoom(deviceUI) == false)
+            {
+                btnCollect.IsSelected = false;
+            }
+            else
+            {
+                btnCollect.IsSelected = true;
+            }
+
+            //鍘嗗彶璁板綍鐐瑰嚮浜嬩欢
+            EventHandler<MouseEventArgs> handerRecord = (sender, e) =>
+            {
+                //鍘嗗彶璁板綍 ----   stan
+                var form = new DeviceDoorLock.DoorLockHistoryLogForm();
+                form.AddForm(this.doorLock.DeviceAddr);
+            };
+            btnRecordFrameLayout.MouseDownEventHandler += handerRecord;
+            btnRecord.MouseDownEventHandler += handerRecord;
+
+            //鏀惰棌鐐瑰嚮浜嬩欢
+            EventHandler<MouseEventArgs> handerCollect = (sender, e) =>
+            {
+                btnCollect.IsSelected = !btnCollect.IsSelected;
+                if (btnCollect.IsSelected)
+                {
+                    HdlRoomLogic.Current.AddLoveDevice(deviceUI);//鏀惰棌 
+                }
+                else
+                {
+                    HdlRoomLogic.Current.DeleteLoveDevice(deviceUI);//鍙栨秷鏀惰棌 
+                }
+            };
+            btnCollectFrameLayout.MouseDownEventHandler += handerCollect;
+            btnCollect.MouseDownEventHandler += handerCollect;
+
+            //寮�閿佷簨浠�
+            EventHandler<MouseEventArgs> hander1 = async (sender, e) =>
+            {
+
+                string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
+                if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
+                {
+                    if (doorLock.IsDoorLockNormallyMode[key] == true)
+                    {
+                        if (canOpenNormallyMode)
+                        {
+                            NomallyOpenModeInvalidDialog(false);
+                        }
+                        else
+                        {
+                            OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
+                        }
+                    }
+                    else
+                    {
+                        OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
+                    }
+                }
+                else
+                {
+                    OpenDoorLockHandle(progressButton, btnDoorLockPic, btnStatus);
+                }
+            };
+            openFrameLayout.MouseUpEventHandler += hander1;
+            btnDoorOpenPic.MouseUpEventHandler += hander1;
+            if (progressButton.Y == Application.GetRealHeight(10))
+            {
+                progressFrameLayoutMatch.MouseUpEventHandler += hander1;
+            }
+
+            //鍏抽攣浜嬩欢
+            EventHandler<MouseEventArgs> hander2 = (sender, e) =>
+            {
+                if (canOpenNormallyMode)
+                {
+                    var key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
+                    if (doorLock.IsDoorLockNormallyMode.ContainsKey(key))
+                    {
+                        if (doorLock.IsDoorLockNormallyMode[key] == true)
+                        {
+                            NomallyOpenModeInvalidDialog();
+                        }
+                    }
+                }
+                else
+                {
+                    btnDoorLockPic.IsSelected = false;
+                    progressButton.Y = Application.GetRealHeight(347);
+                }
+            };
+            closeFrameLayout.MouseUpEventHandler += hander2;
+            btnDoorClosePic.MouseUpEventHandler += hander2;
+
+            //闊抽噺鐐瑰嚮浜嬩欢
+            EventHandler<MouseEventArgs> handerVolume = (sender, e) =>
+            {
+                if (canVolume)
+                {
+                    VolumeDialog(progressText, diyImageVerticalSeekBar);
+                }
+            };
+            btnVolumeFrameLayout.MouseDownEventHandler += handerVolume;
+            btnVolume.MouseDownEventHandler += handerVolume;
+
+
+            //甯稿紑妯″紡鐐瑰嚮浜嬩欢
+            EventHandler<MouseEventArgs> handerNormallyOpen = (sender, e) =>
+            {
+                NomallyOpenDialog();
+            };
+            btnNormallyOpenFrameLayout.MouseUpEventHandler += handerNormallyOpen;
+            btnNormallyOpen.MouseUpEventHandler += handerNormallyOpen;
+        }
+        #endregion
+
+        #region 鐢甸噺鏄剧ず
+        /// <summary>
+        /// 鐢甸噺鏇存柊
+        /// </summary>
+        private void UpdatePower()
+        {
+            btnCurrentPowerText.Text = Language.StringByID(R.MyInternationalizationString.DoorLockPower) + currentPower + "%";
+            if (currentPower <= 20 && currentPower >= 0)
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/LowPower.png";
+            }
+            else if (currentPower <= 40 && currentPower > 20)
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/Power40.png";
+            }
+            else if (currentPower <= 60 && currentPower > 40)
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/Power60.png";
+            }
+            else if (currentPower <= 80 && currentPower > 60)
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/Power80.png";
+            }
+            else if (currentPower <= 100 && currentPower > 80)
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/Power100.png";
+            }
+            else
+            {
+                btnPower.UnSelectedImagePath = "DoorLock/PowerOffline.png";
+            }
+        }
+        #endregion
+
+        #region 闊抽噺 
+        /// <summary>
+        /// 鏇存柊闊抽噺
+        /// </summary>
+        private void UpdateVolume()
+        {
+            if (volumeData != null)
+            {
+                int curVol = 0;
+                btnVolume.IsSelected = true;
+                if (volumeData.command == "eb")
+                {
+                    curVol = 0;
+                }
+                else
+                {
+                    curVol = volumeData.value;
+                }
+                oldVolume = currentVolume = curVol;
+            }
+        }
+
+        /// <summary>
+        /// 璁剧疆闊抽噺
+        /// </summary>
+        private void SetVolume(int volume)
+        {
+            System.Threading.Tasks.Task.Run(async () =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        CommonPage.Loading.Start("");
+                    });
+                    var resultRes = await doorLock.SetVolumeAsync(volume);
+                    if (resultRes == null || resultRes.defaultControlResponseData == null)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            var volumeMsg = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime);
+                            this.ShowTipMsg(volumeMsg);
+                            currentVolume = oldVolume;
+                            CommonPage.Loading.Hide();
+
+                        });
+                        return;
+                    }
+                    if (resultRes.defaultControlResponseData.status != 0)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeFailed);
+                            this.ShowTipMsg(volumeMsg);
+                            currentVolume = oldVolume;
+                            CommonPage.Loading.Hide();
+                        });
+                        return;
+                    }
+                    Application.RunOnMainThread(() =>
+                    {
+                        var volumeMsg = Language.StringByID(R.MyInternationalizationString.SetVolumeSuccess);
+                        this.ShowTipMsg(volumeMsg);
+                        oldVolume = currentVolume;
+                        CommonPage.Loading.Hide();
+                    });
+                }
+                catch (Exception ex)
+                {
+                    var mes = ex.Message;
+                }
+            });
+        }
+        #endregion
+
+        #region 甯稿紑妯″紡  
+        /// <summary>
+        /// 甯稿紑妯″紡澶勭悊
+        /// </summary>
+        private async void NomallyOpenDialog()
+        {
+            if (!btnNormallyOpen.IsSelected)
+            {
+                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
+                {
+                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.OnlyMasterOperate));
+                    return;
+                }
+
+                if (!UserCenterResourse.AccountOption.DoorUnLockByRemote)
+                {
+                    SystemSecondAuthentication();
+                    return;
+                }
+
+                action = () =>
+                {
+                    string msg = Language.StringByID(R.MyInternationalizationString.SetDoorLockNomallyOpen).Replace("{0}", "\r\n");
+                    var confirm = Language.StringByID(R.MyInternationalizationString.Confrim);
+                    var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, confirm);
+                    alert.Show();
+
+                    alert.ConfirmClickEvent += async () =>
+                    {
+                        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);
+                            return;
+                        }
+                        if (result.defaultControlResponseData.status != 0)
+                        {
+                            string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed);
+                            this.ShowTipMsg(msg1);
+                            return;
+                        }
+                        else
+                        {
+                            //娣诲姞App寮�鍚父寮�妯″紡鐨勫巻鍙茶褰�
+                            HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(this.doorLock, 9001, string.Empty);
+
+                            //姣忔閲嶆柊璁剧疆甯稿紑锛岄粯璁ゆ椂闂撮兘鏄�12灏忔椂
+                            DoorLockCommonInfo.NormallyOpenModeInvalidTime = 12;
+                            DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true);
+                            Application.RunOnMainThread(() =>
+                            {
+                                UpdateNomallyOpenStatus();
+                                CommonPage.Loading.Hide();
+                            });
+
+                            //甯稿紑妯″紡寮�鍚彁绀�
+                            AlreadyOpenNormallyMode();
+                        }
+                    };
+                };
+                HdlCheckLogic.Current.CheckSecondarySecurity(action);
+            }
+            else
+            {
+                NomallyOpenModeInvalidDialog();
+            }
+        }
+
+        /// <summary>
+        /// 甯稿紑妯″紡澶辨晥澶勭悊
+        /// </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);
+            if (HaveLogicNormallyOpenMode)
+            {
+                //鏈夐�昏緫璁剧疆鐨勫脊绐�
+                alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm);
+            }
+            alert.Show();
+
+            alert.MsgControlClickEvent += 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榛樿鈥滃父寮�妯″紡鈥濊繕鏄紑鍚� 
+                    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);
+                        return;
+                    }
+                    if (result.defaultControlResponseData.status != 0)
+                    {
+                        string msg1 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeFailed);
+                        this.ShowTipMsg(msg1);
+                        return;
+                    }
+                    else
+                    {
+                        //娣诲姞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>
+        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()
+        {
+            //澶辨晥璁剧疆 
+            string msgTimeInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockOpenAllTheTime);
+            var timeConfrim = Language.StringByID(R.MyInternationalizationString.Confrim);
+            var alertTimeInValidSetting = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting, timeConfrim);
+            alertTimeInValidSetting.Show();
+
+            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>
+        private void UpdateNomallyOpenStatus()
+        {
+            if (!canOpenNormallyMode)
+            {
+                btnNormallyOpenFrameLayout.Width = Application.GetRealWidth(0);
+                return;
+            }
+            string key = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
+            if (!doorLock.IsDoorLockNormallyMode.ContainsKey(key))
+            {
+                return;
+            }
+            if (doorLock.IsDoorLockNormallyMode[key] == true)
+            {
+                btnNormallyOpen.IsSelected = true;
+                btnDoorLockPic.IsSelected = true;
+                progressButton.Y = Application.GetRealHeight(10);
+                btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.DoorLockOpen);
+
+            }
+            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);
+            }
+        }
+        #endregion
+
+        #region 寮�閿佸鐞� 
+        /// <summary>
+        /// 寮�閿佸鐞�
+        /// </summary>
+        /// <param name="progressButton">杩涘害鎸夐挳</param>
+        /// <param name="btnDoorLockPic">闂ㄩ攣鍥剧墖</param>
+        /// <param name="btnStatus">鐘舵�佹樉绀�</param>
+        async void OpenDoorLockHandle(Button progressButton, Button btnDoorLockPic, Button btnStatus)
+        {
+            openFrameLayout.Enable = false;
+            btnDoorOpenPic.Enable = false;
+            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
+            {
+                var result = await DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                if (result == false)
+                {
+                    var result1 = await DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                    if (result1 == true)
+                    {
+                        RemoteUnlockRequest(currentRoom, deviceUI, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
+                        devicNameSecAction += (deviceRename) =>
+                        {
+                            if (!string.IsNullOrEmpty(deviceRename))
+                            {
+                                btnDoorLockTitle.Text = deviceRename;
+                                //鏀规埧闂�
+                                HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
+                                deviceUI.ReSave();
+                            }
+                        };
+                        openFrameLayout.Enable = true;
+                        btnDoorOpenPic.Enable = true;
+                    }
+                    else
+                    {
+                        this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
+                        openFrameLayout.Enable = true;
+                        btnDoorOpenPic.Enable = true;
+                    }
+                }
+                else
+                {
+                    this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed));
+                    openFrameLayout.Enable = true;
+                    btnDoorOpenPic.Enable = true;
+                }
+            }
+            else
+            {
+                RemoteUnlockRequest(currentRoom, deviceUI, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle);
+                devicNameSecAction += (deviceRename) =>
+                {
+                    if (!string.IsNullOrEmpty(deviceRename))
+                    {
+                        btnDoorLockTitle.Text = deviceRename;
+                        //鏀规埧闂�
+                        HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id);
+                        deviceUI.ReSave();
+                    }
+                };
+                openFrameLayout.Enable = true;
+                btnDoorOpenPic.Enable = true;
+            }
+        }
+        #endregion
+
+        #region 绉婚櫎鏂规硶
+        /// <summary>
+        /// 閲嶅啓绉婚櫎鏂规硶
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            //寰愭鐨勯棬閿佺晫闈㈠叧闂�(缃戝叧鍏ㄥ眬鎺ユ敹鏃朵娇鐢�)
+            ControlCommonResourse.IsDoorLockPageOpen = false;
+            if (IsDrawerLockMode)
+            {
+                CommonPage.Instance.IsDrawerLockMode = false;
+            }
+            ZbGateway.StatusList.Remove(this);
+            base.RemoveFromParent();
         }
         #endregion
     }

--
Gitblit v1.8.0