diff options
author | 2025-02-13 05:33:04 -0800 | |
---|---|---|
committer | 2025-02-13 05:33:04 -0800 | |
commit | e16937e025bbafc5502c99d2f759bdef29da6cfa (patch) | |
tree | fdc79ef36b526f6207ff8bafbb7ca98dc860fcec | |
parent | 92d1228c238222140f7987a96279bd0588a660f4 (diff) | |
parent | 67690484fb18649e4d2dba1d9fe6f5864516aba0 (diff) |
Merge "Use expand and collapse a11y on privacy dialog." into main
-rw-r--r-- | packages/SystemUI/aconfig/systemui.aconfig | 10 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt | 113 |
2 files changed, 92 insertions, 31 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 14de038f0a27..0ccb20ce3e3f 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -1987,6 +1987,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" description: "Show a Locked by your watch indicator on the keyguard when the device is locked by the watch." diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt index 57d40638b8df..9117afb1de6f 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogV2.kt @@ -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,49 +287,95 @@ 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 - - ViewCompat.replaceAccessibilityAction( - itemCard, - AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, - context.getString(R.string.privacy_dialog_expand_action), - 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 - expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_down) - ViewCompat.replaceAccessibilityAction( - it!!, - AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, - context.getString(R.string.privacy_dialog_expand_action), - null, - ) - } else { - expandedLayout.visibility = View.VISIBLE - expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_up) - ViewCompat.replaceAccessibilityAction( - it!!, - AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, - context.getString(R.string.privacy_dialog_collapse_action), - null, - ) + 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) + } } - ViewHierarchyAnimator.animateNextUpdate( - rootView = window!!.decorView, - excludedViews = setOf(expandedLayout), + } else { + expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_down) + ViewCompat.replaceAccessibilityAction( + itemCard, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, + context.getString(R.string.privacy_dialog_expand_action), + null, ) + + itemCard.setOnClickListener { + if (expandedLayout.visibility == View.VISIBLE) { + expandedLayout.visibility = View.GONE + expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_down) + ViewCompat.replaceAccessibilityAction( + it!!, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, + context.getString(R.string.privacy_dialog_expand_action), + null, + ) + } else { + expandedLayout.visibility = View.VISIBLE + expandToggle.setImageResource(R.drawable.privacy_dialog_expand_toggle_up) + ViewCompat.replaceAccessibilityAction( + it!!, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, + context.getString(R.string.privacy_dialog_collapse_action), + null, + ) + } + ViewHierarchyAnimator.animateNextUpdate( + rootView = window!!.decorView, + excludedViews = setOf(expandedLayout), + ) + } } } + 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)) val backgroundIcon = getMutableDrawable(R.drawable.privacy_dialog_background_circle) |