Adding localized string because I didn't see it there for existing key. Updating Toggle to handle accessibility text.

This commit is contained in:
Kevin G Christiano 2020-03-26 11:36:18 -04:00
parent 7e89e58cd1
commit 88349bc651
4 changed files with 43 additions and 18 deletions

View File

@ -190,7 +190,10 @@ public typealias ActionBlockConfirmation = () -> (Bool)
public override func setupView() {
super.setupView()
guard subviews.isEmpty else { return }
isAccessibilityElement = true
accessibilityTraits = .button
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "AccToggleHint")
accessibilityLabel = MVMCoreUIUtility.hardcodedString(withKey: "Toggle_buttonlabel")
heightConstraint = heightAnchor.constraint(equalToConstant: Self.containerSize.height)
heightConstraint?.isActive = true
@ -214,8 +217,6 @@ public typealias ActionBlockConfirmation = () -> (Bool)
knobTrailingConstraint = trailingAnchor.constraint(equalTo: knobView.trailingAnchor, constant: 1)
knobLeadingConstraint = knobView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 1)
knobLeadingConstraint?.isActive = true
accessibilityLabel = MVMCoreUIUtility.hardcodedString(withKey: "Toggle_buttonlabel")
}
public override func reset() {
@ -336,16 +337,15 @@ public typealias ActionBlockConfirmation = () -> (Bool)
// MARK:- ModelMoleculeViewProtocol
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let toggleModel = model as? ToggleModel else {
return
}
self.model = model
self.delegateObject = delegateObject
let toggleModelJSON = toggleModel.toJSON()
self.model = model
guard let model = model as? ToggleModel else { return }
FormValidator.setupValidation(molecule: toggleModel, delegate: delegateObject?.formHolderDelegate)
setWithJSON(toggleModelJSON, delegateObject: delegateObject, additionalData: additionalData)
accessibilityLabel = model.accessibilityText ?? MVMCoreUIUtility.hardcodedString(withKey: "Toggle_buttonlabel")
FormValidator.setupValidation(molecule: model, delegate: delegateObject?.formHolderDelegate)
setWithJSON(model.toJSON(), delegateObject: delegateObject, additionalData: additionalData)
}
//TODO: change to setWith Model

View File

@ -9,16 +9,24 @@
import UIKit
public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
public static var identifier: String = "toggle"
public var backgroundColor: Color?
public var state: Bool = true
public var action: ActionModelProtocol?
public var alternateAction: ActionModelProtocol?
public var accessibilityText: String?
public var fieldKey: String?
public var groupName: String? = FormValidator.defaultGroupName
public var baseValue: AnyHashable?
//--------------------------------------------------
// MARK: - Keys
//--------------------------------------------------
private enum CodingKeys: String, CodingKey {
case moleculeName
case state
@ -27,16 +35,29 @@ public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol {
case fieldKey
case alternateAction
case groupName
case accessibilityText
}
//--------------------------------------------------
// MARK: - Methods
//--------------------------------------------------
public func formFieldValue() -> AnyHashable? {
return state
}
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(_ state: Bool) {
self.state = state
}
//--------------------------------------------------
// MARK: - Codec
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
if let state = try typeContainer.decodeIfPresent(Bool.self, forKey: .state) {
@ -49,6 +70,8 @@ public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol {
if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) {
self.groupName = groupName
}
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
}
public func encode(to encoder: Encoder) throws {
@ -60,5 +83,6 @@ public class ToggleModel: MoleculeModelProtocol, FormFieldProtocol {
try container.encode(state, forKey: .state)
try container.encodeIfPresent(fieldKey, forKey: .fieldKey)
try container.encodeIfPresent(groupName, forKey: .groupName)
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
}
}

View File

@ -24,10 +24,7 @@ import UIKit
(molecule as? ModelMoleculeViewProtocol)?.set(with: castModel.molecule, delegateObject, additionalData)
} else if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(castModel.molecule, delegateObject, false) {
addMolecule(moleculeView)
if ((moleculeView as? Label) != nil) {
accessibilityElements = [moleculeView]
}
accessibilityElements = [moleculeView]
}
super.set(with: model, delegateObject, additionalData)
}
@ -36,7 +33,7 @@ import UIKit
guard let moleculeModel = (model as? MoleculeListItemModel)?.molecule else { return "\(self)<>" }
let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol.Type
let moleculeName = className?.nameForReuse(with: moleculeModel, delegateObject) ?? moleculeModel.moleculeName ?? ""
let moleculeName = className?.nameForReuse(with: moleculeModel, delegateObject) ?? moleculeModel.moleculeName
return "\(self)<\(moleculeName)>"
}

View File

@ -31,6 +31,7 @@
// Camera
"AccCameraButton" = "Camera Button";
"AccCameraHint" = "Double tap to launch camera for scanning";
// Checkbox
"checkbox_action_hint" = "Double tap to change state";
"checkbox_checked_state" = "Checked";
@ -43,14 +44,17 @@
"radio_not_selected_state" = "Not Selected";
"radio_desc_state" = "Option";
// Switch
// Switch / Toggle
"mfswitch_buttonlabel" = "Switch Button";
"Toggle_buttonlabel" = "Toggle Button"
"AccOn" = "on";
"AccOff" = "off";
"AccToggleHint" = "double tap to toggle";
// Carousel
"MVMCoreUIPageControl_currentpage_index" = "page %ld of %ld";
"MVMCoreUIPageControlslides_currentpage_index" = "slide %ld of %ld";
//Styler
"CountDownDay" = " day";
"CountDownHour" = " hour";