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

Commit 31a1125d authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Fix long click a11y in QSTileViewImpl" into main

parents acf48717 bc4cb602
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -586,6 +586,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 =
@@ -597,14 +606,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