diff --git a/SignalShareExtension/SAEScreenLockViewController.swift b/SignalShareExtension/SAEScreenLockViewController.swift index d2286947ad..389ba2e9d5 100644 --- a/SignalShareExtension/SAEScreenLockViewController.swift +++ b/SignalShareExtension/SAEScreenLockViewController.swift @@ -6,7 +6,7 @@ import SignalServiceKit import SignalUI -final class SAEScreenLockViewController: ScreenLockViewController { +final class SAEScreenLockViewController: ScreenLockViewController, ScreenLockViewDelegate { private var completion: ((_ didUnlock: Bool) -> Void)? @@ -28,10 +28,11 @@ final class SAEScreenLockViewController: ScreenLockViewController { // MARK: - UIViewController - override func loadView() { - super.loadView() - view.backgroundColor = Theme.launchScreenBackgroundColor + override func viewDidLoad() { + super.viewDidLoad() + title = OWSLocalizedString("SHARE_EXTENSION_VIEW_TITLE", comment: "Title for the 'share extension' view.") + navigationItem.leftBarButtonItem = .systemItem(.stop) { [weak self] in Logger.debug("tapped dismiss share button") self?.cancelShareExperience() @@ -49,7 +50,7 @@ final class SAEScreenLockViewController: ScreenLockViewController { ensureUI() - if !hasShownAuthUIOnce { + if hasShownAuthUIOnce == false { hasShownAuthUIOnce = true tryToPresentAuthUIToUnlockScreenLock() } @@ -66,9 +67,8 @@ final class SAEScreenLockViewController: ScreenLockViewController { } private func tryToPresentAuthUIToUnlockScreenLock() { - AssertIsOnMainThread() + guard isShowingAuthUI == false else { return } - guard !isShowingAuthUI else { return } isShowingAuthUI = true ScreenLock.shared.tryToUnlockScreenLock( @@ -117,8 +117,6 @@ final class SAEScreenLockViewController: ScreenLockViewController { } private func showScreenLockFailureAlertWithMessage(_ message: String) { - AssertIsOnMainThread() - OWSActionSheets.showActionSheet( title: OWSLocalizedString( "SCREEN_LOCK_UNLOCK_FAILED", @@ -135,13 +133,10 @@ final class SAEScreenLockViewController: ScreenLockViewController { private func cancelShareExperience() { invokeCompletion(didUnlock: false) } -} -extension SAEScreenLockViewController: ScreenLockViewDelegate { + // MARK: - ScreenLockViewDelegate: func unlockButtonWasTapped() { - AssertIsOnMainThread() - Logger.info("unlockButtonWasTapped") tryToPresentAuthUIToUnlockScreenLock() diff --git a/SignalUI/ViewControllers/ScreenLockViewController.swift b/SignalUI/ViewControllers/ScreenLockViewController.swift index 0c0adddcdf..e5675f454a 100644 --- a/SignalUI/ViewControllers/ScreenLockViewController.swift +++ b/SignalUI/ViewControllers/ScreenLockViewController.swift @@ -6,6 +6,7 @@ import SignalServiceKit import UIKit +@MainActor public protocol ScreenLockViewDelegate: AnyObject { func unlockButtonWasTapped() } @@ -35,20 +36,18 @@ open class ScreenLockViewController: UIViewController { private lazy var imageViewLogo = UIImageView(image: UIImage(named: "signal-logo-128-launch-screen")) private static var buttonHeight: CGFloat { 40 } - private lazy var buttonUnlockUI = OWSFlatButton.button( - title: OWSLocalizedString( + private lazy var buttonUnlockUI = UIButton( + configuration: .largePrimary(title: OWSLocalizedString( "SCREEN_LOCK_UNLOCK_SIGNAL", comment: "Label for button on lock screen that lets users unlock Signal.", - ), - font: OWSFlatButton.fontForHeight(ScreenLockViewController.buttonHeight), - titleColor: UIColor.Signal.label, - backgroundColor: UIColor.Signal.tertiaryFill, - target: self, - selector: #selector(unlockUIButtonTapped), + )), + primaryAction: UIAction { [weak self] _ in + self?.unlockUIButtonTapped() + }, ) - override open func loadView() { - super.loadView() + override open func viewDidLoad() { + super.viewDidLoad() view.backgroundColor = UIColor.Signal.background @@ -57,8 +56,9 @@ open class ScreenLockViewController: UIViewController { imageViewLogo.autoVCenterInSuperview() imageViewLogo.autoSetDimensions(to: .square(128)) + buttonUnlockUI.configuration?.baseForegroundColor = .Signal.label + buttonUnlockUI.configuration?.baseBackgroundColor = .Signal.tertiaryFill view.addSubview(buttonUnlockUI) - buttonUnlockUI.autoSetDimension(.height, toSize: ScreenLockViewController.buttonHeight) buttonUnlockUI.autoPinWidthToSuperview(withMargin: 50) buttonUnlockUI.autoPinBottomToSuperviewMargin(withInset: 65) @@ -89,8 +89,35 @@ open class ScreenLockViewController: UIViewController { UIDevice.current.defaultSupportedOrientations } - @objc - private func unlockUIButtonTapped(_ sender: Any) { + private func unlockUIButtonTapped() { delegate?.unlockButtonWasTapped() } } + +#if DEBUG + +@available(iOS 17, *) +#Preview("State: none") { + let vc = ScreenLockViewController() + vc.view.isHidden = false // force view to load + vc.updateUIWithState(.none) + return vc +} + +@available(iOS 17, *) +#Preview("State: screenProtection") { + let vc = ScreenLockViewController() + vc.view.isHidden = false // force view to load + vc.updateUIWithState(.screenLock) + return vc +} + +@available(iOS 17, *) +#Preview("State: screenLock") { + let vc = ScreenLockViewController() + vc.view.isHidden = false // force view to load + vc.updateUIWithState(.screenProtection) + return vc +} + +#endif