diff --git a/Localizations/Localizable.strings b/Localizations/Localizable.strings index acfb90c..cc49a49 100644 --- a/Localizations/Localizable.strings +++ b/Localizations/Localizable.strings @@ -2,6 +2,7 @@ "about" = "About"; "about.acknowledgments" = "Acknowledgments"; +"accessibility.activate-link-%@" = "Activate link: %@"; "account.%@-followers" = "%@'s Followers"; "account.accept-follow-request-button.accessibility-label" = "Accept follow request"; "account.avatar.accessibility-label-%@" = "Avatar: %@"; @@ -11,7 +12,6 @@ "account.domain-block.confirm-%@" = "Block domain %@?"; "account.domain-unblock-%@" = "Unblock domain %@"; "account.domain-unblock.confirm-%@" = "Unblock domain %@?"; -"account.field.activate-link-accessibility-action-%@" = "Activate link: %@"; "account.field.verified" = "Verified %@"; "account.follow" = "Follow"; "account.following" = "Following"; @@ -237,6 +237,7 @@ "search.scope.statuses.toot" = "Toots"; "search.scope.tags" = "Hashtags"; "share-extension-error.no-account-found" = "No account found"; +"status.accessibility.view-author-profile" = "View author's profile"; "status.bookmark" = "Bookmark"; "status.content-warning-abbreviation" = "CW"; "status.content-warning.accessibility" = "Content warning"; diff --git a/Localizations/Localizable.stringsdict b/Localizations/Localizable.stringsdict index fddb0c9..6c25399 100644 --- a/Localizations/Localizable.stringsdict +++ b/Localizations/Localizable.stringsdict @@ -66,6 +66,22 @@ %ld Favorites + status.replies-count + + NSStringLocalizedFormatKey + %#@replies@ + replies + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + %ld Reply + other + %ld Replies + + account.followers-count NSStringLocalizedFormatKey diff --git a/Views/UIKit/AccountFieldView.swift b/Views/UIKit/AccountFieldView.swift index 0b578fa..7c310ef 100644 --- a/Views/UIKit/AccountFieldView.swift +++ b/Views/UIKit/AccountFieldView.swift @@ -167,7 +167,7 @@ final class AccountFieldView: UIView { accessibilityCustomActions.append( UIAccessibilityCustomAction( name: String.localizedStringWithFormat( - NSLocalizedString("account.field.activate-link-accessibility-action-%@", comment: ""), + NSLocalizedString("accessibility.activate-link-%@", comment: ""), mutableValue.attributedSubstring(from: range).string)) { [weak self] _ in guard let valueTextView = self?.valueTextView else { return false } diff --git a/Views/UIKit/Content Views/StatusView.swift b/Views/UIKit/Content Views/StatusView.swift index 52b0202..f6f649c 100644 --- a/Views/UIKit/Content Views/StatusView.swift +++ b/Views/UIKit/Content Views/StatusView.swift @@ -510,6 +510,29 @@ private extension StatusView { accessibilityAttributedLabel.appendWithSeparator(accessibilityTime) } + if viewModel.repliesCount > 0 { + accessibilityAttributedLabel.appendWithSeparator( + String.localizedStringWithFormat( + NSLocalizedString("status.replies-count", comment: ""), + viewModel.repliesCount)) + } + + if viewModel.identityContext.appPreferences.showReblogAndFavoriteCounts { + if viewModel.reblogsCount > 0 { + accessibilityAttributedLabel.appendWithSeparator( + String.localizedStringWithFormat( + NSLocalizedString("status.reblogs-count", comment: ""), + viewModel.reblogsCount)) + } + + if viewModel.favoritesCount > 0 { + accessibilityAttributedLabel.appendWithSeparator( + String.localizedStringWithFormat( + NSLocalizedString("status.favorites-count", comment: ""), + viewModel.favoritesCount)) + } + } + self.accessibilityAttributedLabel = accessibilityAttributedLabel configureUserInteractionEnabledForAccessibility() @@ -723,6 +746,17 @@ private extension StatusView { }) } + actions.append( + UIAccessibilityCustomAction( + name: NSLocalizedString("status.accessibility.view-author-profile", + comment: "")) { [weak self] _ in + self?.statusConfiguration.viewModel.accountSelected() + + return true + }) + + actions.append(contentsOf: bodyView.accessibilityCustomActions ?? []) + if menuButton.isEnabled { actions.append(UIAccessibilityCustomAction( name: viewModel.bookmarked diff --git a/Views/UIKit/StatusBodyView.swift b/Views/UIKit/StatusBodyView.swift index f639dff..9fca2db 100644 --- a/Views/UIKit/StatusBodyView.swift +++ b/Views/UIKit/StatusBodyView.swift @@ -91,6 +91,33 @@ final class StatusBodyView: UIView { } self.accessibilityAttributedLabel = accessibilityAttributedLabel + + var accessibilityCustomActions = [UIAccessibilityCustomAction]() + + mutableContent.enumerateAttribute( + .link, + in: NSRange(location: 0, length: mutableContent.length), + options: []) { attribute, range, _ in + guard let url = attribute as? URL else { return } + + accessibilityCustomActions.append( + UIAccessibilityCustomAction( + name: String.localizedStringWithFormat( + NSLocalizedString("accessibility.activate-link-%@", comment: ""), + mutableContent.attributedSubstring(from: range).string)) { [weak self] _ in + guard let contentTextView = self?.contentTextView else { return false } + + _ = contentTextView.delegate?.textView?( + contentTextView, + shouldInteractWith: url, + in: range, + interaction: .invokeDefaultAction) + + return true + }) + } + + self.accessibilityCustomActions = accessibilityCustomActions } }