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.
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6308e3fb2a3ff6bf00bb02b133678fe4fee37f5d)
Merged-In: I4bd65bdbfa41793fc8e32c295185363ca36cc0d7
Change-Id: I4bd65bdbfa41793fc8e32c295185363ca36cc0d7
diff --git a/src/com/android/settings/notification/NotificationVolumePreferenceController.java b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
index 02dc96a..fe7b70b 100644
--- a/src/com/android/settings/notification/NotificationVolumePreferenceController.java
+++ b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
@@ -26,6 +26,7 @@
 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 @@
         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 f3c1471..0000eba 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreference.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -242,6 +242,11 @@
         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);