Loading services/core/java/com/android/server/audio/AudioService.java +61 −22 Original line number Diff line number Diff line Loading @@ -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; } } } Loading Loading @@ -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)); Loading @@ -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(); Loading @@ -4512,7 +4516,9 @@ public class AudioService extends IAudioService.Stub // Called upon crash of AudioServer private void restoreVolumeGroups() { if (DEBUG_VOL) { Log.v(TAG, "restoreVolumeGroups"); } for (int i = 0; i < sVolumeGroupStates.size(); i++) { final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i); vgs.applyAllVolumes(); Loading Loading @@ -4548,7 +4554,9 @@ public class AudioService extends IAudioService.Stub private VolumeGroupState(AudioVolumeGroup avg) { mAudioVolumeGroup = avg; if (DEBUG_VOL) { Log.v(TAG, "VolumeGroupState for " + avg.toString()); } for (final AudioAttributes aa : avg.getAudioAttributes()) { if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) { mAudioAttributes = aa; Loading Loading @@ -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; Loading @@ -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); 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*/); } } Loading @@ -4673,9 +4703,12 @@ public class AudioService extends IAudioService.Stub if (mUseFixedVolume) { return; } if (DEBUG_VOL) { Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group " + mAudioVolumeGroup.name() + " and device " + AudioSystem.getOutputDeviceName(device)); + mAudioVolumeGroup.name() + ", device " + AudioSystem.getOutputDeviceName(device) + " and User=" + ActivityManager.getCurrentUser()); } boolean success = Settings.System.putIntForUser(mContentResolver, getSettingNameForDevice(device), getIndex(device), Loading Loading @@ -4705,12 +4738,18 @@ public class AudioService extends IAudioService.Stub index = Settings.System.getIntForUser( mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT); if (index == -1) { if (DEBUG_VOL) { Log.e(TAG, "readSettings: No index stored for group " + mAudioVolumeGroup.name() + ", device " + name); + mAudioVolumeGroup.name() + ", device " + name + ", User=" + ActivityManager.getCurrentUser()); } continue; } if (DEBUG_VOL) { Log.v(TAG, "readSettings: found stored index " + getValidIndex(index) + " for group " + mAudioVolumeGroup.name() + ", device: " + name); + " for group " + mAudioVolumeGroup.name() + ", device: " + name + ", User=" + ActivityManager.getCurrentUser()); } mIndexMap.put(device, getValidIndex(index)); } } Loading Loading
services/core/java/com/android/server/audio/AudioService.java +61 −22 Original line number Diff line number Diff line Loading @@ -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; } } } Loading Loading @@ -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)); Loading @@ -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(); Loading @@ -4512,7 +4516,9 @@ public class AudioService extends IAudioService.Stub // Called upon crash of AudioServer private void restoreVolumeGroups() { if (DEBUG_VOL) { Log.v(TAG, "restoreVolumeGroups"); } for (int i = 0; i < sVolumeGroupStates.size(); i++) { final VolumeGroupState vgs = sVolumeGroupStates.valueAt(i); vgs.applyAllVolumes(); Loading Loading @@ -4548,7 +4554,9 @@ public class AudioService extends IAudioService.Stub private VolumeGroupState(AudioVolumeGroup avg) { mAudioVolumeGroup = avg; if (DEBUG_VOL) { Log.v(TAG, "VolumeGroupState for " + avg.toString()); } for (final AudioAttributes aa : avg.getAudioAttributes()) { if (!aa.equals(AudioProductStrategy.sDefaultAttributes)) { mAudioAttributes = aa; Loading Loading @@ -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; Loading @@ -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); 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*/); } } Loading @@ -4673,9 +4703,12 @@ public class AudioService extends IAudioService.Stub if (mUseFixedVolume) { return; } if (DEBUG_VOL) { Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group " + mAudioVolumeGroup.name() + " and device " + AudioSystem.getOutputDeviceName(device)); + mAudioVolumeGroup.name() + ", device " + AudioSystem.getOutputDeviceName(device) + " and User=" + ActivityManager.getCurrentUser()); } boolean success = Settings.System.putIntForUser(mContentResolver, getSettingNameForDevice(device), getIndex(device), Loading Loading @@ -4705,12 +4738,18 @@ public class AudioService extends IAudioService.Stub index = Settings.System.getIntForUser( mContentResolver, name, defaultIndex, UserHandle.USER_CURRENT); if (index == -1) { if (DEBUG_VOL) { Log.e(TAG, "readSettings: No index stored for group " + mAudioVolumeGroup.name() + ", device " + name); + mAudioVolumeGroup.name() + ", device " + name + ", User=" + ActivityManager.getCurrentUser()); } continue; } if (DEBUG_VOL) { Log.v(TAG, "readSettings: found stored index " + getValidIndex(index) + " for group " + mAudioVolumeGroup.name() + ", device: " + name); + " for group " + mAudioVolumeGroup.name() + ", device: " + name + ", User=" + ActivityManager.getCurrentUser()); } mIndexMap.put(device, getValidIndex(index)); } } Loading