Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-140777

Android/Accessibility: focus frame inside flickable not updated

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P2: Important P2: Important
    • None
    • 6.10.0 RC
    • None
    • Android 16, talkback enabled
    • Android

      This also affects current dev branch as of 20251001.

      On Android 16, with Talkback enabled:
      When having accessible items in a flickable, I can scroll the flickable with two fingers. However, if an item in the flickable is the currently focused accessibility item, the green focus frame isn't updated during nor after the scroll to match the new item position.

      Debugging into the platform plugin and QtDeclarative, the Flickable implementation posts a QAccessible::ScrollingEnd event on flickEnded. This event is only processed if the flickable has a valid QAccessibleInterface, i.e. if I set name/role like the example below.

      If processed, QtAccessibilityDelegate.notifyScrolledEvent() sends a AccessibilityEvent.TYPE_VIEW_SCROLLED event, but that doesn't seem to have any affect.
      The docs (https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent#TYPE_VIEW_SCROLLED) suggest that the event should provide more information about the scroll delta, etc., but that's not available in the QAccessibleEvent.

      If I replace the TYPE_VIEW_SCROLLED event by a brute-force `QtNative.runAction(() -> invalidateVirtualViewId(viewId))`, the rectangle is updated when the flick ends.

       

      import QtQuick
      import QtQuick.Controls
      
      Window {
          width: 640
          height: 480
          visible: true
          title: qsTr("Hello World")
      
          Flickable {
              id: flickable
      
              anchors.centerIn: parent
      
              width: parent.width
              height: parent.height / 2
              contentHeight: column.implicitHeight
      
              Accessible.name: "Page"
              Accessible.role: Accessible.List
      
              clip: true
      
              Column {
                  id: column
      
                  Repeater {
                      model: 20
      
                      Button {
                          id: button
      
                          text: qsTr("Button %1").arg(index)
                      }
                  }
              }
          }
      }
      

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            qt.team.quick.subscriptions Qt Quick and Widgets Team
            frank.osterfeld Frank Osterfeld
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes