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

Commit ed81df47 authored by Christofer Åkersten's avatar Christofer Åkersten
Browse files

Complete [add|remove]OnSessionTokensChangedListener

Test: runtest-MediaComponents
Bug: 73226650
Change-Id: I44b83feeac0fdba4d70370533881920dc0940ab4
parent 006b7eeb
Loading
Loading
Loading
Loading
+116 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.SessionCallback;
import android.media.session.MediaSessionManager;
import android.media.session.MediaSessionManager.OnSessionTokensChangedListener;
import android.media.session.PlaybackState;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -29,7 +30,9 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.UUID;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.*;
@@ -206,9 +209,122 @@ public class MediaSessionManager_MediaSession2 extends MediaSession2TestBase {
        assertTrue(foundTestLibraryService);
    }

    @Test
    public void testAddOnSessionTokensChangedListener() throws InterruptedException {
        TokensChangedListener listener = new TokensChangedListener();
        mManager.addOnSessionTokensChangedListener(sHandlerExecutor, listener);

        listener.reset();
        MediaSession2 session1 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertTrue(listener.await());
        assertTrue(listener.findToken(session1.getToken()));

        listener.reset();
        session1.close();
        assertTrue(listener.await());
        assertFalse(listener.findToken(session1.getToken()));

        listener.reset();
        MediaSession2 session2 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertTrue(listener.await());
        assertFalse(listener.findToken(session1.getToken()));
        assertTrue(listener.findToken(session2.getToken()));

        listener.reset();
        MediaSession2 session3 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertTrue(listener.await());
        assertFalse(listener.findToken(session1.getToken()));
        assertTrue(listener.findToken(session2.getToken()));
        assertTrue(listener.findToken(session3.getToken()));

        listener.reset();
        session2.close();
        assertTrue(listener.await());
        assertFalse(listener.findToken(session1.getToken()));
        assertFalse(listener.findToken(session2.getToken()));
        assertTrue(listener.findToken(session3.getToken()));

        listener.reset();
        session3.close();
        assertTrue(listener.await());
        assertFalse(listener.findToken(session1.getToken()));
        assertFalse(listener.findToken(session2.getToken()));
        assertFalse(listener.findToken(session3.getToken()));

        mManager.removeOnSessionTokensChangedListener(listener);
    }

    @Test
    public void testRemoveOnSessionTokensChangedListener() throws InterruptedException {
        TokensChangedListener listener = new TokensChangedListener();
        mManager.addOnSessionTokensChangedListener(sHandlerExecutor, listener);

        listener.reset();
        MediaSession2 session1 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertTrue(listener.await());

        mManager.removeOnSessionTokensChangedListener(listener);

        listener.reset();
        session1.close();
        assertFalse(listener.await());

        listener.reset();
        MediaSession2 session2 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertFalse(listener.await());

        listener.reset();
        MediaSession2 session3 = new MediaSession2.Builder(mContext, new MockPlayer(0))
                .setId(UUID.randomUUID().toString())
                .build();
        assertFalse(listener.await());

        listener.reset();
        session2.close();
        assertFalse(listener.await());

        listener.reset();
        session3.close();
        assertFalse(listener.await());
    }

    // Ensures if the session creation/release is notified to the server.
    private void ensureChangeInSession() throws InterruptedException {
        // TODO(jaewan): Wait by listener.
        Thread.sleep(WAIT_TIME_MS);
    }

    private class TokensChangedListener implements OnSessionTokensChangedListener {
        private CountDownLatch mLatch;
        private List<SessionToken2> mTokens;

        private void reset() {
            mLatch = new CountDownLatch(1);
            mTokens = null;
        }

        private boolean await() throws InterruptedException {
            return mLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
        }

        private boolean findToken(SessionToken2 token) {
            return mTokens.contains(token);
        }

        @Override
        public void onSessionTokensChanged(List<SessionToken2> tokens) {
            mTokens = tokens;
            mLatch.countDown();
        }
    }
}