summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jean-Michel Trivi <jmtrivi@google.com> 2017-01-18 11:17:51 -0800
committer Jean-Michel Trivi <jmtrivi@google.com> 2017-01-18 16:08:32 -0800
commitcfa55535e866aade813f185d1893a3fef0826040 (patch)
tree15ea7b5bcfab3621f8bd91fd4e31e5403463a69a
parent70efb526915d437b72a51a957293dd1e1ce7fd7d (diff)
AudioService: modify logic for independent a11y volume
Add support for enabling independent a11y volume based on a11y services state change. Add compile time constant USE_FLAG_ENABLE_ACCESSIBILITY_VOLUME for testing a11y volume simply when TalkBack is enabled. Test: change new USE_FLAG... constant to false and enable Talkback Bug 30448020 Change-Id: I541481ed6ca24bc46872818bb5306c5662ab80e9
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java55
1 files changed, 39 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 0f3f9ce6bfb4..df5f01d47cf7 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -144,7 +144,8 @@ import java.util.Objects;
*/
public class AudioService extends IAudioService.Stub
implements AccessibilityManager.TouchExplorationStateChangeListener,
- AccessibilityManager.AccessibilityStateChangeListener{
+ AccessibilityManager.AccessibilityStateChangeListener,
+ AccessibilityManager.AccessibilityServicesStateChangeListener {
private static final String TAG = "AudioService";
@@ -780,7 +781,7 @@ public class AudioService extends IAudioService.Stub
TAG,
SAFE_VOLUME_CONFIGURE_TIMEOUT_MS);
- initA11yMonitoring(mContext);
+ initA11yMonitoring();
onIndicateSystemReady();
}
@@ -5925,13 +5926,25 @@ public class AudioService extends IAudioService.Stub
//==========================================================================================
// Accessibility
- private void initA11yMonitoring(Context ctxt) {
- AccessibilityManager accessibilityManager =
- (AccessibilityManager) ctxt.getSystemService(Context.ACCESSIBILITY_SERVICE);
+ /**
+ * Compile-time constant to enable the use of an independent a11y volume:
+ * - set to true to listen to a11y services state changes and read
+ * the whether any exposes the FLAG_ENABLE_ACCESSIBILITY_VOLUME flag
+ * - set to false to listen to when accessibility services are started (e.g. "TalkBack started")
+ */
+ private static final boolean USE_FLAG_ENABLE_ACCESSIBILITY_VOLUME = true;
+
+ private void initA11yMonitoring() {
+ final AccessibilityManager accessibilityManager =
+ (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
updateDefaultStreamOverrideDelay(accessibilityManager.isTouchExplorationEnabled());
updateA11yVolumeAlias(accessibilityManager.isEnabled());
accessibilityManager.addTouchExplorationStateChangeListener(this);
- accessibilityManager.addAccessibilityStateChangeListener(this);
+ if (USE_FLAG_ENABLE_ACCESSIBILITY_VOLUME) {
+ accessibilityManager.addAccessibilityServicesStateChangeListener(this);
+ } else {
+ accessibilityManager.addAccessibilityStateChangeListener(this);
+ }
}
//---------------------------------------------------------------------------------
@@ -5969,21 +5982,31 @@ public class AudioService extends IAudioService.Stub
private static boolean sIndependentA11yVolume = false;
+ // implementation of AccessibilityStateChangeListener
@Override
public void onAccessibilityStateChanged(boolean enabled) {
updateA11yVolumeAlias(enabled);
}
- private void updateA11yVolumeAlias(boolean a11Enabled) {
- if (DEBUG_VOL) Log.d(TAG, "Accessibility mode changed to " + a11Enabled);
- // a11y has its own volume stream when a11y service is enabled
- sIndependentA11yVolume = a11Enabled;
- // update the volume mapping scheme
- updateStreamVolumeAlias(true /*updateVolumes*/, TAG);
- // update the volume controller behavior
- mVolumeController.setA11yMode(sIndependentA11yVolume ?
- VolumePolicy.A11Y_MODE_INDEPENDENT_A11Y_VOLUME :
- VolumePolicy.A11Y_MODE_MEDIA_A11Y_VOLUME);
+ // implementation of AccessibilityServicesStateChangeListener
+ @Override
+ public void onAccessibilityServicesStateChanged() {
+ final AccessibilityManager accessibilityManager =
+ (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
+ updateA11yVolumeAlias(accessibilityManager.isAccessibilityVolumeStreamActive());
+ }
+
+ private void updateA11yVolumeAlias(boolean a11VolEnabled) {
+ if (DEBUG_VOL) Log.d(TAG, "Accessibility volume enabled = " + a11VolEnabled);
+ if (sIndependentA11yVolume != a11VolEnabled) {
+ sIndependentA11yVolume = a11VolEnabled;
+ // update the volume mapping scheme
+ updateStreamVolumeAlias(true /*updateVolumes*/, TAG);
+ // update the volume controller behavior
+ mVolumeController.setA11yMode(sIndependentA11yVolume ?
+ VolumePolicy.A11Y_MODE_INDEPENDENT_A11Y_VOLUME :
+ VolumePolicy.A11Y_MODE_MEDIA_A11Y_VOLUME);
+ }
}
//==========================================================================================