From 283f7c9107bc4858db4500ddab11f8f82bc98c06 Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Thu, 13 Feb 2025 07:01:25 +0000 Subject: [PATCH] Fix TalkBack announces disruptive announcement in PIN/PWD page. Set the description state to A11y Node info for "Must be at least 4 characters" when enter "Set a password", "Must be fewer than 17 digits" in the "Set a PIN" or "Set a password" and "PIN must be at least 4 digit, but a 6-digit PIN is recommended for adding security" Flag: EXEMPT bugfix Bug: 384588020 Bug: 384604918 Bug: 384619356 Test: local build and verify Talkback announcement in PIN/PWD page. Change-Id: Ib81abdc41dba1eeb854f2c7361362b5d55f8c7c7 --- .../settings/password/ChooseLockPassword.java | 1 + .../password/PasswordRequirementAdapter.java | 17 +++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java index 80f73b95c66..def98bac020 100644 --- a/src/com/android/settings/password/ChooseLockPassword.java +++ b/src/com/android/settings/password/ChooseLockPassword.java @@ -560,6 +560,7 @@ public class ChooseLockPassword extends SettingsActivity { setupPasswordRequirementsView(headerLayout); mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity())); + mPasswordRestrictionView.setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE); mPasswordEntry = view.findViewById(R.id.password_entry); mPasswordEntry.setOnEditorActionListener(this); mPasswordEntry.addTextChangedListener(this); diff --git a/src/com/android/settings/password/PasswordRequirementAdapter.java b/src/com/android/settings/password/PasswordRequirementAdapter.java index b17f86481df..157a716ce9a 100644 --- a/src/com/android/settings/password/PasswordRequirementAdapter.java +++ b/src/com/android/settings/password/PasswordRequirementAdapter.java @@ -20,9 +20,9 @@ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.TextView; -import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; @@ -66,15 +66,20 @@ public class PasswordRequirementAdapter extends return mRequirements[position].hashCode(); } - @Override - public void onViewAttachedToWindow(@NonNull PasswordRequirementViewHolder holder) { - holder.mDescriptionText.announceForAccessibility(holder.mDescriptionText.getText()); - } - @Override public void onBindViewHolder(PasswordRequirementViewHolder holder, int position) { final int fontSize = mContext.getResources().getDimensionPixelSize( R.dimen.password_requirement_font_size); + + final String requirement = mRequirements[position]; + holder.mDescriptionText.setAccessibilityDelegate(new View.AccessibilityDelegate() { + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); + holder.mDescriptionText.setStateDescription(requirement); + } + }); + holder.mDescriptionText.setText(mRequirements[position]); if (mIsTooShortError) { holder.mDescriptionText.setTextAppearance(R.style.ScreenLockPasswordHintTextFontStyle);