AudioService: default volume group is not restored

Volume Group with associated stream type does not have their volume
restore after restart / crash due even if correctly stored in
Settings DB.
A guard prevent to restore it. However, when using volume per attributes,
Settings DB is used, so it is safe to restore volumes for all group.
This CL fixes this issue by removing this guard.

Test: set Music volume & reboot & dumpsys audio
    Ensure indexes matches
Signed-off-by: Francois Gaffie <francois.gaffie@renault.com>

Change-Id: I00aa8c17bffca21a128086fbbbeafffc26521a3b
Merged-In: I239145d8bc50237ff902026594423c6d1fa04ad4
This commit is contained in:
Francois Gaffie
2020-03-20 12:57:32 +01:00
committed by Eric Laurent
parent 06a2db194f
commit 6677621887

View File

@@ -1230,10 +1230,10 @@ public class AudioService extends IAudioService.Stub
private void updateDefaultVolumes() {
for (int stream = 0; stream < mStreamStates.length; stream++) {
if (stream != mStreamVolumeAlias[stream]) {
AudioSystem.DEFAULT_STREAM_VOLUME[stream] = rescaleIndex(
AudioSystem.DEFAULT_STREAM_VOLUME[mStreamVolumeAlias[stream]],
AudioSystem.DEFAULT_STREAM_VOLUME[stream] = (rescaleIndex(
AudioSystem.DEFAULT_STREAM_VOLUME[mStreamVolumeAlias[stream]] * 10,
mStreamVolumeAlias[stream],
stream);
stream) + 5) / 10;
}
}
}
@@ -4481,7 +4481,9 @@ public class AudioService extends IAudioService.Stub
} catch (IllegalArgumentException e) {
// Volume Groups without attributes are not controllable through set/get volume
// using attributes. Do not append them.
Log.d(TAG, "volume group " + avg.name() + " for internal policy needs");
if (DEBUG_VOL) {
Log.v(TAG, "volume group " + avg.name() + " for internal policy needs");
}
continue;
}
sVolumeGroupStates.append(avg.getId(), new VolumeGroupState(avg));
@@ -4502,7 +4504,9 @@ public class AudioService extends IAudioService.Stub
}
private void readVolumeGroupsSettings() {
Log.v(TAG, "readVolumeGroupsSettings");
if (DEBUG_VOL) {
Log.v(TAG, "readVolumeGroupsSettings.");
}
for (int i = 0; i < sVolumeGroupStates.size(); i++) {
final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
vgs.readSettings();
@@ -4512,7 +4516,9 @@ public class AudioService extends IAudioService.Stub
// Called upon crash of AudioServer
private void restoreVolumeGroups() {
Log.v(TAG, "restoreVolumeGroups");
if (DEBUG_VOL) {
Log.v(TAG, "restoreVolumeGroups");
}
for (int i = 0; i < sVolumeGroupStates.size(); i++) {
final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i);
vgs.applyAllVolumes();
@@ -4548,7 +4554,9 @@ public class AudioService extends IAudioService.Stub
private VolumeGroupState(AudioVolumeGroup avg) {
mAudioVolumeGroup = avg;
Log.v(TAG, "VolumeGroupState for " + avg.toString());
if (DEBUG_VOL) {
Log.v(TAG, "VolumeGroupState for " + avg.toString());
}
for (final AudioAttributes aa : avg.getAudioAttributes()) {
if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) {
mAudioAttributes = aa;
@@ -4643,11 +4651,19 @@ public class AudioService extends IAudioService.Stub
return mIndexMin;
}
private boolean isValidLegacyStreamType() {
return (mLegacyStreamType != AudioSystem.STREAM_DEFAULT)
&& (mLegacyStreamType < mStreamStates.length);
}
public void applyAllVolumes() {
synchronized (VolumeGroupState.class) {
if (mLegacyStreamType != AudioSystem.STREAM_DEFAULT) {
// No-op to avoid regression with stream based volume management
return;
int deviceForStream = AudioSystem.DEVICE_NONE;
int volumeIndexForStream = 0;
if (isValidLegacyStreamType()) {
// Prevent to apply settings twice when group is associated to public stream
deviceForStream = getDeviceForStream(mLegacyStreamType);
volumeIndexForStream = getStreamVolume(mLegacyStreamType);
}
// apply device specific volumes first
int index;
@@ -4655,16 +4671,30 @@ public class AudioService extends IAudioService.Stub
final int device = mIndexMap.keyAt(i);
if (device != AudioSystem.DEVICE_OUT_DEFAULT) {
index = mIndexMap.valueAt(i);
Log.v(TAG, "applyAllVolumes: restore index " + index + " for group "
+ mAudioVolumeGroup.name() + " and device "
+ AudioSystem.getOutputDeviceName(device));
if (device == deviceForStream && volumeIndexForStream == index) {
continue;
}
if (DEBUG_VOL) {
Log.v(TAG, "applyAllVolumes: restore index " + index + " for group "
+ mAudioVolumeGroup.name() + " and device "
+ AudioSystem.getOutputDeviceName(device));
}
setVolumeIndexInt(index, device, 0 /*flags*/);
}
}
// apply default volume last: by convention , default device volume will be used
index = getIndex(AudioSystem.DEVICE_OUT_DEFAULT);
Log.v(TAG, "applyAllVolumes: restore default device index " + index + " for group "
+ mAudioVolumeGroup.name());
if (DEBUG_VOL) {
Log.v(TAG, "applyAllVolumes: restore default device index " + index
+ " for group " + mAudioVolumeGroup.name());
}
if (isValidLegacyStreamType()) {
int defaultStreamIndex = (mStreamStates[mLegacyStreamType]
.getIndex(AudioSystem.DEVICE_OUT_DEFAULT) + 5) / 10;
if (defaultStreamIndex == index) {
return;
}
}
setVolumeIndexInt(index, AudioSystem.DEVICE_OUT_DEFAULT, 0 /*flags*/);
}
}
@@ -4673,9 +4703,12 @@ public class AudioService extends IAudioService.Stub
if (mUseFixedVolume) {
return;
}
Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group "
+ mAudioVolumeGroup.name() + " and device "
+ AudioSystem.getOutputDeviceName(device));
if (DEBUG_VOL) {
Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group "
+ mAudioVolumeGroup.name()
+ ", device " + AudioSystem.getOutputDeviceName(device)
+ " and User=" + ActivityManager.getCurrentUser());
}
boolean success = Settings.System.putIntForUser(mContentResolver,
getSettingNameForDevice(device),
getIndex(device),
@@ -4705,12 +4738,18 @@ public class AudioService extends IAudioService.Stub
index = Settings.System.getIntForUser(
mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT);
if (index == -1) {
Log.e(TAG, "readSettings: No index stored for group "
+ mAudioVolumeGroup.name() + ", device " + name);
if (DEBUG_VOL) {
Log.e(TAG, "readSettings: No index stored for group "
+ mAudioVolumeGroup.name() + ", device " + name
+ ", User=" + ActivityManager.getCurrentUser());
}
continue;
}
Log.v(TAG, "readSettings: found stored index " + getValidIndex(index)
+ " for group " + mAudioVolumeGroup.name() + ", device: " + name);
if (DEBUG_VOL) {
Log.v(TAG, "readSettings: found stored index " + getValidIndex(index)
+ " for group " + mAudioVolumeGroup.name() + ", device: " + name
+ ", User=" + ActivityManager.getCurrentUser());
}
mIndexMap.put(device, getValidIndex(index));
}
}