using System; using Newtonsoft.Json.Linq; using Shared.Common; using ZigBee.Device; namespace Shared.Phone.UserCenter.DoorLock { public class DoorLockCommonLayout : EditorCommonForm { /// /// 构造函数 /// public DoorLockCommonLayout() { } #region 变量申明 public new FrameLayout topFrameLayout = new FrameLayout { Height = Application.GetRealHeight(184), BackgroundColor = ZigbeeColor.Current.XMTopFrameLayout }; public FrameLayout midFrameLayout = new FrameLayout { Height = Application.GetRealHeight(1925 - 184), BackgroundColor = ZigbeeColor.Current.XMMidFrameLayout }; #region 底部有圆角布局 /// 背景阴影界面 /// public FrameLayout shadowRadiusFrameLayout = new FrameLayout { BackgroundColor = 0x0f000000 }; /// /// 设置圆角的界面 /// public FrameLayout bottomRadiusFrameLayout = new FrameLayout() { Height = Application.GetRealHeight(806), Y = Application.GetRealHeight(930), BackgroundColor = ZigbeeColor.Current.XMWhite, }; /// /// 底部圆角中的取消按钮 /// public Button btnCancel = new Button { X = Application.GetRealWidth(81), Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(101), Text = Language.StringByID(R.MyInternationalizationString.Cancel), TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, TextSize = 14, }; /// /// 底部圆角中的标题栏 /// public Button btnBottomTitle = new Button { X = Application.GetRealWidth(446 - 50), Y = Application.GetRealHeight(35), Height = Application.GetRealHeight(63), Width = Application.GetRealWidth(284), Text = Language.StringByID(R.MyInternationalizationString.MatchPerson), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 16, }; /// /// 底部圆角中的确认按钮 /// public Button btnFinish = new Button { X = Application.GetRealWidth(919), Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(101), Text = Language.StringByID(R.MyInternationalizationString.Complete), TextColor = Shared.Common.ZigbeeColor.Current.XMOrange, TextSize = 14, }; /// /// 底部圆角中的标题栏下的线条 /// public Button line = new Button() { Y = Application.GetRealHeight(138), Height = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, }; #endregion /// /// 标题栏布局 /// public FrameLayout titleFrameLayout = new FrameLayout { Y = Application.GetRealHeight(92), X = Application.GetRealWidth(58 * 2), Width = Application.GetRealWidth(1080 - 116), Height = Application.GetRealHeight(69), }; /// /// 标题返回布局 /// public FrameLayout btnBackFrameLayout = new FrameLayout { Width = Application.GetRealWidth(58 * 2), }; /// /// 标题返回按键 /// public Button btnBack = new Button { Height = Application.GetRealHeight(51), Width = Application.GetRealWidth(30), X = Application.GetRealWidth(58), Y = Application.GetRealHeight(98), UnSelectedImagePath = "DoorLock/Left.png", }; /// /// 标题下线 /// public Button btnTitleLine = new Button { Y = Application.GetRealHeight(181), Height = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMTitleLine, }; /// /// 弹窗取消按键 /// public Button dialogBtnCancel = new Button { Width = Application.GetRealWidth(397), Height = Application.GetRealHeight(127), Y = Application.GetRealHeight(380), TextID = R.MyInternationalizationString.Cancel, TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout, }; #endregion /// /// 门锁顶部布局 /// /// public void TopFrameLayout(FrameLayout frameLayout, string titleText) { this.AddChidren(topFrameLayout); topFrameLayout.AddChidren(btnBackFrameLayout); topFrameLayout.AddChidren(titleFrameLayout); topFrameLayout.AddChidren(btnTitleLine); var title = new Button() { TextAlignment = TextAlignment.CenterLeft, Text = titleText, TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText, Width = Application.GetRealWidth(1080 - 161), Height = Application.GetRealWidth(69), TextSize = 17, IsBold = true, X = Application.GetRealWidth(161 - 116), }; titleFrameLayout.AddChidren(title); btnBackFrameLayout.AddChidren(btnBack); } /// /// 门锁中部布局 /// /// public void MidFrameLayout(FrameLayout frameLayout) { midFrameLayout.Y = topFrameLayout.Bottom; this.AddChidren(midFrameLayout); } /// /// 门锁底部布局 /// /// public void BottomFrameLayout(FrameLayout frameLayout) { var bottomFrameLayout1 = new FrameLayout() { Height = Application.GetRealHeight(806 - 50), Y = Application.GetRealHeight(930 + 48), BackgroundColor = ZigbeeColor.Current.XMWhite, }; this.midFrameLayout.AddChidren(bottomFrameLayout1); } /// /// 门锁底部带圆角布局 /// /// public void BottomRadiusFrameLayout(FrameLayout frameLayout) { this.shadowRadiusFrameLayout.AddChidren(this.bottomRadiusFrameLayout); this.bottomRadiusFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); this.bottomRadiusFrameLayout.AddChidren(btnCancel); this.bottomRadiusFrameLayout.AddChidren(btnBottomTitle); this.bottomRadiusFrameLayout.AddChidren(btnFinish); this.bottomRadiusFrameLayout.AddChidren(line); } /// /// 远程控制权限处理 /// /// public void RemotePasswordDialog(ZigBee.Device.DoorLock doorLock, Button btnNext = null) { var dialog = new Dialog { }; var doorDialog = new Shared.Phone.UserCenter.DoorLock.DoorlockDialog(dialog, Language.StringByID(R.MyInternationalizationString.BindDoorLock)); doorDialog.Show(); doorDialog.dialogMidFraFrameLayout.Width = Application.GetRealWidth(677); doorDialog.dialogMidFraFrameLayout.Height = Application.GetRealHeight(69); doorDialog.dialogMidFraFrameLayout.X = Application.GetRealWidth(58); doorDialog.dialogMidFraFrameLayout.Y = Application.GetRealHeight(213); doorDialog.dialogMidFraFrameLayout.BackgroundColor = BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBorder; var editInputPasswordFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(677) - 2, Height = Application.GetRealHeight(69) - 2, X = 1, Y = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, }; doorDialog.dialogMidFraFrameLayout.AddChidren(editInputPasswordFrameLayout); var editInputPassword = new EditText() { X = Application.GetRealHeight(25), TextSize = 13, PlaceholderTextColor = Shared.Common.ZigbeeColor.Current.XMGray3, PlaceholderText = Language.StringByID(R.MyInternationalizationString.InputUnlockPasswrd), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextAlignment = TextAlignment.BottomLeft, IsNumberKeyboardType = true, }; editInputPasswordFrameLayout.AddChidren(editInputPassword); doorDialog.dialogBtnCancel.MouseUpEventHandler += (sender1, e1) => { if (btnNext != null) { btnNext.IsSelected = false; } dialog.Close(); }; DateTime oldTime = DateTime.MaxValue; doorDialog.dialogBtnConfirm.MouseUpEventHandler += async (sender1, e1) => { Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); if (DateTime.Now < ZigBee.Device.DoorLock.minValue) { CommonPage.Loading.Hide(); this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoFiftySeconds)); return; } if (DateTime.Now >= oldTime && ZigBee.Device.DoorLock.RemoteUnlockCount == 0) { ZigBee.Device.DoorLock.RemoteUnlockCount = 5; oldTime = DateTime.MaxValue; } if (ZigBee.Device.DoorLock.RemoteUnlockCount <= 0) { ZigBee.Device.DoorLock.minValue = DateTime.Now.AddSeconds(+15); oldTime = ZigBee.Device.DoorLock.minValue; CommonPage.Loading.Hide(); this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AfterFiftySeconds)); return; } if (editInputPassword.Text.Length != 6) { ZigBee.Device.DoorLock.RemoteUnlockCount--; string tipText = Language.StringByID(R.MyInternationalizationString.PasswordError) + "," + Language.StringByID(R.MyInternationalizationString.Surplus) + ZigBee.Device.DoorLock.RemoteUnlockCount.ToString() + Language.StringByID(R.MyInternationalizationString.Opportunity); CommonPage.Loading.Hide(); this.ShowMassage(ShowMsgType.Tip, tipText); return; } var verifyResult = await doorLock.VerifyPasswordAsync(editInputPassword.Text); if (verifyResult != null) { if (verifyResult.result == 0) { System.Threading.Thread.Sleep(500); doorLock.RemoteUnlockPassword = editInputPassword.Text; ZigBee.Device.DoorLock.minValue = DateTime.MinValue; ZigBee.Device.DoorLock.failedCount = 3; ZigBee.Device.DoorLock.RemoteUnlockCount = 5; oldTime = DateTime.MaxValue; CommonPage.Loading.Hide(); dialog.Close(); if (btnNext != null) { btnNext.IsSelected = true; } if (!UserCenterResourse.AccountOption.DoorUnLockByRemote) { string msg = Language.StringByID(R.MyInternationalizationString.RemoteUnlockBindSucessTip).Replace("{0}", "\r\n"); var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.GoSetting)); alert.Show(); //使用确认型弹框时,的回调函数 alert.ConfirmClickEvent += () => { var form = new UserCenter.UserMain.SecondAuthenticationForm(); form.AddForm(); }; } doorLock.ReSave(); } else { ZigBee.Device.DoorLock.RemoteUnlockCount--; string tipText = Language.StringByID(R.MyInternationalizationString.OperrateFailed) + "," + Language.StringByID(R.MyInternationalizationString.Surplus) + ZigBee.Device.DoorLock.RemoteUnlockCount.ToString() + Language.StringByID(R.MyInternationalizationString.Opportunity); CommonPage.Loading.Hide(); this.ShowMassage(ShowMsgType.Tip, tipText); return; } } else { CommonPage.Loading.Hide(); this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.GwResponseOvertime)); return; } }; doorDialog.flMain.MouseUpEventHandler += (sender11, e11) => { if (btnNext != null) { btnNext.IsSelected = false; } dialog.Close(); }; } /// /// 安全验证 /// /// 门锁设备 /// 二次验证的结果成功后的通知 public static void SecurityRequest(ZigBee.Device.DoorLock doorLock) { string msg = Language.StringByID(R.MyInternationalizationString.SetSecondarySecurityVerificationMode).Replace("{0}", "\r\n"); var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.GoSetting)); alert.Show(); //使用确认型弹框时,的回调函数 alert.ConfirmClickEvent += () => { var form = new UserCenter.UserMain.SecondAuthenticationForm(); form.AddForm(); }; } /// /// 绑定远程开锁权限窗口 /// /// /// public void BindRemoteUnlockDoorlock(Room room, CommonDevice devDoorLock, Button btnDoorLockTitle = null) { ZigBee.Device.DoorLock doorLock = devDoorLock as ZigBee.Device.DoorLock; string msgRemoteUnlockRequest = Language.StringByID(R.MyInternationalizationString.BindRemoteUnlockDoorlock); var alertRemoteUnlockRequest = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msgRemoteUnlockRequest, Language.StringByID(R.MyInternationalizationString.GoSetting)); alertRemoteUnlockRequest.Show(); //使用确认型弹框时,的回调函数 alertRemoteUnlockRequest.ConfirmClickEvent += () => { var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(room, devDoorLock); Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; functionSetting.Show(); functionSetting.devicNameAction += (deviceRename) => { if (!string.IsNullOrEmpty(deviceRename)) { if (btnDoorLockTitle != null) { btnDoorLockTitle.Text = deviceRename; } } }; }; } /// /// 去个人中心,开启系统密码支持开锁权限 /// public void SystemSecondAuthentication() { string msgDoorUnLockByRemote = Language.StringByID(R.MyInternationalizationString.GoPersonalCenter).Replace("{0}", "\r\n"); var alertDoorUnLockByRemote = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msgDoorUnLockByRemote, Language.StringByID(R.MyInternationalizationString.GoSetting)); alertDoorUnLockByRemote.Show(); //使用确认型弹框时,的回调函数 alertDoorUnLockByRemote.ConfirmClickEvent += () => { var form = new UserCenter.UserMain.SecondAuthenticationForm(); form.AddForm(); }; } /// /// 远程开锁请求 /// /// 门锁设备 /// 二次验证的结果成功后的通知 /// 门锁开或关时进度显示 /// 门锁图片开/关显示 public void RemoteUnlockRequest(Room room, CommonDevice devDoorLock, Action action, Button progressButton = null, Button btnDoorLockPic = null, Button btnStatus = null, Button btnDoorLockTitle = null) { ZigBee.Device.DoorLock doorLock = devDoorLock as ZigBee.Device.DoorLock; if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword)) { BindRemoteUnlockDoorlock(room, devDoorLock, btnDoorLockTitle); return; } if (!UserCenterResourse.AccountOption.DoorUnLockByRemote) { SystemSecondAuthentication(); return; } string msg = Language.StringByID(R.MyInternationalizationString.SureToOpenDoorLock); var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm)); alert.Show(); //使用确认型弹框时,的回调函数 alert.ConfirmClickEvent += () => { action = () => { System.Threading.Tasks.Task.Run(async () => { Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); try { Application.RunOnMainThread(() => { if (progressButton != null) { progressButton.Y = Application.GetRealHeight(10); } if (btnDoorLockPic != null) { btnDoorLockPic.IsSelected = true; } if (btnStatus != null) { btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Opening); } }); //远程开锁 var remoteControlResult = await doorLock.RemoteControlAsync(doorLock.RemoteUnlockPassword); //远程开锁成功,返回默认响应 if (remoteControlResult != null && remoteControlResult.responseData != null) { if (remoteControlResult.responseData.status == 0) { ZigBee.Device.DoorLock.failedCount = 3; Application.RunOnMainThread(() => { if (progressButton != null) { progressButton.Y = Application.GetRealHeight(10); } if (btnDoorLockPic != null) { btnDoorLockPic.IsSelected = true; } if (btnStatus != null) { btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.DoorLockOpen); this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockSuccess)); } }); //开锁成功,默认5秒后门锁自动关锁,根据不同的门锁可能时间不同,这里以“H06C”门锁给的时间 System.Threading.Thread.Sleep(5000); } else { this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockFailed)); } } //用于远程开锁的门锁中的密码被删除情况 else if (remoteControlResult != null && remoteControlResult.IsPawDispear == true) { //远程开锁有3次连续操作失败的机会 ZigBee.Device.DoorLock.failedCount--; if (ZigBee.Device.DoorLock.failedCount != 0) { this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockFailed)); } else { //3次操作失败远程开锁失败后,重写设置远程开锁密码 Application.RunOnMainThread(() => { this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.DoorlockPasswordDispear)); doorLock.RemoteUnlockPassword = ""; var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(room, devDoorLock); Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; functionSetting.Show(); functionSetting.devicNameAction += (deviceRename) => { if (!string.IsNullOrEmpty(deviceRename)) { if (btnDoorLockTitle != null) { btnDoorLockTitle.Text = deviceRename; } } }; }); } } //远程开锁失败的情况 else { this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.GwResponseOvertime)); } } catch { } finally { Application.RunOnMainThread(() => { if (progressButton != null) { progressButton.Y = Application.GetRealHeight(347); } if (btnDoorLockPic != null) { btnDoorLockPic.IsSelected = false; } if (btnStatus != null) { btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose); } CommonPage.Loading.Hide(); }); } }); }; HdlCheckLogic.Current.CheckSecondarySecurity(action); }; } // 获取到到名称更改回调通知 public Action devicNameSecAction; /// /// 当前选中的开锁方式 /// /// /// /// /// public void CurrentSelectUnlockMethod(Button btnAllMethod, Button btnMethodText, Button oldbutton, Button oldbuttonText) { btnAllMethod.IsSelected = true; btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack; btnMethodText.IsBold = true; oldbutton = btnAllMethod; oldbuttonText = btnMethodText; } /// /// 显示所有开锁方式的数据 /// /// /// /// public void DisplayAllUnlockMethod(int curIndex, Button btnAllMethod, Button btnMethodText) { switch (curIndex) { case 0: btnAllMethod.UnSelectedImagePath = "DoorLock/AllMethod.png"; btnAllMethod.SelectedImagePath = "DoorLock/AllMethodOn.png"; btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AllMethod); break; case 1: btnAllMethod.UnSelectedImagePath = "DoorLock/Password.png"; btnAllMethod.SelectedImagePath = "DoorLock/PasswordOn.png"; btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.PasswordUnlock); break; case 2: btnAllMethod.UnSelectedImagePath = "DoorLock/Fingerprint.png"; btnAllMethod.SelectedImagePath = "DoorLock/FingerprintOn.png"; btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.FingerprintUnlock); break; case 3: btnAllMethod.UnSelectedImagePath = "DoorLock/proximityCard.png"; btnAllMethod.SelectedImagePath = "DoorLock/proximityCardOn.png"; btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.ProximithCardUnlock); break; } } #region ■ 一般方法___________________________ /// /// 显示错误信息窗口 /// /// public void ShowErrorMsg(string msg) { Application.RunOnMainThread(() => { var contr = new ShowMsgControl(ShowMsgType.Error, msg); contr.Show(); }); } /// /// 显示Tip信息窗口 /// /// public void ShowTipMsg(string msg) { Application.RunOnMainThread(() => { var contr = new ShowMsgControl(ShowMsgType.Tip, msg); contr.Show(); CommonPage.Loading.Hide(); }); } #endregion } }