using System; using System.Collections.Generic; using System.Text.RegularExpressions; using Shared.Common; using ZigBee.Device; namespace Shared.Phone.UserCenter.DoorLock { public class UserDoorLockPage : DoorLockCommonLayout, ZigBee.Common.IStatus { #region 界面 /// /// 构造函数 /// /// /// public UserDoorLockPage(Room room, CommonDevice doorLock) { //徐梅的门锁界面打开(网关全局接收时使用) ControlCommonResourse.IsDoorLockPageOpen = true; this.doorLock = doorLock as ZigBee.Device.DoorLock; currentRoom = room; deviceUI = doorLock; BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor; ZbGateway.StatusList.Add(this); } #region 变量申明 /// /// 当前门锁 /// ZigBee.Device.DoorLock doorLock; /// /// 音量数据 /// ZigBee.Device.DoorLock.VolumeResponseData volumeData = null; /// /// 等待获取电量的等待时间 /// DateTime waitGetDoorLockPower = DateTime.MaxValue; /// /// 逻辑中是否有常开模式 /// private bool HaveLogicNormallyOpenMode = false; /// /// 当前电量 /// bool canVolume = false; /// /// 保留上一次音量 /// bool canOpenNormallyMode = false; /// /// IsDrawerLockMode[主页左滑] /// public bool IsDrawerLockMode; /// /// 当前电量 /// int currentPower = 0; /// /// 保留上一次音量 /// int oldVolume = -1; /// /// 当前房间 /// Room currentRoom; /// /// 设备UI对象 /// CommonDevice deviceUI; /// /// 设置二次验证Action /// Action action; /// /// 中部布局中门锁名称显示 /// Button btnDoorLockTitle; /// /// 分享 /// Button btnShare; /// /// 设置 /// Button btnFuncSet; /// /// 设置FrameLayout /// FrameLayout btnFuncSetFrameLayout; FrameLayout progressFrameLayoutMatch; /// /// 点击开布局 /// private FrameLayout openFrameLayout; /// /// 点击关布局 /// private FrameLayout closeFrameLayout; /// /// 打开图片 /// Button btnDoorOpenPic; /// /// 搜藏UI /// FrameLayout btnCollectFrameLayout; /// /// 搜藏 /// Button btnCollect; /// /// 记录UI /// FrameLayout btnRecordFrameLayout; /// /// 记录按钮 /// Button btnRecord; /// /// 当前状态 /// Button btnStatus; /// /// 当前电量文本 /// Button btnCurrentPowerText; /// /// 进度按钮 /// Button progressButton; /// /// 进度 /// DiyImageVerticalSeekBar diyImageVerticalSeekBar; /// /// 进度文本 /// Button progressText; /// /// 门锁关图片 /// Button btnDoorClosePic; /// /// 门锁开/关图片 /// Button btnDoorLockPic; /// /// 电量 /// Button btnPower; /// /// 常开 /// Button btnNormallyOpen; /// /// 音量 /// Button btnVolume; /// /// 常开FrameLayout /// FrameLayout btnNormallyOpenFrameLayout; /// /// 音量FrameLayout /// FrameLayout btnVolumeFrameLayout; /// ///  当前音量 /// int currentVolume = -1; /// /// waitClickTime /// DateTime waitClickTime = DateTime.MaxValue; /// /// IsClick /// bool IsClick = true; #endregion /// /// UI显示 /// public void Show() { this.TopFrameLayout(this, ""); this.MidFrameLayout(this); btnShare = new Button { X = Application.GetRealWidth(850 - 116), Height = Application.GetRealHeight(69), Width = Application.GetRealWidth(0), }; this.titleFrameLayout.AddChidren(btnShare); btnFuncSetFrameLayout = new FrameLayout { X = Application.GetRealWidth(850 - 116), Height = Application.GetRealHeight(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", }; btnFuncSetFrameLayout.AddChidren(btnFuncSet); MidFrameLayoutUI(); ClickHandle(); if (doorLock.IsOnline == 1) { ReadDoorLockUserInfo(); } else { string msg1 = Language.StringByID(R.MyInternationalizationString.DoorLockOffLine); this.ShowTipMsg(msg1); return; } } /// /// 中部布局 /// public void MidFrameLayoutUI() { var midTopFrameLayout = new FrameLayout() { X = Application.GetRealWidth(58), Y = Application.GetRealHeight(115), Height = Application.GetRealHeight(1238), Width = Application.GetRealWidth(965), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, Radius = 6, }; 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); //记录 btnRecordFrameLayout = new FrameLayout() { 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", }; btnRecordFrameLayout.AddChidren(btnRecord); //搜藏UI btnCollectFrameLayout = new FrameLayout() { 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); //当前状态 btnStatus = new Button() { Width = Application.GetRealWidth(132 + 351), Height = Application.GetRealHeight(40), Y = Application.GetRealHeight(118), Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose), TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, TextSize = 10, TextAlignment = TextAlignment.CenterRight, }; midTopFrameLayout.AddChidren(btnStatus); //当前电量 btnCurrentPowerText = new Button() { 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", SelectedImagePath = "DoorLock/DooorLockPicOpen.png", }; midTopFrameLayout.AddChidren(btnDoorLockPic); #region 开/关点击布局 var btnFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420 - 46), Height = Application.GetRealHeight(446), X = btnDoorLockPic.Right, Y = Application.GetRealHeight(354), BackgroundColor = ZigbeeColor.Current.XMWhite, }; midTopFrameLayout.AddChidren(btnFrameLayout); openFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420),//639-35 Height = Application.GetRealHeight(446 / 2), BackgroundColor = ZigbeeColor.Current.XMWhite, }; btnFrameLayout.AddChidren(openFrameLayout); closeFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(420),//639-35 Height = Application.GetRealHeight(446 / 2), Y = Application.GetRealHeight(446 / 2), BackgroundColor = ZigbeeColor.Current.XMWhite, }; 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.GetRealHeight(17),//639-35 Gravity = Gravity.CenterHorizontal, BackgroundColor = ZigbeeColor.Current.XMVerticalSeekBar, }; progressFrameLayoutMatch.AddChidren(progressFrameLayout); progressButton = new Button() { Width = Application.GetMinReal(84),//639-35 Height = Application.GetMinReal(93), Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(347), UnSelectedImagePath = "DoorLock/UnLockButton.png", }; progressFrameLayoutMatch.AddChidren(progressButton); btnDoorOpenPic = new Button() { Width = Application.GetMinReal(81), Height = Application.GetMinReal(81), X = Application.GetRealWidth(164), Y = Application.GetRealHeight(6), UnSelectedImagePath = "DoorLock/DoorLockOpen.png", }; openFrameLayout.AddChidren(btnDoorOpenPic); btnDoorClosePic = new Button() { 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() { Width = Application.GetRealWidth(965), 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.GetMinReal(81), Height = Application.GetMinReal(81), X = Application.GetRealWidth(58), Y = Application.GetRealHeight(29), UnSelectedImagePath = "DoorLock/RoomPic.png", }; btnCurrentFrameLayout.AddChidren(btnCurrentRoomPic); var btnCurrentRoomName = new Button() { Width = Application.GetRealWidth(172), Height = Application.GetRealHeight(49), X = Application.GetRealWidth(150), Y = Application.GetRealHeight(46), Text = currentRoom.Name, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, TextSize = 12, TextAlignment = TextAlignment.CenterLeft, }; btnCurrentFrameLayout.AddChidren(btnCurrentRoomName); #endregion } #region 音量弹窗 /// /// 进度条 /// 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 处理接口数据 /// /// 处理变化事件 /// /// /// 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(); }); } } } } } } /// /// 初始化数据 /// 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 { }; listDevice.Add(doorLock); var devTemp = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice); if (devTemp.ConcreteType == DeviceConcreteType.IntelligentLocks_Sone) { Application.RunOnMainThread(() => { var volumeMsg = Language.StringByID(R.MyInternationalizationString.GetVolumeFailed); this.ShowTipMsg(volumeMsg); }); } } else { volumeData = resultRes.volumeResponseData; Application.RunOnMainThread(() => { UpdateVolume(); }); } } else { Application.RunOnMainThread(() => { btnVolumeFrameLayout.Width = Application.GetRealWidth(0); btnPower.X = Application.GetRealWidth(444); }); } //读取门锁电量:簇ID:1 属性ID 33 doorLock.ReadAttri(Cluster_ID.Power, AttriButeId.DoorLockPower); //上报电量等1秒 System.Threading.Thread.Sleep(1000); } catch (Exception ex) { var mess = ex.Message; } finally { Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); CommonPage.Loading.Hide(); }); } }); } #endregion #region 公共事件处理 /// /// 事件处理 /// public void ClickHandle() { //门锁标题 btnDoorLockTitle.Text = Common.LocalDevice.Current.GetDeviceMacName(doorLock); //返回 EventHandler eHandlerBack = (sender, e) => { RemoveFromParent(); }; this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; //设置 EventHandler 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 handerRecord = (sender, e) => { //历史记录 ---- stan var form = new DeviceDoorLock.DoorLockHistoryLogForm(); form.AddForm(this.doorLock.DeviceAddr); }; btnRecordFrameLayout.MouseDownEventHandler += handerRecord; btnRecord.MouseDownEventHandler += handerRecord; //收藏点击事件 EventHandler 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 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 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 handerVolume = (sender, e) => { if (canVolume) { VolumeDialog(progressText, diyImageVerticalSeekBar); } }; btnVolumeFrameLayout.MouseDownEventHandler += handerVolume; btnVolume.MouseDownEventHandler += handerVolume; //常开模式点击事件 EventHandler handerNormallyOpen = (sender, e) => { NomallyOpenDialog(); }; btnNormallyOpenFrameLayout.MouseUpEventHandler += handerNormallyOpen; btnNormallyOpen.MouseUpEventHandler += handerNormallyOpen; } #endregion #region 电量显示 /// /// 电量更新 /// 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 音量 /// /// 更新音量 /// 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; } } /// /// 设置音量 /// 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 常开模式 /// /// 常开模式处理 /// 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(); } } /// /// 常开模式失效处理 /// 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); } } }; } /// /// 已经开启常开模式提示 /// 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(); }; } /// /// 常开模式失效时间处理 /// 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(); } }; } /// /// 常开模式状态更新 /// 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 开锁处理 /// /// 开锁处理 /// /// 进度按钮 /// 门锁图片 /// 状态显示 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 移除方法 /// /// 重写移除方法 /// public override void RemoveFromParent() { //徐梅的门锁界面关闭(网关全局接收时使用) ControlCommonResourse.IsDoorLockPageOpen = false; if (IsDrawerLockMode) { CommonPage.Instance.IsDrawerLockMode = false; } ZbGateway.StatusList.Remove(this); base.RemoveFromParent(); } #endregion } }