Skip to content

Conversation

@domonkosadam
Copy link
Contributor

refs: CLX-3537
affects: Student
release note: none

@github-actions
Copy link

github-actions bot commented Dec 11, 2025

🧪 Unit Test Results

✅ 📱 Student App

  • Tests: 1241 total, 0 failed, 0 skipped
  • Duration: 0.000s
  • Success Rate: 100%

✅ 🌅 Horizon

  • Tests: 449 total, 0 failed, 0 skipped
  • Duration: 29.071s
  • Success Rate: 100%

✅ 📦 Submodules

  • Tests: 2476 total, 0 failed, 0 skipped
  • Duration: 49.270s
  • Success Rate: 100%

📊 Summary

  • Total Tests: 4166
  • Failed: 0
  • Skipped: 0
  • Status: ✅ All tests passed!

Last updated: Mon, 15 Dec 2025 09:50:08 GMT

@github-actions
Copy link

github-actions bot commented Dec 11, 2025

📊 Code Coverage Report

✅ Student

  • PR Coverage: 42.91%
  • Master Coverage: 42.91%
  • Delta: +0.00%

✅ Teacher

  • PR Coverage: 25.48%
  • Master Coverage: 25.48%
  • Delta: +0.00%

✅ Pandautils

  • PR Coverage: 22.51%
  • Master Coverage: 22.51%
  • Delta: +0.00%

📈 Overall Average

  • PR Coverage: 30.30%
  • Master Coverage: 30.30%
  • Delta: +0.00%

@github-actions
Copy link

github-actions bot commented Dec 11, 2025

Student Install Page

Copy link

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Update Review - Accessibility Improvements

I've reviewed the latest changes to this PR. This update includes comprehensive accessibility improvements across the Horizon UI library.

Summary of Changes

Accessibility Enhancements:

  • Added proper semantics for dropdown components (SingleSelect, MultiSelect, SingleSelectImage)
  • Improved content descriptions for interactive elements (FileDrop actions, icon buttons)
  • Enhanced Tag component with better dismissible action semantics
  • Added TalkBack detection for InputDropDownPopup focus handling

UI/Layout Changes: ⚠️

  • Refactored inbox details message list layout approach
  • Moved reply content positioning
  • Updated message ordering logic in ViewModel

Issues Requiring Attention

I've added inline comments on 4 areas that need careful review:

  1. Inbox Details Layout Change (HorizonInboxDetailsScreen.kt:236) - Changed from reverseLayout to Arrangement.Bottom, which significantly alters scroll behavior
  2. Reply Content Positioning (HorizonInboxDetailsScreen.kt:237) - Moved from sticky header to separate component
  3. Message Ordering (HorizonInboxDetailsViewModel.kt:137) - Added .reversed() that interacts with layout changes
  4. TalkBack-dependent Focus Logic (InputDropDownPopup.kt:99) - Consider if popup should always be focusable

What's Working Well

  • ✅ Excellent use of semantic modifiers throughout
  • ✅ Proper role-based accessibility (Role.DropdownList)
  • ✅ Good separation of visual and semantic content
  • ✅ Consistent approach to preventing duplicate announcements
  • ✅ Well-organized string resources for a11y

Testing Recommendations

Critical:

  • Test inbox message ordering with initial load, pagination, and new replies
  • Verify scroll position behavior with keyboard interactions
  • Test reply UI visibility during message scrolling

Important:

  • Verify all dropdown components with TalkBack enabled
  • Test Tag dismissal actions with screen readers
  • Validate InputDropDownPopup with various accessibility services (TalkBack, Switch Access, Voice Access)

Overall Assessment

The accessibility improvements are well-implemented and follow Compose best practices. However, the inbox details refactoring represents a significant behavioral change that warrants thorough testing before merge. Please ensure the inline comments are addressed, particularly around the layout and ordering logic.

}
}
if (state.replyState != null) {
HorizonInboxReplyContent(state.replyState)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a significant behavioral change from the previous reverseLayout approach.

Concerns:

  1. reverseLayout = true with LazyColumn is the standard pattern for bottom-anchored lists (chat-style UIs) because it naturally handles scroll position when items are added/removed
  2. The new approach using Arrangement.Bottom with manual scroll state initialization may not handle dynamic content changes as gracefully
  3. When new messages are added via pagination or when the keyboard appears, the scroll position might jump unexpectedly

Recommendation:
If the goal is to fix accessibility traversal order, consider using reverseLayout with Modifier.semantics { isTraversalGroup = true; traversalIndex = ... } instead of completely changing the layout approach. This would maintain the proven scroll behavior while fixing accessibility.

Please ensure this has been thoroughly tested with:

  • Initial message load
  • Pagination (loading older messages)
  • Keyboard appearance/dismissal
  • Reply submission with immediate message addition

}
if (state.replyState != null) {
HorizonInboxReplyContent(state.replyState)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving the reply content from stickyHeader to outside the LazyColumn fundamentally changes the UX.

Previous behavior: Reply UI stayed visible at the top/bottom while scrolling through messages (sticky header behavior)

New behavior: Reply UI is now a separate component after the scrollable list

Questions:

  1. Was the sticky header causing accessibility issues?
  2. Is the reply UI supposed to always be visible, or should it scroll with content?
  3. How does this interact with the keyboard when replying?

If the sticky header was causing problems, consider using a Column with the reply UI and using Modifier.weight(1f) on the LazyColumn to achieve similar results while maintaining the always-visible reply behavior.

}
)
},
}.reversed(),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reversal combined with the layout changes needs careful verification.

Question: With the new Arrangement.Bottom approach and this .reversed(), are messages now displayed in the correct chronological order?

Testing needed:

  1. Verify message order matches expected chronological ordering
  2. Test that pagination loads older messages in the correct position
  3. Ensure new message submission appears in the right place

The interaction between .reversed() here, the changed pagination order at line 395, and the new layout arrangement needs integration testing to ensure correctness.

verticalOffsetPx + SpaceSize.SPACE_8.value.toPx
),
onDismissRequest = { onMenuOpenChanged(false) },
properties = PopupProperties(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While detecting TalkBack for focus behavior is functional, consider the architectural implications:

Current approach: Checking accessibility manager state to alter popup behavior

Potential issues:

  1. Creates dependency on runtime accessibility state
  2. May cause inconsistent behavior if users enable TalkBack after the popup is created
  3. The popup should ideally work correctly regardless of accessibility configuration

Suggestion:
Consider making the popup always focusable when isMenuOpen is true, which should work correctly for both regular and TalkBack users. If there's a specific reason why it must be non-focusable for sighted users, document it clearly.

properties = PopupProperties(
    focusable = visibleState.targetState && isFocusable
)

If the TalkBack check is necessary for a specific behavior, please add a comment explaining why.

Copy link
Contributor

@andrasmaczak andrasmaczak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings:

  • Unread items should be announced as Unread
  • On Create Message screen the close button's description should be fixed
  • On Create Message screen the attach file dialog's close button's description should be fixed
  • The 'Send an individual message to each recipient' label and checkbox should be merged

@domonkosadam domonkosadam merged commit 0b0b33f into master Dec 15, 2025
26 checks passed
@domonkosadam domonkosadam deleted the CLX-3537-Inbox-a11y branch December 15, 2025 11:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants