Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc4cb602 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Fix long click a11y in QSTileViewImpl

The correct label should be used independently of the accessibility
class, as long as the tile is not disabled by policy.

Fixes: 355418825
Test: manual, using Talkback
Test: atest QSTileViewImplTest
Flag: EXEMPT bugfix

Change-Id: Ib7c5c7ccc0b9f8059948bba19304b4261aae8d25
parent 8a225631
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -592,6 +592,15 @@ constructor(
                    )
                )
            )
        } else {
            if (isLongClickable) {
                info.addAction(
                    AccessibilityNodeInfo.AccessibilityAction(
                        AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.id,
                        resources.getString(R.string.accessibility_long_click_tile)
                    )
                )
            }
        }
        if (!TextUtils.isEmpty(accessibilityClass)) {
            info.className =
@@ -603,14 +612,6 @@ constructor(
            if (Switch::class.java.name == accessibilityClass) {
                info.isChecked = tileState
                info.isCheckable = true
                if (isLongClickable) {
                    info.addAction(
                        AccessibilityNodeInfo.AccessibilityAction(
                            AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.id,
                            resources.getString(R.string.accessibility_long_click_tile)
                        )
                    )
                }
            }
        }
        if (position != INVALID) {
+42 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.text.TextUtils
import android.view.ContextThemeWrapper
import android.view.View
import android.view.accessibility.AccessibilityNodeInfo
import android.widget.Button
import android.widget.TextView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -380,6 +381,47 @@ class QSTileViewImplTest : SysuiTestCase() {
        assertThat(tileView.stateDescription?.contains(unavailableString)).isTrue()
    }

    @Test
    fun testNonSwitchA11yClass_longClickActionHasCorrectLabel() {
        val state =
            QSTile.State().apply {
                expandedAccessibilityClassName = Button::class.java.name
                handlesLongClick = true
            }
        tileView.changeState(state)
        val info = AccessibilityNodeInfo(tileView)
        tileView.onInitializeAccessibilityNodeInfo(info)

        assertThat(
                info.actionList
                    .find {
                        it.id == AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.id
                    }
                    ?.label
            )
            .isEqualTo(context.getString(R.string.accessibility_long_click_tile))
    }

    @Test
    fun testNonSwitchA11yClass_disabledByPolicy_noLongClickAction() {
        val state =
            QSTile.State().apply {
                expandedAccessibilityClassName = Button::class.java.name
                handlesLongClick = true
                disabledByPolicy = true
            }
        tileView.changeState(state)
        val info = AccessibilityNodeInfo(tileView)
        tileView.onInitializeAccessibilityNodeInfo(info)

        assertThat(
                info.actionList.find {
                    it.id == AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.id
                }
            )
            .isNull()
    }

    @Test
    fun onStateChange_longPressEffectActive_withInvalidDuration_doesNotInitializeEffect() {
        val state = QSTile.State() // A state that handles longPress