Fix A11y volume persisting/restore

When the accessibility volume is enabled, its value wasn't persisted
  when changed because it was still using the persisting name from
  its alias (music).
When enabled, notiify the volume controller that a11y volume has
  changed so the UI also reflects the new value, now updated from
  the persisted settings.
Do not persist volumes for streams that don't have a setting name.

Test: enable Talkback, set a11y volume at a different level than media \
  then disable Talkback. Reboot and enable Talkback, verify a11y is \
  restored.
Bug: 36286073

Change-Id: Ic6c30364e164b856fc10fbf6b22c09a7b5561be1
This commit is contained in:
Jean-Michel Trivi
2017-04-12 18:27:01 -07:00
parent 27ce8b0d34
commit a53b7051a2
2 changed files with 61 additions and 15 deletions

View File

@@ -3149,6 +3149,13 @@ public final class Settings {
*/
public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
/**
* @hide
* Acessibility volume. This is used internally, changing this
* value will not change the volume.
*/
public static final String VOLUME_ACCESSIBILITY = "volume_a11y";
/**
* Master volume (float in the range 0.0f to 1.0f).
*
@@ -3211,6 +3218,22 @@ public final class Settings {
VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO
};
/**
* @hide
* The mapping of stream type (integer) to its setting.
* Unlike the VOLUME_SETTINGS array, this one contains as many entries as
* AudioSystem.NUM_STREAM_TYPES, and has empty strings for stream types whose volumes
* are never persisted.
*/
public static final String[] VOLUME_SETTINGS_INT = {
VOLUME_VOICE, VOLUME_SYSTEM, VOLUME_RING, VOLUME_MUSIC,
VOLUME_ALARM, VOLUME_NOTIFICATION, VOLUME_BLUETOOTH_SCO,
"" /*STREAM_SYSTEM_ENFORCED, no setting for this stream*/,
"" /*STREAM_DTMF, no setting for this stream*/,
"" /*STREAM_TTS, no setting for this stream*/,
VOLUME_ACCESSIBILITY
};
/**
* Appended to various volume related settings to record the previous
* values before they the settings were affected by a silent/vibrate