Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b69ac70 authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "AudioService: Migrate index map to SparseIntArray."

parents 8a9588ed 2bb02ec6
Loading
Loading
Loading
Loading
+37 −55
Original line number Diff line number Diff line
@@ -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(", ");
                }
            }
        }
    }