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:
parent
d34ec96b94
commit
9899104891
@ -107,6 +107,15 @@
|
|||||||
DA5BFA5B147E415C00F98B1E /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */; };
|
DA5BFA5B147E415C00F98B1E /* MPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA5A147E415C00F98B1E /* MPAppDelegate.m */; };
|
||||||
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */; };
|
DA5BFA64147E415C00F98B1E /* MasterPassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* MasterPassword.xcdatamodeld */; };
|
||||||
DA5BFA67147E415C00F98B1E /* MPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* MPMainViewController.m */; };
|
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 */; };
|
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
|
||||||
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.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 */; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
DA6556F814D730B700841C99 /* guide_page_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guide_page_1.png; sourceTree = "<group>"; };
|
||||||
@ -2304,6 +2322,7 @@
|
|||||||
DA5BFA51147E415C00F98B1E /* Supporting Files */ = {
|
DA5BFA51147E415C00F98B1E /* Supporting Files */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DA5BFCBC1502CDF5005BFE16 /* Fonts */,
|
||||||
DA566D3114F8EB0700A6EB2E /* Background */,
|
DA566D3114F8EB0700A6EB2E /* Background */,
|
||||||
DA566D1E14F8EAF200A6EB2E /* Lock */,
|
DA566D1E14F8EAF200A6EB2E /* Lock */,
|
||||||
DA8E8E4514DD7C1D0044257E /* logo-bare.png */,
|
DA8E8E4514DD7C1D0044257E /* logo-bare.png */,
|
||||||
@ -2332,6 +2351,23 @@
|
|||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
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 */ = {
|
DA6556F714D730B700841C99 /* Guide */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -3591,6 +3627,15 @@
|
|||||||
DA67305314F98B6F004A189C /* icon_wrench.png in Resources */,
|
DA67305314F98B6F004A189C /* icon_wrench.png in Resources */,
|
||||||
DA67305414F98B6F004A189C /* icon_wrench@2x.png in Resources */,
|
DA67305414F98B6F004A189C /* icon_wrench@2x.png in Resources */,
|
||||||
DADC288814FDAC0C00047FEB /* Pearl.strings 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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction>
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForRunning = "YES">
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
|
BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
|
||||||
@ -15,11 +21,23 @@
|
|||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
</BuildActionEntries>
|
</BuildActionEntries>
|
||||||
</BuildAction>
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
buildConfiguration = "Production">
|
buildConfiguration = "Production"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable>
|
<BuildableProductRunnable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
@ -29,5 +47,21 @@
|
|||||||
ReferencedContainer = "container:MasterPassword.xcodeproj">
|
ReferencedContainer = "container:MasterPassword.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
</Scheme>
|
</Scheme>
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction>
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForRunning = "YES">
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
|
BlueprintIdentifier = "DA5BFA43147E415C00F98B1E"
|
||||||
@ -15,11 +21,23 @@
|
|||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
</BuildActionEntries>
|
</BuildActionEntries>
|
||||||
</BuildAction>
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
buildConfiguration = "Debug">
|
buildConfiguration = "Debug"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable>
|
<BuildableProductRunnable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
@ -29,5 +47,21 @@
|
|||||||
ReferencedContainer = "container:MasterPassword.xcodeproj">
|
ReferencedContainer = "container:MasterPassword.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
</Scheme>
|
</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.
@ -94,6 +94,8 @@
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ui_background"]];
|
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.
|
// Put the search tip on the window so it's above the nav bar.
|
||||||
if (![self.searchTipContainer.superview isEqual:self.navigationController.navigationBar.superview]) {
|
if (![self.searchTipContainer.superview isEqual:self.navigationController.navigationBar.superview]) {
|
||||||
@ -367,124 +369,123 @@
|
|||||||
case 4:
|
case 4:
|
||||||
[TestFlight openFeedbackView];
|
[TestFlight openFeedbackView];
|
||||||
break;
|
break;
|
||||||
case 5: {
|
case 5:
|
||||||
#else
|
#else
|
||||||
case 4: {
|
case 4:
|
||||||
#endif
|
#endif
|
||||||
[[MPAppDelegate get] signOut];
|
[[MPAppDelegate get] signOut];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef PRODUCTION
|
|
||||||
[TestFlight passCheckpoint:MPTestFlightCheckpointAction];
|
|
||||||
#endif
|
|
||||||
} cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
|
|
||||||
otherTitles:
|
|
||||||
[self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
|
|
||||||
#ifndef PRODUCTION
|
|
||||||
@"Feedback",
|
|
||||||
#endif
|
|
||||||
@"Sign Out",
|
|
||||||
nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (MPElementType)selectedType {
|
|
||||||
|
|
||||||
return self.activeElement.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;
|
|
||||||
|
|
||||||
[[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
|
||||||
self.activeElement = newElement;
|
|
||||||
}];
|
|
||||||
|
|
||||||
self.activeElement.type = type;
|
|
||||||
|
|
||||||
#ifndef PRODUCTION
|
#ifndef PRODUCTION
|
||||||
[TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
|
[TestFlight passCheckpoint:MPTestFlightCheckpointAction];
|
||||||
#endif
|
#endif
|
||||||
|
} cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:nil
|
||||||
if (type & MPElementTypeClassStored && ![self.activeElement.description length])
|
otherTitles:
|
||||||
[self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon];
|
[self isHelpVisible]? @"Hide Help": @"Show Help", @"FAQ", @"Tutorial", @"Settings",
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)didSelectElement:(MPElementEntity *)element {
|
|
||||||
|
|
||||||
if (element) {
|
|
||||||
self.activeElement = element;
|
|
||||||
[self.activeElement use];
|
|
||||||
|
|
||||||
[self.searchDisplayController setActive:NO animated:YES];
|
|
||||||
self.searchDisplayController.searchBar.text = self.activeElement.name;
|
|
||||||
|
|
||||||
#ifndef PRODUCTION
|
#ifndef PRODUCTION
|
||||||
[TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
|
@"Feedback",
|
||||||
#endif
|
#endif
|
||||||
}
|
@"Sign Out",
|
||||||
|
nil];
|
||||||
[self updateAnimated:YES];
|
}
|
||||||
}
|
|
||||||
|
- (MPElementType)selectedType {
|
||||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
|
||||||
|
return self.activeElement.type;
|
||||||
if (textField == self.contentField)
|
}
|
||||||
[self.contentField resignFirstResponder];
|
|
||||||
|
- (void)didSelectType:(MPElementType)type {
|
||||||
return YES;
|
|
||||||
}
|
[self updateElement:^{
|
||||||
|
// Update password type.
|
||||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
|
if (ClassFromMPElementType(type) != ClassFromMPElementType(self.activeElement.type))
|
||||||
|
// Type requires a different class of element. Recreate the element.
|
||||||
if (textField == self.contentField) {
|
[[MPAppDelegate managedObjectContext] performBlockAndWait:^{
|
||||||
self.contentField.enabled = NO;
|
MPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
|
||||||
if (![self.activeElement isKindOfClass:[MPElementStoredEntity class]])
|
inManagedObjectContext:[MPAppDelegate managedObjectContext]];
|
||||||
// Not of a type whose content can be edited.
|
newElement.name = self.activeElement.name;
|
||||||
return;
|
newElement.mpHashHex = self.activeElement.mpHashHex;
|
||||||
|
newElement.uses = self.activeElement.uses;
|
||||||
if ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
|
newElement.lastUsed = self.activeElement.lastUsed;
|
||||||
// Content hasn't changed.
|
|
||||||
return;
|
[[MPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
||||||
|
self.activeElement = newElement;
|
||||||
[self updateElement:^{
|
}];
|
||||||
((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
|
|
||||||
}];
|
self.activeElement.type = type;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
|
||||||
navigationType:(UIWebViewNavigationType)navigationType {
|
|
||||||
|
|
||||||
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
|
|
||||||
#ifndef PRODUCTION
|
#ifndef PRODUCTION
|
||||||
[TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
|
[TestFlight passCheckpoint:[NSString stringWithFormat:MPTestFlightCheckpointSelectType, NSStringFromMPElementType(type)]];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[[UIApplication sharedApplication] openURL:[request URL]];
|
if (type & MPElementTypeClassStored && ![self.activeElement.description length])
|
||||||
return NO;
|
[self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon];
|
||||||
}
|
}];
|
||||||
|
}
|
||||||
return YES;
|
|
||||||
}
|
- (void)didSelectElement:(MPElementEntity *)element {
|
||||||
|
|
||||||
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
|
if (element) {
|
||||||
|
self.activeElement = element;
|
||||||
while ([self.navigationController.viewControllers containsObject:sender])
|
[self.activeElement use];
|
||||||
[self.navigationController popViewControllerAnimated:YES];
|
|
||||||
}
|
[self.searchDisplayController setActive:NO animated:YES];
|
||||||
|
self.searchDisplayController.searchBar.text = self.activeElement.name;
|
||||||
@end
|
|
||||||
|
#ifndef PRODUCTION
|
||||||
|
[TestFlight passCheckpoint:MPTestFlightCheckpointSelectElement];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
[self updateAnimated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
||||||
|
|
||||||
|
if (textField == self.contentField)
|
||||||
|
[self.contentField resignFirstResponder];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (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 ([((MPElementStoredEntity *) self.activeElement).content isEqual:self.contentField.text])
|
||||||
|
// Content hasn't changed.
|
||||||
|
return;
|
||||||
|
|
||||||
|
[self updateElement:^{
|
||||||
|
((MPElementStoredEntity *) self.activeElement).content = self.contentField.text;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
||||||
|
navigationType:(UIWebViewNavigationType)navigationType {
|
||||||
|
|
||||||
|
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
|
||||||
|
#ifndef PRODUCTION
|
||||||
|
[TestFlight passCheckpoint:MPTestFlightCheckpointExternalLink];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[[UIApplication sharedApplication] openURL:[request URL]];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender {
|
||||||
|
|
||||||
|
while ([self.navigationController.viewControllers containsObject:sender])
|
||||||
|
[self.navigationController popViewControllerAnimated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
@ -811,64 +811,6 @@ L4m3P4sSw0rD</string>
|
|||||||
<image name="ui_spinner.png" width="75" height="75"/>
|
<image name="ui_spinner.png" width="75" height="75"/>
|
||||||
<image name="ui_textfield.png" width="158" height="34"/>
|
<image name="ui_textfield.png" width="158" height="34"/>
|
||||||
</resources>
|
</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">
|
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||||
<nil key="statusBar"/>
|
<nil key="statusBar"/>
|
||||||
<simulatedOrientationMetrics key="orientation"/>
|
<simulatedOrientationMetrics key="orientation"/>
|
||||||
|
@ -46,6 +46,18 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>© 2011-2012, Lyndir</string>
|
<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>
|
<key>UIMainStoryboardFile</key>
|
||||||
<string>MainStoryboard_iPhone</string>
|
<string>MainStoryboard_iPhone</string>
|
||||||
<key>UIMainStoryboardFile~ipad</key>
|
<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.
Loading…
Reference in New Issue
Block a user