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

Commit 46bdad0b authored by Sungsoo Lim's avatar Sungsoo Lim Committed by Android (Google) Code Review
Browse files

Merge "Cache stream volumes to prevent ANR"

parents b4064897 bf01d9b7
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.view.Display;
import android.view.DisplayAddress;
@@ -54,6 +55,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;

@@ -111,6 +113,8 @@ public class MediaRouter {
        IMediaRouterClient mClient;
        MediaRouterClientState mClientState;

        Map<Integer, Integer> mStreamVolume = new ArrayMap<>();

        final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
            @Override
            public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
@@ -262,6 +266,17 @@ public class MediaRouter {
            mCurAudioRoutesInfo.bluetoothName = newRoutes.bluetoothName;
        }

        int getStreamVolume(int streamType) {
            if (!mStreamVolume.containsKey(streamType)) {
                try {
                    mStreamVolume.put(streamType, mAudioService.getStreamVolume(streamType));
                } catch (RemoteException e) {
                    Log.e(TAG, "Error getting local stream volume", e);
                }
            }
            return mStreamVolume.get(streamType);
        }

        boolean isBluetoothA2dpOn() {
            try {
                return mBluetoothA2dpRoute != null && mAudioService.isBluetoothA2dpOn();
@@ -1976,13 +1991,7 @@ public class MediaRouter {
         */
        public int getVolume() {
            if (mPlaybackType == PLAYBACK_TYPE_LOCAL) {
                int vol = 0;
                try {
                    vol = sStatic.mAudioService.getStreamVolume(mPlaybackStream);
                } catch (RemoteException e) {
                    Log.e(TAG, "Error getting local stream volume", e);
                }
                return vol;
                return sStatic.getStreamVolume(mPlaybackStream);
            } else {
                return mVolume;
            }
@@ -3139,11 +3148,12 @@ public class MediaRouter {
            if (intent.getAction().equals(AudioManager.VOLUME_CHANGED_ACTION)) {
                final int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE,
                        -1);
                final int newVolume = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, 0);
                sStatic.mStreamVolume.put(streamType, newVolume);
                if (streamType != AudioManager.STREAM_MUSIC) {
                    return;
                }

                final int newVolume = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, 0);
                final int oldVolume = intent.getIntExtra(
                        AudioManager.EXTRA_PREV_VOLUME_STREAM_VALUE, 0);
                if (newVolume != oldVolume) {