Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,7 @@ extension AccessibilityComposition {
}

private func updateAccessibility() {
guard window != nil else { return }
let sorting = customSorting ?? Accessibility.frameSort(
direction: layoutDirection,
root: self,
Expand Down Expand Up @@ -438,6 +439,7 @@ extension AccessibilityComposition.CombinableView {

public override var isAccessibilityElement: Bool {
get {
guard window != nil else { return false }
if needsAccessibilityUpdate {
updateAccessibility()
}
Expand Down Expand Up @@ -486,6 +488,16 @@ extension AccessibilityComposition.CombinableView {
set { super.accessibilityIdentifier = newValue }
}

public override var accessibilityTraits: UIAccessibilityTraits {
get {
if needsAccessibilityUpdate {
updateAccessibility()
}
return super.accessibilityTraits
}
set { super.accessibilityTraits = newValue }
}

public override var accessibilityElements: [Any]? {
get {
if needsAccessibilityUpdate {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,6 @@ extension AccessibilityDeferral {
public func backingViewDescription(with context: BlueprintUI.ViewDescriptionContext) -> BlueprintUI.ViewDescription? {
ReceiverContainerView.describe { config in
config.apply { view in
view.isAccessibilityElement = true
view.needsAccessibilityUpdate = true
view.layoutDirection = context.environment.layoutDirection
view.element = wrappedElement
}
Expand All @@ -291,7 +289,6 @@ extension AccessibilityDeferral {

override init(frame: CGRect) {
super.init(frame: frame)
isAccessibilityElement = true
mergeInteractiveSingleChild = false

blueprintView.backgroundColor = .clear
Expand All @@ -302,6 +299,14 @@ extension AccessibilityDeferral {
fatalError("init(coder:) has not been implemented")
}

override func didMoveToWindow() {
super.didMoveToWindow()
isAccessibilityElement = (window != nil)
if window != nil {
needsAccessibilityUpdate = true
}
}

override func layoutSubviews() {
super.layoutSubviews()
blueprintView.frame = bounds
Expand Down Expand Up @@ -335,6 +340,7 @@ extension AccessibilityDeferral {
}

public func updateDeferredAccessibility(frameProvider: FrameProvider?) {
guard window != nil else { return }
needsAccessibilityUpdate = true

self.frameProvider = frameProvider
Expand Down Expand Up @@ -420,6 +426,7 @@ extension AccessibilityDeferral {
}

private func updateAccessibility() {
guard window != nil else { return }
needsAccessibilityUpdate = false
blueprintView.layoutIfNeeded()
let elements = blueprintView.recursiveAccessibleElements()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,9 @@
}

func test_blockWhenNotAccessible_givenPopulatedAccessibility() {
let window = UIWindow()
let view = AccessibilityComposition.CombinableView()
window.addSubview(view)
view.blockWhenNotAccessible = true
(1...3)
.map { int in
Expand All @@ -358,7 +360,9 @@
}

func test_blockWhenNotAccessible_givenEmptyAccessibility() {
let window = UIWindow()
let view = AccessibilityComposition.CombinableView()
window.addSubview(view)
view.blockWhenNotAccessible = true
(1...3)
.map { int in
Expand All @@ -384,6 +388,39 @@
XCTAssertFalse(view.isAccessibilityElement, "The view should not be accessible.")
}

func test_updateAccessibility_skipsWhenNotInWindow() {
let view = AccessibilityComposition.CombinableView()
view.blockWhenNotAccessible = true
let subview = UIView()
subview.isAccessibilityElement = true
subview.accessibilityLabel = "Should not appear"
view.addSubview(subview)

view.setNeedsLayout()
view.layoutIfNeeded()

XCTAssertNil(view.accessibilityLabel)
XCTAssertTrue(view.needsAccessibilityUpdate)

Check failure on line 403 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 17.2

test_updateAccessibility_skipsWhenNotInWindow, XCTAssertTrue failed

Check failure on line 403 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 16.2

test_updateAccessibility_skipsWhenNotInWindow, XCTAssertTrue failed

Check failure on line 403 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 15.4

test_updateAccessibility_skipsWhenNotInWindow, XCTAssertTrue failed
}

func test_updateAccessibility_runsAfterMovingToWindow() {
let view = AccessibilityComposition.CombinableView()
view.blockWhenNotAccessible = true
let subview = UIView()
subview.isAccessibilityElement = true
subview.accessibilityLabel = "Now visible"
view.addSubview(subview)

view.setNeedsLayout()
view.layoutIfNeeded()
XCTAssertNil(view.accessibilityLabel)
XCTAssertTrue(view.needsAccessibilityUpdate)

Check failure on line 417 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 17.2

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertTrue failed

Check failure on line 417 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 16.2

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertTrue failed

Check failure on line 417 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 15.4

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertTrue failed

let window = UIWindow()
window.addSubview(view)
XCTAssertEqual(view.accessibilityLabel, "Now visible")

Check failure on line 421 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 17.2

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertEqual failed: ("nil") is not equal to ("Optional("Now visible")")

Check failure on line 421 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 16.2

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertEqual failed: ("nil") is not equal to ("Optional("Now visible")")

Check failure on line 421 in BlueprintUIAccessibilityCore/Tests/AccessibilityCompositionTests.swift

View workflow job for this annotation

GitHub Actions / iOS 15.4

test_updateAccessibility_runsAfterMovingToWindow, XCTAssertEqual failed: ("nil") is not equal to ("Optional("Now visible")")
XCTAssertFalse(view.needsAccessibilityUpdate)
}

func test_applyAccessibility() {

Expand Down
Loading