diff --git a/CHANGES.rst b/CHANGES.rst index 7ee6f81a6..6ac2fef4f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,7 @@ Changes in 0.9.5 (2019-09-18) Bug fix: * VoiceOver: RoomVC: Fix some missing accessibility labels for buttons (#2722). + * VoiceOver: RoomVC: Make VoiceOver focus on the contextual menu when selecting an event (#2721). Changes in 0.9.4 (2019-09-13) =============================================== diff --git a/Riot/Modules/Room/ContextualMenu/ContextualMenuItemView.swift b/Riot/Modules/Room/ContextualMenu/ContextualMenuItemView.swift index 8a0147e5f..2e95493d7 100644 --- a/Riot/Modules/Room/ContextualMenu/ContextualMenuItemView.swift +++ b/Riot/Modules/Room/ContextualMenu/ContextualMenuItemView.swift @@ -93,20 +93,30 @@ final class ContextualMenuItemView: UIView, NibOwnerLoadable { } // MARK: - Public - - func fill(title: String, image: UIImage?) { - self.originalImage = image?.withRenderingMode(.alwaysTemplate) - self.titleLabel.text = title - self.updateView() - } - + func fill(menuItem: RoomContextualMenuItem) { self.fill(title: menuItem.title, image: menuItem.image) + self.setupAccessibility(title: menuItem.title, isEnabled: menuItem.isEnabled) self.action = menuItem.action self.isEnabled = menuItem.isEnabled } // MARK: - Private + + private func fill(title: String, image: UIImage?) { + self.originalImage = image?.withRenderingMode(.alwaysTemplate) + self.titleLabel.text = title + self.updateView() + } + + private func setupAccessibility(title: String, isEnabled: Bool) { + self.isAccessibilityElement = true + self.accessibilityLabel = title + self.accessibilityTraits = .button + if !isEnabled { + self.accessibilityTraits.insert(.notEnabled) + } + } private func setupGestureRecognizer() { let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(buttonAction(_:))) diff --git a/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift b/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift index 874ac0466..32052dc06 100644 --- a/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift +++ b/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift @@ -117,11 +117,15 @@ final class RoomContextualMenuViewController: UIViewController, Themable { func showMenuToolbar() { self.menuToolbarViewBottomConstraint.constant = 0 self.menuToolbarView.alpha = 1 + + // Force VoiceOver to focus on the menu bar actions + UIAccessibility.post(notification: .screenChanged, argument: self.menuToolbarView) } func hideMenuToolbar() { self.menuToolbarViewBottomConstraint.constant = self.hiddenToolbarViewBottomConstant self.menuToolbarView.alpha = 0 + UIAccessibility.post(notification: .screenChanged, argument: nil) } func prepareReactionsMenuAnimations() {