Skip to content

Disrespectful handling of previous accessibility issues — re-posting with full technical details #2811

Description

@baich110

🚨 This is NOT a duplicate — this is a condemnation of how you treat contributors

I previously submitted two detailed accessibility issues (#2800 in Chinese, #2801 in English) after conducting a thorough source code audit of the OpenList frontend. Both were summarily closed by @jyxjjj with the label "duplicate" — without a single comment, without pointing to which issue they supposedly duplicate, and without any acknowledgment of the work put in.

Let me be clear: closing a contributor's issue without any explanation is not just poor project management — it's disrespectful. A visually impaired user spent hours analyzing your source code file by file, documenting exact locations and fix recommendations, and the response was silence followed by a door slammed in their face.

If these are genuinely duplicates, the minimum standard of decency is to leave a comment saying "Thank you, this is already tracked in #xxx". Zero comments, zero explanation, zero gratitude — that's not how you treat people who volunteer their time to improve your project.


Below is the full content of the previously submitted issues, reposted in full. If this is truly a duplicate, I expect at least the courtesy of a comment pointing to the relevant issue. Otherwise, I expect this to be treated as the serious accessibility report it is.


Background

I am a visually impaired user who relies entirely on TalkBack (Android screen reader) to use my phone. OpenList is a powerful file storage mounting tool with extensive storage service support, but its accessibility on Android is severely lacking, making it nearly impossible for visually impaired users to use core features.

OpenList's Android app renders its UI through a WebView loading a Web interface. While this architecture works functionally, it introduces inherent accessibility deficiencies — interactive elements in the Web interface often lack ARIA semantic annotations, preventing TalkBack from correctly identifying and operating them.

Source Code Audit

We conducted a file-by-file audit of both the OpenList backend (OpenListTeam/OpenList) and frontend (OpenListTeam/OpenList-Frontend). The backend is a pure Go API service with no accessibility issues — all problems are concentrated in the frontend Web interface. The frontend is built with SolidJS + Hope UI. All findings below are based on actual source code locations.

Issues Found

1. File List Items Have Zero Accessibility Semantics (Blocker/Critical)

Source: src/pages/home/folder/ListItem.tsx, src/pages/home/folder/GridItem.tsx

The file list is OpenList's core interaction area, but TalkBack users cannot effectively browse or operate files:

  • List item container <HStack> has no role="listitem" and no aria-label — TalkBack reads out meaningless text fragments
  • File names are rendered with <Text title={props.obj.name}>, but the title attribute is not read aloud by TalkBack
  • File name, file size, and modification time are separate <Text> elements — TalkBack reads them one by one, making it impossible to quickly locate target files
  • Click/double-click to open folders is bound to on:click and on:dblclick, but the container has no role="link" or role="button" — TalkBack users cannot tell it's interactive
  • Grid view GridItem.tsx thumbnail <ImageWithError> has no alt attribute
  • Checkbox <ItemCheckbox> has checked and onChange but no aria-label indicating which file is being selected

2. Context Menu Completely Unreachable by TalkBack (Blocker/Critical)

Source: src/pages/home/folder/context-menu.tsx

The operation menu (download, rename, delete, copy, move, share, etc.) triggered by long-pressing a file is completely inaccessible to TalkBack users:

  • Uses solid-contextmenu library, menu triggered via onContextMenu (right-click event) — Android TalkBack has no right-click event
  • Menu items <Item> have no role="menuitem" and no aria-label
  • No focus management when menu appears (first menu item is not auto-focused)
  • Submenus <Submenu> also lack ARIA semantics

3. File List Container Lacks Semantic Structure (Barrier/High)

Source: src/pages/home/folder/List.tsx, src/pages/home/folder/Grid.tsx

  • List container <VStack class="list"> has no role="list"
  • Sort buttons in list title (clicking column names to sort) have no role="button" or aria-label — TalkBack cannot tell they are clickable sort controls
  • Select-all checkbox has no aria-label="Select all"

4. Page Landmarks Completely Missing (Barrier/High)

Source: index.html, src/pages/home/Layout.tsx, src/pages/home/header/Header.tsx, src/pages/home/Nav.tsx

The entire Web interface lacks WAI-ARIA landmark markers, preventing TalkBack users from using landmark navigation:

  • index.html has <html lang="en"> — should be dynamically set based on locale
  • No <main> tag, main content area has no role="main"
  • No <nav> tag, breadcrumb navigation (Nav.tsx <Breadcrumb>) has no role="navigation" + aria-label
  • No <header> tag, top bar (Header.tsx) has no role="banner"
  • Search area has no role="search"

5. Dynamic Content Updates Not Announced (Barrier/Medium)

A full-project search found zero aria-live, zero role="status", zero aria-busy:

  • File upload/download progress changes are not announced by TalkBack
  • Success/error Toast notifications are invisible to TalkBack
  • Loading states (CenterLoading component) have no aria-busy or role="status"

6. Toolbar Buttons Lack Labels (Barrier/High)

Source: src/pages/home/toolbar/Toolbar.tsx and subcomponents (Upload.tsx, Mkdir.tsx, Delete.tsx, Rename.tsx, CopyMove.tsx, Download.tsx, Share.tsx, etc.)

  • Toolbar buttons for upload, new folder, batch rename, copy, move, delete, etc.
  • Heavy use of Icon components for icon buttons with only visual icons and no aria-label
  • TalkBack announces "button" but cannot convey the specific function

7. File Preview Partially Accessible but Incomplete (Barrier/High)

Source: src/pages/home/previews/ directory

Positive: Image preview (image.tsx) has fairly complete aria-label (zoom, rotate, navigate, etc.), paginator (Paginator.tsx) has aria-label="Previous" / "Next".

Issues:

  • Video player (video.tsx, video_box.tsx) play/pause/progress bar controls lack accessibility annotations
  • Document preview (doc.tsx, pdf.tsx) iframe lacks title attribute
  • iframe.tsx has aria-label="Open in new tab" on the link but the iframe itself lacks title

8. Form Element Labels Incomplete (Barrier/Medium)

Source: src/pages/manage/storages/AddOrEdit.tsx, src/components/ModalInput.tsx, etc.

  • Some inputs are indirectly labeled via Modal title prop, but lack direct aria-label association
  • Storage configuration page has complex forms with many dropdowns and inputs lacking accessibility labels

Existing Accessibility Implementation (Positive Findings)

Approximately 25 aria-label instances found across the project, concentrated in:

  • ✅ Image preview controls (zoom, rotate, navigate) — fairly complete
  • ✅ Paginator (previous/next) — basic labeling
  • ✅ Search box — has aria-label="search"
  • ✅ Layout switch — has aria-label="switch layout"
  • ✅ Folder tree selector — confirm/cancel buttons labeled

This shows the development team has accessibility awareness, but current coverage is far from sufficient — core interaction areas (file list, context menu, toolbar) are completely blank.

Fix Recommendations

Issue Source File Fix Priority
File list items unreadable ListItem.tsx, GridItem.tsx Add role="listitem" + aria-label="filename, size, modified" to container, merge multi-field info into one announceable unit Critical
Context menu unreachable context-menu.tsx Add role="menu" to container, role="menuitem" + aria-label to items, auto-focus first item on open; consider alternative long-press trigger for mobile Critical
List container missing semantics List.tsx, Grid.tsx Add role="list" to container, role="button" + aria-label to sort controls, aria-label to select-all checkbox High
Page landmarks missing index.html, Layout.tsx Add <main>/<nav>/<header> semantic tags or corresponding role, fix lang attribute High
Toolbar buttons unlabeled toolbar/*.tsx Add aria-label to all icon buttons High
Dynamic content not announced Global notification components Use role="status" or aria-live="polite" for success, aria-live="assertive" for errors Medium
Form elements unlabeled manage/storages/AddOrEdit.tsx etc. Add aria-label to all inputs, aria-label + aria-activedescendant to dropdowns Medium
File preview incomplete previews/video.tsx etc. Add role="slider" + aria-label to video controls, title to iframes High

References

1. W3C WCAG 2.1 Quick Guide

The official W3C Web Content Accessibility Guidelines, the accessibility standard basis for all Web applications. OpenList should follow WCAG 2.1 AA level.

2. WAI-ARIA Best Practices

W3C's ARIA specification provides semantic annotation standards for dynamic Web applications.

3. GitHub Official Open Source Accessibility Best Practices

GitHub's official open source guide recommends every project:

  • Create an ACCESSIBILITY.md file declaring accessibility commitment
  • Create accessibility Issue templates
  • Add accessibility checks to PR checklists
  • Prioritize blocking issues (Critical level)

Source: https://opensource.guide/accessibility-best-practices-for-your-project/

Community Collaboration

About Us

We are from the Chinese visually impaired community, with over 20,000 visually impaired developers and over 200,000 visually impaired users, covering mainstream Chinese screen reader user groups (Tantan Screen Reader, TalkBack, etc.).

Testing Collaboration

If the development team is willing to advance accessibility optimization, we can organize systematic testing by visually impaired community users after the first fix release, covering multi-device, multi-screen-reader real-world scenarios, and provide structured feedback reports.

Promotion Willingness

OpenList, as the most feature-rich open-source file storage mounting tool, could gain significant community reputation and user growth in the visually impaired community if it takes the lead in accessibility. We are willing to promote OpenList's visibility within the visually impaired community.

Environment

  • Device: Redmi K80 Ultra (dali)
  • Android: 16 (API 36)
  • Screen reader: Tantan Screen Reader, based on Android AccessibilityService framework
  • OpenList deployment: Android App

To the OpenList team: I am happy to work with you to make OpenList accessible to everyone. But I expect to be treated with basic respect. A single comment acknowledging the report would have been enough. Instead, you chose silence. Don't let it happen again.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions