using System; using System.Text.RegularExpressions; namespace Shared.SimpleControl.Phone { public class RemotelyUnlock : FrameLayout { DoorLock doorLock; //UserInfo user_Info = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile (UserInfo.GlobalRegisterFile))); public RemotelyUnlock (DoorLock DoorLock) { this.doorLock = DoorLock; BackgroundColor = SkinStyle.Current.MainColor; } public void ShowUserRemoteUnLock () { #region 标题 var topView = new FrameLayout () { Y = Application.GetRealHeight (36), Height = Application.GetRealHeight (90), }; AddChidren (topView); var title = new Button () { TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.RemotelyUnlock, TextSize = 19, TextColor = SkinStyle.Current.TextColor1, }; topView.AddChidren (title); var logo = new Button () { Width = Application.GetRealWidth (154), Height = Application.GetRealHeight (90), X = Application.GetRealWidth (486), UnSelectedImagePath = MainPage.LogoString, Gravity = Gravity.CenterVertical, }; topView.AddChidren (logo); var back = new Button () { Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (85), UnSelectedImagePath = "Item/Back.png", SelectedImagePath = "Item/BackSelected.png", Gravity = Gravity.CenterVertical, }; topView.AddChidren (back); back.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent (); }; #endregion #region bodyScrolView var bodyScrolView = new FrameLayout () { Height = Application.GetRealHeight (Application.DesignHeight - 126), BackgroundColor = SkinStyle.Current.ViewColor, Y = topView.Bottom, }; AddChidren (bodyScrolView); var passwordText = new EditText () { Y = Application.GetRealHeight (70), Width = Application.GetRealWidth (480), Height = Application.GetRealHeight(80), Gravity = Gravity.CenterHorizontal, PlaceholderText = Language.StringByID (R.MyInternationalizationString.InputSixPassword), TextAlignment = TextAlignment.Center, UnSelectedImagePath = "Register/Register_Password_kuang.png", PlaceholderTextColor = SkinStyle.Current.PlaceholderTextColor, Radius = (uint)Application.GetRealHeight (0), TextColor = SkinStyle.Current.TextColor1, SecureTextEntry = true, TextSize = 15, }; bodyScrolView.AddChidren (passwordText); var btnTip = new Button () { Height = Application.GetMinRealAverage (60), Width = Application.GetMinRealAverage (60), Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight (200), Enable = false, Visible = false, }; bodyScrolView.AddChidren (btnTip); var btnLock = new Button () { Height = Application.GetRealHeight (300), Width = Application.GetRealWidth (301), UnSelectedImagePath = "DoorLockPic/door_lock_close.png", SelectedImagePath = "DoorLockPic/door_lock_open.png", Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight (370), Enable = false, }; bodyScrolView.AddChidren (btnLock); DateTime delayTime = DateTime.Now.AddSeconds (-15); passwordText.TextChangeEventHandler += (sender, e) => { if (doorLock.isDoorLockConverter) { btnLock.Enable = true; } else { if (passwordText.Text.Length == 6) { if (passwordText.Text == doorLock.GetDoorLockPassword ()) { btnLock.Enable = true; } else { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.PasswordIsError), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show ((View)sender); passwordText.Text = ""; } } } }; #endregion DateTime dateTime = DateTime.Now.AddSeconds (-15); btnLock.MouseDownEventHandler += (sender, e) => { btnLock.IsSelected = true; if (DateTime.Now <= dateTime) { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.AfterFifteenSeconds), Direction = AMPopTipDirection.Up, CloseTime = 4 }.Show (btnTip); return; } var inputPassword = passwordText.Text.Trim (); var password = doorLock.GetDoorLockPassword (); if (password != inputPassword && !doorLock.isDoorLockConverter) { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.PasswordIsError), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnTip); return; } var word = "123456"; if (doorLock.isDoorLockConverter) { Application.RunOnMainThread (() => { word = passwordText.Text.Trim (); }); } //开锁控制 System.Threading.Tasks.Task.Run (() => { var randomNum = Control.ControlBytesSendHasReturn (Command.CreatConnection, doorLock.SubnetID, doorLock.DeviceID, new byte [] { 1 }); if (randomNum != null) { var randomBytes = new byte [8]; System.Array.Copy (randomNum, 1, randomBytes, 0, 8); var passwordArray = new byte [word.Length]; for (int index = 0; index < word.Length; index++) { passwordArray [index] = byte.Parse (word [index].ToString ()); } //备注20位 var deviceBytes = CommonPage.MyEncodingGB2312.GetBytes ("HDL ON"); var inpuptBytes = new byte [] { 0x1F, 0x56, doorLock.PhysicsLoopID, 1 }; var allAddBytes = new byte [4 + 6 + 2 + 20]; System.Array.Copy (inpuptBytes, 0, allAddBytes, 0, 4); System.Array.Copy (passwordArray, 0, allAddBytes, 4, 6); System.Array.Copy (deviceBytes, 0, allAddBytes, 4 + 6 + 2, deviceBytes.Length); //加密远程开锁输入 var encryptionBsytes = Security.Encryption (randomBytes, allAddBytes); var resultBytes = Control.ControlBytesSendHasReturn (Command.SendEncryptionAfterConnected, doorLock.SubnetID, doorLock.DeviceID, encryptionBsytes); if (resultBytes == null) { Application.RunOnMainThread (() => { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.DoorLockControlUnsuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnTip); btnLock.IsSelected = false; btnLock.Enable = false; }); return; } else { if (Security.Encryption (randomBytes, resultBytes) [2] == 0xF8) { dateTime = DateTime.Now.AddSeconds (15); Application.RunOnMainThread (() => { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.VertifyIsSuccess), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnTip); }); } else { Application.RunOnMainThread (() => { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.OperationFailed), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnTip); btnLock.IsSelected = false; btnLock.Enable = false; }); return; } } } else { Application.RunOnMainThread (() => { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.MaybeDeviceOffline), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnTip); btnLock.IsSelected = false; btnLock.Enable = false; }); } }); }; btnLock.MouseUpEventHandler += (sender, e) => { btnLock.IsSelected = false; btnLock.Enable = false; passwordText.Text = ""; }; #region bottomFrameLayout var bottomFrameLayout = new FrameLayout () { Y = Application.GetRealHeight (Application.DesignHeight - 100), }; AddChidren (bottomFrameLayout); var btnForgotPassword = new Button () { Height = Application.GetRealHeight (100), TextID = R.MyInternationalizationString.ForgotPassword, TextAlignment = TextAlignment.Center, TextSize = 18, BackgroundColor = SkinStyle.Current.TitileView, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, TextColor = SkinStyle.Current.TextColor1, }; bottomFrameLayout.AddChidren (btnForgotPassword); btnForgotPassword.MouseDownEventHandler += (sender, e) => { btnForgotPassword.IsSelected = true; //if (user_Info == null) { // //提示还没有登录 // new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.PleaseLoginSystem), // Language.StringByID (R.MyInternationalizationString.Close)).Show (); // return; //} ForgetPassword (); }; btnForgotPassword.MouseUpEventHandler += (sender, e) => { btnForgotPassword.IsSelected = false; }; #endregion if (!doorLock.isDoorLockConverter) { if (doorLock.GetDoorLockPassword () == null) { passwordText.Height = Application.GetRealHeight (0); passwordText.PlaceholderText = ""; bottomFrameLayout.Height = Application.GetRealHeight (0); } else { passwordText.Height = Application.GetRealHeight (80); bottomFrameLayout.Height = Application.GetRealHeight (100); } } } void ForgetPassword () { Dialog dialog = new Dialog (); var dialogBodyView = new FrameLayout () { Width = Application.GetRealWidth (400), Height = Application.GetRealHeight (420), BackgroundColor = SkinStyle.Current.DialogColor, Radius = 5, BorderColor = SkinStyle.Current.Transparent, BorderWidth = 0, Gravity = Gravity.Center }; dialog.AddChidren (dialogBodyView); var btnTitle = new Button () { Height = Application.GetRealHeight (80), BackgroundColor = SkinStyle.Current.DialogTitle, TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.FindPassword, }; dialogBodyView.AddChidren (btnTitle); Button btnTipEntryOnPW = new Button () { X = Application.GetRealWidth (30), Y = btnTitle.Bottom + Application.GetRealHeight (25), Height = Application.GetRealHeight (80), Width = Application.GetRealWidth (340), TextID = R.MyInternationalizationString.PasswordForHDLON, TextColor = SkinStyle.Current.TextColor, }; dialogBodyView.AddChidren (btnTipEntryOnPW); var accountPassword = new EditText () { X = Application.GetRealWidth (30), Y = btnTipEntryOnPW.Bottom + Application.GetRealHeight (25), Height = Application.GetRealHeight (80), Width = Application.GetRealWidth (340), Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, BorderColor = SkinStyle.Current.BorderColor, BorderWidth = 2, Radius = 5, SecureTextEntry = true, TextColor = SkinStyle.Current.TextColor, TextSize = 15, }; dialogBodyView.AddChidren (accountPassword); //var obtainPassword = new Button () { // X = Application.GetRealWidth (30), // Y = accountPassword.Bottom + Application.GetRealHeight (25), // Height = Application.GetRealHeight (85), // Width = Application.GetRealWidth (340), // TextSize = 15, // Text = Language.StringByID (R.MyInternationalizationString.OK), // Gravity = Gravity.CenterHorizontal, // BorderWidth = 1, // Radius = 5, // BorderColor = SkinStyle.Current.BorderColor, // //BorderColor = 0xFFff0000, // TextAlignment = TextAlignment.Center, // TextColor = SkinStyle.Current.TextColor1, //}; //dialogBodyView.AddChidren (obtainPassword); var bottomView = new FrameLayout () { Y = dialogBodyView.Height - Application.GetRealHeight (80), Height = Application.GetRealHeight (80), BackgroundColor = SkinStyle.Current.DialogTitle, }; dialogBodyView.AddChidren (bottomView); Button btnclose = new Button () { Width = Application.GetRealWidth (199), TextID = R.MyInternationalizationString.cancel, TextAlignment = TextAlignment.Center, }; bottomView.AddChidren (btnclose); btnclose.MouseUpEventHandler += (sender, e) => { dialog.Close (); }; var btnLineH = new Button () { Width = 1, Height = LayoutParams.MatchParent, BackgroundColor = SkinStyle.Current.White20Transparent, X = btnclose.Right, }; bottomView.AddChidren (btnLineH); Button btnReset = new Button () { Width = Application.GetRealWidth (199), X = btnLineH.Right, TextID = R.MyInternationalizationString.Reset, TextAlignment = TextAlignment.Center, }; bottomView.AddChidren (btnReset); btnReset.MouseUpEventHandler += (sender, e) => { if (string.IsNullOrEmpty( accountPassword.Text )) { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.AccountPasswordIsEmpty), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show ((View)sender); return; } if (accountPassword.Text != MainPage.LoginUser.Password) { new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.PasswordIsError), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show ((View)sender); return; } else { //obtainPassword.Text = doorLock.GetDoorLockPassword (); dialog.Close (); //this.RemoveFromParent (); RemoteUnlockPasswordSet unlockView = new RemoteUnlockPasswordSet (doorLock); UserMiddle.DevicePageView.AddChidren (unlockView); unlockView.ShowDoorLockRemoteSetPassword (); UserMiddle.DevicePageView.PageIndex = UserMiddle.DevicePageView.ChildrenCount - 1; } }; //btnReset.MouseUpEventHandler += (sender, e) => { // if (accountPassword.Text == null) { // new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.AccountPasswordIsEmpty), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show ((View)sender); // return; // } // if (accountPassword.Text != user_Info.Password) { // new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.AccountPasswordError), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show ((View)sender); // return; // } // dialog.Close (); // this.RemoveFromParent (); // RemoteUnlockPasswordSet unlockView = new RemoteUnlockPasswordSet (doorLock); // UserMiddle.DevicePageView.AddChidren (unlockView); // unlockView.ShowDoorLockRemoteSetPassword (); // UserMiddle.DevicePageView.PageIndex = UserMiddle.DevicePageView.ChildrenCount - 1; //}; dialog.Show (); } } }