Fixes to key saving and searching.
[FIXED] Saving of keyData in keychain. [FIXED] MPSearchDelegate before MOC is available. [FIXED] Tip during search didn't show up.
This commit is contained in:
parent
4cdeab4256
commit
8b8d727ee0
2
External/Pearl
vendored
2
External/Pearl
vendored
@ -1 +1 @@
|
|||||||
Subproject commit d33d38b91a7741b04d1bf5a08145ed4983888dc7
|
Subproject commit f81514bfd87773c6b1ea202520d75841c159ce9f
|
@ -25,8 +25,8 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
|||||||
|
|
||||||
- (MPKey *)loadSavedKeyFor:(MPUserEntity *)user {
|
- (MPKey *)loadSavedKeyFor:(MPUserEntity *)user {
|
||||||
|
|
||||||
NSData *key = [PearlKeyChain dataOfItemForQuery:keyQuery(user)];
|
NSData *keyData = [PearlKeyChain dataOfItemForQuery:keyQuery(user)];
|
||||||
if (key)
|
if (keyData)
|
||||||
inf(@"Found key in keychain for: %@", user.userID);
|
inf(@"Found key in keychain for: %@", user.userID);
|
||||||
|
|
||||||
else {
|
else {
|
||||||
@ -34,20 +34,20 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
|||||||
inf(@"No key found in keychain for: %@", user.userID);
|
inf(@"No key found in keychain for: %@", user.userID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [MPAlgorithmDefault keyFromKeyData:key];
|
return [MPAlgorithmDefault keyFromKeyData:keyData];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)storeSavedKeyFor:(MPUserEntity *)user {
|
- (void)storeSavedKeyFor:(MPUserEntity *)user {
|
||||||
|
|
||||||
if (user.saveKey) {
|
if (user.saveKey) {
|
||||||
NSData *existingKey = [PearlKeyChain dataOfItemForQuery:keyQuery(user)];
|
NSData *existingKeyData = [PearlKeyChain dataOfItemForQuery:keyQuery(user)];
|
||||||
|
|
||||||
if (![existingKey isEqualToData:self.key.keyData]) {
|
if (![existingKeyData isEqualToData:self.key.keyData]) {
|
||||||
inf(@"Saving key in keychain for: %@", user.userID);
|
inf(@"Saving key in keychain for: %@", user.userID);
|
||||||
|
|
||||||
[PearlKeyChain addOrUpdateItemForQuery:keyQuery(user)
|
[PearlKeyChain addOrUpdateItemForQuery:keyQuery(user)
|
||||||
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
self.key, (__bridge id)kSecValueData,
|
self.key.keyData, (__bridge id)kSecValueData,
|
||||||
#if TARGET_OS_IPHONE
|
#if TARGET_OS_IPHONE
|
||||||
(__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly, (__bridge id)kSecAttrAccessible,
|
(__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly, (__bridge id)kSecAttrAccessible,
|
||||||
#endif
|
#endif
|
||||||
|
@ -692,6 +692,7 @@
|
|||||||
- (IBAction)action:(id)sender {
|
- (IBAction)action:(id)sender {
|
||||||
|
|
||||||
[PearlSheet showSheetWithTitle:nil message:nil viewStyle:UIActionSheetStyleAutomatic
|
[PearlSheet showSheetWithTitle:nil message:nil viewStyle:UIActionSheetStyleAutomatic
|
||||||
|
initSheet:nil
|
||||||
tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
|
tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
|
||||||
if (buttonIndex == [sheet cancelButtonIndex])
|
if (buttonIndex == [sheet cancelButtonIndex])
|
||||||
return;
|
return;
|
||||||
|
@ -23,7 +23,7 @@ typedef enum {
|
|||||||
@interface MPSearchDelegate : NSObject<UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UISearchDisplayDelegate, NSFetchedResultsControllerDelegate>
|
@interface MPSearchDelegate : NSObject<UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UISearchDisplayDelegate, NSFetchedResultsControllerDelegate>
|
||||||
|
|
||||||
@property (strong, nonatomic) NSDateFormatter *dateFormatter;
|
@property (strong, nonatomic) NSDateFormatter *dateFormatter;
|
||||||
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
|
@property (strong, readonly) NSFetchedResultsController *fetchedResultsController;
|
||||||
@property (strong, nonatomic) NSString *query;
|
@property (strong, nonatomic) NSString *query;
|
||||||
@property (strong, nonatomic) UILabel *tipView;
|
@property (strong, nonatomic) UILabel *tipView;
|
||||||
|
|
||||||
|
@ -17,11 +17,13 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPSearchDelegate
|
@implementation MPSearchDelegate {
|
||||||
|
|
||||||
|
NSFetchedResultsController *_fetchedResultsController;
|
||||||
|
}
|
||||||
@synthesize tipView;
|
@synthesize tipView;
|
||||||
@synthesize query;
|
@synthesize query;
|
||||||
@synthesize dateFormatter;
|
@synthesize dateFormatter;
|
||||||
@synthesize fetchedResultsController;
|
|
||||||
@synthesize delegate;
|
@synthesize delegate;
|
||||||
@synthesize searchDisplayController;
|
@synthesize searchDisplayController;
|
||||||
@synthesize searchTipContainer;
|
@synthesize searchTipContainer;
|
||||||
@ -35,13 +37,6 @@
|
|||||||
self.dateFormatter.dateStyle = NSDateFormatterShortStyle;
|
self.dateFormatter.dateStyle = NSDateFormatterShortStyle;
|
||||||
self.query = @"";
|
self.query = @"";
|
||||||
|
|
||||||
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([MPElementEntity class])];
|
|
||||||
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses_" ascending:NO]];
|
|
||||||
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
|
|
||||||
managedObjectContext:[MPAppDelegate managedObjectContextIfReady]
|
|
||||||
sectionNameKeyPath:nil cacheName:nil];
|
|
||||||
self.fetchedResultsController.delegate = self;
|
|
||||||
|
|
||||||
self.tipView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 170)];
|
self.tipView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 170)];
|
||||||
self.tipView.textAlignment = UITextAlignmentCenter;
|
self.tipView.textAlignment = UITextAlignmentCenter;
|
||||||
self.tipView.backgroundColor = [UIColor clearColor];
|
self.tipView.backgroundColor = [UIColor clearColor];
|
||||||
@ -62,6 +57,23 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSFetchedResultsController *)fetchedResultsController {
|
||||||
|
|
||||||
|
if (!_fetchedResultsController) {
|
||||||
|
NSManagedObjectContext *moc = [MPAppDelegate managedObjectContextIfReady];
|
||||||
|
if (!moc)
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([MPElementEntity class])];
|
||||||
|
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses_" ascending:NO]];
|
||||||
|
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc
|
||||||
|
sectionNameKeyPath:nil cacheName:nil];
|
||||||
|
_fetchedResultsController.delegate = self;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _fetchedResultsController;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
|
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
|
||||||
|
|
||||||
UITableView *tableView = self.searchDisplayController.searchResultsTableView;
|
UITableView *tableView = self.searchDisplayController.searchResultsTableView;
|
||||||
@ -175,15 +187,17 @@
|
|||||||
if (![self.fetchedResultsController performFetch:&error])
|
if (![self.fetchedResultsController performFetch:&error])
|
||||||
err(@"Couldn't fetch elements: %@", error);
|
err(@"Couldn't fetch elements: %@", error);
|
||||||
|
|
||||||
NSArray *subviews = self.searchDisplayController.searchBar.superview.subviews;
|
[self.searchDisplayController.searchBar.superview enumerateSubviews:^(UIView *subview, BOOL *stop, BOOL *recurse) {
|
||||||
NSUInteger overlayIndex = [subviews indexOfObject:self.searchDisplayController.searchBar] + 1;
|
CGRect searchBarFrame = self.searchDisplayController.searchBar.frame;
|
||||||
UIView *overlay = [subviews count] > overlayIndex? [subviews objectAtIndex:overlayIndex]: nil;
|
if ([subview isKindOfClass:[UIControl class]] &&
|
||||||
if (overlay == self.searchDisplayController.searchResultsTableView || ![overlay isKindOfClass:[UIControl class]])
|
CGPointEqualToPoint(
|
||||||
overlay = nil;
|
CGPointDistanceBetweenCGPoints(searchBarFrame.origin, subview.frame.origin),
|
||||||
if (self.tipView.superview != overlay) {
|
CGPointMake(0, searchBarFrame.size.height))) {
|
||||||
[self.tipView removeFromSuperview];
|
[self.tipView removeFromSuperview];
|
||||||
[overlay addSubview:self.tipView];
|
[subview addSubview:self.tipView];
|
||||||
|
*stop = YES;
|
||||||
}
|
}
|
||||||
|
} recurse:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
// See MP-14, also crashes easily on internal assertions etc..
|
// See MP-14, also crashes easily on internal assertions etc..
|
||||||
|
@ -724,6 +724,7 @@
|
|||||||
|
|
||||||
[PearlSheet showSheetWithTitle:targetedUser.name
|
[PearlSheet showSheetWithTitle:targetedUser.name
|
||||||
message:nil viewStyle:UIActionSheetStyleBlackTranslucent
|
message:nil viewStyle:UIActionSheetStyleBlackTranslucent
|
||||||
|
initSheet:nil
|
||||||
tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
|
tappedButtonBlock:^(UIActionSheet *sheet, NSInteger buttonIndex) {
|
||||||
if (buttonIndex == [sheet cancelButtonIndex])
|
if (buttonIndex == [sheet cancelButtonIndex])
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user