Last active
January 31, 2017 09:34
-
-
Save benoitjadinon/95e295a6715adca6f3f0 to your computer and use it in GitHub Desktop.
Android Timeout Passcode (PasscodeManager : https://components.xamarin.com/view/Passcode)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // usage : in your Android Application OnCreate() : | |
| // this.RegisterActivityLifecycleCallbacks(new TimeOutPassCodeActivityCallBacks("1234")); | |
| class TimeOutPassCodeActivityCallBacks : Java.Lang.Object, Android.App.Application.IActivityLifecycleCallbacks | |
| { | |
| DateTime? loggedInTime = null; | |
| readonly string passcode; | |
| readonly int timeoutInSeconds; | |
| readonly PasscodeManager passcodeManager; | |
| public TimeOutPassCodeActivityCallBacks (string passcode, int timeoutInSeconds = 30) | |
| { | |
| this.passcode = passcode; | |
| this.timeoutInSeconds = timeoutInSeconds; | |
| passcodeManager = new PasscodeManager(); | |
| passcodeManager.PasscodeLength = passcode.Length; | |
| passcodeManager.PasscodeEntered += (sender, e) => OnPasswordCorrect (CheckPassword (e.GetPasscodeAsString ())); | |
| } | |
| protected virtual void OnPasswordCorrect (bool isCorrect) | |
| { | |
| if (isCorrect) { | |
| resetTimer (); | |
| passcodeManager.Dismiss (); | |
| } else { | |
| passcodeManager.WrongPasscode(); | |
| } | |
| } | |
| protected virtual bool CheckPassword (string passwordToCheck) | |
| { | |
| return passwordToCheck == this.passcode; | |
| } | |
| #region IActivityLifecycleCallbacks | |
| public void OnActivityCreated (Activity activity, Android.OS.Bundle savedInstanceState) { } | |
| public void OnActivityDestroyed (Activity activity) { } | |
| public void OnActivityPaused (Activity activity) | |
| { | |
| resetTimer (); | |
| } | |
| public void OnActivityResumed (Activity activity) | |
| { | |
| CheckLoggedIn (activity); | |
| } | |
| public void OnActivitySaveInstanceState (Activity activity, Android.OS.Bundle outState) { } | |
| public void OnActivityStarted (Activity activity) { } | |
| public void OnActivityStopped (Activity activity) { } | |
| #endregion IActivityLifecycleCallbacks | |
| void resetTimer () | |
| { | |
| loggedInTime = DateTime.Now; | |
| } | |
| public bool IsLoggedIn { | |
| get { return loggedInTime.HasValue; } | |
| } | |
| public bool CheckLoggedIn (Activity activity) | |
| { | |
| if (!IsLoggedIn || | |
| (DateTime.Now - loggedInTime.Value) > TimeSpan.FromSeconds (timeoutInSeconds) | |
| ) { | |
| loggedInTime = null; | |
| passcodeManager.Show (activity); | |
| return false; | |
| } | |
| resetTimer (); | |
| return true; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment