leinardi / FloatingActionButtonSpeedDial

A Floating Action Button Speed Dial implementation for Android that follows the Material Design specification (https://material.io/components/buttons-floating-action-button#types-of-transitions)
Apache License 2.0
1.46k stars 140 forks source link

TalkBack describes main FAB as "unlabeled button" #192

Open TacoTheDank opened 6 months ago

TacoTheDank commented 6 months ago

Step 1: Are you in the right place?

Step 2: Describe your environment

Step 3: Describe the problem:

Steps to reproduce:

  1. Set contentDescription of SpeedDialView
  2. Enable TalkBack
  3. Press on main FAB
  4. Observe "unlabeled button"

Observed Results:

Expected Results:

Relevant Code:

<com.leinardi.android.speeddial.SpeedDialView
            android:id="@+id/fabSD"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:accessibilityTraversalBefore="@android:id/list"
            android:contentDescription="@string/apply_action"
            android:visibility="gone"
            app:sdMainFabClosedSrc="@drawable/ic_fab_edit"
            app:sdOverlayLayout="@id/fabSDOverlay" />

I think the problem is that SpeedDialView is not the FAB itself, but just a LinearLayout. Thus, the contentDescription is being applied to the SpeedDialView and not the (main) FAB that's IN the SpeedDialView. (If that's not the problem, then I don't know what is.)

leinardi commented 6 months ago

Hi @TacoTheDank, thank you for reporting the issue.

As far as I can tell the contentDescription that you set to the SpeedDialView is also applied to the main FAB (see here and here).

Can you please try to call SpeedDialView.setContentDescription() programmatically after the main fab is created? maybe something is still null when I'm trying to set it from XML and a workaround could be to call setContentDescription programmatically.

Unfortunately right now I do not have time to dig deeper in this issue but PRs are welcome.

TacoTheDank commented 6 months ago

@leinardi Hi, I did what you suggested. I removed android:contentDescription="@string/apply_action" from the XML and set setContentDescription() programmatically, and it now works. The main FAB is now described as "Apply action button."