diff --git a/Localization/app.json b/Localization/app.json
index fbc670da6..4e9d15a8a 100644
--- a/Localization/app.json
+++ b/Localization/app.json
@@ -138,7 +138,20 @@
"title": "Pick a Server,\nany server.",
"button": {
"category": {
- "All": "All"
+ "all": "All",
+ "all_accessiblity_description": "Category: All",
+ "academia": "academia",
+ "activism": "activism",
+ "food": "food",
+ "furry": "furry",
+ "games": "games",
+ "general": "general",
+ "journalism": "journalism",
+ "lgbt": "lgbt",
+ "regional": "regional",
+ "art": "art",
+ "music": "music",
+ "tech": "tech"
},
"see_less": "See Less",
"see_more": "See More"
@@ -423,4 +436,4 @@
"text_placeholder": "Type or paste additional comments"
}
}
-}
+}
\ No newline at end of file
diff --git a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
index f092f9734..326857269 100644
--- a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -12,7 +12,7 @@
CoreDataStack.xcscheme_^#shared#^_
orderHint
- 15
+ 14
Mastodon - RTL.xcscheme_^#shared#^_
@@ -32,7 +32,7 @@
NotificationService.xcscheme_^#shared#^_
orderHint
- 14
+ 15
SuppressBuildableAutocreation
diff --git a/Mastodon/Diffiable/Item/CategoryPickerItem.swift b/Mastodon/Diffiable/Item/CategoryPickerItem.swift
index 52bdaf39e..0f2cdcc21 100644
--- a/Mastodon/Diffiable/Item/CategoryPickerItem.swift
+++ b/Mastodon/Diffiable/Item/CategoryPickerItem.swift
@@ -50,6 +50,42 @@ extension CategoryPickerItem {
}
}
}
+
+ var accessibilityDescription: String {
+ switch self {
+ case .all:
+ return L10n.Scene.ServerPicker.Button.Category.allAccessiblityDescription
+ case .category(let category):
+ switch category.category {
+ case .academia:
+ return L10n.Scene.ServerPicker.Button.Category.academia
+ case .activism:
+ return L10n.Scene.ServerPicker.Button.Category.activism
+ case .food:
+ return L10n.Scene.ServerPicker.Button.Category.food
+ case .furry:
+ return L10n.Scene.ServerPicker.Button.Category.furry
+ case .games:
+ return L10n.Scene.ServerPicker.Button.Category.games
+ case .general:
+ return L10n.Scene.ServerPicker.Button.Category.general
+ case .journalism:
+ return L10n.Scene.ServerPicker.Button.Category.journalism
+ case .lgbt:
+ return L10n.Scene.ServerPicker.Button.Category.lgbt
+ case .regional:
+ return L10n.Scene.ServerPicker.Button.Category.regional
+ case .art:
+ return L10n.Scene.ServerPicker.Button.Category.art
+ case .music:
+ return L10n.Scene.ServerPicker.Button.Category.music
+ case .tech:
+ return L10n.Scene.ServerPicker.Button.Category.tech
+ case ._other:
+ return "❓" // FIXME:
+ }
+ }
+ }
}
extension CategoryPickerItem: Equatable {
diff --git a/Mastodon/Diffiable/Section/CategoryPickerSection.swift b/Mastodon/Diffiable/Section/CategoryPickerSection.swift
index 938683f99..7ab93cc5e 100644
--- a/Mastodon/Diffiable/Section/CategoryPickerSection.swift
+++ b/Mastodon/Diffiable/Section/CategoryPickerSection.swift
@@ -42,6 +42,10 @@ extension CategoryPickerSection {
}
}
.store(in: &cell.observations)
+
+ cell.isAccessibilityElement = true
+ cell.accessibilityLabel = item.accessibilityDescription
+
return cell
}
}
diff --git a/Mastodon/Generated/Strings.swift b/Mastodon/Generated/Strings.swift
index 4ec5e7037..e53f9c082 100644
--- a/Mastodon/Generated/Strings.swift
+++ b/Mastodon/Generated/Strings.swift
@@ -638,8 +638,34 @@ internal enum L10n {
/// See More
internal static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore")
internal enum Category {
+ /// academia
+ internal static let academia = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Academia")
+ /// activism
+ internal static let activism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Activism")
/// All
internal static let all = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.All")
+ /// Category: All
+ internal static let allAccessiblityDescription = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.AllAccessiblityDescription")
+ /// art
+ internal static let art = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Art")
+ /// food
+ internal static let food = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Food")
+ /// furry
+ internal static let furry = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Furry")
+ /// games
+ internal static let games = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Games")
+ /// general
+ internal static let general = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.General")
+ /// journalism
+ internal static let journalism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Journalism")
+ /// lgbt
+ internal static let lgbt = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Lgbt")
+ /// music
+ internal static let music = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Music")
+ /// regional
+ internal static let regional = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Regional")
+ /// tech
+ internal static let tech = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Tech")
}
}
internal enum EmptyState {
diff --git a/Mastodon/Resources/en.lproj/Localizable.strings b/Mastodon/Resources/en.lproj/Localizable.strings
index 59f83a5cd..16552b39e 100644
--- a/Mastodon/Resources/en.lproj/Localizable.strings
+++ b/Mastodon/Resources/en.lproj/Localizable.strings
@@ -204,7 +204,20 @@ tap the link to confirm your account.";
"Scene.Search.Searching.Segment.All" = "All";
"Scene.Search.Searching.Segment.Hashtags" = "Hashtags";
"Scene.Search.Searching.Segment.People" = "People";
+"Scene.ServerPicker.Button.Category.Academia" = "academia";
+"Scene.ServerPicker.Button.Category.Activism" = "activism";
"Scene.ServerPicker.Button.Category.All" = "All";
+"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "Category: All";
+"Scene.ServerPicker.Button.Category.Art" = "art";
+"Scene.ServerPicker.Button.Category.Food" = "food";
+"Scene.ServerPicker.Button.Category.Furry" = "furry";
+"Scene.ServerPicker.Button.Category.Games" = "games";
+"Scene.ServerPicker.Button.Category.General" = "general";
+"Scene.ServerPicker.Button.Category.Journalism" = "journalism";
+"Scene.ServerPicker.Button.Category.Lgbt" = "lgbt";
+"Scene.ServerPicker.Button.Category.Music" = "music";
+"Scene.ServerPicker.Button.Category.Regional" = "regional";
+"Scene.ServerPicker.Button.Category.Tech" = "tech";
"Scene.ServerPicker.Button.SeeLess" = "See Less";
"Scene.ServerPicker.Button.SeeMore" = "See More";
"Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading data. Check your internet connection.";
diff --git a/Mastodon/Scene/Onboarding/PickServer/TableViewCell/PickServerCategoriesCell.swift b/Mastodon/Scene/Onboarding/PickServer/TableViewCell/PickServerCategoriesCell.swift
index 84ee6017c..373a90ddf 100644
--- a/Mastodon/Scene/Onboarding/PickServer/TableViewCell/PickServerCategoriesCell.swift
+++ b/Mastodon/Scene/Onboarding/PickServer/TableViewCell/PickServerCategoriesCell.swift
@@ -9,7 +9,7 @@ import os.log
import UIKit
import MastodonSDK
-protocol PickServerCategoriesCellDelegate: class {
+protocol PickServerCategoriesCellDelegate: AnyObject {
func pickServerCategoriesCell(_ cell: PickServerCategoriesCell, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
}
@@ -110,3 +110,17 @@ extension PickServerCategoriesCell: UICollectionViewDelegateFlowLayout {
}
}
+
+extension PickServerCategoriesCell {
+
+ override func accessibilityElementCount() -> Int {
+ guard let diffableDataSource = diffableDataSource else { return 0 }
+ return diffableDataSource.snapshot().itemIdentifiers.count
+ }
+
+ override func accessibilityElement(at index: Int) -> Any? {
+ guard let item = collectionView.cellForItem(at: IndexPath(item: index, section: 0)) else { return nil }
+ return item
+ }
+
+}