From 85344db4c78059cea429e4ad8267e56dee0d825a Mon Sep 17 00:00:00 2001 From: Brianna Birman Date: Tue, 14 Jan 2025 14:57:35 -0800 Subject: [PATCH 1/2] Resize navigation title for accessibility --- .../Classes/Login/SFLoginViewController.m | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/SFLoginViewController.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/SFLoginViewController.m index d3633d5465..87998d5641 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/SFLoginViewController.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/SFLoginViewController.m @@ -95,6 +95,8 @@ - (void)viewDidLoad { if (bioAuthManager.locked && bioAuthManager.hasBiometricOptedIn) { [bioAuthManager presentBiometricWithScene:self.view.window.windowScene]; } + + [self registerForTraitChanges:@[UITraitDisplayScale.class] withAction:@selector(setupNavigationBar)]; } - (CGFloat) belowFrame:(CGRect) frame { @@ -195,34 +197,35 @@ - (void)setConfig:(SFSDKLoginViewControllerConfig *)config { #pragma mark - Setup Navigation bar - (void)setupNavigationBar { - - self.navBar = self.navigationController.navigationBar; - self.navBar.topItem.titleView = [self createTitleItem]; - // Hides the gear icon if there are no hosts to switch to. - SFManagedPreferences *managedPreferences = [SFManagedPreferences sharedPreferences]; - if (managedPreferences.onlyShowAuthorizedHosts && managedPreferences.loginHosts.count == 0) { - self.config.showSettingsIcon = NO; - } - if(self.showSettingsIcon) { - // Setup right bar button. - UIBarButtonItem *button = [self createSettingsButton]; - if (!button.target){ - [button setTarget:self]; - } - if (!button.action){ - [button setAction:@selector(showLoginHost:)]; - } - self.navBar.topItem.rightBarButtonItem = button; - } - [self styleNavigationBar:self.navBar]; - - if (self.navigationController == nil) { - [self.view addSubview:self.navBar]; - } - - #if !TARGET_OS_VISION + if (self.showNavbar) { + self.navBar = self.navigationController.navigationBar; + self.navBar.topItem.titleView = [self createTitleItem]; + // Hides the gear icon if there are no hosts to switch to. + SFManagedPreferences *managedPreferences = [SFManagedPreferences sharedPreferences]; + if (managedPreferences.onlyShowAuthorizedHosts && managedPreferences.loginHosts.count == 0) { + self.config.showSettingsIcon = NO; + } + if(self.showSettingsIcon) { + // Setup right bar button. + UIBarButtonItem *button = [self createSettingsButton]; + if (!button.target){ + [button setTarget:self]; + } + if (!button.action){ + [button setAction:@selector(showLoginHost:)]; + } + self.navBar.topItem.rightBarButtonItem = button; + } + [self styleNavigationBar:self.navBar]; + + if (self.navigationController == nil) { + [self.view addSubview:self.navBar]; + } + + #if !TARGET_OS_VISION [self setNeedsStatusBarAppearanceUpdate]; - #endif + #endif + } } - (void)setupBackButton { @@ -277,9 +280,13 @@ - (UIView *)createTitleItem { } if (self.config.navBarFont) { item.font = self.config.navBarFont; + } else { + item.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; } + item.text = title; - [item sizeToFit]; + item.textAlignment = NSTextAlignmentCenter; + item.adjustsFontForContentSizeCategory = YES; return item; } From 76d0e89d97a12456a14981cbefe74b079ef9246b Mon Sep 17 00:00:00 2001 From: Brianna Birman Date: Tue, 14 Jan 2025 15:54:56 -0800 Subject: [PATCH 2/2] Add IDs for automated tests --- .../Classes/Login/LoginHost/NewLoginHostView.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/LoginHost/NewLoginHostView.swift b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/LoginHost/NewLoginHostView.swift index d765efcc33..3742997ae4 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/LoginHost/NewLoginHostView.swift +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/LoginHost/NewLoginHostView.swift @@ -37,7 +37,9 @@ class NewLoginHostViewController: NSObject { struct NewLoginHostField: View { let fieldLabel: String + let fieldLabelAccessibilityID: String let fieldPlaceholder: String + let fieldInputAccessibilityID: String @Binding var fieldValue: String func placeholderText() -> Text { @@ -50,7 +52,9 @@ struct NewLoginHostField: View { var body: some View { VStack(alignment: .leading, spacing: 5) { Text(fieldLabel) + .accessibilityIdentifier(fieldLabelAccessibilityID) TextField("", text: $fieldValue, prompt: placeholderText()) + .accessibilityIdentifier(fieldInputAccessibilityID) .autocorrectionDisabled() .padding() .background( @@ -87,14 +91,18 @@ struct NewLoginHostView: View { var body: some View { List { NewLoginHostField(fieldLabel: SFSDKResourceUtils.localizedString("LOGIN_SERVER_URL"), + fieldLabelAccessibilityID: "addconn_hostLabel", fieldPlaceholder: SFSDKResourceUtils.localizedString("LOGIN_SERVER_URL_PLACEHOLDER"), + fieldInputAccessibilityID: "addconn_hostInput", fieldValue: $host) .keyboardType(.URL) .autocapitalization(.none) .listRowSeparator(.hidden) NewLoginHostField(fieldLabel: SFSDKResourceUtils.localizedString("LOGIN_SERVER_NAME"), + fieldLabelAccessibilityID: "addconn_nameLabel", fieldPlaceholder: SFSDKResourceUtils.localizedString("LOGIN_SERVER_NAME_PLACEHOLDER"), + fieldInputAccessibilityID: "addconn_nameInput", fieldValue: $label) .listRowSeparator(.hidden) .padding(.bottom)