CXTDT-556996 RadioboxGroup – Voice over does not render the group position for the radio box group.

implemented groupable to ensure accessibilityValue is kept to help explain groups

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-05-24 08:34:56 -05:00
parent 91de90354d
commit 9690f152ef
8 changed files with 26 additions and 9 deletions

View File

@ -39,7 +39,7 @@ extension SelectorGroupSingleSelect {
} }
/// Base Class used for any Grouped Form Control of a Selector Type. /// Base Class used for any Grouped Form Control of a Selector Type.
open class SelectorGroupBase<SelectorItemType: Control>: Control, SelectorGroup, Changeable { open class SelectorGroupBase<SelectorItemType: Groupable>: Control, SelectorGroup, Changeable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Private Properties // MARK: - Private Properties

View File

@ -11,7 +11,7 @@ import Combine
import VDSTokens import VDSTokens
/// Base Class used to build out a SelectorControlable control. /// Base Class used to build out a SelectorControlable control.
open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable, Changeable { open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable, Changeable, Groupable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Initializers // MARK: - Initializers
@ -145,6 +145,8 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } } open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } }
open var accessibilityValueText: String?
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Overrides // MARK: - Overrides
//-------------------------------------------------- //--------------------------------------------------
@ -193,6 +195,7 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
open override func updateAccessibility() { open override func updateAccessibility() {
super.updateAccessibility() super.updateAccessibility()
setAccessibilityLabel(for: [selectorView, label, childLabel, errorLabel]) setAccessibilityLabel(for: [selectorView, label, childLabel, errorLabel])
accessibilityValue = accessibilityValueText
} }
/// Resets to default settings. /// Resets to default settings.

View File

@ -48,7 +48,7 @@ open class CheckboxGroup: SelectorGroupBase<CheckboxItem>, SelectorGroupMultiSel
$0.inputId = model.inputId $0.inputId = model.inputId
$0.hiddenValue = model.value $0.hiddenValue = model.value
$0.accessibilityLabel = model.accessibileText $0.accessibilityLabel = model.accessibileText
$0.accessibilityValue = "item \(index+1) of \(selectorModels.count)" $0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)"
$0.labelText = model.labelText $0.labelText = model.labelText
$0.labelTextAttributes = model.labelTextAttributes $0.labelTextAttributes = model.labelTextAttributes
$0.childText = model.childText $0.childText = model.childText

View File

@ -56,6 +56,7 @@ open class RadioBoxGroup: SelectorGroupBase<RadioBoxItem>, SelectorGroupSingleSe
$0.isSelected = model.selected $0.isSelected = model.selected
$0.strikethrough = model.strikethrough $0.strikethrough = model.strikethrough
$0.strikethroughAccessibilityText = model.strikethroughAccessibileText $0.strikethroughAccessibilityText = model.strikethroughAccessibileText
$0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)"
} }
} }
} }

View File

@ -13,7 +13,7 @@ import VDSTokens
/// Radio boxes are single-select components through which a customer indicates a choice /// Radio boxes are single-select components through which a customer indicates a choice
/// that are used within a ``RadioBoxGroup``. /// that are used within a ``RadioBoxGroup``.
@objc(VDSRadioBoxItem) @objc(VDSRadioBoxItem)
open class RadioBoxItem: Control, Changeable, FormFieldable { open class RadioBoxItem: Control, Changeable, FormFieldable, Groupable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Initializers // MARK: - Initializers
@ -131,6 +131,8 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } } open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } }
open var accessibilityValueText: String?
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Configuration Properties // MARK: - Configuration Properties
//-------------------------------------------------- //--------------------------------------------------
@ -241,7 +243,15 @@ open class RadioBoxItem: Control, Changeable, FormFieldable {
open override func updateAccessibility() { open override func updateAccessibility() {
super.updateAccessibility() super.updateAccessibility()
setAccessibilityLabel(for: [textLabel, subTextLabel, subTextRightLabel]) setAccessibilityLabel(for: [textLabel, subTextLabel, subTextRightLabel])
accessibilityValue = strikethrough ? strikethroughAccessibilityText : nil if let accessibilityValueText {
accessibilityValue = strikethrough
? "\(strikethroughAccessibilityText), \(accessibilityValueText)"
: accessibilityValueText
} else {
accessibilityValue = strikethrough
? "\(strikethroughAccessibilityText)"
: accessibilityValueText
}
} }
//-------------------------------------------------- //--------------------------------------------------

View File

@ -47,7 +47,7 @@ open class RadioButtonGroup: SelectorGroupBase<RadioButtonItem>, SelectorGroupSi
$0.inputId = model.inputId $0.inputId = model.inputId
$0.hiddenValue = model.value $0.hiddenValue = model.value
$0.accessibilityLabel = model.accessibileText $0.accessibilityLabel = model.accessibileText
$0.accessibilityValue = "item \(index+1) of \(selectorModels.count)" $0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)"
$0.labelText = model.labelText $0.labelText = model.labelText
$0.labelTextAttributes = model.labelTextAttributes $0.labelTextAttributes = model.labelTextAttributes
$0.childText = model.childText $0.childText = model.childText

View File

@ -13,7 +13,7 @@ import Combine
extension Tabs { extension Tabs {
@objc(VDSTab) @objc(VDSTab)
open class Tab: Control { open class Tab: Control, Groupable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Initializers // MARK: - Initializers
@ -89,6 +89,8 @@ extension Tabs {
open override var shouldHighlight: Bool { false } open override var shouldHighlight: Bool { false }
open var accessibilityValueText: String?
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Configuration // MARK: - Configuration
//-------------------------------------------------- //--------------------------------------------------
@ -178,6 +180,7 @@ extension Tabs {
open override func updateAccessibility() { open override func updateAccessibility() {
super.updateAccessibility() super.updateAccessibility()
accessibilityLabel = text accessibilityLabel = text
accessibilityValue = accessibilityValueText
} }
open override func layoutSubviews() { open override func layoutSubviews() {

View File

@ -303,7 +303,7 @@ open class Tabs: View {
tabItem.orientation = orientation tabItem.orientation = orientation
tabItem.surface = surface tabItem.surface = surface
tabItem.indicatorPosition = indicatorPosition tabItem.indicatorPosition = indicatorPosition
tabItem.accessibilityValue = "\(index+1) of \(tabViews.count) Tabs" tabItem.accessibilityValueText = "\(index+1) of \(tabViews.count) Tabs"
} }
} }