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

Commit dca37667 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Change InCallTonePlayerTest to use mock MediaPlayer.

This was causing flakes.  Using a mock will prevent that.
Unfortunately the startPlaying method on MediaPlayer is native, so had to
abstract out access to MediaPlayer.

Bug: 120289096
Bug: 120422950
Test: Ran unit tests.
Change-Id: If5462ae23978238e948f8693c95813b0dc4a1850
parent 4673b439
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -436,8 +436,10 @@ public class CallsManager extends Call.ListenerBase

        AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        InCallTonePlayer.MediaPlayerFactory mediaPlayerFactory =
                (resourceId, attributes) -> MediaPlayer.create(mContext, resourceId, attributes,
                        audioManager.generateAudioSessionId());
                (resourceId, attributes) ->
                        new InCallTonePlayer.MediaPlayerAdapterImpl(
                                MediaPlayer.create(mContext, resourceId, attributes,
                                        audioManager.generateAudioSessionId()));
        InCallTonePlayer.Factory playerFactory = new InCallTonePlayer.Factory(
                callAudioRoutePeripheralAdapter, lock, toneGeneratorFactory, mediaPlayerFactory,
                () -> audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0);
+43 −2
Original line number Diff line number Diff line
@@ -76,8 +76,49 @@ public class InCallTonePlayer extends Thread {
        ToneGenerator get (int streamType, int volume);
    }

    public interface MediaPlayerAdapter {
        void setLooping(boolean isLooping);
        void setOnCompletionListener(MediaPlayer.OnCompletionListener listener);
        void start();
        void release();
        int getDuration();
    }

    public static class MediaPlayerAdapterImpl implements MediaPlayerAdapter {
        private MediaPlayer mMediaPlayer;

        public MediaPlayerAdapterImpl(MediaPlayer mediaPlayer) {
            mMediaPlayer = mediaPlayer;
        }

        @Override
        public void setLooping(boolean isLooping) {
            mMediaPlayer.setLooping(isLooping);
        }

        @Override
        public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) {
            mMediaPlayer.setOnCompletionListener(listener);
        }

        @Override
        public void start() {
            mMediaPlayer.start();
        }

        @Override
        public void release() {
            mMediaPlayer.release();
        }

        @Override
        public int getDuration() {
            return mMediaPlayer.getDuration();
        }
    }

    public interface MediaPlayerFactory {
        MediaPlayer get (int resourceId, AudioAttributes attributes);
        MediaPlayerAdapter get (int resourceId, AudioAttributes attributes);
    }

    public interface AudioManagerAdapter {
@@ -136,7 +177,7 @@ public class InCallTonePlayer extends Thread {
    private int mState;

    /** For tones which are not generated using ToneGenerator. */
    private MediaPlayer mToneMediaPlayer = null;
    private MediaPlayerAdapter mToneMediaPlayer = null;

    /** Telecom lock object. */
    private final TelecomSystem.SyncRoot mLock;
+35 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.telecom.tests;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
@@ -56,7 +57,35 @@ public class InCallTonePlayerTest extends TelecomTestCase {
    @Mock
    private InCallTonePlayer.ToneGeneratorFactory mToneGeneratorFactory;

    private MediaPlayer mMediaPlayer;
    private InCallTonePlayer.MediaPlayerAdapter mMediaPlayerAdapter =
            new InCallTonePlayer.MediaPlayerAdapter() {
        private MediaPlayer.OnCompletionListener mListener;

        @Override
        public void setLooping(boolean isLooping) {
            // Do nothing.
        }

        @Override
        public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) {
            mListener = listener;
        }

        @Override
        public void start() {
            mListener.onCompletion(null);
        }

        @Override
        public void release() {
            // Do nothing.
        }

        @Override
        public int getDuration() {
            return 0;
        }
    };

    @Mock
    private InCallTonePlayer.MediaPlayerFactory mMediaPlayerFactory;
@@ -71,14 +100,13 @@ public class InCallTonePlayerTest extends TelecomTestCase {
    @Before
    public void setUp() throws Exception {
        super.setUp();
        mFactory = new InCallTonePlayer.Factory(mCallAudioRoutePeripheralAdapter, mLock,
                mToneGeneratorFactory, mMediaPlayerFactory, mAudioManagerAdapter);
        mFactory.setCallAudioManager(mCallAudioManager);

        when(mToneGeneratorFactory.get(anyInt(), anyInt())).thenReturn(mToneGenerator);
        when(mMediaPlayerFactory.get(anyInt(), any())).thenReturn(mMediaPlayerAdapter);

        mMediaPlayer = new MediaPlayer();
        when(mMediaPlayerFactory.get(anyInt(), any())).thenReturn(mMediaPlayer);
        mFactory = new InCallTonePlayer.Factory(mCallAudioRoutePeripheralAdapter, mLock,
                mToneGeneratorFactory, mMediaPlayerFactory, mAudioManagerAdapter);
        mFactory.setCallAudioManager(mCallAudioManager);
    }

    @SmallTest