diff --git a/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift b/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift index afe7268ac7..9a9ea63f0b 100644 --- a/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift +++ b/Signal/ConversationView/ConversationViewController+CVComponentDelegate.swift @@ -1409,6 +1409,7 @@ extension ConversationViewController: CVComponentDelegate { public func didTapSafetyTips() { let viewController = SafetyTipsViewController( + mode: .messageRequest, primaryButton: SafetyTipsViewController.Button( title: CommonStrings.viewMoreButton, action: { [weak self] in diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/Contents.json new file mode 100644 index 0000000000..f5eeee6179 --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_48_pin.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/safetytip_48_pin.pdf b/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/safetytip_48_pin.pdf new file mode 100644 index 0000000000..478d06b2a8 Binary files /dev/null and b/Signal/Images.xcassets/safety-tips/safetytip_48_04.imageset/safetytip_48_pin.pdf differ diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/Contents.json b/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/Contents.json new file mode 100644 index 0000000000..ebce133e4e --- /dev/null +++ b/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "safetytip_48_lock.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/safetytip_48_lock.pdf b/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/safetytip_48_lock.pdf new file mode 100644 index 0000000000..a956d60cab Binary files /dev/null and b/Signal/Images.xcassets/safety-tips/safetytip_48_05.imageset/safetytip_48_lock.pdf differ diff --git a/Signal/src/ViewControllers/HomeView/Chat List/SafetyTipsSheet.swift b/Signal/src/ViewControllers/HomeView/Chat List/SafetyTipsSheet.swift index 1581661a45..5fc1adbbe7 100644 --- a/Signal/src/ViewControllers/HomeView/Chat List/SafetyTipsSheet.swift +++ b/Signal/src/ViewControllers/HomeView/Chat List/SafetyTipsSheet.swift @@ -50,6 +50,7 @@ enum SafetyTipsSheet { ), handler: { [weak fromViewController] _ in let safetyTipsVC = SafetyTipsViewController( + mode: .smsRequest, primaryButton: SafetyTipsViewController.Button( title: OWSLocalizedString( "SETTINGS_ACCOUNT_BUTTON", diff --git a/Signal/src/ViewControllers/SafetyTipsViewController.swift b/Signal/src/ViewControllers/SafetyTipsViewController.swift index 1869ec1c13..c846519e1a 100644 --- a/Signal/src/ViewControllers/SafetyTipsViewController.swift +++ b/Signal/src/ViewControllers/SafetyTipsViewController.swift @@ -12,6 +12,11 @@ public enum SafetyTipsType { case group } +public enum SafetyTipsMode { + case smsRequest + case messageRequest +} + public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollViewDelegate { public struct Button { let title: String @@ -20,15 +25,19 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV override public var placeOnGlassIfAvailable: Bool { true } let primaryButton: Button + let mode: SafetyTipsMode - init(primaryButton: Button) { + init(mode: SafetyTipsMode, primaryButton: Button) { + self.mode = mode self.primaryButton = primaryButton } - private enum SafetyTips: CaseIterable { + private enum SafetyTips { case chatsFromSignal case reviewNames case scams + case keepVerificationCodeSafe + case enableReglock var image: UIImage? { switch self { @@ -38,6 +47,10 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV return UIImage(resource: .safetytip4802) case .scams: return UIImage(resource: .safetytip4803) + case .keepVerificationCodeSafe: + return UIImage(resource: .safetytip4804) + case .enableReglock: + return UIImage(resource: .safetytip4805) } } @@ -58,6 +71,16 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV "SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_TITLE", comment: "Message title describing the scams safety tip.", ) + case .keepVerificationCodeSafe: + return OWSLocalizedString( + "SAFETY_TIPS_KEEP_CODE_SAFE_TITLE", + comment: "Message title describing the keeping codes safe safety tip.", + ) + case .enableReglock: + return OWSLocalizedString( + "SAFETY_TIPS_ENABLE_REGLOCK_TITLE", + comment: "Message title describing the enable reglock safety tip.", + ) } } @@ -78,6 +101,16 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV "SAFETY_TIPS_LOOK_OUT_FOR_SCAMS_BODY", comment: "Message body describing the scams safety tip.", ) + case .keepVerificationCodeSafe: + return OWSLocalizedString( + "SAFETY_TIPS_KEEP_CODE_SAFE_BODY", + comment: "Message body describing the keeping codes safe safety tip.", + ) + case .enableReglock: + return OWSLocalizedString( + "SAFETY_TIPS_ENABLE_REGLOCK_BODY", + comment: "Message body describing the enable reglock safety tip.", + ) } } } @@ -129,7 +162,12 @@ public class SafetyTipsViewController: InteractiveSheetViewController, UIScrollV stackView.widthAnchor.constraint(equalTo: contentScrollView.frameLayoutGuide.widthAnchor, constant: -48), ]) - for bullet in SafetyTips.allCases { + let cases: [SafetyTips] = switch mode { + case .smsRequest: [.chatsFromSignal, .keepVerificationCodeSafe, .enableReglock] + case .messageRequest: [.chatsFromSignal, .reviewNames, .scams] + } + + for bullet in cases { let bulletView = SafetyBulletView(bullet) stackView.addArrangedSubview(bulletView) } diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 3e199d8785..b8a61c3ef6 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -7975,6 +7975,12 @@ /* Message title describing the crypto safety tip. */ "SAFETY_TIPS_CRYPTO_TITLE" = "Crypto or money scams"; +/* Message body describing the enable reglock safety tip. */ +"SAFETY_TIPS_ENABLE_REGLOCK_BODY" = "Protect your account by requiring your Signal PIN, in addition to your verification code, when registering with Signal."; + +/* Message title describing the enable reglock safety tip. */ +"SAFETY_TIPS_ENABLE_REGLOCK_TITLE" = "Turn on registration lock in account settings"; + /* Message contents for the safety tip concerning fake businesses. */ "SAFETY_TIPS_FAKE_BUSINESS_BODY" = "Be careful of businesses or government agencies contacting you. Messages involving tax agencies, couriers, and more can be spam."; @@ -7984,6 +7990,12 @@ /* Title for Safety Tips education screen. */ "SAFETY_TIPS_HEADER_TITLE" = "Safety Tips"; +/* Message body describing the keeping codes safe safety tip. */ +"SAFETY_TIPS_KEEP_CODE_SAFE_BODY" = "If you received a verification code you didn’t request, someone may be attempting to access your account. Do not share your code."; + +/* Message title describing the keeping codes safe safety tip. */ +"SAFETY_TIPS_KEEP_CODE_SAFE_TITLE" = "Keep your verification code safe"; + /* 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.";