Skip to content

Commit 6abd2f2

Browse files
authored
[WCiOS17] Address deprecations on account and auth flows trait updates (#16427)
2 parents 2989fb8 + de08354 commit 6abd2f2

File tree

11 files changed

+84
-67
lines changed

11 files changed

+84
-67
lines changed

WooCommerce/Classes/Authentication/Navigation Exceptions/RoleErrorViewController.swift

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class RoleErrorViewController: UIViewController {
6161
super.viewDidLoad()
6262

6363
configureViews()
64+
observeTraitChanges()
6465
}
6566

6667
override func viewWillAppear(_ animated: Bool) {
@@ -95,6 +96,21 @@ class RoleErrorViewController: UIViewController {
9596
configureLinkButton()
9697
configurePrimaryActionButton()
9798
configureSecondaryActionButton()
99+
100+
// Set initial image visibility based on vertical size class
101+
imageView.isHidden = traitCollection.verticalSizeClass == .compact
102+
}
103+
104+
private func observeTraitChanges() {
105+
// Image visibility depends on vertical size class only
106+
registerForTraitChanges([UITraitVerticalSizeClass.self]) { (self: Self, _) in
107+
self.imageView.isHidden = self.traitCollection.verticalSizeClass == .compact
108+
}
109+
110+
// Appearance updates only when dark/light mode changes
111+
registerForTraitChanges([UITraitUserInterfaceStyle.self]) { (self: Self, _) in
112+
self.updateViewAppearances()
113+
}
98114
}
99115

100116
func configureDescriptionLabel() {
@@ -128,24 +144,9 @@ class RoleErrorViewController: UIViewController {
128144
}
129145
}
130146

131-
// MARK: Trait Change Adjustments
132-
133-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
134-
super.traitCollectionDidChange(previousTraitCollection)
135-
136-
// hide image in compact height sizes (e.g. landscape iphones).
137-
// with limited space, text description should have higher priority.
138-
imageView.isHidden = traitCollection.verticalSizeClass == .compact
139-
140-
// handle dynamic color appearance changes.
141-
if let previousTrait = previousTraitCollection,
142-
previousTrait.hasDifferentColorAppearance(comparedTo: traitCollection) {
143-
updateViewAppearances()
144-
}
145-
}
146147

147148
/// update views that can adjust to color appearance changes.
148-
/// this method is called when color appearance changes are detected in `traitCollectionDidChange`.
149+
/// this method is called when color appearance changes are detected via trait change registration.
149150
private func updateViewAppearances() {
150151
// illustrations
151152
imageView.image = viewModel.image

WooCommerce/Classes/Authentication/Navigation Exceptions/ULAccountMismatchViewController.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@ final class ULAccountMismatchViewController: UIViewController {
6262
configureSecondaryButon()
6363

6464
setUnifiedMargins(forWidth: view.frame.width)
65+
observeTraitChanges()
6566

6667
viewModel.viewDidLoad(self)
6768
}
6869

69-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
70-
super.traitCollectionDidChange(previousTraitCollection)
71-
setUnifiedMargins(forWidth: view.frame.width)
70+
private func observeTraitChanges() {
71+
registerForTraitChanges([UITraitHorizontalSizeClass.self, UITraitVerticalSizeClass.self]) { (self: Self, _) in
72+
self.setUnifiedMargins(forWidth: self.view.frame.width)
73+
}
7274
}
7375

7476
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

WooCommerce/Classes/Authentication/Navigation Exceptions/ULErrorViewController.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ final class ULErrorViewController: UIViewController {
7272
configureButtonLabels()
7373

7474
setUnifiedMargins(forWidth: view.frame.width)
75+
observeTraitChanges()
7576

7677
viewModel.viewDidLoad(self)
7778
}
@@ -81,9 +82,10 @@ final class ULErrorViewController: UIViewController {
8182
viewDidAppearSubject.send()
8283
}
8384

84-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
85-
super.traitCollectionDidChange(previousTraitCollection)
86-
setUnifiedMargins(forWidth: view.frame.width)
85+
private func observeTraitChanges() {
86+
registerForTraitChanges([UITraitHorizontalSizeClass.self, UITraitVerticalSizeClass.self]) { (self: Self, _) in
87+
self.setUnifiedMargins(forWidth: self.view.frame.width)
88+
}
8789
}
8890

8991
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

WooCommerce/Classes/ViewRelated/Dashboard/Settings/Privacy/PrivacySettingsViewController.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,13 @@ private enum Row: CaseIterable {
501501
}
502502

503503
extension PrivacySettingsViewController: UITextViewDelegate {
504-
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
505-
presentURL(URL)
506-
trackURLPresentation(URL)
507-
return false
504+
func textView(_ textView: UITextView, primaryActionFor textItem: UITextItem, defaultAction: UIAction) -> UIAction? {
505+
if case .link(let url) = textItem.content {
506+
presentURL(url)
507+
trackURLPresentation(url)
508+
// Prevent default action
509+
return nil
510+
}
511+
return defaultAction
508512
}
509513
}

WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewController.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -562,10 +562,13 @@ private extension SettingsViewController {
562562
//
563563
extension SettingsViewController: UITextViewDelegate {
564564

565-
func textView(_ textView: UITextView, shouldInteractWith URL: URL,
566-
in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
567-
weAreHiringWasPressed(url: URL)
568-
return false
565+
func textView(_ textView: UITextView, primaryActionFor textItem: UITextItem, defaultAction: UIAction) -> UIAction? {
566+
if case .link(let url) = textItem.content {
567+
weAreHiringWasPressed(url: url)
568+
// Prevent default action
569+
return nil
570+
}
571+
return defaultAction
569572
}
570573
}
571574

WooCommerce/Classes/ViewRelated/FilterTabBar/FilterTabBar.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,23 +518,23 @@ private class TabBarButton: UIButton {
518518
super.init(frame: frame)
519519

520520
setFont()
521+
observeTraitChanges()
521522
}
522523

523524
required init?(coder: NSCoder) {
524525
super.init(coder: coder)
525526

526527
setFont()
528+
observeTraitChanges()
527529
}
528530

529531
private func setFont() {
530532
titleLabel?.applySubheadlineStyle()
531533
}
532534

533-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
534-
super.traitCollectionDidChange(previousTraitCollection)
535-
536-
if previousTraitCollection?.preferredContentSizeCategory != traitCollection.preferredContentSizeCategory {
537-
setFont()
535+
private func observeTraitChanges() {
536+
registerForTraitChanges([UITraitPreferredContentSizeCategory.self]) { (self: Self, _) in
537+
self.setFont()
538538
}
539539
}
540540
}

WooCommerce/Classes/ViewRelated/MainTabBarController.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,13 @@ final class MainTabBarController: UITabBarController {
231231
startListeningToHubMenuTabBadgeUpdates()
232232

233233
fixTabBarTraitCollectionOnIpadForiOS18()
234+
observeTraitChanges()
235+
}
236+
237+
private func observeTraitChanges() {
238+
registerForTraitChanges([UITraitHorizontalSizeClass.self, UITraitVerticalSizeClass.self]) { (self: Self, _) in
239+
self.fixTabBarTraitCollectionOnIpadForiOS18()
240+
}
234241
}
235242

236243
override func viewWillAppear(_ animated: Bool) {
@@ -310,12 +317,6 @@ final class MainTabBarController: UITabBarController {
310317

311318
// MARK: - iPadOS 18 tabs support
312319

313-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
314-
super.traitCollectionDidChange(previousTraitCollection)
315-
fixTabBarTraitCollectionOnIpadForiOS18()
316-
}
317-
318-
319320
/// Force a previous bottom tab bar design on iPadOS 18 when built with Xcode 16
320321
///
321322
/// Override a trait collection for the tab bar controller to be compact to show the same tab layout as on iPhone

WooCommerce/Classes/ViewRelated/ReusableViews/SwiftUI Components/AttributedText.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,13 @@ private struct TextViewWrapper: UIViewRepresentable {
123123
final class Coordinator: NSObject, UITextViewDelegate {
124124
var openURL: ((URL) -> Void)?
125125

126-
func textView(_: UITextView, shouldInteractWith URL: URL, in _: NSRange, interaction _: UITextItemInteraction) -> Bool {
127-
openURL?(URL)
128-
return false
126+
func textView(_ textView: UITextView, primaryActionFor textItem: UITextItem, defaultAction: UIAction) -> UIAction? {
127+
if case .link(let url) = textItem.content {
128+
openURL?(url)
129+
// Prevent default action
130+
return nil
131+
}
132+
return defaultAction
129133
}
130134
}
131135

WooCommerce/Classes/ViewRelated/ReusableViews/TextViewTableViewCell.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,16 @@ final class TextViewTableViewCell: UITableViewCell {
118118
}
119119

120120
extension TextViewTableViewCell: UITextViewDelegate {
121-
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
122-
if let onLinkTapped {
123-
onLinkTapped(URL)
124-
return false
121+
func textView(_ textView: UITextView, primaryActionFor textItem: UITextItem, defaultAction: UIAction) -> UIAction? {
122+
if case .link(let url) = textItem.content {
123+
if let onLinkTapped {
124+
onLinkTapped(url)
125+
// Prevent default action
126+
return nil
127+
}
125128
}
126-
return true
129+
// Allow default behavior
130+
return defaultAction
127131
}
128132
}
129133

WooCommerce/Classes/ViewRelated/Survey/SurveySubmittedViewController.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ final class SurveySubmittedViewController: UIViewController, SurveySubmittedView
6767
applyStyleToComponents()
6868
applyLocalizedTextsToComponents()
6969
configureStackViewsAxis()
70+
observeTraitChanges()
71+
}
72+
73+
private func observeTraitChanges() {
74+
registerForTraitChanges([UITraitPreferredContentSizeCategory.self]) { (self: Self, _) in
75+
self.configureStackViewsAxis()
76+
}
7077
}
7178

7279
@IBAction private func contactUsButtonTapped(_ sender: Any) {
@@ -118,15 +125,6 @@ private extension SurveySubmittedViewController {
118125
}
119126
}
120127

121-
// MARK: Accessibility handling
122-
//
123-
extension SurveySubmittedViewController {
124-
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
125-
super.traitCollectionDidChange(previousTraitCollection)
126-
configureStackViewsAxis()
127-
}
128-
}
129-
130128
// MARK: Constants
131129
//
132130
private extension SurveySubmittedViewController {

0 commit comments

Comments
 (0)