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

Commit e16937e0 authored by Simon Wingrove's avatar Simon Wingrove Committed by Android (Google) Code Review
Browse files

Merge "Use expand and collapse a11y on privacy dialog." into main

parents 92d1228c 67690484
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1986,6 +1986,16 @@ flag {
   }
}

flag {
  name: "expand_collapse_privacy_dialog"
  namespace: "systemui"
  description: "Add expand and collapse actions to accessibility, to allow announcement in TalkBack when state changes."
  bug: "380161221"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
    name: "show_locked_by_your_watch_keyguard_indicator"
    namespace: "systemui"
+82 −31
Original line number Diff line number Diff line
@@ -39,6 +39,11 @@ import androidx.annotation.DrawableRes
import androidx.annotation.WorkerThread
import androidx.core.view.ViewCompat
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_COLLAPSE
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_EXPAND
import androidx.core.view.accessibility.AccessibilityViewCommand
import com.android.systemui.Flags
import com.android.systemui.animation.ViewHierarchyAnimator
import com.android.systemui.res.R
import com.android.systemui.statusbar.phone.SystemUIDialog
@@ -282,9 +287,25 @@ class PrivacyDialogV2(

        val expandToggle =
            itemHeader.findViewById<ImageView>(R.id.privacy_dialog_item_header_expand_toggle)!!
        expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_down)
        expandToggle.visibility = View.VISIBLE
        val expandedLayout =
            itemCard.findViewById<View>(R.id.privacy_dialog_item_header_expanded_layout)!!
        expandedLayout.setOnClickListener {
            // Stop clicks from propagating
        }

        if (Flags.expandCollapsePrivacyDialog()) {
            updateExpansion(ACTION_COLLAPSE, itemCard, expandedLayout, expandToggle)

            itemCard.setOnClickListener {
                if (expandedLayout.visibility == View.VISIBLE) {
                    updateExpansion(ACTION_COLLAPSE, it!!, expandedLayout, expandToggle)
                } else {
                    updateExpansion(ACTION_EXPAND, it!!, expandedLayout, expandToggle)
                }
            }
        } else {
            expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_down)
            ViewCompat.replaceAccessibilityAction(
                itemCard,
                AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
@@ -292,12 +313,6 @@ class PrivacyDialogV2(
                null,
            )

        val expandedLayout =
            itemCard.findViewById<View>(R.id.privacy_dialog_item_header_expanded_layout)!!
        expandedLayout.setOnClickListener {
            // Stop clicks from propagating
        }

            itemCard.setOnClickListener {
                if (expandedLayout.visibility == View.VISIBLE) {
                    expandedLayout.visibility = View.GONE
@@ -324,6 +339,42 @@ class PrivacyDialogV2(
                )
            }
        }
    }

    private fun updateExpansion(
        newState: AccessibilityActionCompat,
        itemCard: View,
        expandedLayout: View,
        expandToggle: ImageView,
    ) {
        expandedLayout.visibility = if (newState == ACTION_COLLAPSE) View.GONE else View.VISIBLE
        expandToggle.setImageResource(
            if (newState == ACTION_COLLAPSE) R.drawable.privacy_dialog_expand_toggle_down
            else R.drawable.privacy_dialog_expand_toggle_up
        )
        val accessibilityString =
            context.getString(
                if (newState == ACTION_COLLAPSE) R.string.privacy_dialog_expand_action
                else R.string.privacy_dialog_collapse_action
            )
        ViewCompat.replaceAccessibilityAction(
            itemCard,
            AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
            accessibilityString,
            null,
        )
        val expandCollapseAccessibilityListener =
            AccessibilityViewCommand { view: View, _: AccessibilityViewCommand.CommandArguments? ->
                view.callOnClick()
            }
        ViewCompat.replaceAccessibilityAction(
            itemCard,
            if (newState == ACTION_COLLAPSE) ACTION_EXPAND else ACTION_COLLAPSE,
            accessibilityString,
            expandCollapseAccessibilityListener,
        )
        ViewCompat.removeAccessibilityAction(itemCard, newState.id)
    }

    private fun updateIconView(iconView: ImageView, indicatorIcon: Drawable, active: Boolean) {
        indicatorIcon.setTint(getForegroundColor(active))