Skip to content

Instantly share code, notes, and snippets.

@benoitjadinon
Last active January 31, 2017 09:34
Show Gist options
  • Select an option

  • Save benoitjadinon/95e295a6715adca6f3f0 to your computer and use it in GitHub Desktop.

Select an option

Save benoitjadinon/95e295a6715adca6f3f0 to your computer and use it in GitHub Desktop.
Android Timeout Passcode (PasscodeManager : https://components.xamarin.com/view/Passcode)
// 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