From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs | 1211 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 988 insertions(+), 223 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs b/ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs index dd33da8..9856a3c 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,18 +8,33 @@ { public class UserDoorLockPage : DoorLockCommonLayout, ZigBee.Common.IStatus { + #region 鐣岄潰 /// <summary> /// 鏋勯�犲嚱鏁� /// </summary> /// <param name="room"></param> /// <param name="doorLock"></param> - public UserDoorLockPage(Shared.Common.Room room, CommonDevice doorLock) + public UserDoorLockPage(Room room, CommonDevice doorLock) { + //寰愭鐨勯棬閿佺晫闈㈡墦寮�(缃戝叧鍏ㄥ眬鎺ユ敹鏃朵娇鐢�) + //ControlCommonResourse.IsDoorLockPageOpen = true; this.doorLock = doorLock as ZigBee.Device.DoorLock; currentRoom = room; deviceUI = doorLock; - BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor; - ZigBee.Device.ZbGateway.StatusList.Add(this); + BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor; + ZbGateway.StatusList.Add(this); + Application.RunOnMainThread(() => + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction += (DoorlockKey, status) => + { + var key = doorLock.DeviceAddr; + if (DoorlockKey == key) + { + DoorLockCommonInfo.NormallyOpenModeValue(this.doorLock, status); + UpdateNomallyOpenStatus(); + } + }; + }); } #region 鍙橀噺鐢虫槑 @@ -26,13 +43,42 @@ /// </summary> ZigBee.Device.DoorLock doorLock; /// <summary> - /// 搴曢儴甯冨眬 + /// 闊抽噺鏁版嵁 /// </summary> - FrameLayout bottomFrameLayout; + 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> - Shared.Common.Room currentRoom; + Room currentRoom; /// <summary> /// 璁惧UI瀵硅薄 /// </summary> @@ -44,24 +90,119 @@ /// <summary> /// 涓儴甯冨眬涓棬閿佸悕绉版樉绀� /// </summary> - Button btnDoorLockTitle; + NormalViewControl 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, ""); - 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), @@ -69,7 +210,7 @@ }; this.titleFrameLayout.AddChidren(btnShare); - var btnFuncSetFrameLayout = new FrameLayout + btnFuncSetFrameLayout = new FrameLayout { X = Application.GetRealWidth(850 - 116), Height = Application.GetRealHeight(69), @@ -77,42 +218,36 @@ }; this.titleFrameLayout.AddChidren(btnFuncSetFrameLayout); - var btnFuncSet = new Button + btnFuncSet = new Button { X = Application.GetRealWidth(103), - Height = Application.GetRealHeight(69), - Width = Application.GetRealWidth(69), + Height = Application.GetMinReal(69), + Width = Application.GetMinReal(69), UnSelectedImagePath = "DoorLock/SettingIcon.png", }; btnFuncSetFrameLayout.AddChidren(btnFuncSet); - EventHandler<MouseEventArgs> btnFuncSetHander = (sender, e) => + + MidFrameLayoutUI(); + + ClickHandle(); + + if (Common.LocalDevice.Current.CheckDeviceIsOnline(doorLock) == true) { - var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(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; - - MidFrameLayoutContent(); + ReadDoorLockUserInfo(); + } + else + { + string msg1 = Language.StringByID(R.MyInternationalizationString.DoorLockOffLine); + this.ShowTipMsg(msg1); + return; + } } + /// <summary> /// 涓儴甯冨眬 /// </summary> - public void MidFrameLayoutContent() + public void MidFrameLayoutUI() { - #region UI var midTopFrameLayout = new FrameLayout() { X = Application.GetRealWidth(58), @@ -124,116 +259,89 @@ }; this.midFrameLayout.AddChidren(midTopFrameLayout); - btnDoorLockTitle = new Button() - { - Width = Application.GetRealWidth(250), - Height = Application.GetRealHeight(60), - X = Application.GetRealWidth(372), - Y = Application.GetRealHeight(46), - TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, - TextSize = 15, - TextAlignment = TextAlignment.Center, - IsBold = true, - }; - midTopFrameLayout.AddChidren(btnDoorLockTitle); - //鑾峰彇Mac鍚嶅瓧 + //璁惧鍚嶇О + btnDoorLockTitle = new NormalViewControl(100, 60, true); + btnDoorLockTitle.Y = Application.GetRealHeight(46); + btnDoorLockTitle.TextSize = 15; + btnDoorLockTitle.IsBold = true; btnDoorLockTitle.Text = Common.LocalDevice.Current.GetDeviceMacName(doorLock); + btnDoorLockTitle.Width = btnDoorLockTitle.GetRealWidthByText(); + btnDoorLockTitle.TextAlignment = TextAlignment.Center; + btnDoorLockTitle.Gravity = Gravity.CenterHorizontal; + midTopFrameLayout.AddChidren(btnDoorLockTitle); - var btnRecordFrameLayout = new FrameLayout() + //璁板綍 + btnRecordFrameLayout = new FrameLayout() { - Width = Application.GetRealWidth(69+15+46), - Height = Application.GetRealHeight(69+46 * 2), - X = Application.GetRealWidth(752-46), - }; + Width = Application.GetRealWidth(69 + 15 + 46), + Height = Application.GetRealHeight(69 + 46 * 2), + X = Application.GetRealWidth(752 - 46), + }; midTopFrameLayout.AddChidren(btnRecordFrameLayout); - - var btnRecord = new Button() + btnRecord = new Button() { - Width = Application.GetRealWidth(69), - Height = Application.GetRealHeight(69), + Width = Application.GetMinReal(69), + Height = Application.GetMinReal(69), X = Application.GetRealWidth(46), Y = Application.GetRealHeight(46), UnSelectedImagePath = "DoorLock/RecordIcon.png", }; btnRecordFrameLayout.AddChidren(btnRecord); - EventHandler<MouseEventArgs> handerRecord = (sender, e) => - { - //鍘嗗彶璁板綍 ---- stan - var form = new DeviceDoorLock.DoorLockHistoryLogForm(); - form.AddForm(this.doorLock.DeviceAddr); - }; - btnRecordFrameLayout.MouseDownEventHandler += handerRecord; - btnRecord.MouseDownEventHandler += handerRecord; - var btnCollectFrameLayout = new FrameLayout() - { - Width = Application.GetRealWidth(69+15+46), - Height = Application.GetRealHeight(69+46*2), - X = Application.GetRealWidth(850-15), - }; - midTopFrameLayout.AddChidren(btnCollectFrameLayout); - var btnCollect = new Button() + //鎼滆棌UI + btnCollectFrameLayout = new FrameLayout() { - Width = Application.GetRealWidth(69), - Height = Application.GetRealHeight(69), + 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" }; btnCollectFrameLayout.AddChidren(btnCollect); - if (HdlRoomLogic.Current.IsCollectInRoom(deviceUI) == false) - { - btnCollect.IsSelected = false; - } - else - { - btnCollect.IsSelected = true; - } - EventHandler < MouseEventArgs > handerCollect = (sender, e) => + + //褰撳墠鐘舵�� + btnStatus = new Button() { - btnCollect.IsSelected = !btnCollect.IsSelected; - if (btnCollect.IsSelected) - { - HdlRoomLogic.Current.AddLoveDevice(deviceUI);//鏀惰棌 - } - else - { - HdlRoomLogic.Current.DeleteLoveDevice(deviceUI);//鍙栨秷鏀惰棌 - } - }; - btnCollectFrameLayout.MouseDownEventHandler += handerCollect; - btnCollect.MouseDownEventHandler += handerCollect; - 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", @@ -241,6 +349,7 @@ }; midTopFrameLayout.AddChidren(btnDoorLockPic); + #region 寮�/鍏崇偣鍑诲竷灞� var btnFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420 - 46), @@ -251,7 +360,7 @@ }; midTopFrameLayout.AddChidren(btnFrameLayout); - var openFrameLayout = new FrameLayout() + openFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420),//639-35 Height = Application.GetRealHeight(446 / 2), @@ -259,7 +368,7 @@ }; btnFrameLayout.AddChidren(openFrameLayout); - var closeFrameLayout = new FrameLayout() + closeFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420),//639-35 Height = Application.GetRealHeight(446 / 2), @@ -268,47 +377,106 @@ }; 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), @@ -327,11 +495,13 @@ 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", @@ -350,109 +520,704 @@ TextAlignment = TextAlignment.CenterLeft, }; btnCurrentFrameLayout.AddChidren(btnCurrentRoomName); - #endregion + #endregion + } - #region 鏁版嵁澶勭悊 - EventHandler<MouseEventArgs> hander1 = async (sender, e) => + #region 闊抽噺寮圭獥 + /// <summary> + /// 杩涘害鏉� + /// </summary> + 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) => { - openFrameLayout.Enable = false; - btnDoorOpenPic.Enable = false; - if (UserCenterResourse.UserInfo.AuthorityNo != 1) + dialog.Close(); + + //璁剧疆闊抽噺 + if (currentVolume != oldVolume) { - var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid); - if (result == false) + 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 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) { - var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid); - if (result1 == true) + //闈炰富浜轰笉寮硅繖涓獥鍙� + if (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + return; + } + if (doorLock.IsDoorLockNormallyMode) + { + if (canOpenNormallyMode) + { + Application.RunOnMainThread(() => + { + Action<bool> action = (obj) => + { + UpdateNomallyOpenStatus(); + }; + DoorLockCommonInfo.NomallyOpenModeInvalidDialog(doorLock, DoorLockCommonInfo.DoorLockMessType.ServicePush, haveLogicNormallyOpenMode, action); + }); + } + } + } + } + } + + 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) { - RemoteUnlockRequest(doorLock, 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; + var dataReport = tempDevice.DeviceStatusReport.AttriBute[0]; + if (tempDevice.DeviceStatusReport.CluterID == 1 && dataReport.AttributeId == 33) + { + Application.RunOnMainThread(() => + { + currentPower = dataReport.AttriButeData; + UpdatePower(); + }); + } + } + } + } + } + } + + /// <summary> + /// 鍒濆鍖栨暟鎹� + /// </summary> + void ReadDoorLockUserInfo() + { + System.Threading.Tasks.Task.Run(async () => + { + try + { + Application.RunOnMainThread(() => + { + CommonPage.Loading.Start(""); + }); + + //鏄惁鏀寔甯稿紑 + canOpenNormallyMode = DoorLockCommonInfo.CanNormallyOpen(doorLock); + if (canOpenNormallyMode) + { + //1銆佽幏鍙栭棬閿佸父寮�妯″紡 + 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 { - this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess)); - openFrameLayout.Enable = true; - btnDoorOpenPic.Enable = true; + 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(2, doorLock); + if (resTemp == 0) + { + haveLogicNormallyOpenMode = false; + } + else + { + haveLogicNormallyOpenMode = true; + } + }); } } else { - this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed)); + Application.RunOnMainThread(() => + { + btnNormallyOpenFrameLayout.Width = Application.GetRealWidth(0); + }); + } + + //鏄惁鏀寔闊抽噺 + canVolume = DoorLockCommonInfo.CanVolume(doorLock); + if (canVolume) + { + //2銆佽鍙栭煶閲� + 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); + }); + } + + //3銆佽鍙栭棬閿佺數閲忥細绨嘔D锛�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> + /// 浜嬩欢澶勭悊 + /// </summary> + 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) => + { + 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(); + //DoorLockCommonInfo.canShowDialog = false; + 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); + //DoorLockCommonInfo.canShowDialog = false; + }; + 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) => + { + if (doorLock.IsDoorLockNormallyMode) + { + if (canOpenNormallyMode) + { + Application.RunOnMainThread(() => + { + Action<bool> action = (obj) => + { + UpdateNomallyOpenStatus(); + }; + DoorLockCommonInfo.NomallyOpenModeInvalidDialog(doorLock, DoorLockCommonInfo.DoorLockMessType.AppOperate, haveLogicNormallyOpenMode, action); + }); + } + 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) + { + if (doorLock.IsDoorLockNormallyMode) + { + Application.RunOnMainThread(() => + { + Action<bool> action = (obj) => + { + UpdateNomallyOpenStatus(); + }; + DoorLockCommonInfo.NomallyOpenModeInvalidDialog(doorLock, DoorLockCommonInfo.DoorLockMessType.AppOperate, haveLogicNormallyOpenMode, action); + }); + } + } + 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 (UserCenterResourse.UserInfo.AuthorityNo != 1) + { + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.OnlyMasterOperate)); + return; + } + + if (!UserCenterResourse.AccountOption.DoorUnLockByRemote) + { + SystemSecondAuthentication(); + return; + } + + action = () => + { + //WJC鐨勪唬鐮侊細绯荤粺瀵嗙爜鏀寔鎿嶄綔闂ㄩ攣鍚庯紝璋冪敤娓╁眳鍩庣殑鐣岄潰銆愬父寮�鑷姩鍖栥�� + if (doorLock == null) + { + ///闃叉鎶涘紓甯� + return; + } + ///澶囨敞锛歐JC鐨� + Shared.Phone.Device.Logic.Send.CurrentDoorLock = doorLock; + ///杩涙潵鍒锋柊涓�娆¤澶囧垪琛紱 + Common.Logic.LogicDviceList.Clear(); + if (Common.Logic.LogicDviceList.Count == 0) + { + Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray()); + } + var addLogicPage = new Shared.Phone.Device.Logic.SoneLogicList(); + UserView.HomePage.Instance.AddChidren(addLogicPage); + UserView.HomePage.Instance.PageIndex += 1; + addLogicPage.Show(); + addLogicPage.action += async (w) => + { + DoorLockCommonInfo.NormallyOpenModeValue(doorLock, w); + UpdateNomallyOpenStatus(); + //杩斿洖鎸夐敭娓呯┖褰撳墠閫昏緫瀹氫箟鐨凩ogicAction + UserCenter.DoorLock.DoorLockCommonInfo.LogicAction = null; + //鏄惁瀛樺湪甯稿紑妯″紡 + var resTemp = Shared.Common.Logic.SoneLogicList; + if (resTemp.Count == 0) + { + haveLogicNormallyOpenMode = false; + } + else + { + haveLogicNormallyOpenMode = true; + } + + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction -= addLogicPage.updateCurrentDoorlockActionTemp; + }; + }; + HdlCheckLogic.Current.CheckSecondarySecurity(action); + + } + + /// <summary> + /// 甯稿紑妯″紡鐘舵�佹洿鏂� + /// </summary> + private void UpdateNomallyOpenStatus() + { + if (!canOpenNormallyMode) + { + btnNormallyOpenFrameLayout.Width = Application.GetRealWidth(0); + return; + } + if (doorLock.IsDoorLockNormallyMode) + { + 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) + { + 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 { - RemoteUnlockRequest(doorLock, action, progressButton, btnDoorLockPic, btnStatus, btnDoorLockTitle); - devicNameSecAction += (deviceRename) => - { - if (!string.IsNullOrEmpty(deviceRename)) - { - btnDoorLockTitle.Text = deviceRename; - //鏀规埧闂� - HdlRoomLogic.Current.ChangedRoom(deviceUI, currentRoom.Id); - deviceUI.ReSave(); - } - }; + this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed)); openFrameLayout.Enable = true; btnDoorOpenPic.Enable = true; } - }; - openFrameLayout.MouseUpEventHandler += hander1; - btnDoorOpenPic.MouseUpEventHandler += hander1; - EventHandler<MouseEventArgs> hander2 = (sender, e) => + } + else { - btnDoorLockPic.IsSelected = false; - progressButton.Y = Application.GetRealHeight(347); - }; - closeFrameLayout.MouseUpEventHandler += hander2; - btnDoorClosePic.MouseUpEventHandler += hander2; - #endregion + 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 鎺ュ彛瀹炵幇 + #region 绉婚櫎鏂规硶 /// <summary> - /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange() + /// 閲嶅啓绉婚櫎鏂规硶 /// </summary> - /// <returns>The changed.</returns> - /// <param name="common">Common.</param> - public void Changed(CommonDevice common) + public override void RemoveFromParent() { - - } - /// <summary> - /// 澶勭悊鍙樺寲浜嬩欢 - /// </summary> - /// <param name="common"></param> - /// <param name="typeTag"></param> - public void DeviceInfoChange(CommonDevice common, string typeTag) - { - } - /// <summary> - /// Changeds the IL ogic status. - /// </summary> - /// <param name="logic">Logic.</param> - public void ChangedILogicStatus(ZigBee.Device.Logic logic) - { - } - /// <summary> - /// Changeds the IS cene status. - /// </summary> - /// <param name="scene">Scene.</param> - public void ChangedISceneStatus(Scene scene) - { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction = null; + if (IsDrawerLockMode) + { + CommonPage.Instance.IsDrawerLockMode = false; + } + ZbGateway.StatusList.Remove(this); + DoorLockCommonInfo.LogicAction = null; + base.RemoveFromParent(); } #endregion } -- Gitblit v1.8.0