2
0

Hide passwords, placeholder visibility, cancel search, copy login and dark keyboard.

[ADDED]     Option to hide passwords and reveal with long-touch.
[IMPROVED]  More visible placeholder text.
[ADDED]     Cancel button on search field.
[ADDED]     Ability to copy user name.
[UPDATED]   Use dark style keyboard throughout to avoid flickery switches.
[FIXED]     Smaller ui fixes.
This commit is contained in:
Maarten Billemont 2014-06-15 19:51:03 -04:00
parent bb48771989
commit c60780a197
13 changed files with 164 additions and 177 deletions

2
External/Pearl vendored

@ -1 +1 @@
Subproject commit c9000309913081119803fdd1c2106e371c1b594a
Subproject commit 04a91a866fab0d0be753100961279bb7116082d9

View File

@ -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;

View File

@ -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

View File

@ -132,7 +132,7 @@
- (void)doResetCounterRecognizer:(UILongPressGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state != UIGestureRecognizerStateRecognized)
if (gestureRecognizer.state != UIGestureRecognizerStateBegan)
return;
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {

View File

@ -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];

View File

@ -20,6 +20,7 @@
#import "MPCell.h"
#import "MPPasswordCell.h"
#import "MPPasswordsViewController.h"
#import "MPPasswordLargeCell.h"
@interface MPPasswordTypesCell : MPPasswordCell <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@ -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;

View File

@ -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 {

View File

@ -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 {

View File

@ -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

View File

@ -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;

View File

@ -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 = "<group>"; };
DABD38C21711E29700CF925C /* tip_location_wood.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tip_location_wood.png; sourceTree = "<group>"; };
DABD38C31711E29700CF925C /* tip_location_wood@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_location_wood@2x.png"; sourceTree = "<group>"; };
DABD38C41711E29700CF925C /* book.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = book.png; sourceTree = "<group>"; };
DABD38C51711E29700CF925C /* book@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "book@2x.png"; sourceTree = "<group>"; };
DABD38C61711E29700CF925C /* help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = help.html; sourceTree = "<group>"; };
DABD38C81711E29700CF925C /* jquery-1.6.1.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.6.1.min.js"; sourceTree = "<group>"; };
DABD38C91711E29700CF925C /* keypad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = keypad.png; sourceTree = "<group>"; };
DABD38CA1711E29700CF925C /* logo-bare.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "logo-bare.png"; sourceTree = "<group>"; };
DABD38CB1711E29700CF925C /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = "<group>"; };
DABD38CC1711E29700CF925C /* menu-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon@2x.png"; sourceTree = "<group>"; };
DABD38CD1711E29700CF925C /* page-deblock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-deblock.png"; sourceTree = "<group>"; };
DABD38CE1711E29700CF925C /* page-deblock@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-deblock@2x.png"; sourceTree = "<group>"; };
DABD38CF1711E29700CF925C /* page-gorillas.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-gorillas.png"; sourceTree = "<group>"; };
DABD38D01711E29700CF925C /* page-gorillas@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "page-gorillas@2x.png"; sourceTree = "<group>"; };
DABD38D11711E29700CF925C /* pull-down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-down.png"; sourceTree = "<group>"; };
DABD38D21711E29700CF925C /* pull-down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-down@2x.png"; sourceTree = "<group>"; };
DABD38D31711E29700CF925C /* pull-up.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-up.png"; sourceTree = "<group>"; };
DABD38D41711E29700CF925C /* pull-up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-up@2x.png"; sourceTree = "<group>"; };
DABD38D51711E29700CF925C /* social-facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook.png"; sourceTree = "<group>"; };
DABD38D61711E29700CF925C /* social-facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook@2x.png"; sourceTree = "<group>"; };
DABD38D91711E29700CF925C /* social-twitter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter.png"; sourceTree = "<group>"; };
DABD38DA1711E29700CF925C /* social-twitter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter@2x.png"; sourceTree = "<group>"; };
DABD3BA01711E2DC00CF925C /* MPAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithm.h; sourceTree = "<group>"; };
DABD3BA11711E2DC00CF925C /* MPAlgorithm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithm.m; sourceTree = "<group>"; };
DABD3BA21711E2DC00CF925C /* MPAlgorithmV0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithmV0.h; sourceTree = "<group>"; };
@ -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 = "<group>";
@ -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;

View File

@ -88,6 +88,26 @@
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>This will keep your site&apos;s passwords hidden from view. Enable this if you&apos;re worried about people watching your screen while you use the app.
To see a site&apos;s password anyway, tap and hold your finger down for a while until the password appears.</string>
<key>Title</key>
<string></string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>DefaultValue</key>
<false/>
<key>Key</key>
<string>hidePasswords</string>
<key>Title</key>
<string>Hide Passwords</string>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>

View File

@ -123,7 +123,7 @@
</connections>
</collectionView>
<button opaque="NO" alpha="0.69999999999999996" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9u7-pu-Wtv" userLabel="Previous Avatar">
<rect key="frame" x="0.0" y="171" width="44" height="53"/>
<rect key="frame" x="0.0" y="166" width="44" height="53"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="44" id="Ay6-Jg-c3T"/>
@ -137,7 +137,7 @@
</connections>
</button>
<button opaque="NO" alpha="0.69999999999999996" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fUK-gJ-NRE" userLabel="Next Avatar">
<rect key="frame" x="276" y="171" width="44" height="53"/>
<rect key="frame" x="276" y="166" width="44" height="53"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<constraints>
<constraint firstAttribute="width" constant="44" id="oAm-YX-Fx5"/>
@ -151,7 +151,7 @@
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qp1-nX-o4i" userLabel="Entry" customClass="PearlUIView">
<rect key="frame" x="20" y="260" width="280" height="63"/>
<rect key="frame" x="20" y="255" width="280" height="68"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enter your full name:" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="5fe-rt-zFa" userLabel="Entry Label">
@ -162,22 +162,22 @@
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_textfield.png" translatesAutoresizingMaskIntoConstraints="NO" id="UfK-na-vOU" userLabel="Field Background">
<rect key="frame" x="0.0" y="26" width="280" height="37"/>
<rect key="frame" x="0.0" y="26" width="280" height="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<rect key="contentStretch" x="0.25" y="0.25" width="0.49999999999999961" height="0.49999999999999961"/>
</imageView>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="center" clearsOnBeginEditing="YES" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="z3Z-AB-fG2" userLabel="Entry Field">
<rect key="frame" x="10" y="30" width="260" height="29"/>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="MyMasterPassword" textAlignment="center" clearsOnBeginEditing="YES" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="z3Z-AB-fG2" userLabel="Entry Field">
<rect key="frame" x="10" y="30" width="260" height="34"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="28"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="28"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardAppearance="alert" enablesReturnKeyAutomatically="YES" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="S8q-YF-Kt9" id="5u3-XN-LOe"/>
</connections>
</textField>
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fdS-zb-K9I" userLabel="Entry Tip">
<rect key="frame" x="28" y="-38" width="225" height="82"/>
<rect key="frame" x="28" y="-35" width="225" height="82"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" translatesAutoresizingMaskIntoConstraints="NO" id="g2g-5i-er4">
@ -218,19 +218,19 @@
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="UfK-na-vOU" firstAttribute="bottom" secondItem="z3Z-AB-fG2" secondAttribute="bottom" constant="4" id="1dA-vl-P8P"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="centerX" secondItem="fdS-zb-K9I" secondAttribute="centerX" id="66w-7r-2i8"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="bottom" secondItem="UfK-na-vOU" secondAttribute="bottom" constant="-4" id="753-1g-2UH"/>
<constraint firstItem="5fe-rt-zFa" firstAttribute="leading" secondItem="qp1-nX-o4i" secondAttribute="leading" constant="20" symbolic="YES" id="B5U-63-4Dk"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="top" secondItem="UfK-na-vOU" secondAttribute="top" constant="4" id="DSx-ER-FLa"/>
<constraint firstItem="UfK-na-vOU" firstAttribute="top" secondItem="5fe-rt-zFa" secondAttribute="bottom" constant="8" symbolic="YES" id="JSZ-G0-mRm"/>
<constraint firstItem="UfK-na-vOU" firstAttribute="leading" secondItem="qp1-nX-o4i" secondAttribute="leading" id="MiQ-8c-N3e"/>
<constraint firstAttribute="trailing" secondItem="5fe-rt-zFa" secondAttribute="trailing" constant="20" symbolic="YES" id="TZY-ev-UUs"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="leading" secondItem="UfK-na-vOU" secondAttribute="leading" constant="10" id="XRN-Nd-Dqu"/>
<constraint firstItem="5fe-rt-zFa" firstAttribute="top" secondItem="qp1-nX-o4i" secondAttribute="top" id="caW-jx-6Ui"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="top" secondItem="UfK-na-vOU" secondAttribute="top" constant="4" id="d5T-JR-5rm"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="centerY" secondItem="fdS-zb-K9I" secondAttribute="bottom" id="dnr-bx-I4g"/>
<constraint firstAttribute="bottom" secondItem="UfK-na-vOU" secondAttribute="bottom" id="iN7-BO-Qwf"/>
<constraint firstAttribute="trailing" secondItem="UfK-na-vOU" secondAttribute="trailing" id="k3M-Oh-kM1"/>
<constraint firstItem="z3Z-AB-fG2" firstAttribute="trailing" secondItem="UfK-na-vOU" secondAttribute="trailing" constant="-10" id="nEd-y0-Fzk"/>
<constraint firstItem="UfK-na-vOU" firstAttribute="trailing" secondItem="z3Z-AB-fG2" secondAttribute="trailing" constant="10" id="nEd-y0-Fzk"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
@ -1093,7 +1093,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits"/>
<textInputTraits key="textInputTraits" keyboardAppearance="alert"/>
<connections>
<outlet property="delegate" destination="W2g-yv-V3V" id="YKp-IE-zEQ"/>
</connections>
@ -1229,7 +1229,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits"/>
<textInputTraits key="textInputTraits" keyboardAppearance="alert"/>
<connections>
<outlet property="delegate" destination="302-fI-maQ" id="vji-9t-frp"/>
</connections>
@ -2525,11 +2525,12 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="196" translatesAutoresizingMaskIntoConstraints="NO" id="0Qe-Pv-mvu">
<rect key="frame" x="24" y="175" width="196" height="34"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="196" translatesAutoresizingMaskIntoConstraints="NO" id="0Qe-Pv-mvu">
<rect key="frame" x="24" y="175" width="196" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<string key="text">Password counter:
Tap it to make a new password</string>
Tap it to make a new password
Hold it to reset the counter</string>
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>