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

Commit 9321d720 authored by Daniel Akinola's avatar Daniel Akinola
Browse files

Fix talkback reading out marquee text

Talkback was focusing on inner marquee text view, so it would announce
partially visible strings like "Open in brows". The parent button
already has the relevant string as part of its content description so
just ignore the inner layout for a11y purposes

Fix: 398128081
Test: manual testing
Flag: EXEMPT bugfix
Change-Id: I4dabb52b0047bee1ff9ca1743afe784ddb6c628c
parent a17f2afa
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -43,8 +43,7 @@
            android:layout_height="@dimen/desktop_mode_handle_menu_icon_radius"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="12dp"
            android:contentDescription="@string/app_icon_text"
            android:importantForAccessibility="no"/>
            android:contentDescription="@string/app_icon_text" />

        <com.android.wm.shell.windowdecor.MarqueedTextView
            android:id="@+id/application_name"
@@ -142,7 +141,6 @@
            android:contentDescription="@string/screenshot_text"
            android:text="@string/screenshot_text"
            android:src="@drawable/desktop_mode_ic_handle_menu_screenshot"
            android:importantForAccessibility="no"
            style="@style/DesktopModeHandleMenuActionButton"/>

        <com.android.wm.shell.windowdecor.HandleMenuActionButton
@@ -150,7 +148,6 @@
            android:contentDescription="@string/new_window_text"
            android:text="@string/new_window_text"
            android:src="@drawable/desktop_mode_ic_handle_menu_new_window"
            android:importantForAccessibility="no"
            style="@style/DesktopModeHandleMenuActionButton"/>

        <com.android.wm.shell.windowdecor.HandleMenuActionButton
@@ -158,7 +155,6 @@
            android:contentDescription="@string/manage_windows_text"
            android:text="@string/manage_windows_text"
            android:src="@drawable/desktop_mode_ic_handle_menu_manage_windows"
            android:importantForAccessibility="no"
            style="@style/DesktopModeHandleMenuActionButton"/>

        <com.android.wm.shell.windowdecor.HandleMenuActionButton
@@ -166,7 +162,6 @@
            android:contentDescription="@string/change_aspect_ratio_text"
            android:text="@string/change_aspect_ratio_text"
            android:src="@drawable/desktop_mode_ic_handle_menu_change_aspect_ratio"
            android:importantForAccessibility="no"
            style="@style/DesktopModeHandleMenuActionButton"/>
    </LinearLayout>

@@ -186,7 +181,6 @@
            android:text="@string/open_in_browser_text"
            android:src="@drawable/desktop_mode_ic_handle_menu_open_in_browser"
            style="@style/DesktopModeHandleMenuActionButton"
            android:importantForAccessibility="no"
            android:layout_width="0dp"
            android:layout_weight="1"/>

+1 −2
Original line number Diff line number Diff line
@@ -22,8 +22,7 @@
    android:layout_height="match_parent"
    android:gravity="start|center_vertical"
    android:paddingHorizontal="16dp"
    android:clickable="true"
    android:focusable="true"
    android:importantForAccessibility="yes"
    android:orientation="horizontal"
    android:background="?android:attr/selectableItemBackground">

+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@
        <item name="android:layout_height">52dp</item>
        <item name="android:textColor">@androidprv:color/materialColorOnSurface</item>
        <item name="android:drawableTint">@androidprv:color/materialColorOnSurface</item>
        <item name="android:importantForAccessibility">no</item>
    </style>

    <style name="DesktopModeHandleMenuActionButtonImage">
+66 −31
Original line number Diff line number Diff line
@@ -109,15 +109,18 @@ class HandleMenu(
        get() = (DesktopModeFlags.ENABLE_HANDLE_INPUT_FIX.isTrue() && !taskInfo.isFreeform)

    private val pillTopMargin: Int = loadDimensionPixelSize(
        R.dimen.desktop_mode_handle_menu_pill_spacing_margin)
        R.dimen.desktop_mode_handle_menu_pill_spacing_margin
    )
    private val menuWidth = loadDimensionPixelSize(R.dimen.desktop_mode_handle_menu_width)
    private val menuHeight = getHandleMenuHeight()
    private val marginMenuTop = loadDimensionPixelSize(R.dimen.desktop_mode_handle_menu_margin_top)
    private val marginMenuStart = loadDimensionPixelSize(
        R.dimen.desktop_mode_handle_menu_margin_start)
        R.dimen.desktop_mode_handle_menu_margin_start
    )

    @VisibleForTesting
    var handleMenuViewContainer: AdditionalViewContainer? = null

    @VisibleForTesting
    var handleMenuView: HandleMenuView? = null

@@ -240,7 +243,8 @@ class HandleMenu(
        val y = handleMenuPosition.y.toInt()
        handleMenuViewContainer =
            if ((!taskInfo.isFreeform && DesktopModeFlags.ENABLE_HANDLE_INPUT_FIX.isTrue())
                    || forceShowSystemBars) {
                || forceShowSystemBars
            ) {
                AdditionalSystemViewContainer(
                    windowManagerWrapper = windowManagerWrapper,
                    taskId = taskInfo.taskId,
@@ -251,7 +255,11 @@ class HandleMenu(
                    flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
                            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                    view = handleMenuView.rootView,
                    forciblyShownTypes = if (forceShowSystemBars) { systemBars() } else { 0 },
                    forciblyShownTypes = if (forceShowSystemBars) {
                        systemBars()
                    } else {
                        0
                    },
                    ignoreCutouts = Flags.showAppHandleLargeScreens()
                            || BubbleAnythingFlagHelper.enableBubbleToFullscreen()
                )
@@ -369,7 +377,8 @@ class HandleMenu(
                inputPoint.y - globalMenuPosition.y
            )
            if (splitScreenController.getSplitPosition(taskInfo.taskId)
                == SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT) {
                == SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT
            ) {
                val leftStageBounds = Rect()
                splitScreenController.getStageBounds(leftStageBounds, Rect())
                inputRelativeToMenu.x += leftStageBounds.width().toFloat()
@@ -398,7 +407,8 @@ class HandleMenu(
        var menuHeight = loadDimensionPixelSize(R.dimen.desktop_mode_handle_menu_height)
        if (!shouldShowWindowingPill) {
            menuHeight -= loadDimensionPixelSize(
                R.dimen.desktop_mode_handle_menu_windowing_pill_height)
                R.dimen.desktop_mode_handle_menu_windowing_pill_height
            )
            menuHeight -= pillTopMargin
        }
        if (!SHOULD_SHOW_SCREENSHOT_BUTTON) {
@@ -418,14 +428,16 @@ class HandleMenu(
        }
        if (!shouldShowChangeAspectRatioButton) {
            menuHeight -= loadDimensionPixelSize(
                R.dimen.desktop_mode_handle_menu_change_aspect_ratio_height)
                R.dimen.desktop_mode_handle_menu_change_aspect_ratio_height
            )
        }
        if (!shouldShowMoreActionsPill) {
            menuHeight -= pillTopMargin
        }
        if (!shouldShowBrowserPill) {
            menuHeight -= loadDimensionPixelSize(
                R.dimen.desktop_mode_handle_menu_open_in_browser_pill_height)
                R.dimen.desktop_mode_handle_menu_open_in_browser_pill_height
            )
            menuHeight -= pillTopMargin
        }
        return menuHeight
@@ -468,48 +480,66 @@ class HandleMenu(

        // Insets for ripple effect of App Info Pill. and Windowing Pill. buttons
        val iconButtondrawableShiftInset = context.resources.getDimensionPixelSize(
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_inset_shift)
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_inset_shift
        )
        val iconButtondrawableBaseInset = context.resources.getDimensionPixelSize(
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_inset_base)
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_inset_base
        )
        private val iconButtonRippleRadius = context.resources.getDimensionPixelSize(
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_radius)
        private val iconButtonDrawableInsetsBase = DrawableInsets(t = iconButtondrawableBaseInset,
            R.dimen.desktop_mode_handle_menu_icon_button_ripple_radius
        )
        private val iconButtonDrawableInsetsBase = DrawableInsets(
            t = iconButtondrawableBaseInset,
            b = iconButtondrawableBaseInset, l = iconButtondrawableBaseInset,
            r = iconButtondrawableBaseInset)
        private val iconButtonDrawableInsetsLeft = DrawableInsets(t = iconButtondrawableBaseInset,
            b = iconButtondrawableBaseInset, l = iconButtondrawableShiftInset, r = 0)
        private val iconButtonDrawableInsetsRight = DrawableInsets(t = iconButtondrawableBaseInset,
            b = iconButtondrawableBaseInset, l = 0, r = iconButtondrawableShiftInset)
            r = iconButtondrawableBaseInset
        )
        private val iconButtonDrawableInsetsLeft = DrawableInsets(
            t = iconButtondrawableBaseInset,
            b = iconButtondrawableBaseInset, l = iconButtondrawableShiftInset, r = 0
        )
        private val iconButtonDrawableInsetsRight = DrawableInsets(
            t = iconButtondrawableBaseInset,
            b = iconButtondrawableBaseInset, l = 0, r = iconButtondrawableShiftInset
        )

        // App Info Pill.
        private val appInfoPill = rootView.requireViewById<View>(R.id.app_info_pill)
        private val collapseMenuButton = appInfoPill.requireViewById<HandleMenuImageButton>(
            R.id.collapse_menu_button)
            R.id.collapse_menu_button
        )

        @VisibleForTesting
        val appIconView = appInfoPill.requireViewById<ImageView>(R.id.application_icon)

        @VisibleForTesting
        val appNameView = appInfoPill.requireViewById<MarqueedTextView>(R.id.application_name)

        // Windowing Pill.
        private val windowingPill = rootView.requireViewById<View>(R.id.windowing_pill)
        private val fullscreenBtn = windowingPill.requireViewById<ImageButton>(
            R.id.fullscreen_button)
            R.id.fullscreen_button
        )
        private val splitscreenBtn = windowingPill.requireViewById<ImageButton>(
            R.id.split_screen_button)
            R.id.split_screen_button
        )
        private val floatingBtn = windowingPill.requireViewById<ImageButton>(R.id.floating_button)
        private val floatingBtnSpace = windowingPill.requireViewById<Space>(
            R.id.floating_button_space)
            R.id.floating_button_space
        )

        private val desktopBtn = windowingPill.requireViewById<ImageButton>(R.id.desktop_button)
        private val desktopBtnSpace = windowingPill.requireViewById<Space>(
            R.id.desktop_button_space)
            R.id.desktop_button_space
        )

        // More Actions Pill.
        private val moreActionsPill = rootView.requireViewById<View>(R.id.more_actions_pill)
        private val screenshotBtn = moreActionsPill.requireViewById<HandleMenuActionButton>(
            R.id.screenshot_button)
            R.id.screenshot_button
        )
        private val newWindowBtn = moreActionsPill.requireViewById<HandleMenuActionButton>(
            R.id.new_window_button)
            R.id.new_window_button
        )
        private val manageWindowBtn = moreActionsPill
            .requireViewById<HandleMenuActionButton>(R.id.manage_windows_button)
        private val changeAspectRatioBtn = moreActionsPill
@@ -517,11 +547,14 @@ class HandleMenu(

        // Open in Browser/App Pill.
        private val openInAppOrBrowserPill = rootView.requireViewById<View>(
            R.id.open_in_app_or_browser_pill)
            R.id.open_in_app_or_browser_pill
        )
        private val openInAppOrBrowserBtn = openInAppOrBrowserPill.requireViewById<View>(
            R.id.open_in_app_or_browser_button)
            R.id.open_in_app_or_browser_button
        )
        private val openByDefaultBtn = openInAppOrBrowserPill.requireViewById<ImageButton>(
            R.id.open_by_default_button)
            R.id.open_by_default_button
        )
        private val decorThemeUtil = DecorThemeUtil(context)
        private val animator = HandleMenuAnimator(rootView, menuWidth, captionHeight.toFloat())

@@ -804,9 +837,11 @@ class HandleMenu(
                getString(R.string.open_in_browser_text)
            }

            val buttonRoot = openInAppOrBrowserBtn.requireViewById<LinearLayout>(R.id.action_button)
            val label = openInAppOrBrowserBtn.requireViewById<MarqueedTextView>(R.id.label)
            val image = openInAppOrBrowserBtn.requireViewById<ImageView>(R.id.image)
            openInAppOrBrowserBtn.contentDescription = btnText
            buttonRoot.contentDescription = btnText
            label.apply {
                text = btnText
                setTextColor(style.textColor)
+1 −2
Original line number Diff line number Diff line
@@ -23,9 +23,7 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.withStyledAttributes
import androidx.core.view.isGone
import com.android.wm.shell.R

/**
@@ -54,6 +52,7 @@ class HandleMenuActionButton @JvmOverloads constructor(

        context.withStyledAttributes(attrs, R.styleable.HandleMenuActionButton) {
            textView.text = getString(R.styleable.HandleMenuActionButton_android_text)
            rootElement.contentDescription = getString(R.styleable.HandleMenuActionButton_android_text)
            textView.setTextColor(getColor(R.styleable.HandleMenuActionButton_android_textColor, 0))
            iconView.setImageResource(getResourceId(
                R.styleable.HandleMenuActionButton_android_src, 0))