Make UI fancier & better documented.
2
External/Pearl
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 65e79b5650ad6ae6de16e6debc2b070d7b06eec1
|
Subproject commit e8ae6057f8753ed48cb964a106e4b7289ba4156c
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 46 KiB |
@ -13,14 +13,19 @@
|
|||||||
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
<rect key="frame" x="0.0" y="64" width="320" height="416"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<view key="tableFooterView" contentMode="scaleToFill" id="aNa-wb-cYK">
|
||||||
|
<rect key="frame" x="0.0" y="588" width="320" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
<sections>
|
<sections>
|
||||||
<tableViewSection id="gUv-FU-O36">
|
<tableViewSection id="gUv-FU-O36">
|
||||||
<cells>
|
<cells>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="NCB-rX-weq">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="204" id="NCB-rX-weq">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="144"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="204"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="203"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Generated" lineBreakMode="tailTruncation" minimumFontSize="10" id="azh-GA-KA1">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Generated" lineBreakMode="tailTruncation" minimumFontSize="10" id="azh-GA-KA1">
|
||||||
@ -29,34 +34,40 @@
|
|||||||
<fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
|
<fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="WXs-ZQ-JuJ">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_first.png" id="WXs-ZQ-JuJ">
|
||||||
<rect key="frame" x="10" y="100" width="300" height="44"/>
|
<rect key="frame" x="10" y="160" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Long" lineBreakMode="tailTruncation" minimumFontSize="10" id="QIm-RX-xY7">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Long Password" lineBreakMode="tailTruncation" minimumFontSize="10" id="QIm-RX-xY7">
|
||||||
<rect key="frame" x="20" y="100" width="280" height="24"/>
|
<rect key="frame" x="20" y="160" width="280" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 14 characters, contains symbols." lineBreakMode="tailTruncation" minimumFontSize="10" id="6iu-aM-lJA">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 14 characters, contains symbols." lineBreakMode="tailTruncation" minimumFontSize="10" id="6iu-aM-lJA">
|
||||||
<rect key="frame" x="20" y="124" width="280" height="20"/>
|
<rect key="frame" x="20" y="184" width="280" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="These types need only your master password. Nothing is stored, so nothing to loose or have stolen." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="E4a-XS-Qlz">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="E4a-XS-Qlz">
|
||||||
<rect key="frame" x="23" y="49" width="280" height="43"/>
|
<rect key="frame" x="23" y="49" width="280" height="112"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<string key="text">These types create a safe password for your site.
|
||||||
|
The passwords aren't saved anywhere. This is a major advantage: if you loose your device, your passwords cannot be stolen. You can use any other device to get all your passwords back, no need for restoring backups or any other pains.</string>
|
||||||
<fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
@ -64,25 +75,27 @@
|
|||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="re0-ZT-bnP">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="re0-ZT-bnP">
|
||||||
<rect key="frame" x="0.0" y="144" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="204" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="EWy-Eb-L5p">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_middle.png" id="EWy-Eb-L5p">
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Medium" lineBreakMode="tailTruncation" minimumFontSize="10" id="5NA-XX-th4">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Medium Password" lineBreakMode="tailTruncation" minimumFontSize="10" id="5NA-XX-th4">
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 8 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="MI2-JM-j4b">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 8 characters, contains symbols." lineBreakMode="tailTruncation" minimumFontSize="10" id="MI2-JM-j4b">
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
||||||
@ -95,23 +108,25 @@
|
|||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="4pb-c9-i2D">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="4pb-c9-i2D">
|
||||||
<rect key="frame" x="0.0" y="188" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="248" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="Jqw-h1-g2X">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_middle.png" id="Jqw-h1-g2X">
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Short" lineBreakMode="tailTruncation" minimumFontSize="10" id="iqW-mf-H1R">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Short Password" lineBreakMode="tailTruncation" minimumFontSize="10" id="iqW-mf-H1R">
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 4 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="Zi3-26-3iq">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 4 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="Zi3-26-3iq">
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
||||||
@ -126,23 +141,25 @@
|
|||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ywW-4w-Wej">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ywW-4w-Wej">
|
||||||
<rect key="frame" x="0.0" y="232" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="292" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="Son-EL-Drx">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_middle.png" id="Son-EL-Drx">
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Basic" lineBreakMode="tailTruncation" minimumFontSize="10" id="Pim-A8-aib">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Basic Password" lineBreakMode="tailTruncation" minimumFontSize="10" id="Pim-A8-aib">
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="8 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="CYQ-D8-vNS">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="8 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="CYQ-D8-vNS">
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
||||||
@ -157,16 +174,16 @@
|
|||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="5p5-OD-zpn">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="5p5-OD-zpn">
|
||||||
<rect key="frame" x="0.0" y="276" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="336" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="5nI-rL-CoO">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_last.png" id="5nI-rL-CoO">
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="PIN" lineBreakMode="tailTruncation" minimumFontSize="10" id="Yu2-5k-AwW">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="PIN" lineBreakMode="tailTruncation" minimumFontSize="10" id="Yu2-5k-AwW">
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
||||||
@ -174,6 +191,8 @@
|
|||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="4 numbers." lineBreakMode="tailTruncation" minimumFontSize="10" id="5Zm-AH-bAe">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="4 numbers." lineBreakMode="tailTruncation" minimumFontSize="10" id="5Zm-AH-bAe">
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
||||||
@ -191,43 +210,48 @@
|
|||||||
</tableViewSection>
|
</tableViewSection>
|
||||||
<tableViewSection id="Jqk-Jl-vVm">
|
<tableViewSection id="Jqk-Jl-vVm">
|
||||||
<cells>
|
<cells>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="OK2-fa-fDw">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="164" id="OK2-fa-fDw">
|
||||||
<rect key="frame" x="0.0" y="320" width="320" height="144"/>
|
<rect key="frame" x="0.0" y="380" width="320" height="164"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="163"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain" lineBreakMode="tailTruncation" minimumFontSize="10" id="146-3h-mdD">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="User-specified" lineBreakMode="tailTruncation" minimumFontSize="10" id="146-3h-mdD">
|
||||||
<rect key="frame" x="20" y="20" width="280" height="21"/>
|
<rect key="frame" x="20" y="20" width="280" height="21"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
|
<fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="These types store a user-specified password in your device's keychain." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="Bbk-lL-BeB">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="Bbk-lL-BeB">
|
||||||
<rect key="frame" x="20" y="49" width="280" height="43"/>
|
<rect key="frame" x="20" y="49" width="280" height="63"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<string key="text">If you need to specify a custom password for your site, use one of these types. The site's password will be encrypted using your master password.</string>
|
||||||
<fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="fxL-ee-UVP">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_first.png" id="fxL-ee-UVP">
|
||||||
<rect key="frame" x="10" y="100" width="300" height="44"/>
|
<rect key="frame" x="10" y="120" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Personal" lineBreakMode="tailTruncation" minimumFontSize="10" id="kzc-rQ-74F">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Personal" lineBreakMode="tailTruncation" minimumFontSize="10" id="kzc-rQ-74F">
|
||||||
<rect key="frame" x="20" y="100" width="280" height="24"/>
|
<rect key="frame" x="20" y="120" width="280" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain storage, AES-encrypted." lineBreakMode="tailTruncation" minimumFontSize="10" id="vNa-Yq-XIJ">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="AES-encrypted, backed up with iTunes/iCloud." lineBreakMode="tailTruncation" minimumFontSize="10" id="vNa-Yq-XIJ">
|
||||||
<rect key="frame" x="20" y="124" width="280" height="20"/>
|
<rect key="frame" x="20" y="144" width="280" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
@ -239,16 +263,16 @@
|
|||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ePk-a9-aNi">
|
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ePk-a9-aNi">
|
||||||
<rect key="frame" x="0.0" y="464" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="544" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="PUy-Qk-CeF">
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ui_list_last.png" id="PUy-Qk-CeF">
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
<rect key="contentStretch" x="0.10000000000000001" y="0.20000000000000001" width="0.79999999999999982" height="0.59999999999999964"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Device Private" lineBreakMode="tailTruncation" minimumFontSize="10" id="2kB-0P-FeR">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Device Private" lineBreakMode="tailTruncation" minimumFontSize="10" id="2kB-0P-FeR">
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
||||||
@ -256,90 +280,10 @@
|
|||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain storage, AES-encrypted, not backed up." lineBreakMode="tailTruncation" minimumFontSize="10" id="6S8-9Y-pzj">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="AES-encrypted, not backed up." lineBreakMode="tailTruncation" minimumFontSize="10" id="6S8-9Y-pzj">
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</tableViewCell>
|
|
||||||
</cells>
|
|
||||||
</tableViewSection>
|
|
||||||
<tableViewSection id="gSo-5f-umo">
|
|
||||||
<cells>
|
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="w3P-Kp-ThX">
|
|
||||||
<rect key="frame" x="0.0" y="508" width="320" height="144"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Google® Authenticator" lineBreakMode="tailTruncation" minimumFontSize="10" id="UQV-0l-m1n">
|
|
||||||
<rect key="frame" x="20" y="20" width="280" height="21"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
|
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
|
||||||
</label>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Useful for logging into your Google account or another application that supports the Google authenticator." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="jYS-eD-SvL">
|
|
||||||
<rect key="frame" x="20" y="49" width="280" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
|
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
<color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
|
|
||||||
</label>
|
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="IEv-rr-FYK">
|
|
||||||
<rect key="frame" x="10" y="100" width="300" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
|
||||||
</imageView>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Time Based" lineBreakMode="tailTruncation" minimumFontSize="10" id="TsD-2p-06X">
|
|
||||||
<rect key="frame" x="20" y="100" width="280" height="24"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Single-use, short-lived, no storage." lineBreakMode="tailTruncation" minimumFontSize="10" id="gdJ-yU-Nq1">
|
|
||||||
<rect key="frame" x="20" y="124" width="280" height="20"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
|
||||||
</view>
|
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</tableViewCell>
|
|
||||||
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="mNd-Mf-m7b">
|
|
||||||
<rect key="frame" x="0.0" y="652" width="320" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="d68-HV-PnO">
|
|
||||||
<rect key="frame" x="10" y="0.0" width="300" height="44"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
|
|
||||||
</imageView>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Counter Based" lineBreakMode="tailTruncation" minimumFontSize="10" id="voz-p2-qnL">
|
|
||||||
<rect key="frame" x="20" y="0.0" width="280" height="24"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
|
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Single-use, requires storage." lineBreakMode="tailTruncation" minimumFontSize="10" id="gL8-Rf-kqz">
|
|
||||||
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
<rect key="frame" x="20" y="24" width="280" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
<fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
|
||||||
@ -359,7 +303,7 @@
|
|||||||
<outlet property="delegate" destination="NKe-nv-566" id="O5k-hI-7Tf"/>
|
<outlet property="delegate" destination="NKe-nv-566" id="O5k-hI-7Tf"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<navigationItem key="navigationItem" id="rak-Td-wu1"/>
|
<navigationItem key="navigationItem" title="Type" id="rak-Td-wu1"/>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="962" y="182"/>
|
<point key="canvasLocation" x="962" y="182"/>
|
||||||
@ -371,6 +315,7 @@
|
|||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="PQa-Xl-A3x" id="O2f-mW-ab8"/>
|
<outlet property="delegate" destination="PQa-Xl-A3x" id="O2f-mW-ab8"/>
|
||||||
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="exk-dS-Ui3"/>
|
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="exk-dS-Ui3"/>
|
||||||
|
<outlet property="searchTipContainer" destination="zOR-Du-qRL" id="lk6-2X-lIb"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<searchDisplayController id="P8c-gf-nN3">
|
<searchDisplayController id="P8c-gf-nN3">
|
||||||
@ -388,22 +333,23 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="0hY-LL-ITu">
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="0hY-LL-ITu">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="416"/>
|
<rect key="frame" x="0.0" y="44" width="320" height="372"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<view contentMode="scaleToFill" id="g9q-4d-ZgJ">
|
<view contentMode="scaleToFill" id="g9q-4d-ZgJ">
|
||||||
<rect key="frame" x="0.0" y="43" width="320" height="155"/>
|
<rect key="frame" x="0.0" y="43" width="320" height="175"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="enb-OH-DVZ">
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="enb-OH-DVZ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="155"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="175"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="top" image="Square-top.png" id="qWn-td-zdb">
|
<imageView userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleToFill" image="ui_panel_container.png" id="0Yh-Py-lB6">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="155"/>
|
<rect key="frame" x="11" y="20" width="298" height="87"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<imageView userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleToFill" image="display.png" id="0Yh-Py-lB6">
|
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" image="ui_panel_display.png" id="cw7-HD-Wht">
|
||||||
<rect key="frame" x="11" y="20" width="298" height="86"/>
|
<rect key="frame" x="11" y="20" width="298" height="86"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
|
<rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
|
||||||
@ -430,6 +376,8 @@
|
|||||||
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="S3cre7^Pa$swcrD" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="fiX-10-fif">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="S3cre7^Pa$swcrD" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="fiX-10-fif">
|
||||||
<rect key="frame" x="20" y="46" width="280" height="60"/>
|
<rect key="frame" x="20" y="46" width="280" height="60"/>
|
||||||
@ -441,34 +389,21 @@
|
|||||||
<outlet property="delegate" destination="PQa-Xl-A3x" id="qOM-gq-c6g"/>
|
<outlet property="delegate" destination="PQa-Xl-A3x" id="qOM-gq-c6g"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Cei-5z-uWE">
|
|
||||||
<rect key="frame" x="11" y="119" width="299" height="35"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
|
||||||
<state key="normal" title="Long" backgroundImage="list_first.png">
|
|
||||||
<color key="titleColor" cocoaTouchSystemColor="lightTextColor"/>
|
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</state>
|
|
||||||
<state key="highlighted">
|
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</state>
|
|
||||||
<connections>
|
|
||||||
<segue destination="NKe-nv-566" kind="push" identifier="OP_Main_ChooseType" id="vw4-Vd-O6q"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.50000000000000011" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" id="Iuf-np-e9C">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.50000000000000011" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" id="Iuf-np-e9C">
|
||||||
<rect key="frame" x="240" y="27" width="40" height="20"/>
|
<rect key="frame" x="240" y="27" width="40" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="Optima-ExtraBlack" family="Optima" pointSize="17"/>
|
<fontDescription key="fontDescription" name="Optima-ExtraBlack" family="Optima" pointSize="17"/>
|
||||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<size key="shadowOffset" width="0.0" height="1"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" alpha="0.50000000000000011" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jec-mu-nPt">
|
<button opaque="NO" alpha="0.50000000000000011" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jec-mu-nPt">
|
||||||
<rect key="frame" x="276" y="20" width="34" height="34"/>
|
<rect key="frame" x="274.5" y="18.5" width="37" height="37"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
|
<inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
|
||||||
<state key="normal" image="plus.png">
|
<state key="normal" image="icon_plus.png">
|
||||||
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
@ -480,11 +415,11 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="9FS-fS-xH6">
|
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="9FS-fS-xH6">
|
||||||
<rect key="frame" x="276" y="20" width="34" height="34"/>
|
<rect key="frame" x="275" y="18.5" width="37" height="37"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
|
<inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
|
||||||
<state key="normal" image="edit.png">
|
<state key="normal" image="icon_edit.png">
|
||||||
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
@ -495,25 +430,109 @@
|
|||||||
<action selector="editPassword" destination="PQa-Xl-A3x" eventType="touchUpInside" id="jZC-Jm-ZZ0"/>
|
<action selector="editPassword" destination="PQa-Xl-A3x" eventType="touchUpInside" id="jZC-Jm-ZZ0"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" reversesTitleShadowWhenHighlighted="YES" lineBreakMode="middleTruncation" id="Cei-5z-uWE">
|
||||||
|
<rect key="frame" x="10" y="115" width="300" height="46"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
|
<size key="titleShadowOffset" width="0.0" height="1"/>
|
||||||
|
<state key="normal" title="Long" backgroundImage="ui_button_standard_large.png">
|
||||||
|
<color key="titleColor" cocoaTouchSystemColor="lightTextColor"/>
|
||||||
|
<color key="titleShadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<state key="highlighted">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<segue destination="NKe-nv-566" kind="push" identifier="OP_Main_ChooseType" id="vw4-Vd-O6q"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<view userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="v2m-Gf-pEV">
|
||||||
|
<rect key="frame" x="55" y="8" width="210" height="57"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="fdm-NG-GFC">
|
||||||
|
<rect key="frame" x="0.0" y="-1" width="210" height="60"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Tap to set a password." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="ieN-QQ-PyR">
|
||||||
|
<rect key="frame" x="20" y="0.0" width="170" height="37"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="icon_edit.png" id="KEn-n3-qhX">
|
||||||
|
<rect key="frame" x="48.5" y="6.5" width="24" height="24"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
</view>
|
</view>
|
||||||
<view clipsSubviews="YES" alpha="0.60000000000000009" contentMode="scaleToFill" id="61G-By-qLB">
|
<view clipsSubviews="YES" alpha="0.60000000000000009" contentMode="scaleToFill" id="61G-By-qLB">
|
||||||
<rect key="frame" x="0.0" y="196" width="320" height="220"/>
|
<rect key="frame" x="0.0" y="216" width="320" height="200"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="bottom" image="Square-bottom.png" id="lbm-A0-3PK">
|
<imageView userInteractionEnabled="NO" contentMode="bottom" image="Square-bottom.png" id="lbm-A0-3PK">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="58"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="58"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<webView opaque="NO" contentMode="scaleToFill" id="8FQ-x4-lR9">
|
<webView opaque="NO" contentMode="scaleToFill" id="8FQ-x4-lR9" customClass="DebuggableUIWebView">
|
||||||
<rect key="frame" x="0.0" y="1" width="320" height="219"/>
|
<rect key="frame" x="0.0" y="1" width="320" height="199"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
</webView>
|
</webView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
|
<color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
|
||||||
</view>
|
</view>
|
||||||
|
<view alpha="0.0" contentMode="scaleToFill" id="yRY-qt-gz8">
|
||||||
|
<rect key="frame" x="10" y="250" width="300" height="150"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_alert_black.png" id="TUv-Tl-xTc">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="300" height="150"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<rect key="contentStretch" x="0.25" y="0.6499999999999998" width="0.64999999999999969" height="0.10000000000000002"/>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Password Changed!" lineBreakMode="tailTruncation" minimumFontSize="10" id="ZdH-we-KcW">
|
||||||
|
<rect key="frame" x="70" y="20" width="210" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="jCg-t7-RuK">
|
||||||
|
<rect key="frame" x="20" y="60" width="260" height="70"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<string key="text">The password for apple.com has changed.
|
||||||
|
|
||||||
|
Don't forget to update the site with your new password! Your old password was:
|
||||||
|
L4m3P4sSw0rD</string>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
</textView>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="cX2-vD-vjc">
|
||||||
|
<rect key="frame" x="259" y="5" width="32" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
|
<state key="normal" image="icon_cancel.png">
|
||||||
|
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<state key="highlighted">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="closeAlert" destination="PQa-Xl-A3x" eventType="touchUpInside" id="oJt-DU-l38"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
<searchBar contentMode="redraw" barStyle="blackOpaque" placeholder="Site" id="qeo-n2-WVh">
|
<searchBar contentMode="redraw" barStyle="blackOpaque" placeholder="Site" id="qeo-n2-WVh">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
@ -523,16 +542,38 @@
|
|||||||
<outlet property="delegate" destination="PQa-Xl-A3x" id="oXp-0r-Gkl"/>
|
<outlet property="delegate" destination="PQa-Xl-A3x" id="oXp-0r-Gkl"/>
|
||||||
</connections>
|
</connections>
|
||||||
</searchBar>
|
</searchBar>
|
||||||
|
<view userInteractionEnabled="NO" contentMode="scaleToFill" id="zOR-Du-qRL">
|
||||||
|
<rect key="frame" x="55" y="-27" width="210" height="57"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="tip_basic_black.png" id="ORD-Xv-bOQ">
|
||||||
|
<rect key="frame" x="0.0" y="-1" width="210" height="60"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enter the site's name." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="21b-bH-lR9">
|
||||||
|
<rect key="frame" x="20" y="0.0" width="170" height="37"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="icon_edit.png" id="4Xf-mC-295">
|
||||||
|
<rect key="frame" x="49" y="6" width="24" height="24"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="0.14901960784313725" green="0.16470588235294117" blue="0.1803921568627451" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="backgroundColor" red="0.14901960784313725" green="0.16470588235294117" blue="0.1803921568627451" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
</view>
|
</view>
|
||||||
<navigationItem key="navigationItem" title="One Password" id="hB9-S6-KHC">
|
<navigationItem key="navigationItem" title="One Password" id="hB9-S6-KHC">
|
||||||
<barButtonItem key="leftBarButtonItem" id="2Bg-ut-2K4">
|
<barButtonItem key="rightBarButtonItem" id="Csu-uI-sPX">
|
||||||
<button key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoLight" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="C1k-kx-Gcx">
|
<button key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iwA-Sh-vZO">
|
||||||
<rect key="frame" x="5" y="12" width="18" height="19"/>
|
<rect key="frame" x="283" y="6" width="32" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<state key="normal">
|
<state key="normal" image="icon_question.png">
|
||||||
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
@ -540,14 +581,20 @@
|
|||||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
</state>
|
</state>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="toggleHelp" destination="PQa-Xl-A3x" eventType="touchUpInside" id="BpO-gU-wS3"/>
|
<action selector="toggleHelp" destination="PQa-Xl-A3x" eventType="touchUpInside" id="Ufm-QL-QUM"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</barButtonItem>
|
</barButtonItem>
|
||||||
</navigationItem>
|
</navigationItem>
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="alertBody" destination="jCg-t7-RuK" id="Aru-Nr-DY0"/>
|
||||||
|
<outlet property="alertContainer" destination="yRY-qt-gz8" id="gZx-90-Zgr"/>
|
||||||
|
<outlet property="alertTitle" destination="ZdH-we-KcW" id="VWi-aS-HRw"/>
|
||||||
<outlet property="contentContainer" destination="g9q-4d-ZgJ" id="Hgw-Hp-FHB"/>
|
<outlet property="contentContainer" destination="g9q-4d-ZgJ" id="Hgw-Hp-FHB"/>
|
||||||
<outlet property="contentField" destination="fiX-10-fif" id="b2c-gv-qMp"/>
|
<outlet property="contentField" destination="fiX-10-fif" id="b2c-gv-qMp"/>
|
||||||
|
<outlet property="contentTipBody" destination="ieN-QQ-PyR" id="flJ-gF-wbI"/>
|
||||||
|
<outlet property="contentTipContainer" destination="v2m-Gf-pEV" id="9zL-GR-kyH"/>
|
||||||
|
<outlet property="contentTipEditIcon" destination="KEn-n3-qhX" id="dDG-Nt-OLM"/>
|
||||||
<outlet property="helpContainer" destination="61G-By-qLB" id="Jwt-0d-ZAV"/>
|
<outlet property="helpContainer" destination="61G-By-qLB" id="Jwt-0d-ZAV"/>
|
||||||
<outlet property="helpView" destination="8FQ-x4-lR9" id="MOg-5s-kvK"/>
|
<outlet property="helpView" destination="8FQ-x4-lR9" id="MOg-5s-kvK"/>
|
||||||
<outlet property="passwordCounter" destination="Iuf-np-e9C" id="CIm-Mk-nJh"/>
|
<outlet property="passwordCounter" destination="Iuf-np-e9C" id="CIm-Mk-nJh"/>
|
||||||
@ -555,6 +602,7 @@
|
|||||||
<outlet property="passwordIncrementer" destination="jec-mu-nPt" id="i9B-lX-zzX"/>
|
<outlet property="passwordIncrementer" destination="jec-mu-nPt" id="i9B-lX-zzX"/>
|
||||||
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="CLs-YI-7NC"/>
|
<outlet property="searchDisplayController" destination="P8c-gf-nN3" id="CLs-YI-7NC"/>
|
||||||
<outlet property="searchResultsController" destination="0QO-2P-OhD" id="xEC-gV-lHp"/>
|
<outlet property="searchResultsController" destination="0QO-2P-OhD" id="xEC-gV-lHp"/>
|
||||||
|
<outlet property="searchTipContainer" destination="zOR-Du-qRL" id="X7h-Vh-iCE"/>
|
||||||
<outlet property="siteName" destination="gSK-aB-wNI" id="IIe-z8-zy8"/>
|
<outlet property="siteName" destination="gSK-aB-wNI" id="IIe-z8-zy8"/>
|
||||||
<outlet property="typeButton" destination="Cei-5z-uWE" id="4M1-d7-5Bh"/>
|
<outlet property="typeButton" destination="Cei-5z-uWE" id="4M1-d7-5Bh"/>
|
||||||
</connections>
|
</connections>
|
||||||
@ -584,19 +632,61 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<image name="Content-Backdrop.png" width="480" height="480"/>
|
<image name="Content-Backdrop.png" width="480" height="480"/>
|
||||||
<image name="Square-bottom.png" width="551" height="58"/>
|
<image name="Square-bottom.png" width="551" height="58"/>
|
||||||
<image name="Square-top.png" width="551" height="164"/>
|
<image name="icon_cancel.png" width="32" height="32"/>
|
||||||
<image name="display.png" width="298" height="86"/>
|
<image name="icon_edit.png" width="32" height="32"/>
|
||||||
<image name="edit.png" width="32" height="32"/>
|
<image name="icon_plus.png" width="32" height="32"/>
|
||||||
<image name="list_first.png" width="299" height="35"/>
|
<image name="icon_question.png" width="32" height="32"/>
|
||||||
<image name="list_first_active.png" width="299" height="35"/>
|
<image name="tip_alert_black.png" width="235" height="81"/>
|
||||||
<image name="list_last.png" width="299" height="35"/>
|
<image name="tip_basic_black.png" width="210" height="60"/>
|
||||||
<image name="list_last_active.png" width="299" height="36"/>
|
<image name="ui_button_standard_large.png" width="300" height="46"/>
|
||||||
<image name="list_middle.png" width="299" height="34"/>
|
<image name="ui_list_first.png" width="300" height="35"/>
|
||||||
<image name="list_middle_active.png" width="299" height="34"/>
|
<image name="ui_list_last.png" width="300" height="35"/>
|
||||||
<image name="plus.png" width="32" height="32"/>
|
<image name="ui_list_middle.png" width="300" height="34"/>
|
||||||
|
<image name="ui_panel_container.png" width="300" height="87"/>
|
||||||
|
<image name="ui_panel_display.png" width="300" height="86"/>
|
||||||
</resources>
|
</resources>
|
||||||
|
<classes>
|
||||||
|
<class className="OPMainViewController" superclassName="UIViewController">
|
||||||
|
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPMainViewController.h"/>
|
||||||
|
<relationships>
|
||||||
|
<relationship kind="action" name="closeAlert"/>
|
||||||
|
<relationship kind="action" name="copyContent"/>
|
||||||
|
<relationship kind="action" name="editPassword"/>
|
||||||
|
<relationship kind="action" name="incrementPasswordCounter"/>
|
||||||
|
<relationship kind="action" name="toggleHelp"/>
|
||||||
|
<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="OPSearchDelegate"/>
|
||||||
|
<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="OPSearchDelegate" superclassName="NSObject">
|
||||||
|
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPSearchDelegate.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="OPTypeViewController" superclassName="UITableViewController">
|
||||||
|
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPTypeViewController.h"/>
|
||||||
|
</class>
|
||||||
|
</classes>
|
||||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||||
<simulatedStatusBarMetrics key="statusBar"/>
|
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
|
||||||
<simulatedOrientationMetrics key="orientation"/>
|
<simulatedOrientationMetrics key="orientation"/>
|
||||||
<simulatedScreenMetrics key="destination"/>
|
<simulatedScreenMetrics key="destination"/>
|
||||||
</simulatedMetricsContainer>
|
</simulatedMetricsContainer>
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
+ (OPAppDelegate *)get;
|
+ (OPAppDelegate *)get;
|
||||||
+ (NSManagedObjectContext *)managedObjectContext;
|
+ (NSManagedObjectContext *)managedObjectContext;
|
||||||
|
+ (NSManagedObjectModel *)managedObjectModel;
|
||||||
|
|
||||||
- (void)saveContext;
|
- (void)saveContext;
|
||||||
- (NSURL *)applicationDocumentsDirectory;
|
- (NSURL *)applicationDocumentsDirectory;
|
||||||
|
@ -25,8 +25,11 @@
|
|||||||
@synthesize keyPhrase = _keyPhrase;
|
@synthesize keyPhrase = _keyPhrase;
|
||||||
|
|
||||||
+ (void)initialize {
|
+ (void)initialize {
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
[Logger get].autoprintLevel = LogLevelDebug;
|
[Logger get].autoprintLevel = LogLevelDebug;
|
||||||
|
[NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSDictionary *)keyPhraseQuery {
|
+ (NSDictionary *)keyPhraseQuery {
|
||||||
@ -53,6 +56,62 @@
|
|||||||
return OPKeyPhraseHashQuery;
|
return OPKeyPhraseHashQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
|
|
||||||
|
UIImage *navBarImage = [[UIImage imageNamed:@"ui_navbar_container"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
|
||||||
|
[[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault];
|
||||||
|
[[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsLandscapePhone];
|
||||||
|
[[UINavigationBar appearance] setTitleTextAttributes:
|
||||||
|
[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0], UITextAttributeTextColor,
|
||||||
|
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], UITextAttributeTextShadowColor,
|
||||||
|
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset,
|
||||||
|
[UIFont fontWithName:@"Helvetica-Neue" size:0.0], UITextAttributeFont,
|
||||||
|
nil]];
|
||||||
|
|
||||||
|
UIImage *navBarButton = [[UIImage imageNamed:@"ui_navbar_button"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
|
||||||
|
UIImage *navBarBack = [[UIImage imageNamed:@"ui_navbar_back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];
|
||||||
|
[[UIBarButtonItem appearance] setBackgroundImage:navBarButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
|
||||||
|
[[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];
|
||||||
|
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:navBarBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
|
||||||
|
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];
|
||||||
|
[[UIBarButtonItem appearance] setTitleTextAttributes:
|
||||||
|
[NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0], UITextAttributeTextColor,
|
||||||
|
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5], UITextAttributeTextShadowColor,
|
||||||
|
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
|
||||||
|
[UIFont fontWithName:@"Helvetica-Neue" size:0.0], UITextAttributeFont,
|
||||||
|
nil]
|
||||||
|
forState:UIControlStateNormal];
|
||||||
|
|
||||||
|
UIImage *toolBarImage = [[UIImage imageNamed:@"ui_toolbar_container"] resizableImageWithCapInsets:UIEdgeInsetsMake(25, 5, 5, 5)];
|
||||||
|
[[UISearchBar appearance] setBackgroundImage:toolBarImage];
|
||||||
|
[[UIToolbar appearance] setBackgroundImage:toolBarImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
|
||||||
|
|
||||||
|
/*
|
||||||
|
UIImage *minImage = [[UIImage imageNamed:@"slider-minimum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
|
||||||
|
UIImage *maxImage = [[UIImage imageNamed:@"slider-maximum.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
|
||||||
|
UIImage *thumbImage = [UIImage imageNamed:@"slider-handle.png"];
|
||||||
|
|
||||||
|
[[UISlider appearance] setMaximumTrackImage:maxImage forState:UIControlStateNormal];
|
||||||
|
[[UISlider appearance] setMinimumTrackImage:minImage forState:UIControlStateNormal];
|
||||||
|
[[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal];
|
||||||
|
|
||||||
|
UIImage *segmentSelected = [[UIImage imageNamed:@"segcontrol_sel.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
|
||||||
|
UIImage *segmentUnselected = [[UIImage imageNamed:@"segcontrol_uns.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
|
||||||
|
UIImage *segmentSelectedUnselected = [UIImage imageNamed:@"segcontrol_sel-uns.png"];
|
||||||
|
UIImage *segUnselectedSelected = [UIImage imageNamed:@"segcontrol_uns-sel.png"];
|
||||||
|
UIImage *segmentUnselectedUnselected = [UIImage imageNamed:@"segcontrol_uns-uns.png"];
|
||||||
|
|
||||||
|
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
|
||||||
|
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
|
||||||
|
|
||||||
|
[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
|
||||||
|
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
|
||||||
|
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];*/
|
||||||
|
|
||||||
|
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
||||||
|
}
|
||||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||||
|
|
||||||
if ([[OPConfig get].storeKeyPhrase boolValue]) {
|
if ([[OPConfig get].storeKeyPhrase boolValue]) {
|
||||||
@ -140,11 +199,16 @@
|
|||||||
return (OPAppDelegate *)[super get];
|
return (OPAppDelegate *)[super get];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSManagedObjectContext *)managedObjectContext{
|
+ (NSManagedObjectContext *)managedObjectContext {
|
||||||
|
|
||||||
return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
|
return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (NSManagedObjectModel *)managedObjectModel {
|
||||||
|
|
||||||
|
return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectModel];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)saveContext
|
- (void)saveContext
|
||||||
{
|
{
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
if (![self.name length])
|
if (![self.name length])
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
if (self.type & OPElementTypeCalculated)
|
if (self.type & OPElementTypeClassCalculated)
|
||||||
return OPCalculateContent(self.type, self.name, [OPAppDelegate get].keyPhrase, self.counter);
|
return OPCalculateContent(self.type, self.name, [OPAppDelegate get].keyPhrase, self.counter);
|
||||||
|
|
||||||
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
- (id)content {
|
- (id)content {
|
||||||
|
|
||||||
assert(self.type & OPElementTypeStored);
|
assert(self.type & OPElementTypeClassStored);
|
||||||
|
|
||||||
return self.contentObject;
|
return self.contentObject;
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,19 @@
|
|||||||
@property (weak, nonatomic) IBOutlet UIButton *passwordEdit;
|
@property (weak, nonatomic) IBOutlet UIButton *passwordEdit;
|
||||||
@property (weak, nonatomic) IBOutlet UIView *contentContainer;
|
@property (weak, nonatomic) IBOutlet UIView *contentContainer;
|
||||||
@property (weak, nonatomic) IBOutlet UIView *helpContainer;
|
@property (weak, nonatomic) IBOutlet UIView *helpContainer;
|
||||||
|
@property (weak, nonatomic) IBOutlet UIView *contentTipContainer;
|
||||||
|
@property (weak, nonatomic) IBOutlet UIView *alertContainer;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *alertTitle;
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextView *alertBody;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *contentTipBody;
|
||||||
|
@property (weak, nonatomic) IBOutlet UIImageView *contentTipEditIcon;
|
||||||
|
@property (weak, nonatomic) IBOutlet UIView *searchTipContainer;
|
||||||
|
|
||||||
- (IBAction)copyContent;
|
- (IBAction)copyContent;
|
||||||
- (IBAction)incrementPasswordCounter;
|
- (IBAction)incrementPasswordCounter;
|
||||||
- (IBAction)editPassword;
|
- (IBAction)editPassword;
|
||||||
- (IBAction)toggleHelp;
|
- (IBAction)toggleHelp;
|
||||||
- (void)toggleHelp:(BOOL)hidden;
|
- (void)toggleHelp:(BOOL)hidden;
|
||||||
|
- (IBAction)closeAlert;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
- (void)updateAnimated:(BOOL)animated;
|
- (void)updateAnimated:(BOOL)animated;
|
||||||
- (void)updateWasAnimated:(BOOL)animated;
|
- (void)updateWasAnimated:(BOOL)animated;
|
||||||
|
- (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon;
|
||||||
|
- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message;
|
||||||
|
- (void)updateElement:(void (^)(void))updateElement;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -33,6 +36,13 @@
|
|||||||
@synthesize passwordEdit = _passwordEdit;
|
@synthesize passwordEdit = _passwordEdit;
|
||||||
@synthesize contentContainer = _contentContainer;
|
@synthesize contentContainer = _contentContainer;
|
||||||
@synthesize helpContainer = _helpContainer;
|
@synthesize helpContainer = _helpContainer;
|
||||||
|
@synthesize contentTipContainer = _copiedContainer;
|
||||||
|
@synthesize alertContainer = _alertContainer;
|
||||||
|
@synthesize alertTitle = _alertTitle;
|
||||||
|
@synthesize alertBody = _alertBody;
|
||||||
|
@synthesize contentTipBody = _contentTipBody;
|
||||||
|
@synthesize contentTipEditIcon = _contentTipEditIcon;
|
||||||
|
@synthesize searchTipContainer = _searchTip;
|
||||||
@synthesize contentField = _contentField;
|
@synthesize contentField = _contentField;
|
||||||
|
|
||||||
#pragma mark - View lifecycle
|
#pragma mark - View lifecycle
|
||||||
@ -54,6 +64,18 @@
|
|||||||
|
|
||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
|
|
||||||
|
if (![self.searchTipContainer.superview isKindOfClass:[UIWindow class]]) {
|
||||||
|
// Put the search tip on the window so it's above the nav bar.
|
||||||
|
[self.searchTipContainer removeFromSuperview];
|
||||||
|
[[UIApplication sharedApplication].keyWindow addSubview:self.searchTipContainer];
|
||||||
|
self.searchTipContainer.frame = CGRectSetY(self.searchTipContainer.frame, self.searchTipContainer.frame.origin.y
|
||||||
|
+ self.navigationController.navigationBar.frame.size.height /* Nav */ + 20 /* Status */);
|
||||||
|
}
|
||||||
|
if (!self.activeElement.name)
|
||||||
|
[UIView animateWithDuration:animated? 0.2f: 0 animations:^{
|
||||||
|
self.searchTipContainer.alpha = 1;
|
||||||
|
}];
|
||||||
|
|
||||||
[self toggleHelp:[[OPConfig get].helpHidden boolValue]];
|
[self toggleHelp:[[OPConfig get].helpHidden boolValue]];
|
||||||
[self updateAnimated:NO];
|
[self updateAnimated:NO];
|
||||||
}
|
}
|
||||||
@ -61,7 +83,23 @@
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
// Because IB's edit button doesn't auto-toggle self.editable like editButtonItem does.
|
// Because IB's edit button doesn't auto-toggle self.editable like editButtonItem does.
|
||||||
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]];
|
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ui_background"]];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil queue:[NSOperationQueue mainQueue]
|
||||||
|
usingBlock:^(NSNotification *note) {
|
||||||
|
if (![OPAppDelegate get].keyPhrase) {
|
||||||
|
self.activeElement = nil;
|
||||||
|
[self updateAnimated:NO];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue]
|
||||||
|
usingBlock:^(NSNotification *note) {
|
||||||
|
if (![OPAppDelegate get].keyPhrase) {
|
||||||
|
self.activeElement = nil;
|
||||||
|
[self updateAnimated:NO];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self closeAlert];
|
||||||
|
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
}
|
}
|
||||||
@ -78,6 +116,13 @@
|
|||||||
[self setPasswordEdit:nil];
|
[self setPasswordEdit:nil];
|
||||||
[self setContentContainer:nil];
|
[self setContentContainer:nil];
|
||||||
[self setHelpContainer:nil];
|
[self setHelpContainer:nil];
|
||||||
|
[self setContentTipContainer:nil];
|
||||||
|
[self setAlertContainer:nil];
|
||||||
|
[self setAlertTitle:nil];
|
||||||
|
[self setAlertBody:nil];
|
||||||
|
[self setContentTipBody:nil];
|
||||||
|
[self setContentTipEditIcon:nil];
|
||||||
|
[self setSearchTipContainer:nil];
|
||||||
[super viewDidUnload];
|
[super viewDidUnload];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,14 +152,14 @@
|
|||||||
[NSURLRequest requestWithURL:
|
[NSURLRequest requestWithURL:
|
||||||
[NSURL URLWithString:[NSString stringWithFormat:@"#%d", chapter] relativeToURL:
|
[NSURL URLWithString:[NSString stringWithFormat:@"#%d", chapter] relativeToURL:
|
||||||
[[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
|
[[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
|
||||||
|
[self.helpView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setClass('%@');",
|
||||||
[self.navigationItem setRightBarButtonItem:self.activeElement.type & OPElementTypeStored? self.editButtonItem: nil animated:animated];
|
ClassNameFromOPElementType(self.activeElement.type)]];
|
||||||
|
|
||||||
self.siteName.text = self.activeElement.name;
|
self.siteName.text = self.activeElement.name;
|
||||||
|
|
||||||
self.passwordCounter.alpha = self.activeElement.type & OPElementTypeCalculated? 0.5f: 0;
|
self.passwordCounter.alpha = self.activeElement.type & OPElementTypeClassCalculated? 0.5f: 0;
|
||||||
self.passwordIncrementer.alpha = self.activeElement.type & OPElementTypeCalculated? 0.5f: 0;
|
self.passwordIncrementer.alpha = self.activeElement.type & OPElementTypeClassCalculated? 0.5f: 0;
|
||||||
self.passwordEdit.alpha = self.activeElement.type & OPElementTypeStored? 0.5f: 0;
|
self.passwordEdit.alpha = self.activeElement.type & OPElementTypeClassStored? 0.5f: 0;
|
||||||
|
|
||||||
[self.typeButton setTitle:NSStringFromOPElementType(self.activeElement.type)
|
[self.typeButton setTitle:NSStringFromOPElementType(self.activeElement.type)
|
||||||
forState:UIControlStateNormal];
|
forState:UIControlStateNormal];
|
||||||
@ -133,35 +178,86 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)showContentTip:(NSString *)message withIcon:(UIImageView *)icon {
|
||||||
|
|
||||||
|
self.contentTipBody.text = message;
|
||||||
|
|
||||||
|
icon.hidden = NO;
|
||||||
|
[UIView animateWithDuration:0.2f animations:^{
|
||||||
|
self.contentTipContainer.alpha = 1;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
if (!finished) {
|
||||||
|
icon.hidden = YES;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 5.0f * NSEC_PER_SEC);
|
||||||
|
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
|
||||||
|
[UIView animateWithDuration:0.2f animations:^{
|
||||||
|
self.contentTipContainer.alpha = 0;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
icon.hidden = YES;
|
||||||
|
}];
|
||||||
|
});
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
|
||||||
|
|
||||||
|
self.alertTitle.text = title;
|
||||||
|
if ([self.alertBody.text length])
|
||||||
|
self.alertBody.text = [NSString stringWithFormat:@"%@\n\n---\n\n%@", self.alertBody.text, message];
|
||||||
|
else
|
||||||
|
self.alertBody.text = message;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.2f animations:^{
|
||||||
|
self.alertContainer.alpha = 1;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Protocols
|
#pragma mark - Protocols
|
||||||
|
|
||||||
- (IBAction)copyContent {
|
- (IBAction)copyContent {
|
||||||
|
|
||||||
|
if (!self.activeElement)
|
||||||
|
return;
|
||||||
|
|
||||||
[[UIPasteboard generalPasteboard] setValue:self.activeElement.content
|
[[UIPasteboard generalPasteboard] setValue:self.activeElement.content
|
||||||
forPasteboardType:self.activeElement.contentUTI];
|
forPasteboardType:self.activeElement.contentUTI];
|
||||||
|
|
||||||
|
[self showContentTip:@"Copied!" withIcon:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)incrementPasswordCounter {
|
- (IBAction)incrementPasswordCounter {
|
||||||
|
|
||||||
if ([self.activeElement isKindOfClass:[OPElementGeneratedEntity class]])
|
if (![self.activeElement isKindOfClass:[OPElementGeneratedEntity class]])
|
||||||
[AlertViewController showAlertWithTitle:@"Change Password"
|
// Not of a type that supports a password counter;
|
||||||
message:l(@"Setting a new password for %@.\n"
|
return;
|
||||||
@"Don't forget to update your password on the site as well!", self.activeElement.name)
|
|
||||||
tappedButtonBlock:^(NSInteger buttonIndex) {
|
[self updateElement:^{
|
||||||
if (!buttonIndex)
|
++((OPElementGeneratedEntity *) self.activeElement).counter;
|
||||||
return;
|
}];
|
||||||
|
}
|
||||||
// Update password counter.
|
|
||||||
if ([self.activeElement isKindOfClass:[OPElementGeneratedEntity class]]) {
|
- (void)updateElement:(void (^)(void))updateElement {
|
||||||
++((OPElementGeneratedEntity *) self.activeElement).counter;
|
|
||||||
[self updateAnimated:YES];
|
// Update password counter.
|
||||||
}
|
NSString *oldPassword = self.activeElement.contentDescription;
|
||||||
} cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
|
updateElement();
|
||||||
|
NSString *newPassword = self.activeElement.contentDescription;
|
||||||
|
[self updateAnimated:YES];
|
||||||
|
|
||||||
|
// Show new and old password.
|
||||||
|
if (oldPassword && ![oldPassword isEqualToString:newPassword])
|
||||||
|
[self showAlertWithTitle:@"Password Changed!" message:l(@"The password for %@ has changed.\n\n"
|
||||||
|
@"Don't forget to update the site with your new password! "
|
||||||
|
@"Your old password was:\n"
|
||||||
|
@"%@", self.activeElement.name, oldPassword)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)editPassword {
|
- (IBAction)editPassword {
|
||||||
|
|
||||||
if (self.activeElement.type & OPElementTypeStored) {
|
if (self.activeElement.type & OPElementTypeClassStored) {
|
||||||
self.contentField.enabled = YES;
|
self.contentField.enabled = YES;
|
||||||
[self.contentField becomeFirstResponder];
|
[self.contentField becomeFirstResponder];
|
||||||
}
|
}
|
||||||
@ -179,48 +275,49 @@
|
|||||||
|
|
||||||
- (void)toggleHelp:(BOOL)hidden {
|
- (void)toggleHelp:(BOOL)hidden {
|
||||||
|
|
||||||
if (hidden) {
|
if (hidden) {
|
||||||
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
|
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
|
||||||
//self.helpContainer.frame = CGRectSetHeight(self.helpContainer.frame, 0);
|
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 415);
|
||||||
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 414);
|
[OPConfig get].helpHidden = [NSNumber numberWithBool:YES];
|
||||||
[OPConfig get].helpHidden = [NSNumber numberWithBool:YES];
|
} else {
|
||||||
} else {
|
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 175);
|
||||||
self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 155);
|
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 216);
|
||||||
//self.helpContainer.frame = CGRectSetHeight(self.helpContainer.frame, 219);
|
[OPConfig get].helpHidden = [NSNumber numberWithBool:NO];
|
||||||
self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 196);
|
}
|
||||||
[OPConfig get].helpHidden = [NSNumber numberWithBool:NO];
|
}
|
||||||
}
|
|
||||||
|
- (IBAction)closeAlert {
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.3f animations:^{
|
||||||
|
self.alertContainer.alpha = 0;
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
self.alertBody.text = nil;
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didSelectType:(OPElementType)type {
|
- (void)didSelectType:(OPElementType)type {
|
||||||
|
|
||||||
[AlertViewController showAlertWithTitle:@"Change Password Type"
|
[self updateElement:^{
|
||||||
message:l(@"Changing the type of %@'s password.\n"
|
// Update password type.
|
||||||
@"Don't forget to update your password on the site as well!", self.activeElement.name)
|
if (ClassFromOPElementType(type) != ClassFromOPElementType(self.activeElement.type)) {
|
||||||
tappedButtonBlock:^(NSInteger buttonIndex) {
|
// Type requires a different class of element. Recreate the element.
|
||||||
if (!buttonIndex)
|
OPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromOPElementType(type)
|
||||||
return;
|
inManagedObjectContext:[OPAppDelegate managedObjectContext]];
|
||||||
|
newElement.name = self.activeElement.name;
|
||||||
// Update password type.
|
newElement.uses = self.activeElement.uses;
|
||||||
if (ClassForOPElementType(type) != ClassForOPElementType(self.activeElement.type)) {
|
newElement.lastUsed = self.activeElement.lastUsed;
|
||||||
// Type requires a different class of element. Recreate the element.
|
newElement.contentUTI = self.activeElement.contentUTI;
|
||||||
OPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass(ClassForOPElementType(type))
|
newElement.contentType = self.activeElement.contentType;
|
||||||
inManagedObjectContext:[OPAppDelegate managedObjectContext]];
|
|
||||||
|
[[OPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
||||||
newElement.name = self.activeElement.name;
|
self.activeElement = newElement;
|
||||||
newElement.uses = self.activeElement.uses;
|
}
|
||||||
newElement.lastUsed = self.activeElement.lastUsed;
|
|
||||||
newElement.contentUTI = self.activeElement.contentUTI;
|
self.activeElement.type = type;
|
||||||
newElement.contentType = self.activeElement.contentType;
|
|
||||||
|
if (type & OPElementTypeClassStored && !self.activeElement.contentDescription)
|
||||||
[[OPAppDelegate managedObjectContext] deleteObject:self.activeElement];
|
[self showContentTip:@"Tap to set a password." withIcon:self.contentTipEditIcon];
|
||||||
self.activeElement = newElement;
|
}];
|
||||||
}
|
|
||||||
self.activeElement.type = type;
|
|
||||||
|
|
||||||
// Redraw.
|
|
||||||
[self updateAnimated:YES];
|
|
||||||
} cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didSelectElement:(OPElementEntity *)element {
|
- (void)didSelectElement:(OPElementEntity *)element {
|
||||||
@ -251,19 +348,17 @@
|
|||||||
|
|
||||||
if (textField == self.contentField) {
|
if (textField == self.contentField) {
|
||||||
self.contentField.enabled = NO;
|
self.contentField.enabled = NO;
|
||||||
[AlertViewController showAlertWithTitle:@"Change Password"
|
if (![self.activeElement isKindOfClass:[OPElementStoredEntity class]])
|
||||||
message:l(@"Setting a new password for %@.\n"
|
// Not of a type whose content can be edited.
|
||||||
@"Don't forget to update your password on the site as well!", self.activeElement.name)
|
return;
|
||||||
tappedButtonBlock:^(NSInteger buttonIndex) {
|
|
||||||
if (buttonIndex) {
|
if ([((OPElementStoredEntity *) self.activeElement).contentObject isEqual:self.contentField.text])
|
||||||
// Update password content.
|
// Content hasn't changed.
|
||||||
if ([self.activeElement isKindOfClass:[OPElementStoredEntity class]])
|
return;
|
||||||
((OPElementStoredEntity *) self.activeElement).contentObject = self.contentField.text;
|
|
||||||
}
|
[self updateElement:^{
|
||||||
|
((OPElementStoredEntity *) self.activeElement).contentObject = self.contentField.text;
|
||||||
// Redraw.
|
}];
|
||||||
[self updateAnimated:YES];
|
|
||||||
} cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
@property (weak, nonatomic) IBOutlet id<OPSearchResultsDelegate> delegate;
|
@property (weak, nonatomic) IBOutlet id<OPSearchResultsDelegate> delegate;
|
||||||
@property (weak, nonatomic) IBOutlet UISearchDisplayController *searchDisplayController;
|
@property (weak, nonatomic) IBOutlet UISearchDisplayController *searchDisplayController;
|
||||||
|
@property (weak, nonatomic) IBOutlet UIView *searchTipContainer;
|
||||||
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
@interface OPSearchDelegate (Private)
|
@interface OPSearchDelegate (Private)
|
||||||
|
|
||||||
|
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath;
|
||||||
- (void)update;
|
- (void)update;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -20,11 +21,17 @@
|
|||||||
@synthesize fetchedResultsController;
|
@synthesize fetchedResultsController;
|
||||||
@synthesize delegate;
|
@synthesize delegate;
|
||||||
@synthesize searchDisplayController;
|
@synthesize searchDisplayController;
|
||||||
|
@synthesize searchTipContainer;
|
||||||
|
|
||||||
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
|
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
|
||||||
|
|
||||||
self.searchDisplayController.searchBar.text = @"";
|
self.searchDisplayController.searchBar.text = @"";
|
||||||
self.searchDisplayController.searchBar.prompt = @"Enter the site's domain name (eg. apple.com):";
|
self.searchDisplayController.searchBar.prompt = @"Enter the site's domain name (eg. apple.com):";
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.2f animations:^{
|
||||||
|
self.searchTipContainer.alpha = 0;
|
||||||
|
}];
|
||||||
|
|
||||||
[self update];
|
[self update];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +40,13 @@
|
|||||||
self.searchDisplayController.searchBar.prompt = nil;
|
self.searchDisplayController.searchBar.prompt = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
|
||||||
|
|
||||||
|
tableView.backgroundColor = [UIColor blackColor];
|
||||||
|
tableView.rowHeight = 34.0f;
|
||||||
|
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
|
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
|
||||||
|
|
||||||
[tableView setEditing:self.searchDisplayController.searchContentsController.editing animated:NO];
|
[tableView setEditing:self.searchDisplayController.searchContentsController.editing animated:NO];
|
||||||
@ -74,29 +88,28 @@
|
|||||||
|
|
||||||
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
|
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
|
||||||
|
|
||||||
indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section + 1];
|
UITableView *tableView = self.searchDisplayController.searchResultsTableView;
|
||||||
newIndexPath = [NSIndexPath indexPathForRow:newIndexPath.row inSection:newIndexPath.section + 1];
|
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
|
||||||
case NSFetchedResultsChangeInsert:
|
case NSFetchedResultsChangeInsert:
|
||||||
[self.searchDisplayController.searchResultsTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
|
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSFetchedResultsChangeDelete:
|
case NSFetchedResultsChangeDelete:
|
||||||
[self.searchDisplayController.searchResultsTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSFetchedResultsChangeUpdate:
|
case NSFetchedResultsChangeUpdate:
|
||||||
[self configureCell:[self.searchDisplayController.searchResultsTableView cellForRowAtIndexPath:indexPath]
|
[self configureCell:[tableView cellForRowAtIndexPath:indexPath]
|
||||||
|
inTableView:tableView
|
||||||
atIndexPath:indexPath];
|
atIndexPath:indexPath];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSFetchedResultsChangeMove:
|
case NSFetchedResultsChangeMove:
|
||||||
[self.searchDisplayController.searchResultsTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
|
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
|
||||||
withRowAnimation:UITableViewRowAnimationFade];
|
withRowAnimation:UITableViewRowAnimationFade];
|
||||||
[self.searchDisplayController.searchResultsTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
|
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
|
||||||
withRowAnimation:UITableViewRowAnimationFade];
|
withRowAnimation:UITableViewRowAnimationFade];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,18 +117,17 @@
|
|||||||
|
|
||||||
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
|
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
|
||||||
|
|
||||||
++sectionIndex;
|
UITableView *tableView = self.searchDisplayController.searchResultsTableView;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
|
||||||
case NSFetchedResultsChangeInsert:
|
case NSFetchedResultsChangeInsert:
|
||||||
[self.searchDisplayController.searchResultsTableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
|
[tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
|
||||||
withRowAnimation:UITableViewRowAnimationFade];
|
withRowAnimation:UITableViewRowAnimationFade];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSFetchedResultsChangeDelete:
|
case NSFetchedResultsChangeDelete:
|
||||||
[self.searchDisplayController.searchResultsTableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
|
[tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
|
||||||
withRowAnimation:UITableViewRowAnimationFade];
|
withRowAnimation:UITableViewRowAnimationFade];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,7 +144,7 @@
|
|||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
|
|
||||||
if (--section == -1)
|
if (section == [self numberOfSectionsInTableView:tableView] - 1)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
|
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
|
||||||
@ -141,38 +153,51 @@
|
|||||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"OPElementSearch"];
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"OPElementSearch"];
|
||||||
if (!cell)
|
if (!cell) {
|
||||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"OPElementSearch"];
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"OPElementSearch"];
|
||||||
|
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"ui_list_middle"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)]];
|
||||||
|
backgroundImageView.frame = CGRectMake(-5, 0, 330, 34);
|
||||||
|
UIView *backgroundView = [[UIView alloc] initWithFrame:cell.frame];
|
||||||
|
[backgroundView addSubview:backgroundImageView];
|
||||||
|
|
||||||
|
cell.backgroundView = backgroundView;
|
||||||
|
cell.textLabel.backgroundColor = [UIColor clearColor];
|
||||||
|
cell.textLabel.textColor = [UIColor whiteColor];
|
||||||
|
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
|
||||||
|
cell.detailTextLabel.textColor = [UIColor lightGrayColor];
|
||||||
|
}
|
||||||
|
|
||||||
[self configureCell:cell atIndexPath:indexPath];
|
[self configureCell:cell inTableView:tableView atIndexPath:indexPath];
|
||||||
|
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
|
- (void)configureCell:(UITableViewCell *)cell inTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section - 1];
|
if (indexPath.section < [[self.fetchedResultsController sections] count]) {
|
||||||
if (indexPath.section == -1) {
|
|
||||||
cell.textLabel.text = self.searchDisplayController.searchBar.text;
|
|
||||||
cell.detailTextLabel.text = @"New";
|
|
||||||
} else {
|
|
||||||
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||||
|
|
||||||
cell.textLabel.text = element.name;
|
cell.textLabel.text = element.name;
|
||||||
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", element.uses];
|
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", element.uses];
|
||||||
|
} else {
|
||||||
|
// "New" section
|
||||||
|
cell.textLabel.text = self.searchDisplayController.searchBar.text;
|
||||||
|
cell.detailTextLabel.text = @"New";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
OPElementEntity *element;
|
OPElementEntity *element;
|
||||||
indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section - 1];
|
if (indexPath.section < [[self.fetchedResultsController sections] count])
|
||||||
if (indexPath.section == -1) {
|
element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||||
|
|
||||||
|
else {
|
||||||
|
// "New" section.
|
||||||
element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([OPElementGeneratedEntity class])
|
element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([OPElementGeneratedEntity class])
|
||||||
inManagedObjectContext:[OPAppDelegate managedObjectContext]];
|
inManagedObjectContext:[OPAppDelegate managedObjectContext]];
|
||||||
element.name = self.searchDisplayController.searchBar.text;
|
element.name = self.searchDisplayController.searchBar.text;
|
||||||
} else
|
}
|
||||||
element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
|
||||||
|
|
||||||
[self.delegate didSelectElement:element];
|
[self.delegate didSelectElement:element];
|
||||||
}
|
}
|
||||||
@ -197,7 +222,9 @@
|
|||||||
|
|
||||||
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
|
||||||
indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section - 1];
|
if (indexPath.section == [[self.fetchedResultsController sections] count])
|
||||||
|
// "New" section.
|
||||||
|
return;
|
||||||
|
|
||||||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||||
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||||
|
@ -13,6 +13,13 @@
|
|||||||
|
|
||||||
#pragma mark - View lifecycle
|
#pragma mark - View lifecycle
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
|
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ui_background"]];
|
||||||
|
|
||||||
|
[super viewDidLoad];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
|
@ -15,21 +15,22 @@ typedef enum {
|
|||||||
} OPElementContentType;
|
} OPElementContentType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OPElementTypeCalculated = 2 << 7,
|
OPElementTypeClassCalculated = 2 << 7,
|
||||||
OPElementTypeStored = 2 << 8,
|
OPElementTypeClassStored = 2 << 8,
|
||||||
} OPElementTypeClass;
|
} OPElementTypeClass;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OPElementTypeCalculatedLong = OPElementTypeCalculated | 0x01,
|
OPElementTypeCalculatedLong = OPElementTypeClassCalculated | 0x01,
|
||||||
OPElementTypeCalculatedMedium = OPElementTypeCalculated | 0x02,
|
OPElementTypeCalculatedMedium = OPElementTypeClassCalculated | 0x02,
|
||||||
OPElementTypeCalculatedShort = OPElementTypeCalculated | 0x03,
|
OPElementTypeCalculatedShort = OPElementTypeClassCalculated | 0x03,
|
||||||
OPElementTypeCalculatedBasic = OPElementTypeCalculated | 0x04,
|
OPElementTypeCalculatedBasic = OPElementTypeClassCalculated | 0x04,
|
||||||
OPElementTypeCalculatedPIN = OPElementTypeCalculated | 0x05,
|
OPElementTypeCalculatedPIN = OPElementTypeClassCalculated | 0x05,
|
||||||
|
|
||||||
OPElementTypeStoredPersonal = OPElementTypeStored | 0x01,
|
OPElementTypeStoredPersonal = OPElementTypeClassStored | 0x01,
|
||||||
OPElementTypeStoredDevicePrivate = OPElementTypeStored | 0x02,
|
OPElementTypeStoredDevicePrivate = OPElementTypeClassStored | 0x02,
|
||||||
} OPElementType;
|
} OPElementType;
|
||||||
|
|
||||||
NSString *NSStringFromOPElementType(OPElementType type);
|
NSString *NSStringFromOPElementType(OPElementType type);
|
||||||
Class ClassForOPElementType(OPElementType type);
|
NSString *ClassNameFromOPElementType(OPElementType type);
|
||||||
|
Class ClassFromOPElementType(OPElementType type);
|
||||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter);
|
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter);
|
@ -18,32 +18,32 @@ NSString *NSStringFromOPElementType(OPElementType type) {
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OPElementTypeCalculatedLong:
|
case OPElementTypeCalculatedLong:
|
||||||
return @"Long";
|
return @"Long Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedMedium:
|
case OPElementTypeCalculatedMedium:
|
||||||
return @"Medium";
|
return @"Medium Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedShort:
|
case OPElementTypeCalculatedShort:
|
||||||
return @"Short";
|
return @"Short Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedBasic:
|
case OPElementTypeCalculatedBasic:
|
||||||
return @"Basic";
|
return @"Basic Password";
|
||||||
|
|
||||||
case OPElementTypeCalculatedPIN:
|
case OPElementTypeCalculatedPIN:
|
||||||
return @"PIN";
|
return @"PIN";
|
||||||
|
|
||||||
case OPElementTypeStoredPersonal:
|
case OPElementTypeStoredPersonal:
|
||||||
return @"Personal";
|
return @"Personal Password";
|
||||||
|
|
||||||
case OPElementTypeStoredDevicePrivate:
|
case OPElementTypeStoredDevicePrivate:
|
||||||
return @"Device Private";
|
return @"Device Private Password";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
[NSException raise:NSInternalInconsistencyException format:@"Type not supported: %d", type];
|
[NSException raise:NSInternalInconsistencyException format:@"Type not supported: %d", type];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class ClassForOPElementType(OPElementType type) {
|
Class ClassFromOPElementType(OPElementType type) {
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
return nil;
|
return nil;
|
||||||
@ -75,10 +75,15 @@ Class ClassForOPElementType(OPElementType type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSString *ClassNameFromOPElementType(OPElementType type) {
|
||||||
|
|
||||||
|
return NSStringFromClass(ClassFromOPElementType(type));
|
||||||
|
}
|
||||||
|
|
||||||
static NSDictionary *OPTypes_ciphers = nil;
|
static NSDictionary *OPTypes_ciphers = nil;
|
||||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter) {
|
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter) {
|
||||||
|
|
||||||
assert(type & OPElementTypeCalculated);
|
assert(type & OPElementTypeClassCalculated);
|
||||||
|
|
||||||
if (OPTypes_ciphers == nil)
|
if (OPTypes_ciphers == nil)
|
||||||
OPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ciphers"
|
OPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ciphers"
|
||||||
|
@ -54,6 +54,8 @@
|
|||||||
<array>
|
<array>
|
||||||
<string>armv7</string>
|
<string>armv7</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UIStatusBarStyle</key>
|
||||||
|
<string>UIStatusBarStyleBlackOpaque</string>
|
||||||
<key>UISupportedInterfaceOrientations</key>
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
<array>
|
<array>
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
Before Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 972 B |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 953 B |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 941 B |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 936 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 781 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 905 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1013 B |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 335 B |
Before Width: | Height: | Size: 971 B |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1013 B |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 776 B |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 732 B |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 928 B |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.6 KiB |