Update lock screen for iOS 26.

This commit is contained in:
Igor Solomennikov 2026-05-07 11:06:35 -07:00 committed by GitHub
parent 02e22de2ba
commit 719343c533
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 48 additions and 26 deletions

View File

@ -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()

View File

@ -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