From 3964b78ff762127fb90a90af9d17c5616d92ecff Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 1 Jun 2018 14:20:48 -0400 Subject: [PATCH] Reduce usage of JSQ. --- Signal.xcodeproj/project.pbxproj | 4 ++ Signal/AudioFiles/message_sent.aiff | Bin 0 -> 40616 bytes Signal/src/Models/AccountManager.swift | 4 +- Signal/src/Signal-Bridging-Header.h | 6 -- .../Cells/OWSAudioMessageView.m | 4 +- .../Cells/OWSContactOffersCell.m | 4 +- .../Cells/OWSContactShareView.m | 4 +- .../Cells/OWSGenericAttachmentView.m | 4 +- .../Cells/OWSMessageBubbleView.m | 4 +- .../Cells/OWSSystemMessageCell.m | 2 - .../Cells/OWSUnreadIndicatorCell.m | 5 +- .../ConversationViewController.m | 14 +--- .../MediaTileViewController.swift | 2 +- .../SafetyNumberConfirmationAlert.swift | 2 +- .../ExperienceUpgradeFinder.swift | 2 +- Signal/src/network/GiphyAPI.swift | 2 +- Signal/test/SignalTests-Bridging-Header.h | 4 +- .../translations/ar.lproj/Localizable.strings | 2 +- .../az_AZ.lproj/Localizable.strings | 2 +- .../translations/bg.lproj/Localizable.strings | 2 +- .../translations/bs.lproj/Localizable.strings | 2 +- .../translations/ca.lproj/Localizable.strings | 2 +- .../translations/cs.lproj/Localizable.strings | 2 +- .../translations/da.lproj/Localizable.strings | 2 +- .../translations/de.lproj/Localizable.strings | 2 +- .../el_GR.lproj/Localizable.strings | 2 +- .../translations/en.lproj/Localizable.strings | 2 +- .../translations/es.lproj/Localizable.strings | 2 +- .../translations/et.lproj/Localizable.strings | 2 +- .../translations/fa.lproj/Localizable.strings | 2 +- .../translations/fi.lproj/Localizable.strings | 2 +- .../fil.lproj/Localizable.strings | 2 +- .../translations/fr.lproj/Localizable.strings | 2 +- .../translations/gl.lproj/Localizable.strings | 2 +- .../translations/he.lproj/Localizable.strings | 2 +- .../translations/hr.lproj/Localizable.strings | 2 +- .../translations/hu.lproj/Localizable.strings | 2 +- .../translations/id.lproj/Localizable.strings | 2 +- .../it_IT.lproj/Localizable.strings | 2 +- .../ja_JP.lproj/Localizable.strings | 2 +- .../translations/km.lproj/Localizable.strings | 2 +- .../ko_KR.lproj/Localizable.strings | 2 +- .../translations/lt.lproj/Localizable.strings | 2 +- .../translations/lv.lproj/Localizable.strings | 2 +- .../translations/mk.lproj/Localizable.strings | 2 +- .../translations/my.lproj/Localizable.strings | 2 +- .../nb_NO.lproj/Localizable.strings | 2 +- .../translations/nl.lproj/Localizable.strings | 2 +- .../translations/pl.lproj/Localizable.strings | 2 +- .../pt_BR.lproj/Localizable.strings | 2 +- .../pt_PT.lproj/Localizable.strings | 2 +- .../translations/ro.lproj/Localizable.strings | 2 +- .../translations/ru.lproj/Localizable.strings | 2 +- .../translations/sl.lproj/Localizable.strings | 2 +- .../translations/sn.lproj/Localizable.strings | 2 +- .../translations/sq.lproj/Localizable.strings | 2 +- .../sv_SE.lproj/Localizable.strings | 2 +- .../th_TH.lproj/Localizable.strings | 2 +- .../tr_TR.lproj/Localizable.strings | 2 +- .../zh_CN.lproj/Localizable.strings | 2 +- .../zh_TW.lproj/Localizable.strings | 2 +- SignalMessaging/categories/UIColor+OWS.h | 1 + SignalMessaging/categories/UIColor+OWS.m | 5 ++ .../environment/OWSAudioSession.swift | 2 +- SignalMessaging/environment/OWSSounds.h | 1 + SignalMessaging/environment/OWSSounds.m | 4 ++ .../utils/OWSMessagesBubbleImageFactory.swift | 64 +----------------- 67 files changed, 82 insertions(+), 150 deletions(-) create mode 100644 Signal/AudioFiles/message_sent.aiff diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 05e290b52..52032e7b3 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -148,6 +148,7 @@ 34641E1B2088DA4100E2EDE5 /* ScreenLockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34641E192088DA3F00E2EDE5 /* ScreenLockViewController.m */; }; 34641E1C2088DA4100E2EDE5 /* ScreenLockViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34641E1A2088DA4000E2EDE5 /* ScreenLockViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 34641E1F2088DA6D00E2EDE5 /* SAEScreenLockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34641E1E2088DA6D00E2EDE5 /* SAEScreenLockViewController.m */; }; + 34661FB820C1C0D60056EDD6 /* message_sent.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 34661FB720C1C0D60056EDD6 /* message_sent.aiff */; }; 346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346B66301F4E29B200E5122F /* CropScaleImageViewController.swift */; }; 347850311FD7494A007B8332 /* dripicons-v2.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */; }; 347850321FD7494A007B8332 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; }; @@ -757,6 +758,7 @@ 34641E1A2088DA4000E2EDE5 /* ScreenLockViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenLockViewController.h; path = SignalMessaging/ViewControllers/ScreenLockViewController.h; sourceTree = SOURCE_ROOT; }; 34641E1D2088DA6C00E2EDE5 /* SAEScreenLockViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAEScreenLockViewController.h; sourceTree = ""; }; 34641E1E2088DA6D00E2EDE5 /* SAEScreenLockViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SAEScreenLockViewController.m; sourceTree = ""; }; + 34661FB720C1C0D60056EDD6 /* message_sent.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; name = message_sent.aiff; path = Signal/AudioFiles/message_sent.aiff; sourceTree = SOURCE_ROOT; }; 346B66301F4E29B200E5122F /* CropScaleImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CropScaleImageViewController.swift; sourceTree = ""; }; 347850561FD86544007B8332 /* SAEFailedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SAEFailedViewController.swift; sourceTree = ""; }; 347850581FD9972E007B8332 /* SwiftSingletons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftSingletons.swift; sourceTree = ""; }; @@ -1279,6 +1281,7 @@ isa = PBXGroup; children = ( 45A2F004204473A3002E978A /* NewMessage.aifc */, + 34661FB720C1C0D60056EDD6 /* message_sent.aiff */, 34CF0783203E6B77005C4D61 /* busy_tone_ansi.caf */, 34CF0786203E6B78005C4D61 /* end_call_tone_cept.caf */, 34074FC5203E5435004596AE /* messageReceivedSounds */, @@ -2747,6 +2750,7 @@ 34CF0788203E6B78005C4D61 /* ringback_tone_ansi.caf in Resources */, 34C3C78F2040A4F70000134C /* sonarping.mp3 in Resources */, AD83FF431A73426500B5C81A /* audio_play_button@2x.png in Resources */, + 34661FB820C1C0D60056EDD6 /* message_sent.aiff in Resources */, 45CB2FA81CB7146C00E1B343 /* Launch Screen.storyboard in Resources */, 34B3F8781E8DF1700035BE1A /* ContactsPicker.xib in Resources */, B633C5C31A1D190B0059AC12 /* mute_off@2x.png in Resources */, diff --git a/Signal/AudioFiles/message_sent.aiff b/Signal/AudioFiles/message_sent.aiff new file mode 100644 index 0000000000000000000000000000000000000000..e46adff5ecb43b2e82bbb87df560ca7d03f5fa3d GIT binary patch literal 40616 zcmeFZhkI1z*Dk#4^gfeh2t^1IG$4d3y-V*>q=TS<^dLouQY4Xp^e7-jK#BrVqzFhy zAW|fB2vU=fHoed6_T78%_n!Cs1K&BDUlxEZ-Bit zEUEFmx>(o4er=329Fs@Ae?Q;BXH6mni@Z)H-om;rQI)8HYinTCBC5r=-ohDqI|ajz z^T}AM;ydz{RdFr}$17vYj;&%g_Jk$UBr}%f1 ziGS(|Qj-4H$@mugW?$k7LXxB~)|?cScqt_L@fng_*bigvlDt?#*bd=%?B6~4Q@+lN zt0MAQ`7ZJuaj%%fy}9?lPlOl~e?Iy7<)>%y{90_w(pHUYL*CNkoNOUkdm2K4?^@zp zT3j#RSNJ`PkJhqN(ERKV*LR7cd)({ACGa>GpP)tRCdl--7`yS{ag1d0|4B?I; z=;F=2|D$^b^8NdCcn%ihzuD}KC2(ARLiu@RtD5lnucdHQ0i9TJ4;eAlAeD>^Rs4AT zYgoy5l#i+72jov#k8j1%odh(=xRLcB%Pl{zUvk2_rFi~lkmfGryc?JHhLn#_S>|h! zy!`-YE=ZTLe_qPN`Z|tY#*rKG&ueilyp*0mAMz-~{R(maLL7M%-z&qfcz_nK6pB9? z8-IG)17y#T(f-D7tH$?apOHPcGLFB&yNnHaKNY-C6W%U+>l+_=bB+8B+4E%IFv=Q( zd@?rQAU6g~hW-nc1omVk%g^@`vOBTmh}*Le7JmXwJj0m+SoIMkeS{;07_ydL$2Ill z8?rpbI8uP~_u^Q23JuC=xr-wOI8%lz-sskWJy{>}cVu15-z$s%uB;I+e!UP!WKS!L z`;-IMdH=QG8=IV5zL51LvzDx(RB&lsj5M%oO<NufoE|{$cT{fAmjcnw(_N` z(pjM5M0}jb)@kXO^c%)OX*b3}=_tk-pd}Bexfj>2EUT;s84>^C3K^6CZ96W#ypsKe zjX#~tkx6)BJMjDl8!~6gtSVzc=J_=A45Nn zft_18_5|ZOq;+8NLt@#=4lJ@}We$~jHT*{MI7%Zp#>xBg`d^-k!5VR~jm|957PwI6}ZGRMm-=EPD8e|;Wj1KH}&p#_;IWqZqU z;wi3ph3jA8s=_#`Wvo2Ibuxoq$5jt79$`<`nCvl6aqXMv@e1FN8K*4H2hVU98DH`* zzhRoP`0qZB-&g*f*Vvbz3ikQ;pNvu_jt1GHavYU&4cQmck$E*Gnj5L|P~*TsX&M@_eBy!bK7l>&Fj77mBEgWVSPE1ItZy`8JA$$29MYVootIASuA}Hf0+WWnSrf^(o$&SJ85TJ7jlH% zEA0c0Zb^lZTxNEense{xROJk{-)Jhr(i5Ei)J0ax? zpkcB!N%}(iO3H%#xzc7Fl|AYxG_V2M*o4o^QYn5y&IT&u_vC+azANVpvgK9ylrtSU zZ;~^~#?Z|`Vg|JE6R{iPN8(rFByop$LO6+H;vrE$xQXXj7vRXB#35okG`Nh&B{mS> z;X9v$J^KBZPKJU-dcuQbhUpFb^v1c?klhNYWeg@kaz8x$H$3$oJnwou|7KY73*dYl z*l>(A0?6+!wUN3={jfI@p3nt4ct=W+>R_ENy^p=-SeoFP-Z(!=$^af@T+ETy;I1;4 zTmUUTu>xiunft<0>;dtn0DUh-Q7}|$lxg-?;5f=DuJE9}3 z(+Rff0gLsKOxR^vmy7lkos51c#*h4+#?E!aw0@($r@x6vOZZCOA4t4 zM#_PY8^keUFSN1|-;q6RMw~Gx02RIQ8#23g#4pJ#(E#l6MhAJY*(P}OIM})~Y}yY9 zm;`C20qNth{l+J{<6LK{om3z4rDCMxv$|v!qhgsDlt?KNM>;}Vy>Zot(kNhQ4!mYd zoI!p=M0o|am1|%b`EqU`N5!GA%oO4itYtlPg_UGkH^PR?h{eSG_|s296p&dX7s$U# zJcB3PgHJq%7Tm;Zq7-XCA(3j*N*bXPf(YVB0W`H2{vqo@#>9g7y<{D^}mnPfJAypU5VX~nSU5nqUp#3$k{F<-nP zJ`^8_uSJiqX*3ai}-|OJ}hIMrW~yI98k?W{OL2<+tJ%@qla_J!BqPO1elV`Hajb|0d6nhoFNk(g`afpIkG_5nvJ!+ZpJsD_O(}F;BcKo`&qFv2{`0DXtK+ zFeX6C>Ef4=^E*g7OPndr!S);+n~I}fi<_XSed0k}za3*IwvUTv#rwd=E!^*h$S)!Fe8}@PB-{1bX$bOJ+9JacUX#@|PydZeeL{=hefe%thC60xNC?OFMc*}Y4HqKNJ5(9tQ# zb`tB0;#KiEn1Ge+u)JAffTjx3iM=*)HuyXqFZW505DVpaHxZfK4DkI7_@%motK zf~6p+_X-}KLUtfKk!>(!9Q46wGQ6IE-#36Rx??{z&VsLqM?^W8 zKnwYw5oaOwM#O?|@hcOMX?Maeq$3{6=r02ncfjB0;mLC2nanbf%h)rNO8893$NG)kJv4)6u%Nb$C0n`xdsThE|!4<-UnmI@nH~j zxd1Wtyz~nGu0;;g1QB`+m4E4aB?E-zXFKf z1KY2~)>@$8IL2Nu!6aN!AIxCFU?8y^1qz5f$bAwXzYxCF2@KN`8DA zI7BAd;yn??-j%At|4CS^0Iz7R?NYA9(;W|}>;TRW zK;A;wnwJRRg26E0j?LgtqkyW#!1_Kp;z>bdg?2=pez5p=#Luwnd06%ays`i?yMbMq z!;|CKtpl%Z3p-DM2QMRkB2SW+$Q$Helcuw=v2H

Ko<0?R-XFX!dwMsr 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�iv0L% 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 literal 0 HcmV?d00001 diff --git a/Signal/src/Models/AccountManager.swift b/Signal/src/Models/AccountManager.swift index fb46966d1..a6a17f06d 100644 --- a/Signal/src/Models/AccountManager.swift +++ b/Signal/src/Models/AccountManager.swift @@ -52,9 +52,9 @@ public class AccountManager: NSObject { Logger.debug("\(self.TAG) registering with signal server") let registrationPromise: Promise = firstly { - self.registerForTextSecure(verificationCode: verificationCode, pin: pin) + return self.registerForTextSecure(verificationCode: verificationCode, pin: pin) }.then { - self.syncPushTokens() + return self.syncPushTokens() }.recover { (error) -> Promise in switch error { case PushRegistrationError.pushNotSupported(let description): diff --git a/Signal/src/Signal-Bridging-Header.h b/Signal/src/Signal-Bridging-Header.h index e8a428a91..df9d0ad23 100644 --- a/Signal/src/Signal-Bridging-Header.h +++ b/Signal/src/Signal-Bridging-Header.h @@ -41,12 +41,6 @@ #import "UIViewController+Permissions.h" #import "ViewControllerUtils.h" #import -#import -#import -#import -#import -#import -#import #import #import #import diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSAudioMessageView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSAudioMessageView.m index 85299986d..98a9403af 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSAudioMessageView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSAudioMessageView.m @@ -5,10 +5,10 @@ #import "OWSAudioMessageView.h" #import "ConversationViewItem.h" #import "Signal-Swift.h" -#import "UIColor+JSQMessages.h" #import "UIColor+OWS.h" #import "ViewControllerUtils.h" #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -179,7 +179,7 @@ NS_ASSUME_NONNULL_BEGIN - (UIColor *)bubbleBackgroundColor { - return self.isIncoming ? [UIColor jsq_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; + return self.isIncoming ? [UIColor ows_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; } - (BOOL)isVoiceMessage diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m index 6402fbbf6..89af63251 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactOffersCell.m @@ -4,8 +4,6 @@ #import "OWSContactOffersCell.h" #import "ConversationViewItem.h" -#import "NSBundle+JSQMessages.h" -#import #import #import #import @@ -139,7 +137,7 @@ NS_ASSUME_NONNULL_BEGIN OWSContactOffersInteraction *interaction = (OWSContactOffersInteraction *)self.viewItem.interaction; - // We're using a bit of a hack to get JSQ to layout this and the unread indicator as + // We're using a bit of a hack to get this and the unread indicator to layout as // "full width" cells. These cells will end up with an erroneous left margin that we // want to reverse. CGFloat contentWidth = self.width; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m index 6b23a2ec7..1a60642fa 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m @@ -5,12 +5,12 @@ #import "OWSContactShareView.h" #import "OWSContactAvatarBuilder.h" #import "Signal-Swift.h" -#import "UIColor+JSQMessages.h" #import "UIColor+OWS.h" #import "UIFont+OWS.h" #import "UIView+OWS.h" #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -145,7 +145,7 @@ NS_ASSUME_NONNULL_BEGIN - (UIColor *)bubbleBackgroundColor { - return self.isIncoming ? [UIColor jsq_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; + return self.isIncoming ? [UIColor ows_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; } + (UIFont *)nameFont diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSGenericAttachmentView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSGenericAttachmentView.m index 29c88ac4c..8778028ee 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSGenericAttachmentView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSGenericAttachmentView.m @@ -4,13 +4,13 @@ #import "OWSGenericAttachmentView.h" #import "OWSBezierPathView.h" -#import "UIColor+JSQMessages.h" #import "UIColor+OWS.h" #import "UIFont+OWS.h" #import "UIView+OWS.h" #import "ViewControllerUtils.h" #import #import +#import #import #import @@ -88,7 +88,7 @@ NS_ASSUME_NONNULL_BEGIN - (UIColor *)bubbleBackgroundColor { - return self.isIncoming ? [UIColor jsq_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; + return self.isIncoming ? [UIColor ows_messageBubbleLightGrayColor] : [UIColor ows_materialBlueColor]; } - (UIColor *)textColor diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index 2a33bac77..587598c35 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -768,11 +768,11 @@ NS_ASSUME_NONNULL_BEGIN switch (self.attachmentPointer.state) { case TSAttachmentPointerStateEnqueued: customView.backgroundColor - = (self.isIncoming ? [UIColor jsq_messageBubbleLightGrayColor] : [UIColor ows_fadedBlueColor]); + = (self.isIncoming ? [UIColor ows_messageBubbleLightGrayColor] : [UIColor ows_fadedBlueColor]); break; case TSAttachmentPointerStateDownloading: customView.backgroundColor - = (self.isIncoming ? [UIColor jsq_messageBubbleLightGrayColor] : [UIColor ows_fadedBlueColor]); + = (self.isIncoming ? [UIColor ows_messageBubbleLightGrayColor] : [UIColor ows_fadedBlueColor]); break; case TSAttachmentPointerStateFailed: customView.backgroundColor = [UIColor grayColor]; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m index eb8ad7526..2a3e4e9f0 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m @@ -4,11 +4,9 @@ #import "OWSSystemMessageCell.h" #import "ConversationViewItem.h" -#import "NSBundle+JSQMessages.h" #import "UIColor+OWS.h" #import "UIFont+OWS.h" #import "UIView+OWS.h" -#import #import #import #import diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m index ffa23218c..780147697 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSUnreadIndicatorCell.m @@ -4,8 +4,6 @@ #import "OWSUnreadIndicatorCell.h" #import "ConversationViewItem.h" -#import "NSBundle+JSQMessages.h" -#import #import #import #import @@ -133,7 +131,8 @@ NS_ASSUME_NONNULL_BEGIN @"Messages that indicates that there are more unseen messages including safety number changes that " @"be revealed by tapping the 'load earlier messages' button. Embeds {{the name of the 'load earlier " @"messages' button}}.")); - NSString *loadMoreButtonName = [NSBundle jsq_localizedStringForKey:@"load_earlier_messages"]; + NSString *loadMoreButtonName = NSLocalizedString( + @"load_earlier_messages", @"Label for button that loads more messages in conversation view."); return [NSString stringWithFormat:subtitleFormat, loadMoreButtonName]; } diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 982756545..33de8ea9c 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -45,14 +45,6 @@ #import #import #import -#import -#import -#import -#import -#import -#import -#import -#import #import #import #import @@ -1479,8 +1471,6 @@ typedef enum : NSUInteger { [((TSContactThread *)self.thread).contactIdentifier isEqualToString:[TSAccountManager localNumber]]); } -#pragma mark - JSQMessagesViewController method overrides - #pragma mark - Dynamic Text /** @@ -2702,7 +2692,9 @@ typedef enum : NSUInteger { self.inputToolbar.quotedReply = nil; if ([Environment.preferences soundInForeground]) { - [JSQSystemSoundPlayer jsq_playMessageSentSound]; + SystemSoundID soundId = [OWSSounds systemSoundIDForSound:OWSSound_MessageSent quiet:YES]; + // Vibrate, respect silent switch, respect "Alert" volume, not media volume. + AudioServicesPlayAlertSound(soundId); } } diff --git a/Signal/src/ViewControllers/MediaTileViewController.swift b/Signal/src/ViewControllers/MediaTileViewController.swift index f6a5ecf02..2f5d03f67 100644 --- a/Signal/src/ViewControllers/MediaTileViewController.swift +++ b/Signal/src/ViewControllers/MediaTileViewController.swift @@ -522,7 +522,7 @@ public class MediaTileViewController: UICollectionViewController, MediaGalleryDa return } - let items: [MediaGalleryItem] = indexPaths.flatMap { return self.galleryItem(at: $0) } + let items: [MediaGalleryItem] = indexPaths.compactMap { return self.galleryItem(at: $0) } guard let mediaGalleryDataSource = self.mediaGalleryDataSource else { owsFail("\(logTag) in \(#function) mediaGalleryDataSource was unexpectedly nil") diff --git a/Signal/src/ViewControllers/SafetyNumberConfirmationAlert.swift b/Signal/src/ViewControllers/SafetyNumberConfirmationAlert.swift index 8964ddf24..cd514edd1 100644 --- a/Signal/src/ViewControllers/SafetyNumberConfirmationAlert.swift +++ b/Signal/src/ViewControllers/SafetyNumberConfirmationAlert.swift @@ -112,7 +112,7 @@ public class SafetyNumberConfirmationAlert: NSObject { } private func untrustedIdentityForSending(recipientIds: [String]) -> OWSRecipientIdentity? { - return recipientIds.flatMap { + return recipientIds.compactMap { OWSIdentityManager.shared().untrustedIdentityForSending(toRecipientId: $0) }.first } diff --git a/Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift b/Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift index d6e8fcbb9..cf132252f 100644 --- a/Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift +++ b/Signal/src/environment/ExperienceUpgrades/ExperienceUpgradeFinder.swift @@ -74,7 +74,7 @@ enum ExperienceUpgradeId: String { // introducingProfiles, // introducingReadReceipts, configurableNotificationAudio - ].flatMap { $0 } + ].compactMap { $0 } } // MARK: - Instance Methods diff --git a/Signal/src/network/GiphyAPI.swift b/Signal/src/network/GiphyAPI.swift index 97f68382a..38f8ab394 100644 --- a/Signal/src/network/GiphyAPI.swift +++ b/Signal/src/network/GiphyAPI.swift @@ -368,7 +368,7 @@ extension GiphyError: LocalizedError { Logger.error("\(TAG) Invalid response data.") return nil } - return imageDicts.flatMap { imageDict in + return imageDicts.compactMap { imageDict in return parseGiphyImage(imageDict: imageDict) } } diff --git a/Signal/test/SignalTests-Bridging-Header.h b/Signal/test/SignalTests-Bridging-Header.h index 2fbb2d90d..05752f2d5 100644 --- a/Signal/test/SignalTests-Bridging-Header.h +++ b/Signal/test/SignalTests-Bridging-Header.h @@ -1,7 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "Signal-Bridging-Header.h" -#import -#import diff --git a/Signal/translations/ar.lproj/Localizable.strings b/Signal/translations/ar.lproj/Localizable.strings index e003975db..c55e4af2f 100644 --- a/Signal/translations/ar.lproj/Localizable.strings +++ b/Signal/translations/ar.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "لقد ضبطت وقت إخفاء الرسالة على %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "تحميل الرسائل السابقة"; diff --git a/Signal/translations/az_AZ.lproj/Localizable.strings b/Signal/translations/az_AZ.lproj/Localizable.strings index b2920a669..65393fb06 100644 --- a/Signal/translations/az_AZ.lproj/Localizable.strings +++ b/Signal/translations/az_AZ.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Yox olan ismarışların vaxtını belə quraşdırmısan: %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/bg.lproj/Localizable.strings b/Signal/translations/bg.lproj/Localizable.strings index d7dd2e0b5..5136400d4 100644 --- a/Signal/translations/bg.lproj/Localizable.strings +++ b/Signal/translations/bg.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Вие настроихте изчезващите съобщения за време от %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Зареждане на по-ранни съобщения"; diff --git a/Signal/translations/bs.lproj/Localizable.strings b/Signal/translations/bs.lproj/Localizable.strings index 6d9efd67c..8e6b337a8 100644 --- a/Signal/translations/bs.lproj/Localizable.strings +++ b/Signal/translations/bs.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Postavili ste vrijeme za nestajuće poruke na %@. "; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Učitaj ranije poruke"; diff --git a/Signal/translations/ca.lproj/Localizable.strings b/Signal/translations/ca.lproj/Localizable.strings index b90358c5c..3f15d1791 100644 --- a/Signal/translations/ca.lproj/Localizable.strings +++ b/Signal/translations/ca.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Heu establit el temps dels missatges efímers en %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Carrega els missatges anteriors"; diff --git a/Signal/translations/cs.lproj/Localizable.strings b/Signal/translations/cs.lproj/Localizable.strings index 00abd0fc0..f18d4b9f7 100644 --- a/Signal/translations/cs.lproj/Localizable.strings +++ b/Signal/translations/cs.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Nastavil(a) jste čas mizejících zpráv na %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Načíst předchozí zprávy"; diff --git a/Signal/translations/da.lproj/Localizable.strings b/Signal/translations/da.lproj/Localizable.strings index 534c6e05e..1d49d31f4 100644 --- a/Signal/translations/da.lproj/Localizable.strings +++ b/Signal/translations/da.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Beskeder sat til at forsvinde efter %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/de.lproj/Localizable.strings b/Signal/translations/de.lproj/Localizable.strings index 15ae321e5..93ffab4c7 100644 --- a/Signal/translations/de.lproj/Localizable.strings +++ b/Signal/translations/de.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Du hast die Zeit für verschwindende Nachrichten auf %@ festgelegt."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Ältere Nachrichten laden"; diff --git a/Signal/translations/el_GR.lproj/Localizable.strings b/Signal/translations/el_GR.lproj/Localizable.strings index 272b22527..0b31a5798 100644 --- a/Signal/translations/el_GR.lproj/Localizable.strings +++ b/Signal/translations/el_GR.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Όρισες τον χρόνο εξαφάνισης μηνυμάτων σε %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Φόρτωμα παλαιότερων μηνυμάτων"; diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index c70c31e10..96e481d04 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/es.lproj/Localizable.strings b/Signal/translations/es.lproj/Localizable.strings index 3337c4f9f..bc7eb7f04 100644 --- a/Signal/translations/es.lproj/Localizable.strings +++ b/Signal/translations/es.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Has fijado la caducidad de mensajes a %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Mostrar mensajes previos"; diff --git a/Signal/translations/et.lproj/Localizable.strings b/Signal/translations/et.lproj/Localizable.strings index 63a7b9009..96bad2c8c 100644 --- a/Signal/translations/et.lproj/Localizable.strings +++ b/Signal/translations/et.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Sa määrasid kaduvate sõnumite aja: %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Laadi varasemad sõnumid"; diff --git a/Signal/translations/fa.lproj/Localizable.strings b/Signal/translations/fa.lproj/Localizable.strings index d4443e040..8348af39f 100644 --- a/Signal/translations/fa.lproj/Localizable.strings +++ b/Signal/translations/fa.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "شما زمان محوشدن پیام‌ها را به %@ تنظیم کردید."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "نمایش پیام های قدیمی"; diff --git a/Signal/translations/fi.lproj/Localizable.strings b/Signal/translations/fi.lproj/Localizable.strings index 40d4a71b7..cee9a9a0b 100644 --- a/Signal/translations/fi.lproj/Localizable.strings +++ b/Signal/translations/fi.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Sinä asetit viestien katoamisajan: %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Lataa aiempia viestejä"; diff --git a/Signal/translations/fil.lproj/Localizable.strings b/Signal/translations/fil.lproj/Localizable.strings index ae9d7b27a..f1a0cdf56 100644 --- a/Signal/translations/fil.lproj/Localizable.strings +++ b/Signal/translations/fil.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/fr.lproj/Localizable.strings b/Signal/translations/fr.lproj/Localizable.strings index 478d23cc3..0ae393540 100644 --- a/Signal/translations/fr.lproj/Localizable.strings +++ b/Signal/translations/fr.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Vous avez défini le délai de disparition des messages à %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Charger les messages antérieurs"; diff --git a/Signal/translations/gl.lproj/Localizable.strings b/Signal/translations/gl.lproj/Localizable.strings index eb50d47ec..5e0af5483 100644 --- a/Signal/translations/gl.lproj/Localizable.strings +++ b/Signal/translations/gl.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Seleccionaches a caducidade do mensaxe a %@"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Cargar mensaxes máis recentes"; diff --git a/Signal/translations/he.lproj/Localizable.strings b/Signal/translations/he.lproj/Localizable.strings index fb67b034a..2eab89758 100644 --- a/Signal/translations/he.lproj/Localizable.strings +++ b/Signal/translations/he.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "הִגְדַּרְתָּ את זמן ההודעות הנעלמות אל %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "טען הודעות מוקדמות יותר"; diff --git a/Signal/translations/hr.lproj/Localizable.strings b/Signal/translations/hr.lproj/Localizable.strings index 1d718e869..57849e133 100644 --- a/Signal/translations/hr.lproj/Localizable.strings +++ b/Signal/translations/hr.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Postavili ste vrijeme za nestajuće poruke na %@. "; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Učitaj ranije poruke"; diff --git a/Signal/translations/hu.lproj/Localizable.strings b/Signal/translations/hu.lproj/Localizable.strings index d582b3bab..ca67dcab2 100644 --- a/Signal/translations/hu.lproj/Localizable.strings +++ b/Signal/translations/hu.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Beállítottad az eltűnő üzenet idejét erre: %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Korábbi üzenetek betöltése"; diff --git a/Signal/translations/id.lproj/Localizable.strings b/Signal/translations/id.lproj/Localizable.strings index 4a6e2ee58..b32274278 100644 --- a/Signal/translations/id.lproj/Localizable.strings +++ b/Signal/translations/id.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Anda mengatur pesan tersembunyi pada %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Memuat Pesan Sebelumnya"; diff --git a/Signal/translations/it_IT.lproj/Localizable.strings b/Signal/translations/it_IT.lproj/Localizable.strings index 86fdc019f..ba973261f 100644 --- a/Signal/translations/it_IT.lproj/Localizable.strings +++ b/Signal/translations/it_IT.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Hai impostato la scomparsa dei messaggi a %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Carica messaggi più recenti"; diff --git a/Signal/translations/ja_JP.lproj/Localizable.strings b/Signal/translations/ja_JP.lproj/Localizable.strings index 4939a437e..760123a4e 100644 --- a/Signal/translations/ja_JP.lproj/Localizable.strings +++ b/Signal/translations/ja_JP.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "メッセージの消失時間を%@に設定しました"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "以前のメッセージを読み込む"; diff --git a/Signal/translations/km.lproj/Localizable.strings b/Signal/translations/km.lproj/Localizable.strings index 4d6c84ee9..d7c3c9e9a 100644 --- a/Signal/translations/km.lproj/Localizable.strings +++ b/Signal/translations/km.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "អ្នកកំណត់រយៈពេលសាររលុប %@។"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "ផ្ទុកសារពីមុន"; diff --git a/Signal/translations/ko_KR.lproj/Localizable.strings b/Signal/translations/ko_KR.lproj/Localizable.strings index f099fed70..5695bd2a3 100644 --- a/Signal/translations/ko_KR.lproj/Localizable.strings +++ b/Signal/translations/ko_KR.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/lt.lproj/Localizable.strings b/Signal/translations/lt.lproj/Localizable.strings index 6949e4a81..360a53198 100644 --- a/Signal/translations/lt.lproj/Localizable.strings +++ b/Signal/translations/lt.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Jūs nustatėte išnykstančių žinučių laiką į %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Įkelti ankstesnes žinutes"; diff --git a/Signal/translations/lv.lproj/Localizable.strings b/Signal/translations/lv.lproj/Localizable.strings index 69a1cfa39..82051122c 100644 --- a/Signal/translations/lv.lproj/Localizable.strings +++ b/Signal/translations/lv.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/mk.lproj/Localizable.strings b/Signal/translations/mk.lproj/Localizable.strings index 013813457..370431c76 100644 --- a/Signal/translations/mk.lproj/Localizable.strings +++ b/Signal/translations/mk.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Го подесивте времето на исчезнувањето на пораките на %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/my.lproj/Localizable.strings b/Signal/translations/my.lproj/Localizable.strings index b88c91869..c34e3b1c6 100644 --- a/Signal/translations/my.lproj/Localizable.strings +++ b/Signal/translations/my.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "သင်သည် စာများအား %@ အတောအတွင်းပျက်သွားစေရန် ချိန်ထားသည်။"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "အပေါ်က စာများကို ဖွင့်ပါ"; diff --git a/Signal/translations/nb_NO.lproj/Localizable.strings b/Signal/translations/nb_NO.lproj/Localizable.strings index 114a43fb7..920e69e65 100644 --- a/Signal/translations/nb_NO.lproj/Localizable.strings +++ b/Signal/translations/nb_NO.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Du satte tidsbegrensede meldinger til %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Last inn tidligere meldinger"; diff --git a/Signal/translations/nl.lproj/Localizable.strings b/Signal/translations/nl.lproj/Localizable.strings index bbdfa085b..ed7366856 100644 --- a/Signal/translations/nl.lproj/Localizable.strings +++ b/Signal/translations/nl.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Je hebt de berichtverdwijntijd ingesteld op %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Vorige berichten laden"; diff --git a/Signal/translations/pl.lproj/Localizable.strings b/Signal/translations/pl.lproj/Localizable.strings index d59dba62e..9fdd6ea38 100644 --- a/Signal/translations/pl.lproj/Localizable.strings +++ b/Signal/translations/pl.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ustawiłeś czas znikających wiadomości na %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Załaduj wcześniejsze wiadomości"; diff --git a/Signal/translations/pt_BR.lproj/Localizable.strings b/Signal/translations/pt_BR.lproj/Localizable.strings index 6ea42b6f0..4420f9a04 100644 --- a/Signal/translations/pt_BR.lproj/Localizable.strings +++ b/Signal/translations/pt_BR.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Você definiu a expiração de mensagens efêmeras para %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Carregar Mensagens Precedentes"; diff --git a/Signal/translations/pt_PT.lproj/Localizable.strings b/Signal/translations/pt_PT.lproj/Localizable.strings index ce9e34d9f..641549cb7 100644 --- a/Signal/translations/pt_PT.lproj/Localizable.strings +++ b/Signal/translations/pt_PT.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Definiu o tempo para a destruição de mensagens para %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Carregar Mensagens Antigas"; diff --git a/Signal/translations/ro.lproj/Localizable.strings b/Signal/translations/ro.lproj/Localizable.strings index 0c053bdde..92c856b3b 100644 --- a/Signal/translations/ro.lproj/Localizable.strings +++ b/Signal/translations/ro.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ai setat timpul de expirare a mesajelor la %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Încarcă mesajele anterioare"; diff --git a/Signal/translations/ru.lproj/Localizable.strings b/Signal/translations/ru.lproj/Localizable.strings index 5f15965ef..8048a1d9e 100644 --- a/Signal/translations/ru.lproj/Localizable.strings +++ b/Signal/translations/ru.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Вы установили время исчезновения сообщений — %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Загрузить более ранние сообщения"; diff --git a/Signal/translations/sl.lproj/Localizable.strings b/Signal/translations/sl.lproj/Localizable.strings index 717b73114..71954bbea 100644 --- a/Signal/translations/sl.lproj/Localizable.strings +++ b/Signal/translations/sl.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Čas za izginjajoča sporočila ste nastavili na %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Prikaži prejšnja sporočila"; diff --git a/Signal/translations/sn.lproj/Localizable.strings b/Signal/translations/sn.lproj/Localizable.strings index 8b603755d..e59760141 100644 --- a/Signal/translations/sn.lproj/Localizable.strings +++ b/Signal/translations/sn.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Waita kuti tsamba dzinonyangadika ive 1%@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Tora tsamba dzakare"; diff --git a/Signal/translations/sq.lproj/Localizable.strings b/Signal/translations/sq.lproj/Localizable.strings index 87ea50091..c12f9ba48 100644 --- a/Signal/translations/sq.lproj/Localizable.strings +++ b/Signal/translations/sq.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ju rregulluat kohën për zhdukjen e mesazheve në %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Load Earlier Messages"; diff --git a/Signal/translations/sv_SE.lproj/Localizable.strings b/Signal/translations/sv_SE.lproj/Localizable.strings index e08bbf6bc..b80bf08e3 100644 --- a/Signal/translations/sv_SE.lproj/Localizable.strings +++ b/Signal/translations/sv_SE.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Du satte tid innan meddelanden försvinner till %@."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Ladda tidigare meddelanden"; diff --git a/Signal/translations/th_TH.lproj/Localizable.strings b/Signal/translations/th_TH.lproj/Localizable.strings index a2b43295a..e6281554f 100644 --- a/Signal/translations/th_TH.lproj/Localizable.strings +++ b/Signal/translations/th_TH.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "คุณได้ตั้งเวลาข้อความลบตัวเองไว้ที่ %@"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "โหลดข้อความก่อนหน้านี้"; diff --git a/Signal/translations/tr_TR.lproj/Localizable.strings b/Signal/translations/tr_TR.lproj/Localizable.strings index 575f5be3d..469efec7b 100644 --- a/Signal/translations/tr_TR.lproj/Localizable.strings +++ b/Signal/translations/tr_TR.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Kaybolan mesaj süresini %@ olarak ayarladın."; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "Önceki Mesajları Yükle"; diff --git a/Signal/translations/zh_CN.lproj/Localizable.strings b/Signal/translations/zh_CN.lproj/Localizable.strings index 9089705de..c79cafa49 100644 --- a/Signal/translations/zh_CN.lproj/Localizable.strings +++ b/Signal/translations/zh_CN.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "您设置了消息%@后消失。"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "加载早前的消息"; diff --git a/Signal/translations/zh_TW.lproj/Localizable.strings b/Signal/translations/zh_TW.lproj/Localizable.strings index baee16769..975996906 100644 --- a/Signal/translations/zh_TW.lproj/Localizable.strings +++ b/Signal/translations/zh_TW.lproj/Localizable.strings @@ -2257,7 +2257,7 @@ /* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */ "YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "訊息銷毀時間設置為%@。"; -// Strings Copied in from JSQMessagesViewController + "load_earlier_messages" = "讀取較早訊息"; diff --git a/SignalMessaging/categories/UIColor+OWS.h b/SignalMessaging/categories/UIColor+OWS.h index 7e3038a9b..650507020 100644 --- a/SignalMessaging/categories/UIColor+OWS.h +++ b/SignalMessaging/categories/UIColor+OWS.h @@ -25,6 +25,7 @@ NS_ASSUME_NONNULL_BEGIN @property (class, readonly, nonatomic) UIColor *ows_errorMessageBorderColor; @property (class, readonly, nonatomic) UIColor *ows_infoMessageBorderColor; @property (class, readonly, nonatomic) UIColor *ows_toolbarBackgroundColor; +@property (class, readonly, nonatomic) UIColor *ows_messageBubbleLightGrayColor; + (UIColor *)backgroundColorForContact:(NSString *)contactIdentifier; + (UIColor *)colorWithRGBHex:(unsigned long)value; diff --git a/SignalMessaging/categories/UIColor+OWS.m b/SignalMessaging/categories/UIColor+OWS.m index 12dbe9087..c9293d968 100644 --- a/SignalMessaging/categories/UIColor+OWS.m +++ b/SignalMessaging/categories/UIColor+OWS.m @@ -111,6 +111,11 @@ NS_ASSUME_NONNULL_BEGIN return sharedColor; } ++ (UIColor *)ows_messageBubbleLightGrayColor +{ + return [UIColor colorWithHue:240.0f / 360.0f saturation:0.02f brightness:0.92f alpha:1.0f]; +} + + (UIColor *)backgroundColorForContact:(NSString *)contactIdentifier { NSArray *colors = @[ diff --git a/SignalMessaging/environment/OWSAudioSession.swift b/SignalMessaging/environment/OWSAudioSession.swift index c331587da..1822e4170 100644 --- a/SignalMessaging/environment/OWSAudioSession.swift +++ b/SignalMessaging/environment/OWSAudioSession.swift @@ -128,7 +128,7 @@ public class OWSAudioSession: NSObject { defer { objc_sync_exit(self) } // Cull any stale activities - currentActivities = currentActivities.flatMap { oldActivity in + currentActivities = currentActivities.compactMap { oldActivity in guard oldActivity.value != nil else { // Normally we should be explicitly stopping an audio activity, but this allows // for recovery if the owner of the AudioAcivity was GC'd without ending it's diff --git a/SignalMessaging/environment/OWSSounds.h b/SignalMessaging/environment/OWSSounds.h index f2f311dd7..746470f21 100644 --- a/SignalMessaging/environment/OWSSounds.h +++ b/SignalMessaging/environment/OWSSounds.h @@ -34,6 +34,7 @@ typedef NS_ENUM(NSUInteger, OWSSound) { OWSSound_CallFailure, // Other + OWSSound_MessageSent, OWSSound_None, OWSSound_DefaultiOSIncomingRingtone = OWSSound_Opening, }; diff --git a/SignalMessaging/environment/OWSSounds.m b/SignalMessaging/environment/OWSSounds.m index 9e29a8653..9d2156215 100644 --- a/SignalMessaging/environment/OWSSounds.m +++ b/SignalMessaging/environment/OWSSounds.m @@ -172,6 +172,8 @@ NSString *const kOWSSoundsStorageGlobalNotificationKey = @"kOWSSoundsStorageGlob return @"Call Busy"; case OWSSound_CallFailure: return @"Call Failure"; + case OWSSound_MessageSent: + return @"Message Sent"; // Other case OWSSound_None: @@ -234,6 +236,8 @@ NSString *const kOWSSoundsStorageGlobalNotificationKey = @"kOWSSoundsStorageGlob return @"busy_tone_ansi.caf"; case OWSSound_CallFailure: return @"end_call_tone_cept.caf"; + case OWSSound_MessageSent: + return @"message_sent.aiff"; // Other case OWSSound_None: diff --git a/SignalMessaging/utils/OWSMessagesBubbleImageFactory.swift b/SignalMessaging/utils/OWSMessagesBubbleImageFactory.swift index ef923b9bd..12f743c7a 100644 --- a/SignalMessaging/utils/OWSMessagesBubbleImageFactory.swift +++ b/SignalMessaging/utils/OWSMessagesBubbleImageFactory.swift @@ -3,7 +3,6 @@ // import Foundation -import JSQMessagesViewController import SignalServiceKit @objc @@ -12,8 +11,6 @@ public class OWSMessagesBubbleImageFactory: NSObject { @objc public static let shared = OWSMessagesBubbleImageFactory() - private let jsqFactory = JSQMessagesBubbleImageFactory()! - // TODO: UIView is a little bit expensive to instantiate. // Can we cache this value? private lazy var isRTL: Bool = { @@ -21,50 +18,7 @@ public class OWSMessagesBubbleImageFactory: NSObject { }() @objc - public lazy var incoming: JSQMessagesBubbleImage = { - let color = OWSMessagesBubbleImageFactory.bubbleColorIncoming - return self.incoming(color: color) - }() - - @objc - public lazy var outgoing: JSQMessagesBubbleImage = { - let color = OWSMessagesBubbleImageFactory.bubbleColorOutgoingSent - return self.outgoing(color: color) - }() - - @objc - public lazy var currentlyOutgoing: JSQMessagesBubbleImage = { - let color = OWSMessagesBubbleImageFactory.bubbleColorOutgoingSending - return self.outgoing(color: color) - }() - - @objc - public lazy var outgoingFailed: JSQMessagesBubbleImage = { - let color = OWSMessagesBubbleImageFactory.bubbleColorOutgoingUnsent - return self.outgoing(color: color) - }() - - @objc - public func bubble(message: TSMessage) -> JSQMessagesBubbleImage { - if message is TSIncomingMessage { - return self.incoming - } else if let outgoingMessage = message as? TSOutgoingMessage { - switch outgoingMessage.messageState { - case .failed: - return outgoingFailed - case .sending: - return currentlyOutgoing - default: - return outgoing - } - } else { - owsFail("Unexpected message type: \(message)") - return outgoing - } - } - - @objc - public static let bubbleColorIncoming = UIColor.jsq_messageBubbleLightGray()! + public static let bubbleColorIncoming = UIColor.ows_messageBubbleLightGray @objc public static let bubbleColorOutgoingUnsent = UIColor.gray @@ -93,20 +47,4 @@ public class OWSMessagesBubbleImageFactory: NSObject { return UIColor.ows_materialBlue } } - - private func outgoing(color: UIColor) -> JSQMessagesBubbleImage { - if isRTL { - return jsqFactory.incomingMessagesBubbleImage(with: color) - } else { - return jsqFactory.outgoingMessagesBubbleImage(with: color) - } - } - - private func incoming(color: UIColor) -> JSQMessagesBubbleImage { - if isRTL { - return jsqFactory.outgoingMessagesBubbleImage(with: color) - } else { - return jsqFactory.incomingMessagesBubbleImage(with: color) - } - } }