Better password font.
[FIXED]     MP-10: The font used to show didn't make a clear enough
            distinction between certain different characters.
			
			
This commit is contained in:
		@@ -107,6 +107,15 @@
 | 
			
		||||
		DA5BFA5B147E415C00F98B1E /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */; };
 | 
			
		||||
		DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */; };
 | 
			
		||||
		DA5BFA67147E415C00F98B1E /* MPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* MPMainViewController.m */; };
 | 
			
		||||
		DA5BFCD01502CDF5005BFE16 /* Exo-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCBE1502CDF5005BFE16 /* Exo-Black.otf */; };
 | 
			
		||||
		DA5BFCD21502CDF5005BFE16 /* Exo-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCC01502CDF5005BFE16 /* Exo-Bold.otf */; };
 | 
			
		||||
		DA5BFCD41502CDF5005BFE16 /* Exo-DemiBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCC21502CDF5005BFE16 /* Exo-DemiBold.otf */; };
 | 
			
		||||
		DA5BFCD61502CDF5005BFE16 /* Exo-ExtraBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCC41502CDF5005BFE16 /* Exo-ExtraBold.otf */; };
 | 
			
		||||
		DA5BFCD81502CDF5005BFE16 /* Exo-ExtraLight.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCC61502CDF5005BFE16 /* Exo-ExtraLight.otf */; };
 | 
			
		||||
		DA5BFCDA1502CDF5005BFE16 /* Exo-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCC81502CDF5005BFE16 /* Exo-Light.otf */; };
 | 
			
		||||
		DA5BFCDC1502CDF5005BFE16 /* Exo-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCCA1502CDF5005BFE16 /* Exo-Medium.otf */; };
 | 
			
		||||
		DA5BFCDE1502CDF5005BFE16 /* Exo-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCCC1502CDF5005BFE16 /* Exo-Regular.otf */; };
 | 
			
		||||
		DA5BFCE01502CDF5005BFE16 /* Exo-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFCCE1502CDF5005BFE16 /* Exo-Thin.otf */; };
 | 
			
		||||
		DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
 | 
			
		||||
		DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
 | 
			
		||||
		DA6556FE14D730B700841C99 /* guide_page_1.png in Resources */ = {isa = PBXBuildFile; fileRef = DA6556F814D730B700841C99 /* guide_page_1.png */; };
 | 
			
		||||
@@ -935,6 +944,15 @@
 | 
			
		||||
		DA5BFA63147E415C00F98B1E /* MasterPassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MasterPassword.xcdatamodel; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFA65147E415C00F98B1E /* MPMainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPMainViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFA66147E415C00F98B1E /* MPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPMainViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCBE1502CDF5005BFE16 /* Exo-Black.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Black.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCC01502CDF5005BFE16 /* Exo-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Bold.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCC21502CDF5005BFE16 /* Exo-DemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-DemiBold.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCC41502CDF5005BFE16 /* Exo-ExtraBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-ExtraBold.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCC61502CDF5005BFE16 /* Exo-ExtraLight.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-ExtraLight.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCC81502CDF5005BFE16 /* Exo-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Light.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCCA1502CDF5005BFE16 /* Exo-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Medium.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCCC1502CDF5005BFE16 /* Exo-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Regular.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5BFCCE1502CDF5005BFE16 /* Exo-Thin.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Exo-Thin.otf"; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA6556F814D730B700841C99 /* guide_page_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_1.png; sourceTree = "<group>"; };
 | 
			
		||||
@@ -2304,6 +2322,7 @@
 | 
			
		||||
		DA5BFA51147E415C00F98B1E /* Supporting Files */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA5BFCBC1502CDF5005BFE16 /* Fonts */,
 | 
			
		||||
				DA566D3114F8EB0700A6EB2E /* Background */,
 | 
			
		||||
				DA566D1E14F8EAF200A6EB2E /* Lock */,
 | 
			
		||||
				DA8E8E4514DD7C1D0044257E /* logo-bare.png */,
 | 
			
		||||
@@ -2332,6 +2351,23 @@
 | 
			
		||||
			name = "Supporting Files";
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA5BFCBC1502CDF5005BFE16 /* Fonts */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA5BFCBE1502CDF5005BFE16 /* Exo-Black.otf */,
 | 
			
		||||
				DA5BFCC41502CDF5005BFE16 /* Exo-ExtraBold.otf */,
 | 
			
		||||
				DA5BFCC01502CDF5005BFE16 /* Exo-Bold.otf */,
 | 
			
		||||
				DA5BFCC21502CDF5005BFE16 /* Exo-DemiBold.otf */,
 | 
			
		||||
				DA5BFCCA1502CDF5005BFE16 /* Exo-Medium.otf */,
 | 
			
		||||
				DA5BFCCC1502CDF5005BFE16 /* Exo-Regular.otf */,
 | 
			
		||||
				DA5BFCC81502CDF5005BFE16 /* Exo-Light.otf */,
 | 
			
		||||
				DA5BFCC61502CDF5005BFE16 /* Exo-ExtraLight.otf */,
 | 
			
		||||
				DA5BFCCE1502CDF5005BFE16 /* Exo-Thin.otf */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Fonts;
 | 
			
		||||
			path = Resources/Fonts;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		DA6556F714D730B700841C99 /* Guide */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
@@ -3591,6 +3627,15 @@
 | 
			
		||||
				DA67305314F98B6F004A189C /* icon_wrench.png in Resources */,
 | 
			
		||||
				DA67305414F98B6F004A189C /* icon_wrench@2x.png in Resources */,
 | 
			
		||||
				DADC288814FDAC0C00047FEB /* Pearl.strings in Resources */,
 | 
			
		||||
				DA5BFCD01502CDF5005BFE16 /* Exo-Black.otf in Resources */,
 | 
			
		||||
				DA5BFCD21502CDF5005BFE16 /* Exo-Bold.otf in Resources */,
 | 
			
		||||
				DA5BFCD41502CDF5005BFE16 /* Exo-DemiBold.otf in Resources */,
 | 
			
		||||
				DA5BFCD61502CDF5005BFE16 /* Exo-ExtraBold.otf in Resources */,
 | 
			
		||||
				DA5BFCD81502CDF5005BFE16 /* Exo-ExtraLight.otf in Resources */,
 | 
			
		||||
				DA5BFCDA1502CDF5005BFE16 /* Exo-Light.otf in Resources */,
 | 
			
		||||
				DA5BFCDC1502CDF5005BFE16 /* Exo-Medium.otf in Resources */,
 | 
			
		||||
				DA5BFCDE1502CDF5005BFE16 /* Exo-Regular.otf in Resources */,
 | 
			
		||||
				DA5BFCE01502CDF5005BFE16 /* Exo-Thin.otf in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<Scheme
 | 
			
		||||
   version = "1.3">
 | 
			
		||||
   <BuildAction>
 | 
			
		||||
   <BuildAction
 | 
			
		||||
      parallelizeBuildables = "YES"
 | 
			
		||||
      buildImplicitDependencies = "YES">
 | 
			
		||||
      <BuildActionEntries>
 | 
			
		||||
         <BuildActionEntry
 | 
			
		||||
            buildForRunning = "YES">
 | 
			
		||||
            buildForTesting = "YES"
 | 
			
		||||
            buildForRunning = "YES"
 | 
			
		||||
            buildForProfiling = "YES"
 | 
			
		||||
            buildForArchiving = "YES"
 | 
			
		||||
            buildForAnalyzing = "YES">
 | 
			
		||||
            <BuildableReference
 | 
			
		||||
               BuildableIdentifier = "primary"
 | 
			
		||||
               BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
 | 
			
		||||
@@ -15,11 +21,23 @@
 | 
			
		||||
         </BuildActionEntry>
 | 
			
		||||
      </BuildActionEntries>
 | 
			
		||||
   </BuildAction>
 | 
			
		||||
   <TestAction
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
      <Testables>
 | 
			
		||||
      </Testables>
 | 
			
		||||
   </TestAction>
 | 
			
		||||
   <LaunchAction
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      launchStyle = "0"
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      buildConfiguration = "Production">
 | 
			
		||||
      buildConfiguration = "Production"
 | 
			
		||||
      ignoresPersistentStateOnLaunch = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES"
 | 
			
		||||
      allowLocationSimulation = "YES">
 | 
			
		||||
      <BuildableProductRunnable>
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
@@ -29,5 +47,21 @@
 | 
			
		||||
            ReferencedContainer = "container:MasterPassword.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </LaunchAction>
 | 
			
		||||
   <ProfileAction
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      savedToolIdentifier = ""
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      debugDocumentVersioning = "YES">
 | 
			
		||||
   </ProfileAction>
 | 
			
		||||
   <AnalyzeAction
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
   </AnalyzeAction>
 | 
			
		||||
   <ArchiveAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      revealArchiveInOrganizer = "YES">
 | 
			
		||||
   </ArchiveAction>
 | 
			
		||||
</Scheme>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<Scheme
 | 
			
		||||
   version = "1.3">
 | 
			
		||||
   <BuildAction>
 | 
			
		||||
   <BuildAction
 | 
			
		||||
      parallelizeBuildables = "YES"
 | 
			
		||||
      buildImplicitDependencies = "YES">
 | 
			
		||||
      <BuildActionEntries>
 | 
			
		||||
         <BuildActionEntry
 | 
			
		||||
            buildForRunning = "YES">
 | 
			
		||||
            buildForTesting = "YES"
 | 
			
		||||
            buildForRunning = "YES"
 | 
			
		||||
            buildForProfiling = "YES"
 | 
			
		||||
            buildForArchiving = "YES"
 | 
			
		||||
            buildForAnalyzing = "YES">
 | 
			
		||||
            <BuildableReference
 | 
			
		||||
               BuildableIdentifier = "primary"
 | 
			
		||||
               BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
 | 
			
		||||
@@ -15,11 +21,23 @@
 | 
			
		||||
         </BuildActionEntry>
 | 
			
		||||
      </BuildActionEntries>
 | 
			
		||||
   </BuildAction>
 | 
			
		||||
   <TestAction
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
      <Testables>
 | 
			
		||||
      </Testables>
 | 
			
		||||
   </TestAction>
 | 
			
		||||
   <LaunchAction
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      launchStyle = "0"
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
      buildConfiguration = "Debug"
 | 
			
		||||
      ignoresPersistentStateOnLaunch = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES"
 | 
			
		||||
      allowLocationSimulation = "YES">
 | 
			
		||||
      <BuildableProductRunnable>
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
@@ -29,5 +47,21 @@
 | 
			
		||||
            ReferencedContainer = "container:MasterPassword.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </LaunchAction>
 | 
			
		||||
   <ProfileAction
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      savedToolIdentifier = ""
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      debugDocumentVersioning = "YES">
 | 
			
		||||
   </ProfileAction>
 | 
			
		||||
   <AnalyzeAction
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
   </AnalyzeAction>
 | 
			
		||||
   <ArchiveAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      revealArchiveInOrganizer = "YES">
 | 
			
		||||
   </ArchiveAction>
 | 
			
		||||
</Scheme>
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -95,6 +95,8 @@
 | 
			
		||||
    
 | 
			
		||||
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ui_background"]];
 | 
			
		||||
 | 
			
		||||
    self.contentField.font = [UIFont fontWithName:@"Exo-Black" size:self.contentField.font.pointSize];
 | 
			
		||||
    
 | 
			
		||||
    // Put the search tip on the window so it's above the nav bar.
 | 
			
		||||
    if (![self.searchTipContainer.superview isEqual:self.navigationController.navigationBar.superview]) {
 | 
			
		||||
        CGRect frameInWindow = [self.searchTipContainer.window convertRect:self.searchTipContainer.frame
 | 
			
		||||
@@ -367,124 +369,123 @@
 | 
			
		||||
                         case 4:
 | 
			
		||||
                             [TestFlight openFeedbackView];
 | 
			
		||||
                             break;
 | 
			
		||||
                         case 5: {
 | 
			
		||||
                         case 5:
 | 
			
		||||
#else
 | 
			
		||||
                         case 4: {
 | 
			
		||||
                         case 4:
 | 
			
		||||
#endif
 | 
			
		||||
                             [[MPAppDelegate get] signOut];
 | 
			
		||||
                             break;
 | 
			
		||||
                         }
 | 
			
		||||
                         }
 | 
			
		||||
                     }
 | 
			
		||||
                     
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
                             [TestFlight passCheckpoint:MPTestFlightCheckpointAction];
 | 
			
		||||
                     [TestFlight passCheckpoint:MPTestFlightCheckpointAction];
 | 
			
		||||
#endif
 | 
			
		||||
                     } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
 | 
			
		||||
                 otherTitles:
 | 
			
		||||
                     [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
 | 
			
		||||
                 } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
 | 
			
		||||
                       otherTitles:
 | 
			
		||||
     [self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
                     @"Feedback",
 | 
			
		||||
     @"Feedback",
 | 
			
		||||
#endif
 | 
			
		||||
                     @"Sign Out",
 | 
			
		||||
                     nil]; 
 | 
			
		||||
                 }
 | 
			
		||||
     @"Sign Out",
 | 
			
		||||
     nil]; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (MPElementType)selectedType {
 | 
			
		||||
- (MPElementType)selectedType {
 | 
			
		||||
    
 | 
			
		||||
         return self.activeElement.type;
 | 
			
		||||
     }
 | 
			
		||||
    return self.activeElement.type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (void)didSelectType:(MPElementType)type {
 | 
			
		||||
- (void)didSelectType:(MPElementType)type {
 | 
			
		||||
    
 | 
			
		||||
         [self updateElement:^{
 | 
			
		||||
             // Update password type.
 | 
			
		||||
             if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
 | 
			
		||||
                 // Type requires a different class of element.  Recreate the element.
 | 
			
		||||
                 [[MPAppDelegate managedObjectContext] performBlockAndWait:^{
 | 
			
		||||
                     MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
 | 
			
		||||
                                                                                 inManagedObjectContext:[MPAppDelegate managedObjectContext]];
 | 
			
		||||
                     newElement.name = self.activeElement.name;
 | 
			
		||||
                     newElement.mpHashHex = self.activeElement.mpHashHex;
 | 
			
		||||
                     newElement.uses = self.activeElement.uses;
 | 
			
		||||
                     newElement.lastUsed = self.activeElement.lastUsed;
 | 
			
		||||
    [self updateElement:^{
 | 
			
		||||
        // Update password type.
 | 
			
		||||
        if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
 | 
			
		||||
            // Type requires a different class of element.  Recreate the element.
 | 
			
		||||
            [[MPAppDelegate managedObjectContext] performBlockAndWait:^{
 | 
			
		||||
                MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
 | 
			
		||||
                                                                            inManagedObjectContext:[MPAppDelegate managedObjectContext]];
 | 
			
		||||
                newElement.name = self.activeElement.name;
 | 
			
		||||
                newElement.mpHashHex = self.activeElement.mpHashHex;
 | 
			
		||||
                newElement.uses = self.activeElement.uses;
 | 
			
		||||
                newElement.lastUsed = self.activeElement.lastUsed;
 | 
			
		||||
                
 | 
			
		||||
                     [[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
 | 
			
		||||
                     self.activeElement = newElement;
 | 
			
		||||
                 }];
 | 
			
		||||
                [[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
 | 
			
		||||
                self.activeElement = newElement;
 | 
			
		||||
            }];
 | 
			
		||||
        
 | 
			
		||||
             self.activeElement.type = type;
 | 
			
		||||
        self.activeElement.type = type;
 | 
			
		||||
        
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
             [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
 | 
			
		||||
        [TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
 | 
			
		||||
#endif
 | 
			
		||||
        
 | 
			
		||||
             if (type & MPElementTypeClassStored && ![self.activeElement.description length])
 | 
			
		||||
                 [self showContentTip:@"Tap        to set a password." withIcon:self.contentTipEditIcon];
 | 
			
		||||
         }];
 | 
			
		||||
     }
 | 
			
		||||
        if (type & MPElementTypeClassStored && ![self.activeElement.description length])
 | 
			
		||||
            [self showContentTip:@"Tap        to set a password." withIcon:self.contentTipEditIcon];
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (void)didSelectElement:(MPElementEntity *)element {
 | 
			
		||||
- (void)didSelectElement:(MPElementEntity *)element {
 | 
			
		||||
    
 | 
			
		||||
         if (element) {
 | 
			
		||||
             self.activeElement = element;
 | 
			
		||||
             [self.activeElement use];
 | 
			
		||||
    if (element) {
 | 
			
		||||
        self.activeElement = element;
 | 
			
		||||
        [self.activeElement use];
 | 
			
		||||
        
 | 
			
		||||
             [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
             self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
        [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
        self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
        
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
             [TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
 | 
			
		||||
        [TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
 | 
			
		||||
#endif
 | 
			
		||||
         }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
         [self updateAnimated:YES];
 | 
			
		||||
     }
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (BOOL)textFieldShouldReturn:(UITextField *)textField {
 | 
			
		||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
         if (textField == self.contentField)
 | 
			
		||||
             [self.contentField resignFirstResponder];
 | 
			
		||||
    if (textField == self.contentField)
 | 
			
		||||
        [self.contentField resignFirstResponder];
 | 
			
		||||
    
 | 
			
		||||
         return YES;
 | 
			
		||||
     }
 | 
			
		||||
    return YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (void)textFieldDidEndEditing:(UITextField *)textField {
 | 
			
		||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
         if (textField == self.contentField) {
 | 
			
		||||
             self.contentField.enabled = NO;
 | 
			
		||||
             if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
 | 
			
		||||
                 // Not of a type whose content can be edited.
 | 
			
		||||
                 return;
 | 
			
		||||
    if (textField == self.contentField) {
 | 
			
		||||
        self.contentField.enabled = NO;
 | 
			
		||||
        if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
 | 
			
		||||
            // Not of a type whose content can be edited.
 | 
			
		||||
            return;
 | 
			
		||||
        
 | 
			
		||||
             if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
 | 
			
		||||
                 // Content hasn't changed.
 | 
			
		||||
                 return;
 | 
			
		||||
        if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
 | 
			
		||||
            // Content hasn't changed.
 | 
			
		||||
            return;
 | 
			
		||||
        
 | 
			
		||||
             [self updateElement:^{
 | 
			
		||||
                 ((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
 | 
			
		||||
             }];
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
        [self updateElement:^{
 | 
			
		||||
            ((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
 | 
			
		||||
        }];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 | 
			
		||||
                    navigationType:(UIWebViewNavigationType)navigationType {
 | 
			
		||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 | 
			
		||||
 navigationType:(UIWebViewNavigationType)navigationType {
 | 
			
		||||
    
 | 
			
		||||
                        if (navigationType == UIWebViewNavigationTypeLinkClicked) {
 | 
			
		||||
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
 | 
			
		||||
#ifndef PRODUCTION
 | 
			
		||||
                            [TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
 | 
			
		||||
        [TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
 | 
			
		||||
#endif
 | 
			
		||||
        
 | 
			
		||||
                            [[UIApplication sharedApplication] openURL:[request URL]];
 | 
			
		||||
                            return NO;
 | 
			
		||||
                        }
 | 
			
		||||
        [[UIApplication sharedApplication] openURL:[request URL]];
 | 
			
		||||
        return NO;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
                        return YES;
 | 
			
		||||
                    }
 | 
			
		||||
    return YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     - (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
 | 
			
		||||
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
 | 
			
		||||
    
 | 
			
		||||
         while ([self.navigationController.viewControllers containsObject:sender])
 | 
			
		||||
             [self.navigationController popViewControllerAnimated:YES];
 | 
			
		||||
     }
 | 
			
		||||
    while ([self.navigationController.viewControllers containsObject:sender])
 | 
			
		||||
        [self.navigationController popViewControllerAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
     @end
 | 
			
		||||
@end
 | 
			
		||||
 
 | 
			
		||||
@@ -811,64 +811,6 @@ L4m3P4sSw0rD</string>
 | 
			
		||||
        <image name="ui_spinner.png" width="75" height="75"/>
 | 
			
		||||
        <image name="ui_textfield.png" width="158" height="34"/>
 | 
			
		||||
    </resources>
 | 
			
		||||
    <classes>
 | 
			
		||||
        <class className="MPGuideViewController" superclassName="UIViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/MPGuideViewController.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="action" name="close"/>
 | 
			
		||||
                <relationship kind="outlet" name="scrollView" candidateClass="UIScrollView"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="MPMainViewController" superclassName="UIViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/MPMainViewController.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="action" name="action:" candidateClass="UIBarButtonItem"/>
 | 
			
		||||
                <relationship kind="action" name="closeAlert"/>
 | 
			
		||||
                <relationship kind="action" name="copyContent"/>
 | 
			
		||||
                <relationship kind="action" name="editPassword"/>
 | 
			
		||||
                <relationship kind="action" name="incrementPasswordCounter"/>
 | 
			
		||||
                <relationship kind="outlet" name="alertBody" candidateClass="UITextView"/>
 | 
			
		||||
                <relationship kind="outlet" name="alertContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="alertTitle" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentField" candidateClass="UITextField"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentTipBody" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentTipContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentTipEditIcon" candidateClass="UIImageView"/>
 | 
			
		||||
                <relationship kind="outlet" name="helpContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="helpView" candidateClass="UIWebView"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordCounter" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordEdit" candidateClass="UIButton"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordIncrementer" candidateClass="UIButton"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchResultsController" candidateClass="MPSearchDelegate"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchTipContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="siteName" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="typeButton" candidateClass="UIButton"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="MPSearchDelegate" superclassName="NSObject">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/MPSearchDelegate.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="outlet" name="delegate"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchDisplayController" candidateClass="UISearchDisplayController"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchTipContainer" candidateClass="UIView"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="MPTypeViewController" superclassName="UITableViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/MPTypeViewController.h"/>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="MPUnlockViewController" superclassName="UIViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/MPUnlockViewController.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="action" name="changeMP"/>
 | 
			
		||||
                <relationship kind="outlet" name="changeMPView" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="field" candidateClass="UITextField"/>
 | 
			
		||||
                <relationship kind="outlet" name="lock" candidateClass="UIImageView"/>
 | 
			
		||||
                <relationship kind="outlet" name="messageLabel" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="spinner" candidateClass="UIImageView"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
    </classes>
 | 
			
		||||
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
 | 
			
		||||
        <nil key="statusBar"/>
 | 
			
		||||
        <simulatedOrientationMetrics key="orientation"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,18 @@
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>NSHumanReadableCopyright</key>
 | 
			
		||||
	<string>© 2011-2012, Lyndir</string>
 | 
			
		||||
	<key>UIAppFonts</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>Exo-Black.otf</string>
 | 
			
		||||
		<string>Exo-ExtraBold.otf</string>
 | 
			
		||||
		<string>Exo-Bold.otf</string>
 | 
			
		||||
		<string>Exo-DemiBold.otf</string>
 | 
			
		||||
		<string>Exo-Medium.otf</string>
 | 
			
		||||
		<string>Exo-Regular.otf</string>
 | 
			
		||||
		<string>Exo-Light.otf</string>
 | 
			
		||||
		<string>Exo-ExtraLight.otf</string>
 | 
			
		||||
		<string>Exo-Thin.otf</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>UIMainStoryboardFile</key>
 | 
			
		||||
	<string>MainStoryboard_iPhone</string>
 | 
			
		||||
	<key>UIMainStoryboardFile~ipad</key>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Black.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Black.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Bold.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Bold.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-DemiBold.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-DemiBold.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-ExtraBold.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-ExtraBold.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-ExtraLight.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-ExtraLight.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Light.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Light.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Medium.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Medium.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Regular.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Regular.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Thin.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MasterPassword/Resources/Fonts/Exo-Thin.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user