From 6308e3fb2a3ff6bf00bb02b133678fe4fee37f5d Mon Sep 17 00:00:00 2001 From: Michael Mikhail Date: Mon, 26 Jun 2023 20:16:30 +0000 Subject: [PATCH] Trigger talkback for notification volume change Triggers talkback to say the content description of the title of notification volume when notification volume is set to vibrate or silent mode. Fixes: 285453719 Fixes: 285455826 Test: manually checked when the ring volume is set to 0% and when the notification volume is set to 0%. Check the video in the bug link. Change-Id: I4bd65bdbfa41793fc8e32c295185363ca36cc0d7 --- .../NotificationVolumePreferenceController.java | 6 ++++++ .../settings/notification/VolumeSeekBarPreference.java | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/com/android/settings/notification/NotificationVolumePreferenceController.java b/src/com/android/settings/notification/NotificationVolumePreferenceController.java index 02dc96a2804..fe7b70bf129 100644 --- a/src/com/android/settings/notification/NotificationVolumePreferenceController.java +++ b/src/com/android/settings/notification/NotificationVolumePreferenceController.java @@ -26,6 +26,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.service.notification.NotificationListenerService; +import android.view.View; import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceScreen; @@ -138,14 +139,19 @@ public class NotificationVolumePreferenceController extends if (mPreference != null) { int ringerMode = getEffectiveRingerMode(); if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) { + mPreference.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); mPreference.updateContentDescription( mContext.getString( R.string.notification_volume_content_description_vibrate_mode)); } else if (ringerMode == AudioManager.RINGER_MODE_SILENT) { + mPreference.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); mPreference.updateContentDescription( mContext.getString(R.string.volume_content_description_silent_mode, mPreference.getTitle())); } else { + // Set a11y mode to none in order not to trigger talkback while changing + // notification volume in normal mode. + mPreference.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_NONE); mPreference.updateContentDescription(mPreference.getTitle()); } } diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java index f3c1471be4f..0000eba2ba7 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreference.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java @@ -242,6 +242,11 @@ public class VolumeSeekBarPreference extends SeekBarPreference { mTitle.setContentDescription(contentDescription); } + protected void setAccessibilityLiveRegion(int mode) { + if (mTitle == null) return; + mTitle.setAccessibilityLiveRegion(mode); + } + public interface Callback { void onSampleStarting(SeekBarVolumizer sbv); void onStreamValueChanged(int stream, int progress);