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

Commit 1aad4491 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "InCallTonePlayerTest: avoid looper leak" into main

parents a762d437 4ca8d950
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -733,7 +733,8 @@ public class CallsManager extends Call.ListenerBase
                                        audioManager.generateAudioSessionId()));
                                        audioManager.generateAudioSessionId()));
        InCallTonePlayer.Factory playerFactory = new InCallTonePlayer.Factory(
        InCallTonePlayer.Factory playerFactory = new InCallTonePlayer.Factory(
                callAudioRoutePeripheralAdapter, lock, toneGeneratorFactory, mediaPlayerFactory,
                callAudioRoutePeripheralAdapter, lock, toneGeneratorFactory, mediaPlayerFactory,
                () -> audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0, featureFlags);
                () -> audioManager.getStreamVolume(AudioManager.STREAM_RING) > 0, featureFlags,
                Looper.getMainLooper());


        SystemSettingsUtil systemSettingsUtil = new SystemSettingsUtil();
        SystemSettingsUtil systemSettingsUtil = new SystemSettingsUtil();
        RingtoneFactory ringtoneFactory = new RingtoneFactory(this, context, featureFlags);
        RingtoneFactory ringtoneFactory = new RingtoneFactory(this, context, featureFlags);
+8 −4
Original line number Original line Diff line number Diff line
@@ -56,17 +56,19 @@ public class InCallTonePlayer extends Thread {
        private final MediaPlayerFactory mMediaPlayerFactory;
        private final MediaPlayerFactory mMediaPlayerFactory;
        private final AudioManagerAdapter mAudioManagerAdapter;
        private final AudioManagerAdapter mAudioManagerAdapter;
        private final FeatureFlags mFeatureFlags;
        private final FeatureFlags mFeatureFlags;
        private final Looper mLooper;


        public Factory(CallAudioRoutePeripheralAdapter callAudioRoutePeripheralAdapter,
        public Factory(CallAudioRoutePeripheralAdapter callAudioRoutePeripheralAdapter,
                TelecomSystem.SyncRoot lock, ToneGeneratorFactory toneGeneratorFactory,
                TelecomSystem.SyncRoot lock, ToneGeneratorFactory toneGeneratorFactory,
                MediaPlayerFactory mediaPlayerFactory, AudioManagerAdapter audioManagerAdapter,
                MediaPlayerFactory mediaPlayerFactory, AudioManagerAdapter audioManagerAdapter,
                FeatureFlags flags) {
                FeatureFlags flags, Looper looper) {
            mCallAudioRoutePeripheralAdapter = callAudioRoutePeripheralAdapter;
            mCallAudioRoutePeripheralAdapter = callAudioRoutePeripheralAdapter;
            mLock = lock;
            mLock = lock;
            mToneGeneratorFactory = toneGeneratorFactory;
            mToneGeneratorFactory = toneGeneratorFactory;
            mMediaPlayerFactory = mediaPlayerFactory;
            mMediaPlayerFactory = mediaPlayerFactory;
            mAudioManagerAdapter = audioManagerAdapter;
            mAudioManagerAdapter = audioManagerAdapter;
            mFeatureFlags = flags;
            mFeatureFlags = flags;
            mLooper = looper;
        }
        }


        public void setCallAudioManager(CallAudioManager callAudioManager) {
        public void setCallAudioManager(CallAudioManager callAudioManager) {
@@ -76,7 +78,7 @@ public class InCallTonePlayer extends Thread {
        public InCallTonePlayer createPlayer(Call call, int tone) {
        public InCallTonePlayer createPlayer(Call call, int tone) {
            return new InCallTonePlayer(call, tone, mCallAudioManager,
            return new InCallTonePlayer(call, tone, mCallAudioManager,
                    mCallAudioRoutePeripheralAdapter, mLock, mToneGeneratorFactory,
                    mCallAudioRoutePeripheralAdapter, mLock, mToneGeneratorFactory,
                    mMediaPlayerFactory, mAudioManagerAdapter, mFeatureFlags);
                    mMediaPlayerFactory, mAudioManagerAdapter, mFeatureFlags, mLooper);
        }
        }
    }
    }


@@ -199,7 +201,7 @@ public class InCallTonePlayer extends Thread {
    private final CallAudioManager mCallAudioManager;
    private final CallAudioManager mCallAudioManager;
    private final CallAudioRoutePeripheralAdapter mCallAudioRoutePeripheralAdapter;
    private final CallAudioRoutePeripheralAdapter mCallAudioRoutePeripheralAdapter;


    private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
    private final Handler mMainThreadHandler;


    /** The ID of the tone to play. */
    /** The ID of the tone to play. */
    private final int mToneId;
    private final int mToneId;
@@ -242,7 +244,8 @@ public class InCallTonePlayer extends Thread {
            ToneGeneratorFactory toneGeneratorFactory,
            ToneGeneratorFactory toneGeneratorFactory,
            MediaPlayerFactory mediaPlayerFactor,
            MediaPlayerFactory mediaPlayerFactor,
            AudioManagerAdapter audioManagerAdapter,
            AudioManagerAdapter audioManagerAdapter,
            FeatureFlags flags) {
            FeatureFlags flags,
            Looper looper) {
        mCall = call;
        mCall = call;
        mState = STATE_OFF;
        mState = STATE_OFF;
        mToneId = toneId;
        mToneId = toneId;
@@ -253,6 +256,7 @@ public class InCallTonePlayer extends Thread {
        mMediaPlayerFactory = mediaPlayerFactor;
        mMediaPlayerFactory = mediaPlayerFactor;
        mAudioManagerAdapter = audioManagerAdapter;
        mAudioManagerAdapter = audioManagerAdapter;
        mFeatureFlags = flags;
        mFeatureFlags = flags;
        mMainThreadHandler = new Handler(looper);
    }
    }


    /** {@inheritDoc} */
    /** {@inheritDoc} */
+6 −2
Original line number Original line Diff line number Diff line
@@ -127,7 +127,8 @@ public class InCallTonePlayerTest extends TelecomTestCase {
                mCallAudioRouteStateMachine, mBluetoothRouteManager, mWiredHeadsetManager,
                mCallAudioRouteStateMachine, mBluetoothRouteManager, mWiredHeadsetManager,
                mDockManager, mRingtonePlayer);
                mDockManager, mRingtonePlayer);
        mFactory = new InCallTonePlayer.Factory(mCallAudioRoutePeripheralAdapter, mLock,
        mFactory = new InCallTonePlayer.Factory(mCallAudioRoutePeripheralAdapter, mLock,
                mToneGeneratorFactory, mMediaPlayerFactory, mAudioManagerAdapter, mFeatureFlags);
                mToneGeneratorFactory, mMediaPlayerFactory, mAudioManagerAdapter, mFeatureFlags,
                getLooper());
        mFactory.setCallAudioManager(mCallAudioManager);
        mFactory.setCallAudioManager(mCallAudioManager);
        mInCallTonePlayer = mFactory.createPlayer(mCall, InCallTonePlayer.TONE_CALL_ENDED);
        mInCallTonePlayer = mFactory.createPlayer(mCall, InCallTonePlayer.TONE_CALL_ENDED);
    }
    }
@@ -136,7 +137,10 @@ public class InCallTonePlayerTest extends TelecomTestCase {
    @After
    @After
    public void tearDown() throws Exception {
    public void tearDown() throws Exception {
        super.tearDown();
        super.tearDown();
        if (mInCallTonePlayer != null) {
            mInCallTonePlayer.cleanup();
            mInCallTonePlayer.cleanup();
            mInCallTonePlayer = null;
        }
    }
    }


    @SmallTest
    @SmallTest
+16 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.server.telecom.tests;


import android.content.Context;
import android.content.Context;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.telecom.Log;
import android.telecom.Log;


import androidx.test.InstrumentationRegistry;
import androidx.test.InstrumentationRegistry;
@@ -38,6 +40,7 @@ public abstract class TelecomTestCase {
    protected Context mContext;
    protected Context mContext;
    @Mock
    @Mock
    FeatureFlags mFeatureFlags;
    FeatureFlags mFeatureFlags;
    private HandlerThread mHandlerThread;


    MockitoHelper mMockitoHelper = new MockitoHelper();
    MockitoHelper mMockitoHelper = new MockitoHelper();
    ComponentContextFixture mComponentContextFixture;
    ComponentContextFixture mComponentContextFixture;
@@ -57,12 +60,25 @@ public abstract class TelecomTestCase {
    }
    }


    public void tearDown() throws Exception {
    public void tearDown() throws Exception {
        if (mHandlerThread != null) {
            mHandlerThread.quit();
            mHandlerThread.join();
            mHandlerThread = null;
        }
        mComponentContextFixture.destroy();
        mComponentContextFixture.destroy();
        mComponentContextFixture = null;
        mComponentContextFixture = null;
        mMockitoHelper.tearDown();
        mMockitoHelper.tearDown();
        Mockito.framework().clearInlineMocks();
        Mockito.framework().clearInlineMocks();
    }
    }


    protected Looper getLooper() {
        if (mHandlerThread == null) {
            mHandlerThread = new HandlerThread("TelecomTestCase");
            mHandlerThread.start();
        }
        return mHandlerThread.getLooper();
    }

    protected static void waitForHandlerAction(Handler h, long timeoutMillis) {
    protected static void waitForHandlerAction(Handler h, long timeoutMillis) {
        final CountDownLatch lock = new CountDownLatch(1);
        final CountDownLatch lock = new CountDownLatch(1);
        h.post(lock::countDown);
        h.post(lock::countDown);