From 06ca3c92909e59c47320a9cc2bb6333222b2368e Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Fri, 18 Nov 2016 17:11:56 -0500 Subject: [PATCH] Mail and Message invite flow * Spruce up compose contact-picker - Fix random sorting for contacts missing first or last name - Add Avatar to contact picker - de-dupe contacts Better copy for INVALID_MESSAGE error. // FREEBIE --- Signal.xcodeproj/project.pbxproj | 4 + .../Contents.json | 23 ++ .../logo_with_background.png | Bin 0 -> 12337 bytes .../logo_with_background@2x.png | Bin 0 -> 25298 bytes .../logo_with_background@3x.png | Bin 0 -> 16135 bytes Signal/Signal-Info.plist | 2 +- Signal/src/Models/OWSContactAvatarBuilder.h | 4 + Signal/src/Models/OWSContactAvatarBuilder.m | 32 ++- Signal/src/Signal-Bridging-Header.h | 1 + Signal/src/Storyboard/Main.storyboard | 81 ++++-- Signal/src/contact/OWSContactsManager.h | 1 + Signal/src/contact/OWSContactsManager.m | 63 ++++- Signal/src/util/UIUtil.h | 2 +- Signal/src/util/UIUtil.m | 17 +- .../AboutTableViewController.m | 60 +--- .../view controllers/InCallViewController.m | 2 +- .../src/view controllers/InboxTableViewCell.m | 2 +- Signal/src/view controllers/InviteFlow.swift | 257 ++++++++++++++++++ .../MessageComposeTableViewController.h | 4 + .../MessageComposeTableViewController.m | 137 +++++++--- .../SettingsTableViewController.h | 1 + .../SettingsTableViewController.m | 30 +- Signal/src/views/ContactTableViewCell.h | 11 +- Signal/src/views/ContactTableViewCell.m | 30 +- .../translations/ar.lproj/Localizable.strings | Bin 64344 -> 66722 bytes .../az_AZ.lproj/Localizable.strings | Bin 65042 -> 67134 bytes .../translations/bg.lproj/Localizable.strings | Bin 66938 -> 69292 bytes .../translations/bs.lproj/Localizable.strings | Bin 66158 -> 68530 bytes .../translations/ca.lproj/Localizable.strings | Bin 66926 -> 69570 bytes .../translations/cs.lproj/Localizable.strings | Bin 64534 -> 66978 bytes .../translations/da.lproj/Localizable.strings | Bin 65304 -> 67700 bytes .../translations/de.lproj/Localizable.strings | Bin 69422 -> 71762 bytes .../el_GR.lproj/Localizable.strings | Bin 67018 -> 69402 bytes .../translations/en.lproj/Localizable.strings | Bin 64498 -> 66870 bytes .../translations/es.lproj/Localizable.strings | Bin 67408 -> 69848 bytes .../translations/fa.lproj/Localizable.strings | Bin 66580 -> 68924 bytes .../translations/fi.lproj/Localizable.strings | Bin 67390 -> 69868 bytes .../fil.lproj/Localizable.strings | Bin 64590 -> 67028 bytes .../translations/fr.lproj/Localizable.strings | Bin 67328 -> 69708 bytes .../translations/gl.lproj/Localizable.strings | Bin 65596 -> 67994 bytes .../translations/he.lproj/Localizable.strings | Bin 62448 -> 64910 bytes .../translations/hr.lproj/Localizable.strings | Bin 66286 -> 68654 bytes .../translations/hu.lproj/Localizable.strings | Bin 66642 -> 69222 bytes .../translations/id.lproj/Localizable.strings | Bin 65746 -> 68112 bytes .../it_IT.lproj/Localizable.strings | Bin 66964 -> 69664 bytes .../ja_JP.lproj/Localizable.strings | Bin 55254 -> 57856 bytes .../ko_KR.lproj/Localizable.strings | Bin 61094 -> 63634 bytes .../translations/lv.lproj/Localizable.strings | Bin 65716 -> 68082 bytes .../translations/mk.lproj/Localizable.strings | Bin 66930 -> 69316 bytes .../nb_NO.lproj/Localizable.strings | Bin 65234 -> 67626 bytes .../translations/nl.lproj/Localizable.strings | Bin 66716 -> 69042 bytes .../translations/pl.lproj/Localizable.strings | Bin 65652 -> 68068 bytes .../pt_BR.lproj/Localizable.strings | Bin 66674 -> 69098 bytes .../pt_PT.lproj/Localizable.strings | Bin 66122 -> 68482 bytes .../translations/ro.lproj/Localizable.strings | Bin 67434 -> 69792 bytes .../translations/ru.lproj/Localizable.strings | Bin 66268 -> 68636 bytes .../translations/sl.lproj/Localizable.strings | Bin 66662 -> 68996 bytes .../translations/sn.lproj/Localizable.strings | Bin 66186 -> 69174 bytes .../translations/sq.lproj/Localizable.strings | Bin 66052 -> 68450 bytes .../sv_SE.lproj/Localizable.strings | Bin 65436 -> 67844 bytes .../th_TH.lproj/Localizable.strings | Bin 63722 -> 66154 bytes .../tr_TR.lproj/Localizable.strings | Bin 64750 -> 67146 bytes .../zh_CN.lproj/Localizable.strings | Bin 54720 -> 57292 bytes 63 files changed, 610 insertions(+), 154 deletions(-) create mode 100644 Signal/Images.xcassets/logo_with_background.imageset/Contents.json create mode 100644 Signal/Images.xcassets/logo_with_background.imageset/logo_with_background.png create mode 100644 Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@2x.png create mode 100644 Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@3x.png create mode 100644 Signal/src/view controllers/InviteFlow.swift diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 070daf54a..4be8bf9e1 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 453D28B71D32BA5F00D523F0 /* OWSDisplayedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 453D28B61D32BA5F00D523F0 /* OWSDisplayedMessage.m */; }; 453D28BA1D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 453D28B91D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m */; }; 453D28BB1D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 453D28B91D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m */; }; + 45514DE21DDFA183003EFF90 /* InviteFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45514DE11DDFA183003EFF90 /* InviteFlow.swift */; }; 45666EC61D99483D008FE134 /* OWSAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */; }; 45666EC91D994C0D008FE134 /* OWSGroupAvatarBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666EC81D994C0D008FE134 /* OWSGroupAvatarBuilder.m */; }; 45666F561D9B2827008FE134 /* OWSScrubbingLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45666F551D9B2827008FE134 /* OWSScrubbingLogFormatter.m */; }; @@ -565,6 +566,7 @@ 453D28B81D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessagesBubblesSizeCalculator.h; sourceTree = ""; }; 453D28B91D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMessagesBubblesSizeCalculator.m; sourceTree = ""; }; 454B35071D08EED80026D658 /* mk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mk; path = translations/mk.lproj/Localizable.strings; sourceTree = ""; }; + 45514DE11DDFA183003EFF90 /* InviteFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteFlow.swift; sourceTree = ""; }; 45666EC41D99483D008FE134 /* OWSAvatarBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSAvatarBuilder.h; sourceTree = ""; }; 45666EC51D99483D008FE134 /* OWSAvatarBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSAvatarBuilder.m; sourceTree = ""; }; 45666EC71D994C0D008FE134 /* OWSGroupAvatarBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSGroupAvatarBuilder.h; sourceTree = ""; }; @@ -1824,6 +1826,7 @@ 76EB050C18170B33006006FC /* InCallViewController.m */, 458E382F1D6682450094BD24 /* OWSQRCodeScanningViewController.h */, 458E38301D6682450094BD24 /* OWSQRCodeScanningViewController.m */, + 45514DE11DDFA183003EFF90 /* InviteFlow.swift */, ); name = "View Controllers"; path = "view controllers"; @@ -2834,6 +2837,7 @@ FCB11D931A12A4AA002F93FB /* FullImageViewController.m in Sources */, B60C16651988999D00E97A6C /* VersionMigrations.m in Sources */, B97940271832BD2400BD66CB /* UIUtil.m in Sources */, + 45514DE21DDFA183003EFF90 /* InviteFlow.swift in Sources */, 4CE0E3771B954546007210CF /* TSAnimatedAdapter.m in Sources */, 76EB05BE18170B33006006FC /* ConfirmPacket.m in Sources */, 4531C9C41DD8E6D800F08304 /* JSQMessagesCollectionViewCell+OWS.m in Sources */, diff --git a/Signal/Images.xcassets/logo_with_background.imageset/Contents.json b/Signal/Images.xcassets/logo_with_background.imageset/Contents.json new file mode 100644 index 000000000..8ad7b94b7 --- /dev/null +++ b/Signal/Images.xcassets/logo_with_background.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "logo_with_background.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "logo_with_background@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "logo_with_background@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background.png b/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e2193b69265f7db9d195581a5108b494f4737427 GIT binary patch literal 12337 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%0D~F3Z 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 literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@2x.png b/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..946afbcc4b776afe7329616f1df388acedfec384 GIT binary patch literal 25298 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≤PtGCsJzZKptV>?U-wn%7b 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 literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@3x.png b/Signal/Images.xcassets/logo_with_background.imageset/logo_with_background@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..38a056e1732d57a7da93cade5c461fd5442026ce GIT binary patch literal 16135 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 CFBundleVersion - 2.6.6.0 + 2.6.6.1 ITSAppUsesNonExemptEncryption LOGS_EMAIL diff --git a/Signal/src/Models/OWSContactAvatarBuilder.h b/Signal/src/Models/OWSContactAvatarBuilder.h index 01b22a6fa..6fceb151a 100644 --- a/Signal/src/Models/OWSContactAvatarBuilder.h +++ b/Signal/src/Models/OWSContactAvatarBuilder.h @@ -10,6 +10,10 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSContactAvatarBuilder : OWSAvatarBuilder +- (instancetype)initWithContactId:(NSString *)contactId + name:(NSString *)name + contactsManager:(OWSContactsManager *)contactsManager; + - (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager; @end diff --git a/Signal/src/Models/OWSContactAvatarBuilder.m b/Signal/src/Models/OWSContactAvatarBuilder.m index 1ed53a06b..1579cfa51 100644 --- a/Signal/src/Models/OWSContactAvatarBuilder.m +++ b/Signal/src/Models/OWSContactAvatarBuilder.m @@ -22,20 +22,28 @@ NS_ASSUME_NONNULL_BEGIN @implementation OWSContactAvatarBuilder -- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager +- (instancetype)initWithContactId:(NSString *)contactId + name:(NSString *)name + contactsManager:(OWSContactsManager *)contactsManager { self = [super init]; if (!self) { return self; } - _signalId = thread.contactIdentifier; - _contactName = thread.name; + _signalId = contactId; + _contactName = name; _contactsManager = contactsManager; return self; } + +- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager +{ + return [self initWithContactId:thread.contactIdentifier name:thread.name contactsManager:contactsManager]; +} + - (nullable UIImage *)buildSavedImage { return [self.contactsManager imageForPhoneIdentifier:self.signalId]; @@ -43,6 +51,11 @@ NS_ASSUME_NONNULL_BEGIN - (UIImage *)buildDefaultImage { + UIImage *cachedAvatar = [self.contactsManager.avatarCache objectForKey:self.signalId]; + if (cachedAvatar) { + return cachedAvatar; + } + NSMutableString *initials = [NSMutableString string]; if (self.contactName.length > 0) { @@ -61,11 +74,14 @@ NS_ASSUME_NONNULL_BEGIN UIColor *backgroundColor = [UIColor backgroundColorForContact:self.signalId]; - return [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials - backgroundColor:backgroundColor - textColor:[UIColor whiteColor] - font:[UIFont ows_boldFontWithSize:36.0] - diameter:100] avatarImage]; + UIImage *image = [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials + backgroundColor:backgroundColor + textColor:[UIColor whiteColor] + font:[UIFont ows_boldFontWithSize:36.0] + diameter:100] avatarImage]; + + [self.contactsManager.avatarCache setObject:image forKey:self.signalId]; + return image; } diff --git a/Signal/src/Signal-Bridging-Header.h b/Signal/src/Signal-Bridging-Header.h index 554d8bee3..50c4386b1 100644 --- a/Signal/src/Signal-Bridging-Header.h +++ b/Signal/src/Signal-Bridging-Header.h @@ -7,6 +7,7 @@ #import "PropertyListPreferences.h" #import "PushManager.h" #import "RPAccountManager.h" +#import "UIUtil.h" #import #import #import diff --git a/Signal/src/Storyboard/Main.storyboard b/Signal/src/Storyboard/Main.storyboard index f8bc1bd0e..52a48d0bf 100644 --- a/Signal/src/Storyboard/Main.storyboard +++ b/Signal/src/Storyboard/Main.storyboard @@ -1,5 +1,5 @@ - - + + @@ -1184,15 +1184,32 @@ + + + + + + + + + + + - + - +