From d08c0ab160ee5c451b0211c19d483e5305d4b9f9 Mon Sep 17 00:00:00 2001 From: kate-signal Date: Wed, 15 Apr 2026 14:44:38 -0400 Subject: [PATCH] safety tips update --- .../Components/CVComponentDelegate.swift | 2 + .../Components/CVComponentThreadDetails.swift | 12 +- ...onViewController+CVComponentDelegate.swift | 15 + .../safety-tip-1.imageset/Contents.json | 21 - .../safety-tip-1.imageset/safety_tip1.png | Bin 11930 -> 0 bytes .../safety-tip-2.imageset/Contents.json | 21 - .../safety-tip-2.imageset/safety_tip2.png | Bin 6596 -> 0 bytes .../safety-tip-3.imageset/Contents.json | 21 - .../safety-tip-3.imageset/safety_tip3.png | Bin 11260 -> 0 bytes .../safety-tip-4.imageset/Contents.json | 21 - .../safety-tip-4.imageset/safety_tip4.png | Bin 11289 -> 0 bytes .../safety-tip-5.imageset/Contents.json | 21 - .../safety-tip-5.imageset/safety_tip5.png | Bin 10267 -> 0 bytes .../safetytip_240_01.imageset/Contents.json | 12 + .../safetytip_240_01.pdf | Bin 0 -> 8117 bytes .../safetytip_240_02.imageset/Contents.json | 12 + .../safetytip_240_02.pdf | Bin 0 -> 6214 bytes .../safetytip_240_03.imageset/Contents.json | 12 + .../safetytip_240_03.pdf | Bin 0 -> 6185 bytes .../safetytip_240_04.imageset/Contents.json | 12 + .../safetytip_240_04.pdf | Bin 0 -> 7661 bytes .../safetytip_240_05.imageset/Contents.json | 12 + .../safetytip_240_05.pdf | Bin 0 -> 13087 bytes .../safetytip_240_06.imageset/Contents.json | 12 + .../safetytip_240_06.pdf | Bin 0 -> 7435 bytes .../safetytip_48_01.imageset/Contents.json | 12 + .../safetytip_48_01.pdf | Bin 0 -> 4078 bytes .../safetytip_48_02.imageset/Contents.json | 12 + .../safetytip_48_02.pdf | Bin 0 -> 4541 bytes .../safetytip_48_03.imageset/Contents.json | 12 + .../safetytip_48_03.pdf | Bin 0 -> 4907 bytes .../chevron-left-26.imageset/Contents.json | 15 + .../chevron-left-26.pdf | Bin 0 -> 3442 bytes .../chevron-right-26.imageset/Contents.json | 15 + .../chevron-right-26.pdf | Bin 0 -> 3439 bytes .../EditHistoryTableSheetViewController.swift | 2 + .../Cells/MediaGalleryFileCell.swift | 2 + .../MemberLabelViewController.swift | 2 + .../MessageDetailViewController.swift | 2 + .../PinnedMessagesDetailsViewController.swift | 2 + .../SafetyTipsViewController.swift | 545 ++++++++++-------- Signal/src/views/MockConversationView.swift | 2 + .../translations/en.lproj/Localizable.strings | 43 +- SignalServiceKit/Util/CommonStrings.swift | 4 + 44 files changed, 519 insertions(+), 357 deletions(-) delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/Contents.json delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/safety_tip1.png delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-2.imageset/Contents.json delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-2.imageset/safety_tip2.png delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/Contents.json delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/safety_tip3.png delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-4.imageset/Contents.json delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-4.imageset/safety_tip4.png delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-5.imageset/Contents.json delete mode 100644 Signal/Images.xcassets/safety-tips/safety-tip-5.imageset/safety_tip5.png create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/safetytip_240_01.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/safetytip_240_02.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_03.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_03.imageset/safetytip_240_03.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/safetytip_240_04.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/safetytip_240_05.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/safetytip_240_06.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/safetytip_48_01.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_02.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_02.imageset/safetytip_48_02.pdf create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_03.imageset/Contents.json create mode 100644 Signal/Images.xcassets/safety-tips/safetytip_48_03.imageset/safetytip_48_03.pdf create mode 100644 Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/Contents.json create mode 100644 Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/chevron-left-26.pdf create mode 100644 Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/Contents.json create mode 100644 Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/chevron-right-26.pdf diff --git a/Signal/ConversationView/Components/CVComponentDelegate.swift b/Signal/ConversationView/Components/CVComponentDelegate.swift index 83672689ef..f5bba9c98a 100644 --- a/Signal/ConversationView/Components/CVComponentDelegate.swift +++ b/Signal/ConversationView/Components/CVComponentDelegate.swift @@ -279,6 +279,8 @@ public protocol CVComponentDelegate: AnyObject, AudioMessageViewDelegate, CVPoll func didTapViewPoll(pollInteractionUniqueId: String) func didTapViewPinnedMessage(pinnedMessageUniqueId: String) + + func didTapSafetyTips() } // MARK: - diff --git a/Signal/ConversationView/Components/CVComponentThreadDetails.swift b/Signal/ConversationView/Components/CVComponentThreadDetails.swift index 613064b249..1e7ea3bc7b 100644 --- a/Signal/ConversationView/Components/CVComponentThreadDetails.swift +++ b/Signal/ConversationView/Components/CVComponentThreadDetails.swift @@ -234,8 +234,8 @@ public class CVComponentThreadDetails: CVComponentBase, CVRootComponent { safetyButtonLabelConfig.applyForRendering(button: showTipsButton) showTipsButton.ows_contentEdgeInsets = .init(hMargin: hPaddingSafetyButton, vMargin: vPaddingSafetyButton) showTipsButton.dimsWhenHighlighted = true - showTipsButton.block = { [weak self] in - self?.didShowTips(type: safetySection.threadType) + showTipsButton.block = { [weak componentDelegate] in + componentDelegate?.didTapSafetyTips() } if conversationStyle.hasWallpaper { @@ -704,7 +704,7 @@ public class CVComponentThreadDetails: CVComponentBase, CVRootComponent { safetySection.shouldShowSafetyTipsButton, componentView.showTipsButton.bounds.contains(sender.location(in: componentView.showTipsButton)) { - didShowTips(type: safetySection.threadType) + componentDelegate.didTapSafetyTips() return true } @@ -808,12 +808,6 @@ public class CVComponentThreadDetails: CVComponentBase, CVRootComponent { } extension CVComponentThreadDetails { - - private func didShowTips(type: SafetyTipsType) { - let viewController = SafetyTipsViewController(type: type) - UIApplication.shared.frontmostViewController?.present(viewController, animated: true) - } - private static func buildGroupsSafetySection( from groupThread: TSGroupThread, tx: DBReadTransaction, diff --git a/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift b/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift index edca612561..793d1e5ff8 100644 --- a/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift +++ b/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift @@ -1449,6 +1449,21 @@ extension ConversationViewController: CVComponentDelegate { isAnimated: true, ) } + + public func didTapSafetyTips() { + let viewController = SafetyTipsViewController() + viewController.delegate = self + present(viewController, animated: true) + } +} + +// MARK: - SafetyTipsViewControllerDelegate + +extension ConversationViewController: SafetyTipsViewControllerDelegate { + public func didTapViewMoreSafetyTips() { + let viewController = MoreSafetyTipsViewController() + present(viewController, animated: true) + } } // MARK: - OWSNavigationChildController diff --git a/Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/Contents.json deleted file mode 100644 index 3c0a21c3e3..0000000000 --- a/Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "safety_tip1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/safety_tip1.png b/Signal/Images.xcassets/safety-tips/safety-tip-1.imageset/safety_tip1.png deleted file mode 100644 index fec1c8ba41f2b441647e41133e489be1221656f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11930 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 JgMm}@{{S?)#RdQX diff --git a/Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/Contents.json deleted file mode 100644 index 86bd02b188..0000000000 --- a/Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "safety_tip3.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/safety_tip3.png b/Signal/Images.xcassets/safety-tips/safety-tip-3.imageset/safety_tip3.png deleted file mode 100644 index 77dc27a7a3307520fb56ea8e9a5334d3146e6747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11260 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 dzsD%MNe*k-aBK4|KmKE)Tt?$DF6TfwWfxO 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 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/Contents.json new file mode 100644 index 0000000000..c8bab6eff1 --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_240_01.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/safetytip_240_01.pdf b/Signal/Images.xcassets/safety-tips/safetytip_240_01.imageset/safetytip_240_01.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5c979c90a07f3e57d0fd2c073398d0015cbaa791 GIT binary patch literal 8117 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 M5EUPvst)vj0GD=P-2eap literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/Contents.json new file mode 100644 index 0000000000..f94614e80c --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_240_02.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/safetytip_240_02.pdf b/Signal/Images.xcassets/safety-tips/safetytip_240_02.imageset/safetytip_240_02.pdf new file mode 100644 index 0000000000000000000000000000000000000000..95a295ace5878d1ba452a06fbb7e6fc8a3bd1d05 GIT binary patch literal 6214 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 literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/Contents.json new file mode 100644 index 0000000000..666443566e --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_240_04.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/safetytip_240_04.pdf b/Signal/Images.xcassets/safety-tips/safetytip_240_04.imageset/safetytip_240_04.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f8a00133b99b3438cf614f7c6cd3cb9c5765abb7 GIT binary patch literal 7661 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 JM08Ab{|COXkGTK< literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/Contents.json new file mode 100644 index 0000000000..fd4d3e1a6a --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_240_05.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/safetytip_240_05.pdf b/Signal/Images.xcassets/safety-tips/safetytip_240_05.imageset/safetytip_240_05.pdf new file mode 100644 index 0000000000000000000000000000000000000000..059efba941dc085f91aef8696001fe1374068444 GIT binary patch literal 13087 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 E9~YL7n*aa+ literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/Contents.json new file mode 100644 index 0000000000..9003bf11f3 --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_240_06.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/safetytip_240_06.pdf b/Signal/Images.xcassets/safety-tips/safetytip_240_06.imageset/safetytip_240_06.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dd5ed5845fbec7b0ec80c210b26e7513b24d7fdf GIT binary patch literal 7435 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 literal 0 HcmV?d00001 diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/Contents.json new file mode 100644 index 0000000000..af0a5dd193 --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_48_01.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/safetytip_48_01.pdf b/Signal/Images.xcassets/safety-tips/safetytip_48_01.imageset/safetytip_48_01.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0be10dddf80316472dd3b60f9c1768c3def54ff GIT binary patch literal 4078 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 literal 0 HcmV?d00001 diff --git a/Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/Contents.json b/Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/Contents.json new file mode 100644 index 0000000000..226502b803 --- /dev/null +++ b/Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "chevron-left-26.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/chevron-left-26.pdf b/Signal/Symbols.xcassets/chevron/chevron-left-26.imageset/chevron-left-26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..954e92c7a8506940b8987bbc7b7e7761418ea0f4 GIT binary patch literal 3442 zcma)8e~28_9hWnbX0TQpt1)VQT|K!YxtV$Md)B)Pce^=zF&1q!d~du~>v?EZ9~NZ3)&SppjlxtY}0Oq9W*(e&5XO?Cf3& zoj-Qp`@Hx4{o{Rm3;D4D%&JW9ui#@a;*mSOn?Y!B5OEX4sRT1f0I&!Ud|at99qg?W z#BHCPh@q))KS=_^G6Dm@;bF!PJYv+C!41v2VeTOTnkE(78OmgkZ4G6%$&>tKJx6Bj zpYQWXY2W54bKf3Qw=x@snZahZS*zE88*0|7j-PD~Wem%mCRtchn9B@P^*pPbE#}AK zORyWt%mhI_%W?Db^X$CHx?Y9Dx~_A)zzM58v&>qnHLMN%!Gfv;Z;NKmdTMSsSzjeIm}|NlLD+rNF1LHZD38e#x;#PT<0S@ zs8a_mGaJ}Jl~BW?FEnqY8nlsE*{V$y%2o}hGL&f!Sfp$;szGMBFE>NxJlE+TD#fM-^0h9-?A`(sJ6|sQG9I;*%(cvEH#Oy^l9sR8$4SgY25}2!T6L zRxQ3#2VV#+@f;(7s?3u)+a$$XM`sulVQTZ2$3@=HkNC+05eW|6bA#`!DW%<=VnE>%Qsf`}FZg zCtm&S3#VWDX#ZXJ9w|Lte*X8rSBMK}|MB(WmV>uVo|wD*-7Py8PO=MgM|w&J zmUf*v`o@!Mm;QBn&|WcyRrJ_HTM^`-nrtE4-R~P>Y)t} z4S3srSzsUTS^s8!{EF4jzk2?yW5$n#*&mFYd*rzP*&RQ6_PaM~wJ(11M6G_3J9~EY zV(qD8kDYn%Y;(n$wHG<(CgiDG&mH^bWABykR`E~t-19}>AB~Uy^0WE<2QK|&{|Dcj zmwtJD&)lK&&)ss2t%B%Z#zkGoVl9QOyn6x6TB&LORXCT{h5e6iKQIUvrJ82V@W3^(EhcG)lk zG&-4MW*K-m`0zsm{PITD0%UtRm=|ECARR z0luX15|y+Jhz`#S0_0R8ByqXP%rIrfVYV_GA>tRvTADCX-;)I;$wv&sbN>p01dCp%VM8B|Dt9BAFXu`sm`^`QmJ%UJu7NXcm#z zL0H&5;w=cvyJmw9G5?={&ZnpSKy4Z(#C}vg+QWFOp+v~SF=)QtX!XDE&Sa1n7bg{6-ZtvXHYjKc&>Ux*G>v9bl2 z#Qe^zj{KB^8N2FM;9AN-O)!e#q2DoKI}U%4BFmzT%0Emn3~r92KLLx7Z(W!`YrPAT1c-DOCezN*g(>_p zT?AD~`6ciSyGlHUrp9<4%BN4l@=jhA1Ql!jUAwTRIGV4B`Znq`T*=-?Xeb~)egK6W P21n$v#Ps%V+%ooGQN5>` literal 0 HcmV?d00001 diff --git a/Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/Contents.json b/Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/Contents.json new file mode 100644 index 0000000000..415c234628 --- /dev/null +++ b/Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "chevron-right-26.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/chevron-right-26.pdf b/Signal/Symbols.xcassets/chevron/chevron-right-26.imageset/chevron-right-26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fa89b142e8e0f579b1164bfb52f2f734086d4fe8 GIT binary patch literal 3439 zcma)8d1xF}7?)V79lYyN>-AiXB($0PT$7Y!x6#m~-R=fkX$wwf-fpJdo!QLHCfio5 z2WnNkkQ$NNQV|qI6h)|3!4vVIsBJ+j#sd|th(c8ajrhHp+1c4m1?P|5_kQnv_wl~Y zTz063qZO+2X80%$vB(+UOd-_Uib?$Oe?R5Wn`J=ZLz^Vy;3672d?6TV+fGtBh# zG(9cQj$2|lP16{bXL!B`ZuEFtZC|hV*xnTZkBCbadxmROeao>C;i`{2H6K(B&5Hz> zM$ErjbISpD(_nBJSFr7S3`cWJD+O2)lh_^|*gzXjg{kXRxXy-l5U2K56|vSo`XlrHObsV`OUF>z6^mHkwIS7riFxsKi4%McsNR+BPB63lv;c7a3# z!m_59+Laj8OHEd>68&BHzeOcT0#U7;Lv<2P57`G6C(y|6RkK*rNzNpKt6Nqj2taVi z*dAk<32#Ou>8kGf{ai28vJX6bLKQ*~QVMdAiIWgEaSme}^q3||3aco?VMXeNA~g~g zj>0SCJV1pQCFQibR`JjV#Kut$V!dHgavyD&u&8pn3)wa1VhnentQvg97QPT#?Ap2y zRhh+8mVxuv42C?JA&Z zO#Y+v&ND8#n7=D?_!DYsa$?!JE7`GAo+&(f)1u0aS9a$o7q9F7^Ro4CTwi^D=U8>J zdRBJf*}?;HTps|315B=k=oprq23o&BmF7^vu+rj>3+)O-J^=_vq5OFAopg zd*S(CJ$Toy$~}u_J1^xXy1#k)t5-jG_tr!7-mCZQGI#&^@cK`v&3Eh{UjF3OzumZS z=5GA#OSgSGyZ6YtnRhNew)R7P@l{Li&aJ&=!6{$w`1{a(EAH!Y*WHk#@9$Xtes=im z#V@>l{G)yPIsD|Q1IHfN@BMVsna}?9UZwKOd5=`82brTs2TxWX+xO6s&yUs@ELnPz zeQZP;yXM%wKfZTg|7#KZNXH$&biJs5|K{b>+jpGy!}hQLHctEXl8&ie$Dh06;Ll5M z-+RllxrG;WZ+`Uz86?FqB{6A4T8_~Th#Agg26Ydch{QjSHpRD;_!h~tj8k^p0yJJ6 zbny&_2$wu0P%?+q7MiHlYth9<180CZQ=rJ7;Ze+h>sv+L@X_FChMJ_Hiv=HI8;hQJ z6`yIeAPS1aB9Z1*foBC|RH*pc{Do)OaLg-;EU1W+X-#28RzrkF78R8j5T^i3R?=Wa z^PVKsk8#RY6@u4yeH8zuc;CbV1l0e4!NZHg{Y9)mG1Sw0hC2V>UFT}~nf%SLnp zquZ6R7xth=`Ug~@2$IJ*Vax*h8c$8t5oCEq&0blm6RC z)_B2(o`JA6R}B$O)f&3$;~vaG(XQaTHNy|}@EWZhD$w@HSb#{85fu`>n`=H5#H1X8 z6m05Q00iExhU0|b$83KU37xh zMmEq6AqJR`ghns!GIV`TnnV-$(WQZI}klyA9(+=!NsJ`TRKO z*z@j@M%+frbI{`FVFE;ud??nL=UJ%gHtYnt@De*uE-$n5e84Mw!d~Citul5gk{ZKV zD4#BolQyz&N8yF;wp~zD49QnSd>eKereJNuBoq)I&xb+|f+N5aMRj(rTr>19Na3dt literal 0 HcmV?d00001 diff --git a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift index c77900489e..ea6e745818 100644 --- a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift +++ b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift @@ -532,6 +532,8 @@ extension EditHistoryTableSheetViewController: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } extension EditHistoryTableSheetViewController: LongTextViewDelegate { diff --git a/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift b/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift index 90c6b0bd54..55b9c0b59e 100644 --- a/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift +++ b/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift @@ -545,4 +545,6 @@ extension MediaGalleryFileCell: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } diff --git a/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift b/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift index 7434c7ebe0..af7c004719 100644 --- a/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift +++ b/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift @@ -780,4 +780,6 @@ extension MemberLabelViewController: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index 7a25702e03..0feabe7c20 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -1346,6 +1346,8 @@ extension MessageDetailViewController: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } extension MessageDetailViewController: UINavigationControllerDelegate { diff --git a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift index e8c6e56fb7..5aa3ad91cf 100644 --- a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift +++ b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift @@ -658,4 +658,6 @@ extension PinnedMessagesDetailsViewController: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } diff --git a/Signal/src/ViewControllers/SafetyTipsViewController.swift b/Signal/src/ViewControllers/SafetyTipsViewController.swift index 25311b0993..054ca6ff67 100644 --- a/Signal/src/ViewControllers/SafetyTipsViewController.swift +++ b/Signal/src/ViewControllers/SafetyTipsViewController.swift @@ -12,9 +12,194 @@ public enum SafetyTipsType { case group } +public protocol SafetyTipsViewControllerDelegate: AnyObject { + func didTapViewMoreSafetyTips() +} + public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollViewDelegate { + private enum SafetyTips: CaseIterable { + case chatsFromSignal + case reviewNames + case scams + + var image: UIImage? { + switch self { + case .chatsFromSignal: + return UIImage(resource: .safetytip4801) + case .reviewNames: + return UIImage(resource: .safetytip4802) + case .scams: + return UIImage(resource: .safetytip4803) + } + } + + var title: String { + switch self { + case .chatsFromSignal: + return OWSLocalizedString( + "SAFETY_TIPS_SIGNAL_CHATS_TITLE", + comment: "Message title describing the signal chats tip.", + ) + case .reviewNames: + return OWSLocalizedString( + "SAFETY_TIPS_REVIEW_NAMES_TITLE", + comment: "Message title describing the review names safety tip.", + ) + case .scams: + return OWSLocalizedString( + "SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_TITLE", + comment: "Message title describing the scams safety tip.", + ) + } + } + + var body: String { + switch self { + case .chatsFromSignal: + return OWSLocalizedString( + "SAFETY_TIPS_SIGNAL_CHATS_BODY", + comment: "Message body describing the signal chats tip.", + ) + case .reviewNames: + return OWSLocalizedString( + "SAFETY_TIPS_REVIEW_NAMES_BODY", + comment: "Message body describing the review names safety tip.", + ) + case .scams: + return OWSLocalizedString( + "SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_BODY", + comment: "Message body describing the scams safety tip.", + ) + } + } + } + let contentScrollView = UIScrollView() let stackView = UIStackView() + + public weak var delegate: SafetyTipsViewControllerDelegate? + + override public func viewDidLoad() { + super.viewDidLoad() + + minimizedHeight = min(612, CurrentAppContext().frame.height) + super.allowsExpansion = false + + let header = UILabel() + header.text = OWSLocalizedString( + "SAFETY_TIPS_HEADER_TITLE", + comment: "Title for Safety Tips education screen.", + ) + header.font = .dynamicTypeHeadline + header.textAlignment = .center + header.isAccessibilityElement = true + header.accessibilityTraits.insert(.header) + contentView.addSubview(header) + header.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + header.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + header.topAnchor.constraint(equalTo: contentView.safeAreaLayoutGuide.topAnchor, constant: 16), + ]) + + contentView.addSubview(contentScrollView) + contentScrollView.addSubview(stackView) + + stackView.axis = .vertical + stackView.spacing = 20 + + contentScrollView.translatesAutoresizingMaskIntoConstraints = false + stackView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + contentScrollView.topAnchor.constraint(equalTo: header.bottomAnchor, constant: 24), + contentScrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -90), + contentScrollView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + contentScrollView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + + stackView.topAnchor.constraint(equalTo: contentScrollView.contentLayoutGuide.topAnchor), + stackView.bottomAnchor.constraint(equalTo: contentScrollView.contentLayoutGuide.bottomAnchor), + stackView.leadingAnchor.constraint(equalTo: contentScrollView.contentLayoutGuide.leadingAnchor, constant: 24), + stackView.trailingAnchor.constraint(equalTo: contentScrollView.contentLayoutGuide.trailingAnchor, constant: 24), + stackView.widthAnchor.constraint(equalTo: contentScrollView.frameLayoutGuide.widthAnchor, constant: -48), + ]) + + for bullet in SafetyTips.allCases { + let bulletView = SafetyBulletView(bullet) + stackView.addArrangedSubview(bulletView) + } + + var config = UIButton.Configuration.filled() + config.baseBackgroundColor = UIColor.Signal.secondaryFill + config.cornerStyle = .capsule + var attrString = AttributedString(CommonStrings.viewMoreButton) + attrString.font = .dynamicTypeBodyClamped.medium() + config.attributedTitle = attrString + config.baseForegroundColor = UIColor.Signal.label + config.contentInsets = .init(margin: 14) + let viewMoreButton = UIButton( + configuration: config, + primaryAction: .init(handler: { [weak self] _ in + self?.dismiss(animated: true) + self?.delegate?.didTapViewMoreSafetyTips() + }), + ) + + viewMoreButton.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(viewMoreButton) + NSLayoutConstraint.activate([ + viewMoreButton.bottomAnchor.constraint(equalTo: contentView.safeAreaLayoutGuide.bottomAnchor), + viewMoreButton.leadingAnchor.constraint(equalTo: contentView.safeAreaLayoutGuide.leadingAnchor, constant: 20), + viewMoreButton.trailingAnchor.constraint(equalTo: contentView.safeAreaLayoutGuide.trailingAnchor, constant: -20), + viewMoreButton.heightAnchor.constraint(equalToConstant: 52), + ]) + } + + private class SafetyBulletView: UIStackView { + init(_ bullet: SafetyTips) { + super.init(frame: .zero) + + self.axis = .horizontal + self.alignment = .firstBaseline + self.spacing = 24 + self.isLayoutMarginsRelativeArrangement = true + self.layoutMargins = .zero + + let textStack = UIStackView() + textStack.axis = .vertical + textStack.spacing = 8 + + let headerLabel = UILabel() + headerLabel.text = bullet.title + headerLabel.numberOfLines = 0 + headerLabel.textColor = UIColor.Signal.label + headerLabel.font = .dynamicTypeBody.semibold() + textStack.addArrangedSubview(headerLabel) + + let bodyLabel = UILabel() + bodyLabel.text = bullet.body + bodyLabel.numberOfLines = 0 + bodyLabel.textColor = UIColor.Signal.secondaryLabel + bodyLabel.font = .dynamicTypeBody + textStack.addArrangedSubview(bodyLabel) + + let bulletPoint = UIImageView(image: bullet.image) + bulletPoint.contentMode = .scaleAspectFit + bulletPoint.translatesAutoresizingMaskIntoConstraints = false + bulletPoint.widthAnchor.constraint(equalToConstant: 48).isActive = true + bulletPoint.heightAnchor.constraint(equalToConstant: 48).isActive = true + + addArrangedSubview(bulletPoint) + addArrangedSubview(textStack) + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + } +} + +public class MoreSafetyTipsViewController: InteractiveSheetViewController, UIScrollViewDelegate { + let contentScrollView = UIScrollView() override public var interactiveScrollViews: [UIScrollView] { [contentScrollView] } override public var sheetBackgroundColor: UIColor { Theme.tableView2PresentedBackgroundColor } @@ -25,59 +210,47 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV static let outerMargins: UIEdgeInsets = .init(hMargin: 24.0, vMargin: 0.0) static let footerSpacing: CGFloat = 16.0 - static let footerMargins: UIEdgeInsets = .init( - top: 0.0, - left: 24.0, - bottom: 42.0, - right: 24.0, - ) - static let buttonInsets: UIEdgeInsets = .init( - top: 16.0, - leading: 36.0, - bottom: 12.0, - trailing: 36.0, - ) - - static let buttonEdgeInsets: UIEdgeInsets = .init( - hMargin: 0.0, - vMargin: 14.0, - ) + static let buttonDiameter: CGFloat = 52.0 + static let buttonMargin: CGFloat = 24.0 } - fileprivate enum SafetyTips: CaseIterable { - case fakeNames - case crypto + fileprivate enum MoreSafetyTips: CaseIterable { + case chatsFromSignal + case reviewNames case vagueMessages case messagesWithLinks + case crypto case fakeBusiness var image: UIImage? { switch self { - case .fakeNames: - return UIImage(named: "safety-tip-5") - case .crypto: - return UIImage(named: "safety-tip-1") + case .chatsFromSignal: + return UIImage(resource: .safetytip24001) + case .reviewNames: + return UIImage(resource: .safetytip24002) case .vagueMessages: - return UIImage(named: "safety-tip-2") + return UIImage(resource: .safetytip24003) case .messagesWithLinks: - return UIImage(named: "safety-tip-3") + return UIImage(resource: .safetytip24004) + case .crypto: + return UIImage(resource: .safetytip24005) case .fakeBusiness: - return UIImage(named: "safety-tip-4") + return UIImage(resource: .safetytip24006) } } var title: String { switch self { - case .fakeNames: + case .chatsFromSignal: return OWSLocalizedString( - "SAFETY_TIPS_FAKE_NAMES_TITLE", - comment: "Message title describing the fake names safety tip.", + "SAFETY_TIPS_SIGNAL_CHATS_TITLE", + comment: "Message title describing the signal chats tip.", ) - case .crypto: + case .reviewNames: return OWSLocalizedString( - "SAFETY_TIPS_CRYPTO_TITLE", - comment: "Message title describing the crypto safety tip.", + "SAFETY_TIPS_REVIEW_NAMES_TITLE", + comment: "Message title describing the review names safety tip.", ) case .vagueMessages: return OWSLocalizedString( @@ -89,6 +262,11 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV "SAFETY_TIPS_MESSAGE_LINKS_TITLE", comment: "Message title describing the safety tip about unknown links in messages.", ) + case .crypto: + return OWSLocalizedString( + "SAFETY_TIPS_CRYPTO_TITLE", + comment: "Message title describing the crypto safety tip.", + ) case .fakeBusiness: return OWSLocalizedString( "SAFETY_TIPS_FAKE_BUSINESS_TITLE", @@ -99,15 +277,15 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV var body: String { switch self { - case .fakeNames: + case .chatsFromSignal: return OWSLocalizedString( - "SAFETY_TIPS_FAKE_NAMES_BODY", - comment: "Message contents for the fake names safety tip.", + "SAFETY_TIPS_SIGNAL_CHATS_BODY_VIEW_MORE", + comment: "Message body describing the signal chats tip in the 'view more' flow.", ) - case .crypto: + case .reviewNames: return OWSLocalizedString( - "SAFETY_TIPS_CRYPTO_BODY", - comment: "Message contents for the crypto safety tip.", + "SAFETY_TIPS_REVIEW_NAMES_BODY_VIEW_MORE", + comment: "Message body describing the review names safety tip in the 'view more' flow.", ) case .vagueMessages: return OWSLocalizedString( @@ -119,6 +297,11 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV "SAFETY_TIPS_MESSAGE_LINKS_BODY", comment: "Message contents for the unknown links in messages safety tip.", ) + case .crypto: + return OWSLocalizedString( + "SAFETY_TIPS_CRYPTO_BODY", + comment: "Message contents for the crypto safety tip.", + ) case .fakeBusiness: return OWSLocalizedString( "SAFETY_TIPS_FAKE_BUSINESS_BODY", @@ -128,34 +311,34 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV } } - public var prefersNavigationBarHidden: Bool { true } - - private let type: SafetyTipsType - - init(type: SafetyTipsType) { - self.type = type - super.init() - } + var prefersNavigationBarHidden: Bool { true } override public func viewDidLoad() { super.viewDidLoad() - minimizedHeight = min(725, CurrentAppContext().frame.height) + minimizedHeight = min(510, CurrentAppContext().frame.height) super.allowsExpansion = false contentView.addSubview(contentScrollView) - contentScrollView.addSubview(stackView) + contentScrollView.addSubview(tipScrollView) - stackView.axis = .vertical - stackView.spacing = Constants.outerSpacing - stackView.isLayoutMarginsRelativeArrangement = true - stackView.autoPinEdgesToSuperviewEdges() - stackView.autoPinWidth(toWidthOf: contentScrollView) - stackView.translatesAutoresizingMaskIntoConstraints = false - stackView.autoPinEdge(.bottom, to: .bottom, of: contentView, withOffset: 0.0, relation: .greaterThanOrEqual) + tipScrollView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + tipScrollView.topAnchor.constraint(equalTo: contentScrollView.topAnchor), + tipScrollView.bottomAnchor.constraint(equalTo: contentScrollView.bottomAnchor), + tipScrollView.leadingAnchor.constraint(equalTo: contentScrollView.leadingAnchor), + tipScrollView.trailingAnchor.constraint(equalTo: contentScrollView.trailingAnchor), + tipScrollView.widthAnchor.constraint(equalTo: contentScrollView.frameLayoutGuide.widthAnchor), + ]) contentScrollView.translatesAutoresizingMaskIntoConstraints = false - contentScrollView.autoPinEdgesToSuperviewEdges() + NSLayoutConstraint.activate([ + contentScrollView.topAnchor.constraint(equalTo: contentView.topAnchor), + contentScrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -84), + contentScrollView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + contentScrollView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + contentScrollView.widthAnchor.constraint(equalTo: contentView.widthAnchor), + ]) buildContents() updateButtonState() @@ -181,62 +364,71 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV private lazy var pageControl: UIPageControl = { let pageControl = UIPageControl() - pageControl.numberOfPages = SafetyTips.allCases.count + pageControl.numberOfPages = MoreSafetyTips.allCases.count pageControl.currentPage = 0 pageControl.addTarget(self, action: #selector(self.changePage), for: .valueChanged) return pageControl }() - private lazy var previousTipButton: OWSFlatButton = { - let previousButton = OWSFlatButton.insetButton( - title: OWSLocalizedString( - "SAFETY_TIPS_PREVIOUS_TIP_BUTTON", - comment: "Button that will show the previous safety tip.", - ), - font: .dynamicTypeHeadlineClamped, - titleColor: .white, - backgroundColor: .ows_accentBlue, - target: self, - selector: #selector(didTapPrevious), - ) - previousButton.button.setBackgroundImage(UIImage.image(color: .clear), for: .disabled) - previousButton.button.setTitleColor(.ows_accentBlue, for: .disabled) - previousButton.contentEdgeInsets = Constants.buttonEdgeInsets + private lazy var previousTipButton: UIButton = { + let previousButton = UIButton(type: .system) + var config = UIButton.Configuration.filled() + config.baseForegroundColor = UIColor.Signal.label + config.baseBackgroundColor = UIColor.Signal.primaryFill + config.image = UIImage(resource: .chevronLeft26) + config.cornerStyle = .capsule + previousButton.accessibilityLabel = CommonStrings.backButton + previousButton.configuration = config + previousButton.addTarget(self, action: #selector(didTapPrevious), for: .touchUpInside) + return previousButton + }() - private lazy var nextTipButton: OWSFlatButton = { - let nextButton = OWSFlatButton.insetButton( - title: OWSLocalizedString( - "SAFETY_TIPS_NEXT_TIP_BUTTON", - comment: "Button that will show the next safety tip.", - ), - font: .dynamicTypeHeadlineClamped, - titleColor: .white, - backgroundColor: .ows_accentBlue, - target: self, - selector: #selector(didTapNext), - ) - nextButton.button.setBackgroundImage(UIImage.image(color: .clear), for: .disabled) - nextButton.button.setTitleColor(.ows_accentBlue, for: .disabled) - nextButton.contentEdgeInsets = Constants.buttonEdgeInsets + private lazy var nextTipButton: UIButton = { + let nextButton = UIButton(type: .system) + var config = UIButton.Configuration.filled() + config.baseForegroundColor = UIColor.Signal.label + config.baseBackgroundColor = UIColor.Signal.primaryFill + config.image = UIImage(resource: .chevronRight26) + config.cornerStyle = .capsule + nextButton.configuration = config + nextButton.accessibilityLabel = CommonStrings.nextButton + nextButton.addTarget(self, action: #selector(didTapNext), for: .touchUpInside) + return nextButton }() private lazy var footerView: UIView = { let stackView = UIStackView(arrangedSubviews: [ previousTipButton, + pageControl, nextTipButton, ]) + + nextTipButton.translatesAutoresizingMaskIntoConstraints = false + previousTipButton.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + nextTipButton.widthAnchor.constraint(equalToConstant: Constants.buttonDiameter), + nextTipButton.heightAnchor.constraint(equalToConstant: Constants.buttonDiameter), + previousTipButton.widthAnchor.constraint(equalToConstant: Constants.buttonDiameter), + previousTipButton.heightAnchor.constraint(equalToConstant: Constants.buttonDiameter), + ]) + let container = UIView() container.addSubview(stackView) - container.layoutMargins = Constants.footerMargins - container.setContentHuggingHigh() + container.backgroundColor = sheetBackgroundColor + container.tintColor = sheetBackgroundColor stackView.axis = .horizontal stackView.spacing = Constants.footerSpacing - stackView.distribution = .fillEqually - stackView.autoPinEdgesToSuperviewMargins() + stackView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + stackView.centerXAnchor.constraint(equalTo: container.centerXAnchor), + stackView.bottomAnchor.constraint(equalTo: container.bottomAnchor, constant: -Constants.buttonMargin), + stackView.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: Constants.buttonMargin), + stackView.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -Constants.buttonMargin), + ]) return container }() @@ -245,20 +437,21 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV private func buildContents() { prepareTipsScrollView() - stackView.removeAllSubviews() - stackView.addArrangedSubview(Self.HeaderView(type: type)) - stackView.addArrangedSubview(tipScrollView) - stackView.setCustomSpacing(8.0, after: tipScrollView) - stackView.addArrangedSubview(pageControl) - stackView.setCustomSpacing(0.0, after: pageControl) - stackView.addArrangedSubview(UIView.transparentSpacer()) - stackView.addArrangedSubview(footerView) + + contentView.addSubview(footerView) + footerView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + footerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + footerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + footerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + footerView.heightAnchor.constraint(equalToConstant: 84), + ]) } private func prepareTipsScrollView() { var priorView: UIView? tipScrollView.removeAllSubviews() - SafetyTips.allCases.forEach { tip in + MoreSafetyTips.allCases.forEach { tip in let view = SafetyTipView(safetyTip: tip) tipScrollView.addSubview(view) @@ -289,6 +482,11 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV let x = CGFloat(pageControl.currentPage) * tipScrollView.frame.size.width tipScrollView.setContentOffset(CGPoint(x: x, y: 0), animated: true) updateButtonState() + + let currentPageView = tipScrollView.subviews[pageControl.currentPage] + DispatchQueue.main.async { + UIAccessibility.post(notification: .layoutChanged, argument: currentPageView) + } } @objc @@ -306,14 +504,23 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV private func updateButtonState() { switch pageControl.currentPage { case 0: - previousTipButton.setEnabled(false) - nextTipButton.setEnabled(true) + // hide previous, show next + previousTipButton.alpha = 0 + previousTipButton.isUserInteractionEnabled = false + nextTipButton.alpha = 1 + nextTipButton.isUserInteractionEnabled = true case pageControl.numberOfPages - 1: - previousTipButton.setEnabled(true) - nextTipButton.setEnabled(false) + // show previous, hide next + previousTipButton.alpha = 1 + previousTipButton.isUserInteractionEnabled = true + nextTipButton.alpha = 0 + nextTipButton.isUserInteractionEnabled = false default: - previousTipButton.setEnabled(true) - nextTipButton.setEnabled(true) + // show previous, show next + previousTipButton.alpha = 1 + previousTipButton.isUserInteractionEnabled = true + nextTipButton.alpha = 1 + nextTipButton.isUserInteractionEnabled = true } } @@ -323,136 +530,22 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV } } -extension SafetyTipsViewController { - class HeaderView: UIView { - - private let type: SafetyTipsType - - // MARK: Init - - init(type: SafetyTipsType) { - self.type = type - super.init(frame: .zero) - layoutMargins = Constants.outerMargins - - let stackView = UIStackView() - self.addSubview(stackView) - - stackView.axis = .vertical - stackView.alignment = .center - stackView.spacing = Constants.stackSpacing - stackView.autoPinEdgesToSuperviewMargins() - stackView.addArrangedSubviews([ - titleLabel, - subtitleLabel, - ]) - - self.setContentHuggingHigh() - updateFontsForCurrentPreferredContentSize() - setColorsForCurrentTheme() - } - - @available(*, unavailable, message: "Use other constructor") - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: Views - - private lazy var titleLabel: UILabel = { - let label = UILabel() - label.text = OWSLocalizedString( - "SAFETY_TIPS_HEADER_TITLE", - comment: "Title for Safety Tips education screen.", - ) - label.numberOfLines = 0 - label.textAlignment = .center - label.lineBreakMode = .byWordWrapping - label.setContentHuggingVerticalHigh() - return label - }() - - private lazy var subtitleLabel: UILabel = { - let label = UILabel() - let message = { - switch type { - case .contact: - return OWSLocalizedString( - "SAFETY_TIPS_INDIVIDUAL_HEADER_MESSAGE", - comment: "Message describing safety tips for 1:1 conversations.", - ) - case .group: - return OWSLocalizedString( - "SAFETY_TIPS_GROUPS_HEADER_MESSAGE", - comment: "Message describing safety tips for group conversations.", - ) - } - }() - label.text = message - label.numberOfLines = 0 - label.textAlignment = .center - label.lineBreakMode = .byWordWrapping - label.setContentHuggingVerticalHigh() - return label - }() - - // MARK: - Style views - - func updateFontsForCurrentPreferredContentSize() { - titleLabel.font = .dynamicTypeTitle2Clamped.bold() - subtitleLabel.font = .dynamicTypeSubheadlineClamped - } - - func setColorsForCurrentTheme() { - titleLabel.textColor = Theme.primaryTextColor - subtitleLabel.textColor = Theme.primaryTextColor - } - } -} - -extension SafetyTipsViewController { +extension MoreSafetyTipsViewController { class SafetyTipView: UIView { - private enum Constants { - static let cornerRadius: CGFloat = 20.0 - static let layoutMargin: CGFloat = 12.0 - static let imageMargin: CGFloat = 24.0 - static let containerMargins: UIEdgeInsets = .init( - top: layoutMargin, - left: layoutMargin, - bottom: 24.0, - right: layoutMargin, - ) - } - - fileprivate init(safetyTip: SafetyTips) { + fileprivate init(safetyTip: MoreSafetyTips) { super.init(frame: .zero) layoutMargins = .init(hMargin: 24.0, vMargin: 0.0) - let containerView = UIView() - containerView.layer.cornerRadius = Constants.cornerRadius - containerView.backgroundColor = Theme.isDarkThemeEnabled ? .ows_gray75 : .ows_white - self.addSubview(containerView) - containerView.layoutMargins = Constants.containerMargins - containerView.autoPinEdgesToSuperviewMargins() - let stackView = UIStackView() stackView.axis = .vertical - containerView.addSubview(stackView) - stackView.spacing = Constants.layoutMargin + self.addSubview(stackView) + stackView.spacing = 12.0 stackView.autoPinEdgesToSuperviewMargins() - let imageContainerView = UIView() - imageContainerView.backgroundColor = Theme.isDarkThemeEnabled ? .ows_gray60 : .ows_gray02 - imageContainerView.layer.cornerRadius = Constants.cornerRadius - imageContainerView.layoutMargins = .init(margin: Constants.imageMargin) - stackView.addArrangedSubview(imageContainerView) - let imageView = UIImageView(image: safetyTip.image) imageView.contentMode = .scaleAspectFit - imageContainerView.addSubview(imageView) - imageView.autoPinEdgesToSuperviewMargins() - imageView.autoPinToAspectRatio(withSize: safetyTip.image?.size ?? .init(square: 1.0)) + stackView.addArrangedSubview(imageView) let titleLabel = UILabel() titleLabel.text = safetyTip.title diff --git a/Signal/src/views/MockConversationView.swift b/Signal/src/views/MockConversationView.swift index 36a62027a8..a7e8a84140 100644 --- a/Signal/src/views/MockConversationView.swift +++ b/Signal/src/views/MockConversationView.swift @@ -560,4 +560,6 @@ extension MockConversationView: CVComponentDelegate { func didTapVoteOnPoll(poll: OWSPoll, optionIndex: UInt32, isUnvote: Bool) {} func didTapViewPinnedMessage(pinnedMessageUniqueId: String) {} + + func didTapSafetyTips() {} } diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index cbaf3d8cf1..06d42497a3 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -7925,34 +7925,40 @@ "SAFETY_TIPS_FAKE_BUSINESS_BODY" = "Be careful of businesses or government agencies contacting you. Messages involving tax agencies, couriers, and more can be spam."; /* Message title describing the safety tip about unknown or fake businesses. */ -"SAFETY_TIPS_FAKE_BUSINESS_TITLE" = "Fake businesses and institutions"; - -/* Message contents for the fake names safety tip. */ -"SAFETY_TIPS_FAKE_NAMES_BODY" = "Signal will never contact you for your registration code or PIN. Be cautious of requests that impersonate others. Profile names are chosen by their account holder and aren't verified."; - -/* Message title describing the fake names safety tip. */ -"SAFETY_TIPS_FAKE_NAMES_TITLE" = "Fake names and accounts"; - -/* Message describing safety tips for group conversations. */ -"SAFETY_TIPS_GROUPS_HEADER_MESSAGE" = "Review this request carefully. None of your contacts or people you chat with are in this group. Here are a few things to watch out for:"; +"SAFETY_TIPS_FAKE_BUSINESS_TITLE" = "Fake businesses"; /* Title for Safety Tips education screen. */ "SAFETY_TIPS_HEADER_TITLE" = "Safety Tips"; -/* Message describing safety tips for 1:1 conversations. */ -"SAFETY_TIPS_INDIVIDUAL_HEADER_MESSAGE" = "Be careful when accepting message requests from people you don’t know. Watch out for:"; +/* Message body describing the scams safety tip. */ +"SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_BODY" = "Avoid vague messages that try to get you to reply. Be aware of financial tips and suspicious web links."; + +/* Message title describing the scams safety tip. */ +"SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_TITLE" = "Look out for scams"; /* Message contents for the unknown links in messages safety tip. */ "SAFETY_TIPS_MESSAGE_LINKS_BODY" = "Be careful of messages from people you don’t know that have links to websites. Never visit links from people you don’t trust."; /* Message title describing the safety tip about unknown links in messages. */ -"SAFETY_TIPS_MESSAGE_LINKS_TITLE" = "Messages with links"; +"SAFETY_TIPS_MESSAGE_LINKS_TITLE" = "Messages with web links"; -/* Button that will show the next safety tip. */ -"SAFETY_TIPS_NEXT_TIP_BUTTON" = "Next"; +/* Message body describing the review names safety tip. */ +"SAFETY_TIPS_REVIEW_NAMES_BODY" = "Look out for the “Name not verified” notice. Everyone sets their own profile name in Signal."; -/* Button that will show the previous safety tip. */ -"SAFETY_TIPS_PREVIOUS_TIP_BUTTON" = "Previous"; +/* Message body describing the review names safety tip in the 'view more' flow. */ +"SAFETY_TIPS_REVIEW_NAMES_BODY_VIEW_MORE" = "Look out for the “Name not verified” notice. Everyone sets their own profile name and photo in Signal. If you’re unsure who a new request is from, it’s safer to ignore it."; + +/* Message title describing the review names safety tip. */ +"SAFETY_TIPS_REVIEW_NAMES_TITLE" = "Review names and photos"; + +/* Message body describing the signal chats tip. */ +"SAFETY_TIPS_SIGNAL_CHATS_BODY" = "Signal will never message you for your registration code, PIN, or recovery key. Never respond to a chat pretending to be Signal."; + +/* Message body describing the signal chats tip in the 'view more' flow. */ +"SAFETY_TIPS_SIGNAL_CHATS_BODY_VIEW_MORE" = "Signal will never message you for your registration code, PIN, or recovery key. Don’t reply to chats pretending to be Signal or Signal Support. Bad actors set up fake names to try to take over your account."; + +/* Message title describing the signal chats tip. */ +"SAFETY_TIPS_SIGNAL_CHATS_TITLE" = "Don’t respond to chats from Signal"; /* Message contents for the vague message safety tip. */ "SAFETY_TIPS_VAGUE_MESSAGE_BODY" = "Spammers often start with a simple message like “Hi” to draw you in. If you respond they may engage you further."; @@ -10102,6 +10108,9 @@ /* Button label for the 'View Contact' button */ "VIEW_CONTACT_BUTTON" = "View Contact"; +/* Label for the 'view more' button */ +"VIEW_MORE_BUTTON" = "View More"; + /* Toast alert text shown when tapping on a view-once message that has already been viewed. */ "VIEW_ONCE_ALREADY_VIEWED_TOAST" = "You already viewed this message."; diff --git a/SignalServiceKit/Util/CommonStrings.swift b/SignalServiceKit/Util/CommonStrings.swift index d40fe6e82f..e767de29f9 100644 --- a/SignalServiceKit/Util/CommonStrings.swift +++ b/SignalServiceKit/Util/CommonStrings.swift @@ -234,6 +234,10 @@ public enum CommonStrings { OWSLocalizedString("BUTTON_VIEW", comment: "Label for the 'view' button.") } + public static var viewMoreButton: String { + OWSLocalizedString("VIEW_MORE_BUTTON", comment: "Label for the 'view more' button") + } + public static var seeAllButton: String { OWSLocalizedString("SEE_ALL_BUTTON", comment: "Label for the 'see all' button.") }