Merge "AudioService: Migrate index map to SparseIntArray."
This commit is contained in:
committed by
Android (Google) Code Review
commit
4b69ac70a1
@@ -95,6 +95,7 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.MathUtils;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.OrientationEventListener;
|
||||
import android.view.Surface;
|
||||
@@ -118,7 +119,6 @@ import java.util.Map;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* The implementation of the volume manager service.
|
||||
@@ -1900,12 +1900,12 @@ public class AudioService extends IAudioService.Stub {
|
||||
if ((isPlatformVoice() || mHasVibrator) &&
|
||||
mStreamVolumeAlias[streamType] == AudioSystem.STREAM_RING) {
|
||||
synchronized (VolumeStreamState.class) {
|
||||
Set set = mStreamStates[streamType].mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
if ((Integer)entry.getValue() == 0) {
|
||||
entry.setValue(10);
|
||||
SparseIntArray indexMap = mStreamStates[streamType].mIndexMap;
|
||||
for (int i = 0; i < indexMap.size(); i++) {
|
||||
int device = indexMap.keyAt(i);
|
||||
int value = indexMap.valueAt(i);
|
||||
if (value == 0) {
|
||||
indexMap.put(device, 10);
|
||||
}
|
||||
}
|
||||
// Persist volume for stream ring when it is changed here
|
||||
@@ -3489,8 +3489,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
private boolean mIsMuted;
|
||||
private String mVolumeIndexSettingName;
|
||||
private int mIndexMax;
|
||||
private final ConcurrentHashMap<Integer, Integer> mIndex =
|
||||
new ConcurrentHashMap<Integer, Integer>(8, 0.75f, 4);
|
||||
private final SparseIntArray mIndexMap = new SparseIntArray(8);
|
||||
private final Intent mVolumeChanged;
|
||||
|
||||
private VolumeStreamState(String settingName, int streamType) {
|
||||
@@ -3521,7 +3520,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
// force maximum volume on all streams if fixed volume property
|
||||
// or master volume property is set
|
||||
if (mUseFixedVolume || mUseMasterVolume) {
|
||||
mIndex.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
|
||||
mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
|
||||
return;
|
||||
}
|
||||
// do not read system stream volume from settings: this stream is always aliased
|
||||
@@ -3535,7 +3534,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
index = mIndexMax;
|
||||
}
|
||||
}
|
||||
mIndex.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
|
||||
mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3560,7 +3559,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
continue;
|
||||
}
|
||||
|
||||
mIndex.put(device, getValidIndex(10 * index));
|
||||
mIndexMap.put(device, getValidIndex(10 * index));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3591,11 +3590,8 @@ public class AudioService extends IAudioService.Stub {
|
||||
}
|
||||
AudioSystem.setStreamVolumeIndex(mStreamType, index, AudioSystem.DEVICE_OUT_DEFAULT);
|
||||
// then apply device specific volumes
|
||||
Set set = mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
int device = ((Integer)entry.getKey()).intValue();
|
||||
for (int i = 0; i < mIndexMap.size(); i++) {
|
||||
int device = mIndexMap.keyAt(i);
|
||||
if (device != AudioSystem.DEVICE_OUT_DEFAULT) {
|
||||
if (mIsMuted) {
|
||||
index = 0;
|
||||
@@ -3605,7 +3601,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
{
|
||||
index = (mIndexMax + 5)/10;
|
||||
} else {
|
||||
index = ((Integer)entry.getValue() + 5)/10;
|
||||
index = (mIndexMap.valueAt(i) + 5)/10;
|
||||
}
|
||||
AudioSystem.setStreamVolumeIndex(mStreamType, index, device);
|
||||
}
|
||||
@@ -3629,7 +3625,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
index = mIndexMax;
|
||||
}
|
||||
}
|
||||
mIndex.put(device, index);
|
||||
mIndexMap.put(device, index);
|
||||
|
||||
changed = oldIndex != index;
|
||||
if (changed) {
|
||||
@@ -3664,12 +3660,12 @@ public class AudioService extends IAudioService.Stub {
|
||||
|
||||
public int getIndex(int device) {
|
||||
synchronized (VolumeStreamState.class) {
|
||||
Integer index = mIndex.get(device);
|
||||
if (index == null) {
|
||||
int index = mIndexMap.get(device, -1);
|
||||
if (index == -1) {
|
||||
// there is always an entry for AudioSystem.DEVICE_OUT_DEFAULT
|
||||
index = mIndex.get(AudioSystem.DEVICE_OUT_DEFAULT);
|
||||
index = mIndexMap.get(AudioSystem.DEVICE_OUT_DEFAULT);
|
||||
}
|
||||
return index.intValue();
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3684,19 +3680,14 @@ public class AudioService extends IAudioService.Stub {
|
||||
// some devices are present in this stream state but not in source stream state
|
||||
int index = srcStream.getIndex(AudioSystem.DEVICE_OUT_DEFAULT);
|
||||
index = rescaleIndex(index, srcStreamType, mStreamType);
|
||||
Set set = mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
entry.setValue(index);
|
||||
for (int i = 0; i < mIndexMap.size(); i++) {
|
||||
mIndexMap.put(mIndexMap.keyAt(i), index);
|
||||
}
|
||||
// Now apply actual volume for devices in source stream state
|
||||
set = srcStream.mIndex.entrySet();
|
||||
i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
int device = ((Integer)entry.getKey()).intValue();
|
||||
index = ((Integer)entry.getValue()).intValue();
|
||||
SparseIntArray srcMap = srcStream.mIndexMap;
|
||||
for (int i = 0; i < srcMap.size(); i++) {
|
||||
int device = srcMap.keyAt(i);
|
||||
index = srcMap.valueAt(i);
|
||||
index = rescaleIndex(index, srcStreamType, mStreamType);
|
||||
|
||||
setIndex(index, device);
|
||||
@@ -3706,11 +3697,8 @@ public class AudioService extends IAudioService.Stub {
|
||||
|
||||
public void setAllIndexesToMax() {
|
||||
synchronized (VolumeStreamState.class) {
|
||||
Set set = mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
entry.setValue(mIndexMax);
|
||||
for (int i = 0; i < mIndexMap.size(); i++) {
|
||||
mIndexMap.put(mIndexMap.keyAt(i), mIndexMax);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3750,15 +3738,12 @@ public class AudioService extends IAudioService.Stub {
|
||||
synchronized (VolumeStreamState.class) {
|
||||
// ignore settings for fixed volume devices: volume should always be at max or 0
|
||||
if (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_MUSIC) {
|
||||
Set set = mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
int device = ((Integer)entry.getKey()).intValue();
|
||||
int index = ((Integer)entry.getValue()).intValue();
|
||||
for (int i = 0; i < mIndexMap.size(); i++) {
|
||||
int device = mIndexMap.keyAt(i);
|
||||
int index = mIndexMap.valueAt(i);
|
||||
if (((device & mFullVolumeDevices) != 0)
|
||||
|| (((device & mFixedVolumeDevices) != 0) && index != 0)) {
|
||||
entry.setValue(mIndexMax);
|
||||
mIndexMap.put(device, mIndexMax);
|
||||
}
|
||||
applyDeviceVolume_syncVSS(device);
|
||||
}
|
||||
@@ -3782,11 +3767,11 @@ public class AudioService extends IAudioService.Stub {
|
||||
pw.print(" Max: ");
|
||||
pw.println((mIndexMax + 5) / 10);
|
||||
pw.print(" Current: ");
|
||||
Set set = mIndex.entrySet();
|
||||
Iterator i = set.iterator();
|
||||
while (i.hasNext()) {
|
||||
Map.Entry entry = (Map.Entry)i.next();
|
||||
final int device = (Integer) entry.getKey();
|
||||
for (int i = 0; i < mIndexMap.size(); i++) {
|
||||
if (i > 0) {
|
||||
pw.print(", ");
|
||||
}
|
||||
final int device = mIndexMap.keyAt(i);
|
||||
pw.print(Integer.toHexString(device));
|
||||
final String deviceName = device == AudioSystem.DEVICE_OUT_DEFAULT ? "default"
|
||||
: AudioSystem.getOutputDeviceName(device);
|
||||
@@ -3796,11 +3781,8 @@ public class AudioService extends IAudioService.Stub {
|
||||
pw.print(")");
|
||||
}
|
||||
pw.print(": ");
|
||||
final int index = (((Integer) entry.getValue()) + 5) / 10;
|
||||
final int index = (mIndexMap.valueAt(i) + 5) / 10;
|
||||
pw.print(index);
|
||||
if (i.hasNext()) {
|
||||
pw.print(", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user