-
Notifications
You must be signed in to change notification settings - Fork 114
/
VENTouchLockEnterPasscodeViewController.m
90 lines (76 loc) · 3.34 KB
/
VENTouchLockEnterPasscodeViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#import "VENTouchLockEnterPasscodeViewController.h"
#import "VENTouchLockPasscodeView.h"
#import "VENTouchLock.h"
NSString *const VENTouchLockEnterPasscodeUserDefaultsKeyNumberOfConsecutivePasscodeAttempts = @"VENTouchLockEnterPasscodeUserDefaultsKeyNumberOfConsecutivePasscodeAttempts";
@implementation VENTouchLockEnterPasscodeViewController
#pragma mark - Class Methods
+ (void)resetPasscodeAttemptHistory
{
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults removeObjectForKey:VENTouchLockEnterPasscodeUserDefaultsKeyNumberOfConsecutivePasscodeAttempts];
[standardDefaults synchronize];
}
#pragma mark - Instance Methods
- (instancetype)init
{
self = [super init];
if (self) {
self.title = [self.touchLock appearance].enterPasscodeViewControllerTitle;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.passcodeView.title = [self.touchLock appearance].enterPasscodeInitialLabelText;
}
- (void)enteredPasscode:(NSString *)passcode
{
[super enteredPasscode:passcode];
if ([self.touchLock isPasscodeValid:passcode]) {
[[self class] resetPasscodeAttemptHistory];
[self finishWithResult:YES animated:YES];
}
else {
[self.passcodeView shakeAndVibrateCompletion:^{
self.passcodeView.title = [self.touchLock appearance].enterPasscodeIncorrectLabelText;
[self clearPasscode];
if ([self parentSplashViewController]) {
[self recordIncorrectPasscodeAttempt];
}
}];
}
}
- (void)recordIncorrectPasscodeAttempt
{
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
NSUInteger numberOfAttemptsSoFar = [standardDefaults integerForKey:VENTouchLockEnterPasscodeUserDefaultsKeyNumberOfConsecutivePasscodeAttempts];
numberOfAttemptsSoFar ++;
[standardDefaults setInteger:numberOfAttemptsSoFar forKey:VENTouchLockEnterPasscodeUserDefaultsKeyNumberOfConsecutivePasscodeAttempts];
[standardDefaults synchronize];
if (numberOfAttemptsSoFar >= [self.touchLock passcodeAttemptLimit]) {
[self callExceededLimitActionBlock];
}
}
- (void)callExceededLimitActionBlock
{
[[self parentSplashViewController] dismissWithUnlockSuccess:NO
unlockType:VENTouchLockSplashViewControllerUnlockTypeNone
animated:NO];
}
- (VENTouchLockSplashViewController *)parentSplashViewController
{
VENTouchLockSplashViewController *splashViewController = nil;
UIViewController *presentingViewController = self.presentingViewController;
if (self.touchLock.appearance.splashShouldEmbedInNavigationController) {
UIViewController *rootViewController = ([presentingViewController isKindOfClass:[UINavigationController class]]) ? [((UINavigationController *)presentingViewController).viewControllers firstObject] : nil;
if ([rootViewController isKindOfClass:[VENTouchLockSplashViewController class]]) {
splashViewController = (VENTouchLockSplashViewController *)rootViewController;
}
}
else if ([presentingViewController isKindOfClass:[VENTouchLockSplashViewController class]]) {
splashViewController = (VENTouchLockSplashViewController *)presentingViewController;
}
return splashViewController;
}
@end