Move Spectre migration dialogs fully global & make closeable.
This commit is contained in:
parent
f27607e63c
commit
5de9b05299
@ -30,8 +30,6 @@
|
|||||||
@property(nonatomic, strong) IBOutlet UIView *badNameTipContainer;
|
@property(nonatomic, strong) IBOutlet UIView *badNameTipContainer;
|
||||||
@property(nonatomic, strong) IBOutlet UIView *popdownView;
|
@property(nonatomic, strong) IBOutlet UIView *popdownView;
|
||||||
@property(nonatomic, strong) IBOutlet UIView *popdownContainer;
|
@property(nonatomic, strong) IBOutlet UIView *popdownContainer;
|
||||||
@property(nonatomic, strong) IBOutlet UIView *spectreInstallAlert;
|
|
||||||
@property(nonatomic, strong) IBOutlet UIView *spectreMigrateAlert;
|
|
||||||
|
|
||||||
@property(assign, nonatomic) BOOL active;
|
@property(assign, nonatomic) BOOL active;
|
||||||
|
|
||||||
@ -39,6 +37,5 @@
|
|||||||
- (void)reloadSites;
|
- (void)reloadSites;
|
||||||
|
|
||||||
- (IBAction)dismissPopdown:(id)sender;
|
- (IBAction)dismissPopdown:(id)sender;
|
||||||
- (IBAction)upgradeSpectre:(UIButton *)sender;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -74,7 +74,6 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
|
|
||||||
[self registerObservers];
|
[self registerObservers];
|
||||||
[self updateConfigKey:nil];
|
[self updateConfigKey:nil];
|
||||||
[self updateSpectreAlerts];
|
|
||||||
|
|
||||||
static NSRegularExpression *bareHostRE = nil;
|
static NSRegularExpression *bareHostRE = nil;
|
||||||
static dispatch_once_t once = 0;
|
static dispatch_once_t once = 0;
|
||||||
@ -318,7 +317,6 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
PearlAddNotificationObserver( UIApplicationWillEnterForegroundNotification, nil, [NSOperationQueue mainQueue],
|
PearlAddNotificationObserver( UIApplicationWillEnterForegroundNotification, nil, [NSOperationQueue mainQueue],
|
||||||
^(MPSitesViewController *self, NSNotification *note) {
|
^(MPSitesViewController *self, NSNotification *note) {
|
||||||
[self viewWillAppear:YES];
|
[self viewWillAppear:YES];
|
||||||
[self updateSpectreAlerts];
|
|
||||||
} );
|
} );
|
||||||
PearlAddNotificationObserver( MPSignedOutNotification, nil, nil,
|
PearlAddNotificationObserver( MPSignedOutNotification, nil, nil,
|
||||||
^(MPSitesViewController *self, NSNotification *note) {
|
^(MPSitesViewController *self, NSNotification *note) {
|
||||||
@ -466,24 +464,4 @@ typedef NS_OPTIONS( NSUInteger, MPPasswordsTips ) {
|
|||||||
self.popdownToTopConstraint.priority = UILayoutPriorityDefaultHigh;
|
self.popdownToTopConstraint.priority = UILayoutPriorityDefaultHigh;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)upgradeSpectre:(UIButton *)sender {
|
|
||||||
|
|
||||||
[[MPiOSAppDelegate get] migrateFor:[MPiOSAppDelegate get].activeUserForMainThread];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - Private
|
|
||||||
|
|
||||||
- (void)updateSpectreAlerts {
|
|
||||||
|
|
||||||
BOOL spectreInstalled = [UIApp canOpenURL:[[NSURL alloc] initWithString:@"spectre:"]];
|
|
||||||
if (spectreInstalled) {
|
|
||||||
self.spectreInstallAlert.visible = NO;
|
|
||||||
self.spectreMigrateAlert.visible = YES;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
self.spectreInstallAlert.visible = [MPiOSAppDelegate get].spectreViewController != nil;
|
|
||||||
self.spectreMigrateAlert.visible = NO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -36,11 +36,13 @@
|
|||||||
@property(weak, nonatomic) IBOutlet UIButton *previousAvatarButton;
|
@property(weak, nonatomic) IBOutlet UIButton *previousAvatarButton;
|
||||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint *keyboardHeightConstraint;
|
@property(weak, nonatomic) IBOutlet NSLayoutConstraint *keyboardHeightConstraint;
|
||||||
@property(weak, nonatomic) IBOutlet UIView *spectreInstallAlert;
|
@property(weak, nonatomic) IBOutlet UIView *spectreInstallAlert;
|
||||||
|
@property(weak, nonatomic) IBOutlet UIView *spectreMigrateAlert;
|
||||||
|
|
||||||
@property(assign, nonatomic, readonly) BOOL active;
|
@property(assign, nonatomic, readonly) BOOL active;
|
||||||
|
|
||||||
- (void)setActive:(BOOL)active animated:(BOOL)animated;
|
- (void)setActive:(BOOL)active animated:(BOOL)animated;
|
||||||
- (IBAction)changeAvatar:(UIButton *)sender;
|
- (IBAction)changeAvatar:(UIButton *)sender;
|
||||||
- (IBAction)upgradeSpectre:(UIButton *)sender;
|
- (IBAction)upgradeSpectre:(UIButton *)sender;
|
||||||
|
- (IBAction)dismissSpectre:(UIButton *)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -733,9 +733,11 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
|||||||
BOOL spectreInstalled = [UIApp canOpenURL:[[NSURL alloc] initWithString:@"spectre:"]];
|
BOOL spectreInstalled = [UIApp canOpenURL:[[NSURL alloc] initWithString:@"spectre:"]];
|
||||||
if (spectreInstalled) {
|
if (spectreInstalled) {
|
||||||
self.spectreInstallAlert.visible = NO;
|
self.spectreInstallAlert.visible = NO;
|
||||||
|
self.spectreMigrateAlert.visible = YES;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.spectreInstallAlert.visible = [MPiOSAppDelegate get].spectreViewController != nil;
|
self.spectreInstallAlert.visible = [MPiOSAppDelegate get].spectreViewController != nil;
|
||||||
|
self.spectreMigrateAlert.visible = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -922,7 +924,13 @@ referenceSizeForFooterInSection:(NSInteger)section {
|
|||||||
|
|
||||||
- (IBAction)upgradeSpectre:(UIButton *)sender {
|
- (IBAction)upgradeSpectre:(UIButton *)sender {
|
||||||
|
|
||||||
[[MPiOSAppDelegate get] migrateFor:nil];
|
[[MPiOSAppDelegate get] migrateFor:[MPiOSAppDelegate get].activeUserForMainThread];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)dismissSpectre:(UIButton *)sender {
|
||||||
|
|
||||||
|
self.spectreInstallAlert.visible = NO;
|
||||||
|
self.spectreMigrateAlert.visible = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -387,7 +387,7 @@
|
|||||||
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOT-TZ-yse" userLabel="Install Spectre Tip">
|
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOT-TZ-yse" userLabel="Install Spectre Tip">
|
||||||
<rect key="frame" x="0.0" y="740" width="414" height="156"/>
|
<rect key="frame" x="0.0" y="740" width="414" height="156"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ded-Ii-gyf">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ded-Ii-gyf" userLabel="Migrate">
|
||||||
<rect key="frame" x="8" y="8" width="398" height="106"/>
|
<rect key="frame" x="8" y="8" width="398" height="106"/>
|
||||||
<state key="normal" backgroundImage="tip_alert_black"/>
|
<state key="normal" backgroundImage="tip_alert_black"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -395,7 +395,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bqa-qH-Bia">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bqa-qH-Bia">
|
||||||
<rect key="frame" x="80" y="15" width="315" height="84"/>
|
<rect key="frame" x="80" y="15" width="267" height="84"/>
|
||||||
<string key="text">The next generation of password security is now called «Spectre»:
|
<string key="text">The next generation of password security is now called «Spectre»:
|
||||||
Tap to install the upgrade.
|
Tap to install the upgrade.
|
||||||
|
|
||||||
@ -404,23 +404,74 @@ This app is now out of maintenance.</string>
|
|||||||
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" horizontalCompressionResistancePriority="751" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tDY-IR-ak2" userLabel="Close">
|
||||||
|
<rect key="frame" x="347" y="20" width="47" height="31"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title="╳"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="dismissSpectre:" destination="S8q-YF-Kt9" eventType="touchUpInside" id="7a6-W3-NIK"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="bqa-qH-Bia" firstAttribute="trailing" secondItem="ded-Ii-gyf" secondAttribute="trailing" constant="-11" id="2gN-5G-boh"/>
|
|
||||||
<constraint firstItem="ded-Ii-gyf" firstAttribute="leading" secondItem="tOT-TZ-yse" secondAttribute="leadingMargin" id="3fy-Qc-KlM"/>
|
<constraint firstItem="ded-Ii-gyf" firstAttribute="leading" secondItem="tOT-TZ-yse" secondAttribute="leadingMargin" id="3fy-Qc-KlM"/>
|
||||||
<constraint firstItem="bqa-qH-Bia" firstAttribute="top" secondItem="ded-Ii-gyf" secondAttribute="top" constant="7" id="8Rd-qC-ttx"/>
|
<constraint firstItem="bqa-qH-Bia" firstAttribute="top" secondItem="ded-Ii-gyf" secondAttribute="top" constant="7" id="8Rd-qC-ttx"/>
|
||||||
<constraint firstItem="bqa-qH-Bia" firstAttribute="bottom" secondItem="ded-Ii-gyf" secondAttribute="bottom" constant="-15" id="VLO-QZ-6Jf"/>
|
<constraint firstItem="bqa-qH-Bia" firstAttribute="bottom" secondItem="ded-Ii-gyf" secondAttribute="bottom" constant="-15" id="VLO-QZ-6Jf"/>
|
||||||
<constraint firstItem="ded-Ii-gyf" firstAttribute="top" secondItem="tOT-TZ-yse" secondAttribute="topMargin" id="Y6k-Ep-Skv"/>
|
<constraint firstItem="ded-Ii-gyf" firstAttribute="top" secondItem="tOT-TZ-yse" secondAttribute="topMargin" id="Y6k-Ep-Skv"/>
|
||||||
<constraint firstAttribute="trailingMargin" secondItem="ded-Ii-gyf" secondAttribute="trailing" id="d8e-pL-U3v"/>
|
<constraint firstAttribute="trailingMargin" secondItem="ded-Ii-gyf" secondAttribute="trailing" id="d8e-pL-U3v"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="tDY-IR-ak2" secondAttribute="trailing" constant="20" symbolic="YES" id="lb2-4g-zJV"/>
|
||||||
<constraint firstItem="bqa-qH-Bia" firstAttribute="leading" secondItem="ded-Ii-gyf" secondAttribute="leading" constant="72" id="nD7-ie-dHF"/>
|
<constraint firstItem="bqa-qH-Bia" firstAttribute="leading" secondItem="ded-Ii-gyf" secondAttribute="leading" constant="72" id="nD7-ie-dHF"/>
|
||||||
|
<constraint firstItem="tDY-IR-ak2" firstAttribute="top" secondItem="tOT-TZ-yse" secondAttribute="top" constant="20" symbolic="YES" id="pDc-SL-x9W"/>
|
||||||
|
<constraint firstItem="tDY-IR-ak2" firstAttribute="leading" secondItem="bqa-qH-Bia" secondAttribute="trailing" id="suM-kx-xRY"/>
|
||||||
<constraint firstAttribute="bottomMargin" secondItem="ded-Ii-gyf" secondAttribute="bottom" id="xzD-vT-p1O"/>
|
<constraint firstAttribute="bottomMargin" secondItem="ded-Ii-gyf" secondAttribute="bottom" id="xzD-vT-p1O"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
|
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e7i-8u-nyd" userLabel="Migrate Spectre Tip">
|
||||||
|
<rect key="frame" x="0.0" y="740" width="414" height="156"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4s3-Ex-jpT" userLabel="Migrate">
|
||||||
|
<rect key="frame" x="8" y="8" width="398" height="106"/>
|
||||||
|
<state key="normal" backgroundImage="tip_alert_black"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="upgradeSpectre:" destination="S8q-YF-Kt9" eventType="touchUpInside" id="059-Sa-0EF"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bWt-lb-7xL">
|
||||||
|
<rect key="frame" x="80" y="15" width="267" height="84"/>
|
||||||
|
<string key="text">The next generation of password security is now called «Spectre»:
|
||||||
|
Tap to copy your user into Spectre.
|
||||||
|
|
||||||
|
This app is now out of maintenance.</string>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
||||||
|
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" horizontalCompressionResistancePriority="751" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3WO-6r-WEn" userLabel="Close">
|
||||||
|
<rect key="frame" x="347" y="20" width="47" height="31"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title="╳"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="dismissSpectre:" destination="S8q-YF-Kt9" eventType="touchUpInside" id="aEC-nX-WeV"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="3WO-6r-WEn" firstAttribute="leading" secondItem="bWt-lb-7xL" secondAttribute="trailing" id="49f-Eg-XMb"/>
|
||||||
|
<constraint firstItem="bWt-lb-7xL" firstAttribute="leading" secondItem="4s3-Ex-jpT" secondAttribute="leading" constant="72" id="4rw-uH-p06"/>
|
||||||
|
<constraint firstItem="3WO-6r-WEn" firstAttribute="top" secondItem="e7i-8u-nyd" secondAttribute="top" constant="20" id="50L-TI-WJ8"/>
|
||||||
|
<constraint firstItem="bWt-lb-7xL" firstAttribute="top" secondItem="4s3-Ex-jpT" secondAttribute="top" constant="7" id="AwO-Pj-Wnr"/>
|
||||||
|
<constraint firstAttribute="bottomMargin" secondItem="4s3-Ex-jpT" secondAttribute="bottom" id="LWF-xQ-l5k"/>
|
||||||
|
<constraint firstItem="4s3-Ex-jpT" firstAttribute="leading" secondItem="e7i-8u-nyd" secondAttribute="leadingMargin" id="OKe-0I-vdR"/>
|
||||||
|
<constraint firstItem="4s3-Ex-jpT" firstAttribute="top" secondItem="e7i-8u-nyd" secondAttribute="topMargin" id="TRy-eS-Ch4"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="3WO-6r-WEn" secondAttribute="trailing" constant="20" id="aPO-KL-k9X"/>
|
||||||
|
<constraint firstItem="bWt-lb-7xL" firstAttribute="bottom" secondItem="4s3-Ex-jpT" secondAttribute="bottom" constant="-15" id="cYX-vL-MKX"/>
|
||||||
|
<constraint firstAttribute="trailingMargin" secondItem="4s3-Ex-jpT" secondAttribute="trailing" id="lRd-Hq-SH2"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="centerX" secondItem="VDd-oM-ZOO" secondAttribute="centerX" id="0j9-vM-WFA"/>
|
<constraint firstAttribute="centerX" secondItem="VDd-oM-ZOO" secondAttribute="centerX" id="0j9-vM-WFA"/>
|
||||||
<constraint firstItem="cF4-TE-GEj" firstAttribute="bottom" secondItem="9u7-pu-Wtv" secondAttribute="top" priority="500" id="3oq-Zs-Ann"/>
|
<constraint firstItem="cF4-TE-GEj" firstAttribute="bottom" secondItem="9u7-pu-Wtv" secondAttribute="top" priority="500" id="3oq-Zs-Ann"/>
|
||||||
<constraint firstItem="0Um-Ot-hI6" firstAttribute="top" secondItem="zCP-wo-gTl" secondAttribute="centerY" id="6zz-7f-HLz"/>
|
<constraint firstItem="0Um-Ot-hI6" firstAttribute="top" secondItem="zCP-wo-gTl" secondAttribute="centerY" id="6zz-7f-HLz"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="e7i-8u-nyd" secondAttribute="bottom" id="7Ar-nL-Xkt"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="L6J-pd-gcp" secondAttribute="trailing" id="9fV-8e-y3E"/>
|
<constraint firstAttribute="trailing" secondItem="L6J-pd-gcp" secondAttribute="trailing" id="9fV-8e-y3E"/>
|
||||||
<constraint firstItem="fUK-gJ-NRE" firstAttribute="centerY" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="60" id="ADW-TA-Iha"/>
|
<constraint firstItem="fUK-gJ-NRE" firstAttribute="centerY" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="60" id="ADW-TA-Iha"/>
|
||||||
<constraint firstItem="9u7-pu-Wtv" firstAttribute="centerY" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="60" id="AQZ-W6-Xkf"/>
|
<constraint firstItem="9u7-pu-Wtv" firstAttribute="centerY" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="60" id="AQZ-W6-Xkf"/>
|
||||||
@ -434,10 +485,12 @@ This app is now out of maintenance.</string>
|
|||||||
<constraint firstAttribute="trailing" secondItem="fUK-gJ-NRE" secondAttribute="trailing" id="TBr-pS-kEK"/>
|
<constraint firstAttribute="trailing" secondItem="fUK-gJ-NRE" secondAttribute="trailing" id="TBr-pS-kEK"/>
|
||||||
<constraint firstItem="tOT-TZ-yse" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="UKi-XP-1Kp"/>
|
<constraint firstItem="tOT-TZ-yse" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="UKi-XP-1Kp"/>
|
||||||
<constraint firstItem="cF4-TE-GEj" firstAttribute="top" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="4" id="VHh-25-0mJ"/>
|
<constraint firstItem="cF4-TE-GEj" firstAttribute="top" relation="greaterThanOrEqual" secondItem="L6J-pd-gcp" secondAttribute="top" constant="4" id="VHh-25-0mJ"/>
|
||||||
|
<constraint firstItem="e7i-8u-nyd" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="Xlw-Qz-6a5"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="qp1-nX-o4i" secondAttribute="trailing" id="cOq-BS-Xmo"/>
|
<constraint firstAttribute="trailing" secondItem="qp1-nX-o4i" secondAttribute="trailing" id="cOq-BS-Xmo"/>
|
||||||
<constraint firstAttribute="centerY" secondItem="VDd-oM-ZOO" secondAttribute="centerY" id="dxP-im-1dM"/>
|
<constraint firstAttribute="centerY" secondItem="VDd-oM-ZOO" secondAttribute="centerY" id="dxP-im-1dM"/>
|
||||||
<constraint firstItem="zCP-wo-gTl" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="jBY-Gd-orW"/>
|
<constraint firstItem="zCP-wo-gTl" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="jBY-Gd-orW"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="L6J-pd-gcp" secondAttribute="bottom" id="jNR-Gp-sIv"/>
|
<constraint firstAttribute="bottom" secondItem="L6J-pd-gcp" secondAttribute="bottom" id="jNR-Gp-sIv"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="e7i-8u-nyd" secondAttribute="trailing" id="kOK-ch-Lxv"/>
|
||||||
<constraint firstItem="XEP-O3-ayG" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="pAt-0Y-LYv"/>
|
<constraint firstItem="XEP-O3-ayG" firstAttribute="leading" secondItem="rWM-08-aab" secondAttribute="leading" id="pAt-0Y-LYv"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="zCP-wo-gTl" secondAttribute="trailing" id="rGd-K4-pHL"/>
|
<constraint firstAttribute="trailing" secondItem="zCP-wo-gTl" secondAttribute="trailing" id="rGd-K4-pHL"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="XEP-O3-ayG" secondAttribute="trailing" id="raD-hD-OYt"/>
|
<constraint firstAttribute="trailing" secondItem="XEP-O3-ayG" secondAttribute="trailing" id="raD-hD-OYt"/>
|
||||||
@ -477,6 +530,8 @@ This app is now out of maintenance.</string>
|
|||||||
<outlet property="nextAvatarButton" destination="fUK-gJ-NRE" id="5qo-lK-rSa"/>
|
<outlet property="nextAvatarButton" destination="fUK-gJ-NRE" id="5qo-lK-rSa"/>
|
||||||
<outlet property="preferencesTipContainer" destination="0Um-Ot-hI6" id="Cv8-Bp-ZZs"/>
|
<outlet property="preferencesTipContainer" destination="0Um-Ot-hI6" id="Cv8-Bp-ZZs"/>
|
||||||
<outlet property="previousAvatarButton" destination="9u7-pu-Wtv" id="Hgv-lN-S1n"/>
|
<outlet property="previousAvatarButton" destination="9u7-pu-Wtv" id="Hgv-lN-S1n"/>
|
||||||
|
<outlet property="spectreInstallAlert" destination="tOT-TZ-yse" id="2hk-xb-psR"/>
|
||||||
|
<outlet property="spectreMigrateAlert" destination="e7i-8u-nyd" id="6oI-L9-VgE"/>
|
||||||
<outlet property="storeLoadingActivity" destination="VDd-oM-ZOO" id="MJ7-2f-e8n"/>
|
<outlet property="storeLoadingActivity" destination="VDd-oM-ZOO" id="MJ7-2f-e8n"/>
|
||||||
<outlet property="thanksTipContainer" destination="069-Pu-yXe" id="wWf-2X-Ryw"/>
|
<outlet property="thanksTipContainer" destination="069-Pu-yXe" id="wWf-2X-Ryw"/>
|
||||||
<outlet property="userSelectionContainer" destination="rWM-08-aab" id="Yme-hX-8P0"/>
|
<outlet property="userSelectionContainer" destination="rWM-08-aab" id="Yme-hX-8P0"/>
|
||||||
@ -484,7 +539,7 @@ This app is now out of maintenance.</string>
|
|||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8hZ-Tb-wZw" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="8hZ-Tb-wZw" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="2041" y="226"/>
|
<point key="canvasLocation" x="2040.5797101449277" y="225.66964285714283"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Web View Controller-->
|
<!--Web View Controller-->
|
||||||
<scene sceneID="JQz-u7-oA7">
|
<scene sceneID="JQz-u7-oA7">
|
||||||
@ -1707,70 +1762,6 @@ eg. apple.com, rmitchell@twitter.com</string>
|
|||||||
</view>
|
</view>
|
||||||
<blurEffect style="regular"/>
|
<blurEffect style="regular"/>
|
||||||
</visualEffectView>
|
</visualEffectView>
|
||||||
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3ve-eR-1IW">
|
|
||||||
<rect key="frame" x="0.0" y="740" width="414" height="156"/>
|
|
||||||
<subviews>
|
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PWC-I5-RSl">
|
|
||||||
<rect key="frame" x="8" y="8" width="398" height="106"/>
|
|
||||||
<state key="normal" backgroundImage="tip_alert_black"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="upgradeSpectre:" destination="nkY-z6-8jd" eventType="touchUpInside" id="8KJ-vm-3D0"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XgC-Ky-oVC">
|
|
||||||
<rect key="frame" x="80" y="15" width="315" height="84"/>
|
|
||||||
<string key="text">The next generation of password security is now called «Spectre»:
|
|
||||||
Tap to install the upgrade.
|
|
||||||
|
|
||||||
This app is now out of maintenance.</string>
|
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
|
||||||
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="PWC-I5-RSl" firstAttribute="top" secondItem="3ve-eR-1IW" secondAttribute="topMargin" id="0gi-j6-mfg"/>
|
|
||||||
<constraint firstItem="XgC-Ky-oVC" firstAttribute="leading" secondItem="PWC-I5-RSl" secondAttribute="leading" constant="72" id="E88-An-rzp"/>
|
|
||||||
<constraint firstAttribute="bottomMargin" secondItem="PWC-I5-RSl" secondAttribute="bottom" id="FrN-5c-k1V"/>
|
|
||||||
<constraint firstItem="XgC-Ky-oVC" firstAttribute="trailing" secondItem="PWC-I5-RSl" secondAttribute="trailing" constant="-11" id="Scl-zE-fTg"/>
|
|
||||||
<constraint firstAttribute="trailingMargin" secondItem="PWC-I5-RSl" secondAttribute="trailing" id="gwp-DL-I06"/>
|
|
||||||
<constraint firstItem="XgC-Ky-oVC" firstAttribute="bottom" secondItem="PWC-I5-RSl" secondAttribute="bottom" constant="-15" id="hFa-k3-yr9"/>
|
|
||||||
<constraint firstItem="PWC-I5-RSl" firstAttribute="leading" secondItem="3ve-eR-1IW" secondAttribute="leadingMargin" id="jod-TY-7Iu"/>
|
|
||||||
<constraint firstItem="XgC-Ky-oVC" firstAttribute="top" secondItem="PWC-I5-RSl" secondAttribute="top" constant="7" id="yjZ-x1-6JY"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="67c-5R-Foa">
|
|
||||||
<rect key="frame" x="0.0" y="740" width="414" height="156"/>
|
|
||||||
<subviews>
|
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="EZK-er-8ql">
|
|
||||||
<rect key="frame" x="8" y="8" width="398" height="106"/>
|
|
||||||
<state key="normal" backgroundImage="tip_alert_black"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="upgradeSpectre:" destination="nkY-z6-8jd" eventType="touchUpInside" id="P4a-tL-9yX"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fLB-gA-32p">
|
|
||||||
<rect key="frame" x="80" y="15" width="315" height="84"/>
|
|
||||||
<string key="text">The next generation of password security is now called «Spectre»:
|
|
||||||
Tap to copy this user into Spectre.
|
|
||||||
|
|
||||||
This app is now out of maintenance.</string>
|
|
||||||
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="14"/>
|
|
||||||
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailingMargin" secondItem="EZK-er-8ql" secondAttribute="trailing" id="2v6-0n-EXu"/>
|
|
||||||
<constraint firstItem="fLB-gA-32p" firstAttribute="bottom" secondItem="EZK-er-8ql" secondAttribute="bottom" constant="-15" id="KET-Ct-225"/>
|
|
||||||
<constraint firstAttribute="bottomMargin" secondItem="EZK-er-8ql" secondAttribute="bottom" id="LqJ-v9-IDf"/>
|
|
||||||
<constraint firstItem="fLB-gA-32p" firstAttribute="trailing" secondItem="EZK-er-8ql" secondAttribute="trailing" constant="-11" id="ivM-cA-Fn9"/>
|
|
||||||
<constraint firstItem="fLB-gA-32p" firstAttribute="leading" secondItem="EZK-er-8ql" secondAttribute="leading" constant="72" id="iwL-1a-Tgo"/>
|
|
||||||
<constraint firstItem="fLB-gA-32p" firstAttribute="top" secondItem="EZK-er-8ql" secondAttribute="top" constant="7" id="mHI-WQ-tMx"/>
|
|
||||||
<constraint firstItem="EZK-er-8ql" firstAttribute="top" secondItem="67c-5R-Foa" secondAttribute="topMargin" id="xMX-Iy-gkw"/>
|
|
||||||
<constraint firstItem="EZK-er-8ql" firstAttribute="leading" secondItem="67c-5R-Foa" secondAttribute="leadingMargin" id="ycd-o8-QVl"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<view opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XNM-XQ-rMe" userLabel="Popdown">
|
<view opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XNM-XQ-rMe" userLabel="Popdown">
|
||||||
<rect key="frame" x="0.0" y="-896" width="414" height="896"/>
|
<rect key="frame" x="0.0" y="-896" width="414" height="896"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
@ -1814,13 +1805,8 @@ This app is now out of maintenance.</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="0.1215686275" green="0.12941176469999999" blue="0.14117647059999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="0.1215686275" green="0.12941176469999999" blue="0.14117647059999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" secondItem="67c-5R-Foa" secondAttribute="trailing" id="0mY-Tq-ZT4"/>
|
|
||||||
<constraint firstItem="cHF-cD-2Ge" firstAttribute="top" secondItem="XNM-XQ-rMe" secondAttribute="bottom" id="6V9-tX-50t"/>
|
<constraint firstItem="cHF-cD-2Ge" firstAttribute="top" secondItem="XNM-XQ-rMe" secondAttribute="bottom" id="6V9-tX-50t"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="3ve-eR-1IW" secondAttribute="trailing" id="7hd-C3-Akk"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="67c-5R-Foa" secondAttribute="bottom" id="8xp-Si-tWG"/>
|
|
||||||
<constraint firstAttribute="top" secondItem="XNM-XQ-rMe" secondAttribute="bottom" priority="750" id="BdD-Kc-eHl"/>
|
<constraint firstAttribute="top" secondItem="XNM-XQ-rMe" secondAttribute="bottom" priority="750" id="BdD-Kc-eHl"/>
|
||||||
<constraint firstItem="67c-5R-Foa" firstAttribute="leading" secondItem="tI8-OT-LrO" secondAttribute="leading" id="Ftn-Yi-mdI"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="3ve-eR-1IW" secondAttribute="bottom" id="GOa-ky-jfJ"/>
|
|
||||||
<constraint firstItem="uuT-jm-2La" firstAttribute="bottom" secondItem="S9X-2T-e1e" secondAttribute="bottom" priority="500" constant="44" id="HAi-jL-BdJ"/>
|
<constraint firstItem="uuT-jm-2La" firstAttribute="bottom" secondItem="S9X-2T-e1e" secondAttribute="bottom" priority="500" constant="44" id="HAi-jL-BdJ"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="K2e-Gh-7hH" secondAttribute="trailing" id="Hnk-mU-GSd"/>
|
<constraint firstAttribute="trailing" secondItem="K2e-Gh-7hH" secondAttribute="trailing" id="Hnk-mU-GSd"/>
|
||||||
<constraint firstAttribute="top" secondItem="cHF-cD-2Ge" secondAttribute="bottom" priority="1" id="JO5-ph-0ce"/>
|
<constraint firstAttribute="top" secondItem="cHF-cD-2Ge" secondAttribute="bottom" priority="1" id="JO5-ph-0ce"/>
|
||||||
@ -1832,7 +1818,6 @@ This app is now out of maintenance.</string>
|
|||||||
<constraint firstItem="cHF-cD-2Ge" firstAttribute="leading" secondItem="tI8-OT-LrO" secondAttribute="leading" id="TJC-eP-DDE"/>
|
<constraint firstItem="cHF-cD-2Ge" firstAttribute="leading" secondItem="tI8-OT-LrO" secondAttribute="leading" id="TJC-eP-DDE"/>
|
||||||
<constraint firstItem="uuT-jm-2La" firstAttribute="bottom" secondItem="VOY-zU-XQR" secondAttribute="bottom" id="U4C-1P-lIR"/>
|
<constraint firstItem="uuT-jm-2La" firstAttribute="bottom" secondItem="VOY-zU-XQR" secondAttribute="bottom" id="U4C-1P-lIR"/>
|
||||||
<constraint firstItem="K2e-Gh-7hH" firstAttribute="height" secondItem="tI8-OT-LrO" secondAttribute="height" id="Xfe-XT-eOn"/>
|
<constraint firstItem="K2e-Gh-7hH" firstAttribute="height" secondItem="tI8-OT-LrO" secondAttribute="height" id="Xfe-XT-eOn"/>
|
||||||
<constraint firstItem="3ve-eR-1IW" firstAttribute="leading" secondItem="tI8-OT-LrO" secondAttribute="leading" id="bKZ-qF-SL5"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="XNM-XQ-rMe" secondAttribute="trailing" id="bgl-u9-shU"/>
|
<constraint firstAttribute="trailing" secondItem="XNM-XQ-rMe" secondAttribute="trailing" id="bgl-u9-shU"/>
|
||||||
<constraint firstItem="K2e-Gh-7hH" firstAttribute="top" secondItem="tI8-OT-LrO" secondAttribute="bottom" priority="1" id="dNt-uf-8BC"/>
|
<constraint firstItem="K2e-Gh-7hH" firstAttribute="top" secondItem="tI8-OT-LrO" secondAttribute="bottom" priority="1" id="dNt-uf-8BC"/>
|
||||||
<constraint firstItem="K2e-Gh-7hH" firstAttribute="top" secondItem="tI8-OT-LrO" secondAttribute="top" priority="500" id="vtB-e4-L8o"/>
|
<constraint firstItem="K2e-Gh-7hH" firstAttribute="top" secondItem="tI8-OT-LrO" secondAttribute="top" priority="500" id="vtB-e4-L8o"/>
|
||||||
@ -1851,8 +1836,6 @@ This app is now out of maintenance.</string>
|
|||||||
<outlet property="popdownView" destination="XNM-XQ-rMe" id="FaW-4m-Fff"/>
|
<outlet property="popdownView" destination="XNM-XQ-rMe" id="FaW-4m-Fff"/>
|
||||||
<outlet property="searchBar" destination="aGs-1S-aC3" id="rTp-DP-rIz"/>
|
<outlet property="searchBar" destination="aGs-1S-aC3" id="rTp-DP-rIz"/>
|
||||||
<outlet property="sitesToBottomConstraint" destination="dNt-uf-8BC" id="Ta6-eL-z7w"/>
|
<outlet property="sitesToBottomConstraint" destination="dNt-uf-8BC" id="Ta6-eL-z7w"/>
|
||||||
<outlet property="spectreInstallAlert" destination="3ve-eR-1IW" id="Ah5-OX-XhQ"/>
|
|
||||||
<outlet property="spectreMigrateAlert" destination="67c-5R-Foa" id="aTi-fu-opO"/>
|
|
||||||
<segue destination="z9O-w0-6oR" kind="modal" identifier="guide" id="Ql4-wf-T8u"/>
|
<segue destination="z9O-w0-6oR" kind="modal" identifier="guide" id="Ql4-wf-T8u"/>
|
||||||
<segue destination="Foa-Er-RBr" kind="custom" identifier="message" customClass="MPOverlaySegue" id="Xne-Sm-HQt"/>
|
<segue destination="Foa-Er-RBr" kind="custom" identifier="message" customClass="MPOverlaySegue" id="Xne-Sm-HQt"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
Loading…
Reference in New Issue
Block a user