diff --git a/External/Pearl b/External/Pearl index c9000309..04a91a86 160000 --- a/External/Pearl +++ b/External/Pearl @@ -1 +1 @@ -Subproject commit c9000309913081119803fdd1c2106e371c1b594a +Subproject commit 04a91a866fab0d0be753100961279bb7116082d9 diff --git a/MasterPassword/ObjC/iOS/MPPasswordLargeCell.h b/MasterPassword/ObjC/iOS/MPPasswordLargeCell.h index ce416af4..b2daa321 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordLargeCell.h +++ b/MasterPassword/ObjC/iOS/MPPasswordLargeCell.h @@ -42,8 +42,8 @@ typedef NS_ENUM (NSUInteger, MPContentFieldMode) { - (void)updateWithElement:(MPElementEntity *)mainElement; - (void)updateWithTransientSite:(NSString *)siteName; -- (void)resolveContentOfCellTypeForTransientSite:(NSString *)siteName usingKey:(MPKey *)key result:(void (^)(NSString *))resultBlock; -- (void)resolveContentOfCellTypeForElement:(MPElementEntity *)element usingKey:(MPKey *)key result:(void (^)(NSString *))resultBlock; +- (void)resolveContentOfCellTypeForTransientSite:(NSString *)siteName usingKey:(MPKey *)key result:(void (^)(NSString *result))resultBlock; +- (void)resolveContentOfCellTypeForElement:(MPElementEntity *)element usingKey:(MPKey *)key result:(void (^)(NSString *result))resultBlock; - (void)willBeginDragging; - (MPElementEntity *)saveContentTypeWithElement:(MPElementEntity *)element saveInContext:(NSManagedObjectContext *)context; diff --git a/MasterPassword/ObjC/iOS/MPPasswordLargeCell.m b/MasterPassword/ObjC/iOS/MPPasswordLargeCell.m index 1a2326fd..bf949b4f 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordLargeCell.m +++ b/MasterPassword/ObjC/iOS/MPPasswordLargeCell.m @@ -30,7 +30,7 @@ + (instancetype)dequeueCellWithType:(MPElementType)type fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath { - NSAssert(type != 0 && type != (MPElementType)NSNotFound, @"Cannot dequeue a password cell without a type."); + NSAssert( type != 0 && type != (MPElementType)NSNotFound, @"Cannot dequeue a password cell without a type." ); NSString *reuseIdentifier; if (type & MPElementTypeClassGenerated) @@ -56,9 +56,24 @@ self.layer.shadowOpacity = 0; self.layer.shadowColor = [UIColor whiteColor].CGColor; + [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector( didLongPress: )]]; + [self prepareForReuse]; } +- (void)didLongPress:(UILongPressGestureRecognizer *)recognizer { + + if (recognizer.state != UIGestureRecognizerStateBegan) + return; + + if (self.contentField.secureTextEntry) { + self.contentField.secureTextEntry = NO; + PearlMainQueueAfter( 3, ^{ + self.contentField.secureTextEntry = [[MPiOSConfig get].hidePasswords boolValue]; + } ); + } +} + - (void)prepareForReuse { _contentFieldMode = 0; @@ -74,20 +89,29 @@ self.nameLabel.text = @""; self.typeLabel.text = @""; self.contentField.text = @""; - self.contentField.placeholder = nil; + self.contentField.secureTextEntry = [[MPiOSConfig get].hidePasswords boolValue]; + self.contentField.attributedPlaceholder = nil; self.contentField.enabled = self.contentFieldMode == MPContentFieldModeUser; self.loginButton.selected = self.contentFieldMode == MPContentFieldModeUser; switch (self.contentFieldMode) { case MPContentFieldModePassword: { + self.contentField.keyboardType = UIKeyboardTypeDefault; if (self.type & MPElementTypeClassStored) - self.contentField.placeholder = strl( @"Set custom password" ); + self.contentField.attributedPlaceholder = stra( strl( @"Set custom password" ), @{ + NSForegroundColorAttributeName : [UIColor whiteColor] + } ); else if (self.type & MPElementTypeClassGenerated) - self.contentField.placeholder = strl( @"Generating..." ); + self.contentField.attributedPlaceholder = stra( strl( @"Generating..." ), @{ + NSForegroundColorAttributeName : [UIColor whiteColor] + } ); break; } case MPContentFieldModeUser: { - self.contentField.placeholder = strl( @"Enter your login name" ); + self.contentField.keyboardType = UIKeyboardTypeEmailAddress; + self.contentField.attributedPlaceholder = stra( strl( @"Enter your login name" ), @{ + NSForegroundColorAttributeName : [UIColor whiteColor] + } ); break; } } @@ -100,8 +124,8 @@ self.nameLabel.text = strl( @"%@ - Tap to create", siteName ); self.typeLabel.text = [MPAlgorithmDefault nameOfType:self.type]; - [self resolveContentOfCellTypeForTransientSite:siteName usingKey:[MPiOSAppDelegate get].key result:^(NSString *string) { - PearlMainQueue( ^{ self.contentField.text = string; } ); + [self resolveContentOfCellTypeForTransientSite:siteName usingKey:[MPiOSAppDelegate get].key result:^(NSString *result) { + PearlMainQueue( ^{ self.contentField.text = result; } ); }]; } @@ -126,12 +150,12 @@ case MPContentFieldModePassword: { MPKey *key = [MPiOSAppDelegate get].key; if (self.type == mainElement.type) - [mainElement resolveContentUsingKey:key result:^(NSString *string) { - PearlMainQueue( ^{ self.contentField.text = string; } ); + [mainElement resolveContentUsingKey:key result:^(NSString *result) { + PearlMainQueue( ^{ self.contentField.text = result; } ); }]; else - [self resolveContentOfCellTypeForElement:mainElement usingKey:key result:^(NSString *string) { - PearlMainQueue( ^{ self.contentField.text = string; } ); + [self resolveContentOfCellTypeForElement:mainElement usingKey:key result:^(NSString *result) { + PearlMainQueue( ^{ self.contentField.text = result; } ); }]; break; } @@ -241,7 +265,7 @@ _contentFieldMode = contentFieldMode; - [[MPPasswordTypesCell findAsSuperviewOf:self] reloadData]; + [[MPPasswordTypesCell findAsSuperviewOf:self] reloadData:self]; } @end diff --git a/MasterPassword/ObjC/iOS/MPPasswordLargeGeneratedCell.m b/MasterPassword/ObjC/iOS/MPPasswordLargeGeneratedCell.m index f2be70a6..1a9c175d 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordLargeGeneratedCell.m +++ b/MasterPassword/ObjC/iOS/MPPasswordLargeGeneratedCell.m @@ -132,7 +132,7 @@ - (void)doResetCounterRecognizer:(UILongPressGestureRecognizer *)gestureRecognizer { - if (gestureRecognizer.state != UIGestureRecognizerStateRecognized) + if (gestureRecognizer.state != UIGestureRecognizerStateBegan) return; [MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) { diff --git a/MasterPassword/ObjC/iOS/MPPasswordLargeStoredCell.m b/MasterPassword/ObjC/iOS/MPPasswordLargeStoredCell.m index 89525318..83757f87 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordLargeStoredCell.m +++ b/MasterPassword/ObjC/iOS/MPPasswordLargeStoredCell.m @@ -42,7 +42,6 @@ - (MPElementEntity *)saveContentTypeWithElement:(MPElementEntity *)element saveInContext:(NSManagedObjectContext *)context { element = [super saveContentTypeWithElement:element saveInContext:context]; - MPElementStoredEntity *storedElement = [self storedElement:element]; [storedElement.algorithm saveContent:self.contentField.text toElement:storedElement usingKey:[MPiOSAppDelegate get].key]; [context saveToStore]; diff --git a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.h b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.h index 1a48f773..25f19da8 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.h +++ b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.h @@ -20,6 +20,7 @@ #import "MPCell.h" #import "MPPasswordCell.h" #import "MPPasswordsViewController.h" +#import "MPPasswordLargeCell.h" @interface MPPasswordTypesCell : MPPasswordCell @@ -35,6 +36,7 @@ - (MPElementEntity *)elementInContext:(NSManagedObjectContext *)context; - (void)setElement:(MPElementEntity *)element; - (void)reloadData; +- (void)reloadData:(MPPasswordLargeCell *)cell; + (instancetype)dequeueCellForElement:(MPElementEntity *)element fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath; diff --git a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m index 14605452..413df533 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m +++ b/MasterPassword/ObjC/iOS/MPPasswordTypesCell.m @@ -102,7 +102,8 @@ if (!self.transientSite && indexPath.item == 0) { cell = [MPPasswordLargeDeleteCell dequeueCellFromCollectionView:collectionView atIndexPath:indexPath]; [cell updateWithElement:self.mainElement]; - } else { + } + else { cell = [MPPasswordLargeCell dequeueCellWithType:[self typeForContentIndexPath:indexPath] fromCollectionView:collectionView atIndexPath:indexPath]; @@ -140,7 +141,7 @@ // Create [[MPiOSAppDelegate get] addElementNamed:newSiteName completion:^(MPElementEntity *element) { - [self copyContentOfElement:element]; + [self copyContentOfElement:element inCell:nil]; PearlMainQueue( ^{ [self.passwordsViewController updatePasswords]; } ); @@ -152,13 +153,15 @@ [MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) { BOOL used = NO; MPElementEntity *element = [self elementInContext:context]; + MPPasswordLargeCell *cell = (MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath:indexPath]; if (!element) - wrn(@"No element to use for: %@", self); + wrn( @"No element to use for: %@", self ); else if (indexPath.item == 0) { [context deleteObject:element]; [context saveToStore]; - } else - used = [self copyContentOfElement:element]; + } + else + used = [self copyContentOfElement:element inCell:cell]; PearlMainQueueAfter( 0.2f, ^{ for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems]) @@ -173,19 +176,25 @@ }]; } -- (BOOL)copyContentOfElement:(MPElementEntity *)element { +- (BOOL)copyContentOfElement:(MPElementEntity *)element inCell:(MPPasswordLargeCell *)cell { - inf( @"Copying password for: %@", element.name ); - MPCheckpoint( MPCheckpointCopyToPasteboard, @{ - @"type" : NilToNSNull( element.typeName ), - @"version" : @(element.version), - @"emergency" : @NO - } ); + NSString *used, *pasteboardContent; + switch (cell.contentFieldMode) { + case MPContentFieldModePassword: + inf( @"Copying password for: %@", element.name ); + used = strl( @"Password" ); + pasteboardContent = [element resolveContentUsingKey:[MPAppDelegate_Shared get].key]; + break; + case MPContentFieldModeUser: + inf( @"Copying login for: %@", element.name ); + used = strl( @"Login" ); + pasteboardContent = element.loginName; + break; + } - NSString *result = [element resolveContentUsingKey:[MPAppDelegate_Shared get].key]; - if ([result length]) { - [UIPasteboard generalPasteboard].string = result; - [PearlOverlay showTemporaryOverlayWithTitle:@"Password Copied" dismissAfter:2]; + if ([pasteboardContent length]) { + [UIPasteboard generalPasteboard].string = pasteboardContent; + [PearlOverlay showTemporaryOverlayWithTitle:strl(@"%@ Copied", used) dismissAfter:2]; return YES; } @@ -195,7 +204,7 @@ #pragma mark - UIScrollViewDelegate - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - + _scrolling = YES; for (MPPasswordLargeCell *cell in [self.contentCollectionView visibleCells]) [cell willBeginDragging]; @@ -239,22 +248,39 @@ for (NSInteger item = 0; item < [self.contentCollectionView numberOfItemsInSection:section]; ++item) [(MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath: [NSIndexPath indexPathForItem:item inSection:section]] updateWithTransientSite:self.transientSite]; - } ); else [MPiOSAppDelegate managedObjectContextForMainThreadPerformBlockAndWait:^(NSManagedObjectContext *mainContext) { - MPElementEntity *mainElement = [self elementInContext:mainContext]; + MPElementEntity *mainElement = self.transientSite? nil: [self elementInContext:mainContext]; self.algorithm = mainElement.algorithm?: MPAlgorithmDefault; - self.activeType = mainElement.type; + self.activeType = mainElement.type?: [[MPiOSAppDelegate get] activeUserInContext:mainContext].defaultType?: + MPElementTypeGeneratedLong; for (NSInteger section = 0; section < [self.contentCollectionView numberOfSections]; ++section) - for (NSInteger item = 0; item < [self.contentCollectionView numberOfItemsInSection:section]; ++item) - [(MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath: - [NSIndexPath indexPathForItem:item inSection:section]] updateWithElement:mainElement]; + for (NSInteger item = 0; item < [self.contentCollectionView numberOfItemsInSection:section]; ++item) { + MPPasswordLargeCell *cell = (MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath: + [NSIndexPath indexPathForItem:item inSection:section]]; + [self reloadData:cell withElement:mainElement]; + } }]; } +- (void)reloadData:(MPPasswordLargeCell *)cell { + + [MPiOSAppDelegate managedObjectContextForMainThreadPerformBlockAndWait:^(NSManagedObjectContext *mainContext) { + [self reloadData:cell withElement:[self elementInContext:mainContext]]; + }]; +} + +- (void)reloadData:(MPPasswordLargeCell *)cell withElement:(MPElementEntity *)element { + + if (element) + [cell updateWithElement:element]; + else + [cell updateWithTransientSite:self.transientSite]; +} + - (void)scrollToActiveType { if (self.activeType && self.activeType != (MPElementType)NSNotFound) @@ -284,7 +310,7 @@ return [NSIndexPath indexPathForItem:t + 1 inSection:0]; } - Throw(@"Unsupported type: %lud", (long)type); + Throw( @"Unsupported type: %lud", (long)type ); } - (void)saveContentType { diff --git a/MasterPassword/ObjC/iOS/MPPasswordsViewController.m b/MasterPassword/ObjC/iOS/MPPasswordsViewController.m index 654f2bec..559dd683 100644 --- a/MasterPassword/ObjC/iOS/MPPasswordsViewController.m +++ b/MasterPassword/ObjC/iOS/MPPasswordsViewController.m @@ -56,6 +56,10 @@ self.view.backgroundColor = [UIColor clearColor]; [self.passwordCollectionView automaticallyAdjustInsetsForKeyboard]; + [self.passwordsSearchBar enumerateViews:^(UIView *subview, BOOL *stop, BOOL *recurse) { + if ([subview isKindOfClass:[UITextField class]]) + ((UITextField *)subview).keyboardAppearance = UIKeyboardAppearanceDark; + } recurse:YES]; } - (void)viewWillAppear:(BOOL)animated { @@ -156,7 +160,7 @@ referenceSizeForHeaderInSection:(NSInteger)section { cell.passwordsViewController = self; [UIView setAnimationsEnabled:YES]; - dbg_return(cell, indexPath); + return cell; } Throw(@"Unexpected collection view: %@", collectionView); @@ -201,16 +205,18 @@ referenceSizeForHeaderInSection:(NSInteger)section { - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { - if (searchBar == self.passwordsSearchBar) + if (searchBar == self.passwordsSearchBar) { + [self.passwordsSearchBar setShowsCancelButton:YES animated:YES]; [UIView animateWithDuration:0.3f animations:^{ self.passwordCollectionView.backgroundColor = _darkenedBackgroundColor; }]; + } } - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { if (searchBar == self.passwordsSearchBar) { - self.passwordsSearchBar.showsCancelButton = NO; + [self.passwordsSearchBar setShowsCancelButton:NO animated:YES]; if (_passwordsDismissRecognizer) [self.view removeGestureRecognizer:_passwordsDismissRecognizer]; @@ -220,6 +226,11 @@ referenceSizeForHeaderInSection:(NSInteger)section { } } +- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { + + [searchBar resignFirstResponder]; +} + - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; @@ -316,6 +327,8 @@ referenceSizeForHeaderInSection:(NSInteger)section { if (!key || [key isEqualToString:NSStringFromSelector( @selector(dictationSearch) )]) self.passwordsSearchBar.keyboardType = [[MPiOSConfig get].dictationSearch boolValue]? UIKeyboardTypeDefault: UIKeyboardTypeURL; + if (!key || [key isEqualToString:NSStringFromSelector( @selector(hidePasswords) )]) + [self updatePasswords]; } - (void)updatePasswords { diff --git a/MasterPassword/ObjC/iOS/MPiOSConfig.h b/MasterPassword/ObjC/iOS/MPiOSConfig.h index 434d30b7..377f0b6d 100644 --- a/MasterPassword/ObjC/iOS/MPiOSConfig.h +++ b/MasterPassword/ObjC/iOS/MPiOSConfig.h @@ -19,5 +19,6 @@ @property(nonatomic, retain) NSNumber *traceMode; @property(nonatomic, retain) NSNumber *iCloudEnabled; @property(nonatomic, retain) NSNumber *dictationSearch; +@property(nonatomic, retain) NSNumber *hidePasswords; @end diff --git a/MasterPassword/ObjC/iOS/MPiOSConfig.m b/MasterPassword/ObjC/iOS/MPiOSConfig.m index 82ca660b..f391d43b 100644 --- a/MasterPassword/ObjC/iOS/MPiOSConfig.m +++ b/MasterPassword/ObjC/iOS/MPiOSConfig.m @@ -8,7 +8,7 @@ @implementation MPiOSConfig -@dynamic helpHidden, siteInfoHidden, showSetup, actionsTipShown, typeTipShown, loginNameTipShown, traceMode, iCloudEnabled, dictationSearch; +@dynamic helpHidden, siteInfoHidden, showSetup, actionsTipShown, typeTipShown, loginNameTipShown, traceMode, iCloudEnabled, dictationSearch, hidePasswords; - (id)init { @@ -25,7 +25,8 @@ NSStringFromSelector( @selector(loginNameTipShown) ) : @NO, NSStringFromSelector( @selector(traceMode) ) : @NO, NSStringFromSelector( @selector(iCloudEnabled) ) : @NO, - NSStringFromSelector( @selector( dictationSearch) ) : @NO + NSStringFromSelector( @selector(dictationSearch) ) : @NO, + NSStringFromSelector( @selector(hidePasswords) ) : @NO }]; return self; diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj index 7fd1ebcf..d61e169b 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -96,7 +96,6 @@ DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; }; DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4E147E415C00F98B1E /* CoreData.framework */; }; - DA5E5C3D1723681B003798D8 /* Square-bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5E5C3C1723681B003798D8 /* Square-bottom.png */; }; DA6701B816406A4100B61001 /* Accounts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA6701B716406A4100B61001 /* Accounts.framework */; settings = {ATTRIBUTES = (Required, ); }; }; DA6701DE16406B7300B61001 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA6701DD16406B7300B61001 /* Social.framework */; settings = {ATTRIBUTES = (Required, ); }; }; DA6701E016406BB400B61001 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA6701DF16406BB400B61001 /* AdSupport.framework */; settings = {ATTRIBUTES = (Required, ); }; }; @@ -109,6 +108,13 @@ DA69540617D975D900BF294E /* icon_gears.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37841711E29500CF925C /* icon_gears.png */; }; DA69540717D975D900BF294E /* icon_gears@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37851711E29500CF925C /* icon_gears@2x.png */; }; DA70EC801811B13C00F65DB2 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA70EC7F1811B13C00F65DB2 /* StoreKit.framework */; }; + DA73049D194E022700E72520 /* ui_spinner.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36511711E29400CF925C /* ui_spinner.png */; }; + DA73049E194E022700E72520 /* ui_spinner@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36521711E29400CF925C /* ui_spinner@2x.png */; }; + DA73049F194E022B00E72520 /* ui_textfield.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365B1711E29400CF925C /* ui_textfield.png */; }; + DA7304A0194E022B00E72520 /* ui_textfield@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365C1711E29400CF925C /* ui_textfield@2x.png */; }; + DA7304E5194E025900E72520 /* tip_basic_black.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38901711E29700CF925C /* tip_basic_black.png */; }; + DA7304E6194E025900E72520 /* tip_basic_black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38911711E29700CF925C /* tip_basic_black@2x.png */; }; + DA7304E7194E027C00E72520 /* Square-bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5E5C3C1723681B003798D8 /* Square-bottom.png */; }; DA854C8318D4CFBF00106317 /* avatar-add@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA854C8118D4CFBF00106317 /* avatar-add@2x.png */; }; DA854C8418D4CFBF00106317 /* avatar-add.png in Resources */ = {isa = PBXBuildFile; fileRef = DA854C8218D4CFBF00106317 /* avatar-add.png */; }; DA945C8717E3F3FD0053236B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA945C8617E3F3FD0053236B /* Images.xcassets */; }; @@ -119,32 +125,6 @@ DAA141211922FF020032B392 /* PearlTween.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA1411D1922FF020032B392 /* PearlTween.h */; }; DAA141221922FF020032B392 /* map-macro.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA1411F1922FF020032B392 /* map-macro.h */; }; DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABB981515100B4000B05417 /* SystemConfiguration.framework */; }; - DABD38DB1711E29700CF925C /* ui_background.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD360F1711E29400CF925C /* ui_background.png */; }; - DABD38DC1711E29700CF925C /* ui_background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36101711E29400CF925C /* ui_background@2x.png */; }; - DABD38EB1711E29700CF925C /* ui_button_standard_large.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD361F1711E29400CF925C /* ui_button_standard_large.png */; }; - DABD38EC1711E29700CF925C /* ui_button_standard_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36201711E29400CF925C /* ui_button_standard_large@2x.png */; }; - DABD38F51711E29700CF925C /* ui_list_first.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36291711E29400CF925C /* ui_list_first.png */; }; - DABD38F61711E29700CF925C /* ui_list_first@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362A1711E29400CF925C /* ui_list_first@2x.png */; }; - DABD38F71711E29700CF925C /* ui_list_last.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362B1711E29400CF925C /* ui_list_last.png */; }; - DABD38F81711E29700CF925C /* ui_list_last@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362C1711E29400CF925C /* ui_list_last@2x.png */; }; - DABD38F91711E29700CF925C /* ui_list_middle.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362D1711E29400CF925C /* ui_list_middle.png */; }; - DABD38FA1711E29700CF925C /* ui_list_middle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362E1711E29400CF925C /* ui_list_middle@2x.png */; }; - DABD38FB1711E29700CF925C /* ui_navbar_back.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD362F1711E29400CF925C /* ui_navbar_back.png */; }; - DABD38FC1711E29700CF925C /* ui_navbar_back@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36301711E29400CF925C /* ui_navbar_back@2x.png */; }; - DABD38FD1711E29700CF925C /* ui_navbar_button.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36311711E29400CF925C /* ui_navbar_button.png */; }; - DABD38FE1711E29700CF925C /* ui_navbar_button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36321711E29400CF925C /* ui_navbar_button@2x.png */; }; - DABD38FF1711E29700CF925C /* ui_navbar_container.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36331711E29400CF925C /* ui_navbar_container.png */; }; - DABD39001711E29700CF925C /* ui_navbar_container@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36341711E29400CF925C /* ui_navbar_container@2x.png */; }; - DABD39011711E29700CF925C /* ui_panel_container.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36351711E29400CF925C /* ui_panel_container.png */; }; - DABD39021711E29700CF925C /* ui_panel_container@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36361711E29400CF925C /* ui_panel_container@2x.png */; }; - DABD39031711E29700CF925C /* ui_panel_display.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36371711E29400CF925C /* ui_panel_display.png */; }; - DABD39041711E29700CF925C /* ui_panel_display@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36381711E29400CF925C /* ui_panel_display@2x.png */; }; - DABD391D1711E29700CF925C /* ui_spinner.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36511711E29400CF925C /* ui_spinner.png */; }; - DABD391E1711E29700CF925C /* ui_spinner@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD36521711E29400CF925C /* ui_spinner@2x.png */; }; - DABD39271711E29700CF925C /* ui_textfield.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365B1711E29400CF925C /* ui_textfield.png */; }; - DABD39281711E29700CF925C /* ui_textfield@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365C1711E29400CF925C /* ui_textfield@2x.png */; }; - DABD39291711E29700CF925C /* ui_toolbar_container.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365D1711E29400CF925C /* ui_toolbar_container.png */; }; - DABD392A1711E29700CF925C /* ui_toolbar_container@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD365E1711E29400CF925C /* ui_toolbar_container@2x.png */; }; DABD39371711E29700CF925C /* avatar-0.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD366C1711E29400CF925C /* avatar-0.png */; }; DABD39381711E29700CF925C /* avatar-0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD366D1711E29400CF925C /* avatar-0@2x.png */; }; DABD39391711E29700CF925C /* avatar-1.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD366E1711E29400CF925C /* avatar-1.png */; }; @@ -205,35 +185,15 @@ DABD3ABF1711E29800CF925C /* icon_plus@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD37F91711E29600CF925C /* icon_plus@2x.png */; }; DABD3B1C1711E29800CF925C /* icon_up.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38561711E29700CF925C /* icon_up.png */; }; DABD3B1D1711E29800CF925C /* icon_up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38571711E29700CF925C /* icon_up@2x.png */; }; - DABD3B3C1711E29800CF925C /* tip_alert_black.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38781711E29700CF925C /* tip_alert_black.png */; }; - DABD3B3D1711E29800CF925C /* tip_alert_black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38791711E29700CF925C /* tip_alert_black@2x.png */; }; - DABD3B541711E29800CF925C /* tip_basic_black.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38901711E29700CF925C /* tip_basic_black.png */; }; - DABD3B551711E29800CF925C /* tip_basic_black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38911711E29700CF925C /* tip_basic_black@2x.png */; }; - DABD3B561711E29800CF925C /* tip_basic_black_bottom_right.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38921711E29700CF925C /* tip_basic_black_bottom_right.png */; }; - DABD3B571711E29800CF925C /* tip_basic_black_bottom_right@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38931711E29700CF925C /* tip_basic_black_bottom_right@2x.png */; }; - DABD3B581711E29800CF925C /* tip_basic_black_top.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38941711E29700CF925C /* tip_basic_black_top.png */; }; - DABD3B591711E29800CF925C /* tip_basic_black_top@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38951711E29700CF925C /* tip_basic_black_top@2x.png */; }; - DABD3B5A1711E29800CF925C /* tip_basic_black_top_right.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38961711E29700CF925C /* tip_basic_black_top_right.png */; }; - DABD3B5B1711E29800CF925C /* tip_basic_black_top_right@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38971711E29700CF925C /* tip_basic_black_top_right@2x.png */; }; - DABD3B881711E29800CF925C /* book.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38C41711E29700CF925C /* book.png */; }; - DABD3B891711E29800CF925C /* book@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38C51711E29700CF925C /* book@2x.png */; }; DABD3B8A1711E29800CF925C /* help.html in Resources */ = {isa = PBXBuildFile; fileRef = DABD38C61711E29700CF925C /* help.html */; }; DABD3B8D1711E29800CF925C /* keypad.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38C91711E29700CF925C /* keypad.png */; }; DABD3B8E1711E29800CF925C /* logo-bare.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CA1711E29700CF925C /* logo-bare.png */; }; DABD3B8F1711E29800CF925C /* menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CB1711E29700CF925C /* menu-icon.png */; }; DABD3B901711E29800CF925C /* menu-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CC1711E29700CF925C /* menu-icon@2x.png */; }; - DABD3B911711E29800CF925C /* page-deblock.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CD1711E29700CF925C /* page-deblock.png */; }; - DABD3B921711E29800CF925C /* page-deblock@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CE1711E29700CF925C /* page-deblock@2x.png */; }; - DABD3B931711E29800CF925C /* page-gorillas.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38CF1711E29700CF925C /* page-gorillas.png */; }; - DABD3B941711E29800CF925C /* page-gorillas@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D01711E29700CF925C /* page-gorillas@2x.png */; }; DABD3B951711E29800CF925C /* pull-down.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D11711E29700CF925C /* pull-down.png */; }; DABD3B961711E29800CF925C /* pull-down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D21711E29700CF925C /* pull-down@2x.png */; }; DABD3B971711E29800CF925C /* pull-up.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D31711E29700CF925C /* pull-up.png */; }; DABD3B981711E29800CF925C /* pull-up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D41711E29700CF925C /* pull-up@2x.png */; }; - DABD3B991711E29800CF925C /* social-facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D51711E29700CF925C /* social-facebook.png */; }; - DABD3B9A1711E29800CF925C /* social-facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D61711E29700CF925C /* social-facebook@2x.png */; }; - DABD3B9D1711E29800CF925C /* social-twitter.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D91711E29700CF925C /* social-twitter.png */; }; - DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38DA1711E29700CF925C /* social-twitter@2x.png */; }; DABD3BFD1711E2DC00CF925C /* MPAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BA11711E2DC00CF925C /* MPAlgorithm.m */; }; DABD3BFE1711E2DC00CF925C /* MPAlgorithmV0.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BA31711E2DC00CF925C /* MPAlgorithmV0.m */; }; DABD3BFF1711E2DC00CF925C /* MPAlgorithmV1.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BA51711E2DC00CF925C /* MPAlgorithmV1.m */; }; @@ -1248,26 +1208,16 @@ DABD38C11711E29700CF925C /* tip_location_teal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_location_teal@2x.png"; sourceTree = ""; }; DABD38C21711E29700CF925C /* tip_location_wood.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tip_location_wood.png; sourceTree = ""; }; DABD38C31711E29700CF925C /* tip_location_wood@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_location_wood@2x.png"; sourceTree = ""; }; - DABD38C41711E29700CF925C /* book.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = book.png; sourceTree = ""; }; - DABD38C51711E29700CF925C /* book@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "book@2x.png"; sourceTree = ""; }; DABD38C61711E29700CF925C /* help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = help.html; sourceTree = ""; }; DABD38C81711E29700CF925C /* jquery-1.6.1.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.6.1.min.js"; sourceTree = ""; }; DABD38C91711E29700CF925C /* keypad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = keypad.png; sourceTree = ""; }; DABD38CA1711E29700CF925C /* logo-bare.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "logo-bare.png"; sourceTree = ""; }; DABD38CB1711E29700CF925C /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = ""; }; DABD38CC1711E29700CF925C /* menu-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon@2x.png"; sourceTree = ""; }; - DABD38CD1711E29700CF925C /* page-deblock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-deblock.png"; sourceTree = ""; }; - DABD38CE1711E29700CF925C /* page-deblock@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-deblock@2x.png"; sourceTree = ""; }; - DABD38CF1711E29700CF925C /* page-gorillas.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-gorillas.png"; sourceTree = ""; }; - DABD38D01711E29700CF925C /* page-gorillas@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-gorillas@2x.png"; sourceTree = ""; }; DABD38D11711E29700CF925C /* pull-down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-down.png"; sourceTree = ""; }; DABD38D21711E29700CF925C /* pull-down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-down@2x.png"; sourceTree = ""; }; DABD38D31711E29700CF925C /* pull-up.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-up.png"; sourceTree = ""; }; DABD38D41711E29700CF925C /* pull-up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-up@2x.png"; sourceTree = ""; }; - DABD38D51711E29700CF925C /* social-facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook.png"; sourceTree = ""; }; - DABD38D61711E29700CF925C /* social-facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook@2x.png"; sourceTree = ""; }; - DABD38D91711E29700CF925C /* social-twitter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter.png"; sourceTree = ""; }; - DABD38DA1711E29700CF925C /* social-twitter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter@2x.png"; sourceTree = ""; }; DABD3BA01711E2DC00CF925C /* MPAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithm.h; sourceTree = ""; }; DABD3BA11711E2DC00CF925C /* MPAlgorithm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithm.m; sourceTree = ""; }; DABD3BA21711E2DC00CF925C /* MPAlgorithmV0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithmV0.h; sourceTree = ""; }; @@ -1761,8 +1711,6 @@ DABD36BB1711E29500CF925C /* Fonts */, DABD36D91711E29500CF925C /* Insignia */, DABD38751711E29700CF925C /* Tooltips */, - DABD38C41711E29700CF925C /* book.png */, - DABD38C51711E29700CF925C /* book@2x.png */, DABD3FC81712446200CF925C /* cloud.png */, DABD3FC91712446200CF925C /* cloud@2x.png */, DABD38C61711E29700CF925C /* help.html */, @@ -1773,18 +1721,10 @@ DABD38CA1711E29700CF925C /* logo-bare.png */, DABD38CB1711E29700CF925C /* menu-icon.png */, DABD38CC1711E29700CF925C /* menu-icon@2x.png */, - DABD38CD1711E29700CF925C /* page-deblock.png */, - DABD38CE1711E29700CF925C /* page-deblock@2x.png */, - DABD38CF1711E29700CF925C /* page-gorillas.png */, - DABD38D01711E29700CF925C /* page-gorillas@2x.png */, DABD38D11711E29700CF925C /* pull-down.png */, DABD38D21711E29700CF925C /* pull-down@2x.png */, DABD38D31711E29700CF925C /* pull-up.png */, DABD38D41711E29700CF925C /* pull-up@2x.png */, - DABD38D51711E29700CF925C /* social-facebook.png */, - DABD38D61711E29700CF925C /* social-facebook@2x.png */, - DABD38D91711E29700CF925C /* social-twitter.png */, - DABD38DA1711E29700CF925C /* social-twitter@2x.png */, ); path = Media; sourceTree = ""; @@ -3486,47 +3426,23 @@ DADEF4171810D2940052CA3E /* love-lyndir.button.red@2x.png in Resources */, DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */, DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */, - DABD38DB1711E29700CF925C /* ui_background.png in Resources */, - DABD38DC1711E29700CF925C /* ui_background@2x.png in Resources */, - DABD38EB1711E29700CF925C /* ui_button_standard_large.png in Resources */, - DABD38EC1711E29700CF925C /* ui_button_standard_large@2x.png in Resources */, - DABD38F51711E29700CF925C /* ui_list_first.png in Resources */, - DABD38F61711E29700CF925C /* ui_list_first@2x.png in Resources */, - DABD38F71711E29700CF925C /* ui_list_last.png in Resources */, - DABD38F81711E29700CF925C /* ui_list_last@2x.png in Resources */, - DABD38F91711E29700CF925C /* ui_list_middle.png in Resources */, - DABD38FA1711E29700CF925C /* ui_list_middle@2x.png in Resources */, - DABD38FB1711E29700CF925C /* ui_navbar_back.png in Resources */, - DABD38FC1711E29700CF925C /* ui_navbar_back@2x.png in Resources */, DA45224C190628B2008F650A /* icon_gear@2x.png in Resources */, - DABD38FD1711E29700CF925C /* ui_navbar_button.png in Resources */, - DABD38FE1711E29700CF925C /* ui_navbar_button@2x.png in Resources */, - DABD38FF1711E29700CF925C /* ui_navbar_container.png in Resources */, - DABD39001711E29700CF925C /* ui_navbar_container@2x.png in Resources */, - DABD39011711E29700CF925C /* ui_panel_container.png in Resources */, DA854C8318D4CFBF00106317 /* avatar-add@2x.png in Resources */, DA45224A190628A1008F650A /* icon_wrench@2x.png in Resources */, - DABD39021711E29700CF925C /* ui_panel_container@2x.png in Resources */, - DABD39031711E29700CF925C /* ui_panel_display.png in Resources */, - DABD39041711E29700CF925C /* ui_panel_display@2x.png in Resources */, DA071BF4190187FE00179766 /* empty.png in Resources */, - DABD391D1711E29700CF925C /* ui_spinner.png in Resources */, - DABD391E1711E29700CF925C /* ui_spinner@2x.png in Resources */, DA69540617D975D900BF294E /* icon_gears.png in Resources */, DA67460D18DE7F0C00DFE240 /* Exo2.0-Thin.otf in Resources */, DA4522451902355C008F650A /* icon_book@2x.png in Resources */, - DABD39271711E29700CF925C /* ui_textfield.png in Resources */, - DABD39281711E29700CF925C /* ui_textfield@2x.png in Resources */, - DABD39291711E29700CF925C /* ui_toolbar_container.png in Resources */, - DABD392A1711E29700CF925C /* ui_toolbar_container@2x.png in Resources */, DABD39371711E29700CF925C /* avatar-0.png in Resources */, DABD39381711E29700CF925C /* avatar-0@2x.png in Resources */, DABD39391711E29700CF925C /* avatar-1.png in Resources */, + DA7304E5194E025900E72520 /* tip_basic_black.png in Resources */, DABD393A1711E29700CF925C /* avatar-10.png in Resources */, DABD393B1711E29700CF925C /* avatar-10@2x.png in Resources */, DADEF41C1810D2940052CA3E /* love-lyndir.heart.red.png in Resources */, DABD393C1711E29700CF925C /* avatar-11.png in Resources */, DABD393D1711E29700CF925C /* avatar-11@2x.png in Resources */, + DA73049D194E022700E72520 /* ui_spinner.png in Resources */, DABD393E1711E29700CF925C /* avatar-12.png in Resources */, DABD393F1711E29700CF925C /* avatar-12@2x.png in Resources */, DA67461018DE7F0C00DFE240 /* Exo2.0-Bold.otf in Resources */, @@ -3539,6 +3455,7 @@ DABD39451711E29700CF925C /* avatar-15@2x.png in Resources */, DABD39461711E29700CF925C /* avatar-16.png in Resources */, DABD39471711E29700CF925C /* avatar-16@2x.png in Resources */, + DA7304E7194E027C00E72520 /* Square-bottom.png in Resources */, DABD39481711E29700CF925C /* avatar-17.png in Resources */, DABD39491711E29700CF925C /* avatar-17@2x.png in Resources */, DAC8DF47192831E100BA7D71 /* icon_key.png in Resources */, @@ -3556,6 +3473,7 @@ DABD39511711E29700CF925C /* avatar-4.png in Resources */, DABD39521711E29700CF925C /* avatar-4@2x.png in Resources */, DABD39531711E29700CF925C /* avatar-5.png in Resources */, + DA73049E194E022700E72520 /* ui_spinner@2x.png in Resources */, DABD39541711E29700CF925C /* avatar-5@2x.png in Resources */, DABD39551711E29700CF925C /* avatar-6.png in Resources */, DABD39561711E29700CF925C /* avatar-6@2x.png in Resources */, @@ -3577,6 +3495,7 @@ DABD39A01711E29700CF925C /* icon_action.png in Resources */, DABD39A11711E29700CF925C /* icon_action@2x.png in Resources */, DABD39F21711E29700CF925C /* icon_cancel.png in Resources */, + DA73049F194E022B00E72520 /* ui_textfield.png in Resources */, DABD39F31711E29700CF925C /* icon_cancel@2x.png in Resources */, DABD3A261711E29700CF925C /* icon_edit.png in Resources */, DABD3A271711E29700CF925C /* icon_edit@2x.png in Resources */, @@ -3598,41 +3517,23 @@ DA69540717D975D900BF294E /* icon_gears@2x.png in Resources */, DABD3B1C1711E29800CF925C /* icon_up.png in Resources */, DABD3B1D1711E29800CF925C /* icon_up@2x.png in Resources */, - DABD3B3C1711E29800CF925C /* tip_alert_black.png in Resources */, - DABD3B3D1711E29800CF925C /* tip_alert_black@2x.png in Resources */, - DABD3B541711E29800CF925C /* tip_basic_black.png in Resources */, - DABD3B551711E29800CF925C /* tip_basic_black@2x.png in Resources */, DA9B51551895D79E009D2A0B /* gittip.png in Resources */, - DABD3B561711E29800CF925C /* tip_basic_black_bottom_right.png in Resources */, - DABD3B571711E29800CF925C /* tip_basic_black_bottom_right@2x.png in Resources */, - DABD3B581711E29800CF925C /* tip_basic_black_top.png in Resources */, - DABD3B591711E29800CF925C /* tip_basic_black_top@2x.png in Resources */, DA4522441902355C008F650A /* icon_book.png in Resources */, - DABD3B5A1711E29800CF925C /* tip_basic_black_top_right.png in Resources */, - DABD3B5B1711E29800CF925C /* tip_basic_black_top_right@2x.png in Resources */, - DABD3B881711E29800CF925C /* book.png in Resources */, - DABD3B891711E29800CF925C /* book@2x.png in Resources */, DABD3B8A1711E29800CF925C /* help.html in Resources */, DABD3B8D1711E29800CF925C /* keypad.png in Resources */, DABD3B8E1711E29800CF925C /* logo-bare.png in Resources */, DADEF44B1810E7F30052CA3E /* love-lyndir.picker.png in Resources */, + DA7304E6194E025900E72520 /* tip_basic_black@2x.png in Resources */, DABD3B8F1711E29800CF925C /* menu-icon.png in Resources */, DABD3B901711E29800CF925C /* menu-icon@2x.png in Resources */, - DABD3B911711E29800CF925C /* page-deblock.png in Resources */, - DABD3B921711E29800CF925C /* page-deblock@2x.png in Resources */, - DABD3B931711E29800CF925C /* page-gorillas.png in Resources */, - DABD3B941711E29800CF925C /* page-gorillas@2x.png in Resources */, DABD3B951711E29800CF925C /* pull-down.png in Resources */, DABD3B961711E29800CF925C /* pull-down@2x.png in Resources */, DABD3B971711E29800CF925C /* pull-up.png in Resources */, DABD3B981711E29800CF925C /* pull-up@2x.png in Resources */, - DABD3B991711E29800CF925C /* social-facebook.png in Resources */, + DA7304A0194E022B00E72520 /* ui_textfield@2x.png in Resources */, DA452249190628A1008F650A /* icon_wrench.png in Resources */, - DABD3B9A1711E29800CF925C /* social-facebook@2x.png in Resources */, DA45224819062899008F650A /* icon_settings@2x.png in Resources */, DADEF4121810D2940052CA3E /* love-lyndir.button.green.png in Resources */, - DABD3B9D1711E29800CF925C /* social-twitter.png in Resources */, - DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */, DA854C8418D4CFBF00106317 /* avatar-add.png in Resources */, DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */, DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */, @@ -3649,7 +3550,6 @@ DA5A09E0171A70E4005284AB /* play@2x.png in Resources */, DA5A09EA171BB0F7005284AB /* unlocked.png in Resources */, DA5A09EB171BB0F7005284AB /* unlocked@2x.png in Resources */, - DA5E5C3D1723681B003798D8 /* Square-bottom.png in Resources */, DADEF44C1810E7F30052CA3E /* love-lyndir.picker@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/MasterPassword/ObjC/iOS/Settings.bundle/Root.plist b/MasterPassword/ObjC/iOS/Settings.bundle/Root.plist index 30099a7c..892d73ff 100644 --- a/MasterPassword/ObjC/iOS/Settings.bundle/Root.plist +++ b/MasterPassword/ObjC/iOS/Settings.bundle/Root.plist @@ -88,6 +88,26 @@ Type PSToggleSwitchSpecifier + + FooterText + This will keep your site's passwords hidden from view. Enable this if you're worried about people watching your screen while you use the app. + +To see a site's password anyway, tap and hold your finger down for a while until the password appears. + Title + + Type + PSGroupSpecifier + + + DefaultValue + + Key + hidePasswords + Title + Hide Passwords + Type + PSToggleSwitchSpecifier + Type PSGroupSpecifier diff --git a/MasterPassword/ObjC/iOS/Storyboard.storyboard b/MasterPassword/ObjC/iOS/Storyboard.storyboard index 4b8c5063..928f45a6 100644 --- a/MasterPassword/ObjC/iOS/Storyboard.storyboard +++ b/MasterPassword/ObjC/iOS/Storyboard.storyboard @@ -123,7 +123,7 @@ - + - + - - + + - - + + - + @@ -218,19 +218,19 @@ + - - + - + @@ -1093,7 +1093,7 @@ - + @@ -1229,7 +1229,7 @@ - + @@ -2525,11 +2525,12 @@ However, it means that anyone who finds your device unlocked can do the same. -