From 8b69c3eb15881b7b91254ef45edd0124ca13a728 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 15 Dec 2023 14:04:27 -0600 Subject: [PATCH] ONEAPP-6239 - Loader Voice Over Fixes Signed-off-by: Matt Bruce --- VDS/Components/Loader/Loader.swift | 31 +++++++++++++++++++++------- VDS/SupportingFiles/ReleaseNotes.txt | 4 ++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/VDS/Components/Loader/Loader.swift b/VDS/Components/Loader/Loader.swift index 87604a94..cecf9930 100644 --- a/VDS/Components/Loader/Loader.swift +++ b/VDS/Components/Loader/Loader.swift @@ -35,7 +35,8 @@ open class Loader: View { private var icon = Icon().with { $0.name = .loader } private var opacity: CGFloat = 0.8 private var iconColorConfiguration = SurfaceColorConfiguration(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark) - + private var loadingTimer: Timer? + //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- @@ -59,8 +60,9 @@ open class Loader: View { /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. open override func setup() { super.setup() - addSubview(icon) - + addSubview(icon) + isAccessibilityElement = true + icon.isAccessibilityElement = false icon .pinTopGreaterThanOrEqualTo() .pinLeadingGreaterThanOrEqualTo() @@ -85,22 +87,37 @@ open class Loader: View { } } + open override func updateAccessibility() { + } + //-------------------------------------------------- // MARK: - Private Methods //-------------------------------------------------- private let rotationLayerName = "rotationAnimation" private func startAnimating() { + accessibilityLabel = "Loading" + icon.layer.remove(layerName: rotationLayerName) let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") - rotation.toValue = NSNumber(value: Double.pi * 2) - rotation.duration = 0.5 // the speed of the rotation - rotation.isCumulative = true - rotation.repeatCount = Float.greatestFiniteMagnitude + rotation.fromValue = 0 + rotation.toValue = Double.pi * 2 + rotation.duration = 0.5 + rotation.repeatCount = .infinity icon.layer.add(rotation, forKey: rotationLayerName) + + // Focus VoiceOver on this view + UIAccessibility.post(notification: .layoutChanged, argument: self) + + loadingTimer = Timer.scheduledTimer(withTimeInterval: 20, repeats: true) { [weak self] _ in + self?.accessibilityLabel = "Still Loading" + UIAccessibility.post(notification: .announcement, argument: "Still Loading") + } } private func stopAnimating() { icon.layer.removeAnimation(forKey: rotationLayerName) + loadingTimer?.invalidate() + loadingTimer = nil } } diff --git a/VDS/SupportingFiles/ReleaseNotes.txt b/VDS/SupportingFiles/ReleaseNotes.txt index 19aafae3..0a5a3694 100644 --- a/VDS/SupportingFiles/ReleaseNotes.txt +++ b/VDS/SupportingFiles/ReleaseNotes.txt @@ -1,3 +1,7 @@ +1.0.49 +---------------- +- ONEAPP-6239 - Loader Voice Over Fixes + 1.0.48 ---------------- - ONEAPP-4683 - Accessibility - Tabs (Voice Over)