1182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon/* 2182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * Copyright (C) 2016 The Android Open Source Project 3182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * 4182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * Licensed under the Apache License, Version 2.0 (the "License"); 5182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * you may not use this file except in compliance with the License. 6182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * You may obtain a copy of the License at 7182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * 8182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * http://www.apache.org/licenses/LICENSE-2.0 9182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * 10182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * Unless required by applicable law or agreed to in writing, software 11182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * distributed under the License is distributed on an "AS IS" BASIS, 12182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * See the License for the specific language governing permissions and 14182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * limitations under the License. 15182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon */ 16182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonpackage android.support.v4.media.session; 17182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 18182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport static android.support.test.InstrumentationRegistry.getContext; 19182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport static android.support.test.InstrumentationRegistry.getInstrumentation; 20182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 21182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport static org.junit.Assert.assertEquals; 22182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport static org.junit.Assert.assertNotNull; 23182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport static org.junit.Assert.assertTrue; 24c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moonimport static org.junit.Assert.fail; 25182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 26182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.media.AudioManager; 277ec07680309116890213ff39ae753b719a66eadbHyundo Moonimport android.media.session.MediaController; 287ec07680309116890213ff39ae753b719a66eadbHyundo Moonimport android.media.session.MediaSession; 297ec07680309116890213ff39ae753b719a66eadbHyundo Moonimport android.media.session.PlaybackState; 30182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.net.Uri; 317ec07680309116890213ff39ae753b719a66eadbHyundo Moonimport android.os.Build; 32182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.os.Bundle; 33182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.os.Handler; 34182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.os.Looper; 35182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.os.ResultReceiver; 367ec07680309116890213ff39ae753b719a66eadbHyundo Moonimport android.os.SystemClock; 37182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.support.test.filters.SmallTest; 38182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.support.test.runner.AndroidJUnit4; 39db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moonimport android.support.v4.media.MediaDescriptionCompat; 40182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.support.v4.media.RatingCompat; 41182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport android.support.v4.media.VolumeProviderCompat; 42182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 43182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport org.junit.After; 44182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport org.junit.Before; 45182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport org.junit.Test; 46182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonimport org.junit.runner.RunWith; 47182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 4865cde2c4554985493a2e7560b5e71c5f24969287Sungsooimport java.util.ArrayList; 4965cde2c4554985493a2e7560b5e71c5f24969287Sungsooimport java.util.List; 5065cde2c4554985493a2e7560b5e71c5f24969287Sungsoo 51182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon/** 52182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon * Test {@link MediaControllerCompat}. 53182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon */ 54182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon@RunWith(AndroidJUnit4.class) 55182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moonpublic class MediaControllerCompatTest { 56182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // The maximum time to wait for an operation. 57182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private static final long TIME_OUT_MS = 3000L; 58182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private static final String SESSION_TAG = "test-session"; 59182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private static final String EXTRAS_KEY = "test-key"; 60182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private static final String EXTRAS_VALUE = "test-val"; 61182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private static final float DELTA = 1e-4f; 62e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho private static final boolean ENABLED = true; 63e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho private static final boolean DISABLED = false; 647ec07680309116890213ff39ae753b719a66eadbHyundo Moon private static final long TEST_POSITION = 1000000L; 657ec07680309116890213ff39ae753b719a66eadbHyundo Moon private static final float TEST_PLAYBACK_SPEED = 3.0f; 667ec07680309116890213ff39ae753b719a66eadbHyundo Moon 67182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 68182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private final Object mWaitLock = new Object(); 69182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private Handler mHandler = new Handler(Looper.getMainLooper()); 70182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private MediaSessionCompat mSession; 71182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private MediaSessionCallback mCallback = new MediaSessionCallback(); 72182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private MediaControllerCompat mController; 73182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 74182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Before 75182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void setUp() throws Exception { 76182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon getInstrumentation().runOnMainSync(new Runnable() { 77182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 78182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void run() { 79182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSession = new MediaSessionCompat(getContext(), SESSION_TAG); 80182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSession.setCallback(mCallback, mHandler); 81db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS); 82182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mController = mSession.getController(); 83182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 84182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon }); 85182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 86182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 87182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @After 88182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void tearDown() throws Exception { 89182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSession.release(); 90182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 91182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 92182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 93182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 94182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testGetPackageName() { 95182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(getContext().getPackageName(), mController.getPackageName()); 96182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 97182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 98182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 99182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 100182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testGetRatingType() { 101182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals("Default rating type of a session must be RatingCompat.RATING_NONE", 102182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon RatingCompat.RATING_NONE, mController.getRatingType()); 103182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 104182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSession.setRatingType(RatingCompat.RATING_5_STARS); 105182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(RatingCompat.RATING_5_STARS, mController.getRatingType()); 106182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 107182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 108182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 109182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 110182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testGetSessionToken() throws Exception { 111182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(mSession.getSessionToken(), mController.getSessionToken()); 112182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 113182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 114182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 115182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 116182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testSendCommand() throws Exception { 117182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 118182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 119182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final String command = "test-command"; 120182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final Bundle extras = new Bundle(); 121182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon extras.putString(EXTRAS_KEY, EXTRAS_VALUE); 122182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mController.sendCommand(command, extras, new ResultReceiver(null)); 123182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 124182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnCommandCalled); 125182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertNotNull(mCallback.mCommandCallback); 126182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(command, mCallback.mCommand); 127182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 128182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 129182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 130182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 131db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon @Test 132db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon @SmallTest 133db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon public void testAddRemoveQueueItems() throws Exception { 13465cde2c4554985493a2e7560b5e71c5f24969287Sungsoo final String mediaId1 = "media_id_1"; 13565cde2c4554985493a2e7560b5e71c5f24969287Sungsoo final String mediaTitle1 = "media_title_1"; 13665cde2c4554985493a2e7560b5e71c5f24969287Sungsoo MediaDescriptionCompat itemDescription1 = new MediaDescriptionCompat.Builder() 13765cde2c4554985493a2e7560b5e71c5f24969287Sungsoo .setMediaId(mediaId1).setTitle(mediaTitle1).build(); 13865cde2c4554985493a2e7560b5e71c5f24969287Sungsoo 13965cde2c4554985493a2e7560b5e71c5f24969287Sungsoo final String mediaId2 = "media_id_2"; 14065cde2c4554985493a2e7560b5e71c5f24969287Sungsoo final String mediaTitle2 = "media_title_2"; 14165cde2c4554985493a2e7560b5e71c5f24969287Sungsoo MediaDescriptionCompat itemDescription2 = new MediaDescriptionCompat.Builder() 14265cde2c4554985493a2e7560b5e71c5f24969287Sungsoo .setMediaId(mediaId2).setTitle(mediaTitle2).build(); 143db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 144db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon synchronized (mWaitLock) { 145db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mCallback.reset(); 14665cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mController.addQueueItem(itemDescription1); 147db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 148db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon assertTrue(mCallback.mOnAddQueueItemCalled); 149db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon assertEquals(-1, mCallback.mQueueIndex); 15065cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaId1, mCallback.mQueueDescription.getMediaId()); 15165cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaTitle1, mCallback.mQueueDescription.getTitle()); 152db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 153db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mCallback.reset(); 15465cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mController.addQueueItem(itemDescription2, 0); 155db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 156db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon assertTrue(mCallback.mOnAddQueueItemAtCalled); 157db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon assertEquals(0, mCallback.mQueueIndex); 15865cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaId2, mCallback.mQueueDescription.getMediaId()); 15965cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaTitle2, mCallback.mQueueDescription.getTitle()); 160db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 161db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mCallback.reset(); 162db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mController.removeQueueItemAt(0); 163db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 16465cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertTrue(mCallback.mOnRemoveQueueItemCalled); 16565cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaId2, mCallback.mQueueDescription.getMediaId()); 16665cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaTitle2, mCallback.mQueueDescription.getTitle()); 167db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 168db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mCallback.reset(); 16965cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mController.removeQueueItem(itemDescription1); 170db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 171db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon assertTrue(mCallback.mOnRemoveQueueItemCalled); 17265cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaId1, mCallback.mQueueDescription.getMediaId()); 17365cde2c4554985493a2e7560b5e71c5f24969287Sungsoo assertEquals(mediaTitle1, mCallback.mQueueDescription.getTitle()); 174c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon 175c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon // Try to modify the queue when the session does not support queue management. 176c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon mSession.setFlags(0); 177c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon try { 17865cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mController.addQueueItem(itemDescription1); 179c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon fail(); 180c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon } catch (UnsupportedOperationException e) { 181c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon // Expected. 182c10aca3fa402839d997db961d88d34b0d82ee7d7Hyundo Moon } 183db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 184db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 185db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 186182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // TODO: Uncomment after fixing this test. This test causes an Exception on System UI. 187182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // @Test 188182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // @SmallTest 189182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testVolumeControl() throws Exception { 190182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon VolumeProviderCompat vp = 191182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 11, 5) { 192182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 193182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSetVolumeTo(int volume) { 194182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 195182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon setCurrentVolume(volume); 196182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 197182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 198182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 199182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 200182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 201182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onAdjustVolume(int direction) { 202182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 203182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon switch (direction) { 204182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon case AudioManager.ADJUST_LOWER: 205182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon setCurrentVolume(getCurrentVolume() - 1); 206182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon break; 207182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon case AudioManager.ADJUST_RAISE: 208182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon setCurrentVolume(getCurrentVolume() + 1); 209182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon break; 210182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 211182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 212182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 213182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 214182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon }; 215182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSession.setPlaybackToRemote(vp); 216182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 217182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 218182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // test setVolumeTo 219182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mController.setVolumeTo(7, 0); 220182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 221182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(7, vp.getCurrentVolume()); 222182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 223182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon // test adjustVolume 224182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mController.adjustVolume(AudioManager.ADJUST_LOWER, 0); 225182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 226182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(6, vp.getCurrentVolume()); 227182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 228182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mController.adjustVolume(AudioManager.ADJUST_RAISE, 0); 229182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 230182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(7, vp.getCurrentVolume()); 231182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 232182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 233182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 234182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 235182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 236182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testTransportControlsAndMediaSessionCallback() throws Exception { 237182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon MediaControllerCompat.TransportControls controls = mController.getTransportControls(); 238182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 239182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 240182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.play(); 241182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 242182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPlayCalled); 243182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 244182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 245182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.pause(); 246182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 247182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPauseCalled); 248182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 249182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 250182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.stop(); 251182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 252182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnStopCalled); 253182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 254182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 255182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.fastForward(); 256182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 257182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnFastForwardCalled); 258182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 259182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 260182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.rewind(); 261182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 262182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnRewindCalled); 263182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 264182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 265182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.skipToPrevious(); 266182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 267182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSkipToPreviousCalled); 268182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 269182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 270182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.skipToNext(); 271182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 272182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSkipToNextCalled); 273182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 274182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 275182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final long seekPosition = 1000; 276182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.seekTo(seekPosition); 277182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 278182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSeekToCalled); 279182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(seekPosition, mCallback.mSeekPosition); 280182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 281182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 282182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final RatingCompat rating = 283182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon RatingCompat.newStarRating(RatingCompat.RATING_5_STARS, 3f); 284182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.setRating(rating); 285182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 286182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSetRatingCalled); 287182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(rating.getRatingStyle(), mCallback.mRating.getRatingStyle()); 288182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(rating.getStarRating(), mCallback.mRating.getStarRating(), DELTA); 289182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 290182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 291182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final String mediaId = "test-media-id"; 292182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final Bundle extras = new Bundle(); 293182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon extras.putString(EXTRAS_KEY, EXTRAS_VALUE); 294182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.playFromMediaId(mediaId, extras); 295182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 296182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPlayFromMediaIdCalled); 297182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(mediaId, mCallback.mMediaId); 298182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 299182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 300182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 301182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final String query = "test-query"; 302182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.playFromSearch(query, extras); 303182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 304182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPlayFromSearchCalled); 305182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(query, mCallback.mQuery); 306182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 307182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 308182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 309182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final Uri uri = Uri.parse("content://test/popcorn.mod"); 310182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.playFromUri(uri, extras); 311182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 312182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPlayFromUriCalled); 313182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(uri, mCallback.mUri); 314182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 315182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 316182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 317182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final String action = "test-action"; 318182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.sendCustomAction(action, extras); 319182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 320182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnCustomActionCalled); 321182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(action, mCallback.mAction); 322182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 323182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 324182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 325182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.mOnCustomActionCalled = false; 326182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final PlaybackStateCompat.CustomAction customAction = 327182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon new PlaybackStateCompat.CustomAction.Builder(action, action, -1) 328182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon .setExtras(extras) 329182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon .build(); 330182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.sendCustomAction(customAction, extras); 331182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 332182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnCustomActionCalled); 333182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(action, mCallback.mAction); 334182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 335182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 336182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 337182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final long queueItemId = 1000; 338182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.skipToQueueItem(queueItemId); 339182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 340182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSkipToQueueItemCalled); 341182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(queueItemId, mCallback.mQueueItemId); 342182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 343182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 344182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.prepare(); 345182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 346182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPrepareCalled); 347182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 348182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 349182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.prepareFromMediaId(mediaId, extras); 350182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 351182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPrepareFromMediaIdCalled); 352182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(mediaId, mCallback.mMediaId); 353182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 354182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 355182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 356182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.prepareFromSearch(query, extras); 357182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 358182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPrepareFromSearchCalled); 359182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(query, mCallback.mQuery); 360182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 361182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 362182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 363182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.prepareFromUri(uri, extras); 364182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 365182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnPrepareFromUriCalled); 366182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(uri, mCallback.mUri); 367182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY)); 368182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 369182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 370e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho controls.setCaptioningEnabled(ENABLED); 371e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mWaitLock.wait(TIME_OUT_MS); 372e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho assertTrue(mCallback.mOnSetCaptioningEnabledCalled); 373e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho assertEquals(ENABLED, mCallback.mCaptioningEnabled); 374e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho 375e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mCallback.reset(); 376182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final int repeatMode = PlaybackStateCompat.REPEAT_MODE_ALL; 377182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon controls.setRepeatMode(repeatMode); 378182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 379182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSetRepeatModeCalled); 380182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(repeatMode, mCallback.mRepeatMode); 381182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 382182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCallback.reset(); 383e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho controls.setShuffleModeEnabled(ENABLED); 384182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.wait(TIME_OUT_MS); 385182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertTrue(mCallback.mOnSetShuffleModeEnabledCalled); 386e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho assertEquals(ENABLED, mCallback.mShuffleModeEnabled); 38774198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon 38874198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mCallback.reset(); 38974198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon controls.setShuffleMode(PlaybackStateCompat.SHUFFLE_MODE_ALL); 39074198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mWaitLock.wait(TIME_OUT_MS); 39174198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon assertTrue(mCallback.mOnSetShuffleModeCalled); 39274198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon assertEquals(PlaybackStateCompat.SHUFFLE_MODE_ALL, mCallback.mShuffleMode); 393182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 394182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 395182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 396182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Test 397182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @SmallTest 398182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void testPlaybackInfo() { 399182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final int playbackType = MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_LOCAL; 400182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final int volumeControl = VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE; 401182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final int maxVolume = 10; 402182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon final int currentVolume = 3; 403182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 404182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon int audioStream = 77; 405182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon MediaControllerCompat.PlaybackInfo info = new MediaControllerCompat.PlaybackInfo( 406182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon playbackType, audioStream, volumeControl, maxVolume, currentVolume); 407182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 408182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(playbackType, info.getPlaybackType()); 409182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(audioStream, info.getAudioStream()); 410182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(volumeControl, info.getVolumeControl()); 411182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(maxVolume, info.getMaxVolume()); 412182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon assertEquals(currentVolume, info.getCurrentVolume()); 413182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 414182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 4157ec07680309116890213ff39ae753b719a66eadbHyundo Moon @Test 4167ec07680309116890213ff39ae753b719a66eadbHyundo Moon @SmallTest 4177ec07680309116890213ff39ae753b719a66eadbHyundo Moon public void testGetPlaybackStateWithPositionUpdate() throws InterruptedException { 4187ec07680309116890213ff39ae753b719a66eadbHyundo Moon final long stateSetTime = SystemClock.elapsedRealtime(); 4197ec07680309116890213ff39ae753b719a66eadbHyundo Moon PlaybackStateCompat stateIn = new PlaybackStateCompat.Builder() 4207ec07680309116890213ff39ae753b719a66eadbHyundo Moon .setState(PlaybackStateCompat.STATE_PLAYING, TEST_POSITION, TEST_PLAYBACK_SPEED, 4217ec07680309116890213ff39ae753b719a66eadbHyundo Moon stateSetTime) 4227ec07680309116890213ff39ae753b719a66eadbHyundo Moon .build(); 4237ec07680309116890213ff39ae753b719a66eadbHyundo Moon mSession.setPlaybackState(stateIn); 4247ec07680309116890213ff39ae753b719a66eadbHyundo Moon 4257ec07680309116890213ff39ae753b719a66eadbHyundo Moon final long waitDuration = 100L; 4267ec07680309116890213ff39ae753b719a66eadbHyundo Moon Thread.sleep(waitDuration); 4277ec07680309116890213ff39ae753b719a66eadbHyundo Moon 4287ec07680309116890213ff39ae753b719a66eadbHyundo Moon final long expectedUpdateTime = waitDuration + stateSetTime; 4297ec07680309116890213ff39ae753b719a66eadbHyundo Moon final long expectedPosition = (long) (TEST_PLAYBACK_SPEED * waitDuration) + TEST_POSITION; 4307ec07680309116890213ff39ae753b719a66eadbHyundo Moon 4317ec07680309116890213ff39ae753b719a66eadbHyundo Moon final double updateTimeTolerance = 30L; 4327ec07680309116890213ff39ae753b719a66eadbHyundo Moon final double positionTolerance = updateTimeTolerance * TEST_PLAYBACK_SPEED; 4337ec07680309116890213ff39ae753b719a66eadbHyundo Moon 4347ec07680309116890213ff39ae753b719a66eadbHyundo Moon PlaybackStateCompat stateOut = mSession.getController().getPlaybackState(); 4357ec07680309116890213ff39ae753b719a66eadbHyundo Moon assertEquals(expectedUpdateTime, stateOut.getLastPositionUpdateTime(), updateTimeTolerance); 4367ec07680309116890213ff39ae753b719a66eadbHyundo Moon assertEquals(expectedPosition, stateOut.getPosition(), positionTolerance); 4377ec07680309116890213ff39ae753b719a66eadbHyundo Moon 4387ec07680309116890213ff39ae753b719a66eadbHyundo Moon // Compare the result with MediaController.getPlaybackState(). 4397ec07680309116890213ff39ae753b719a66eadbHyundo Moon if (Build.VERSION.SDK_INT >= 21) { 4407ec07680309116890213ff39ae753b719a66eadbHyundo Moon MediaController controller = new MediaController( 4417ec07680309116890213ff39ae753b719a66eadbHyundo Moon getContext(), (MediaSession.Token) mSession.getSessionToken().getToken()); 4427ec07680309116890213ff39ae753b719a66eadbHyundo Moon PlaybackState state = controller.getPlaybackState(); 4437ec07680309116890213ff39ae753b719a66eadbHyundo Moon assertEquals(state.getLastPositionUpdateTime(), stateOut.getLastPositionUpdateTime(), 4447ec07680309116890213ff39ae753b719a66eadbHyundo Moon updateTimeTolerance); 4457ec07680309116890213ff39ae753b719a66eadbHyundo Moon assertEquals(state.getPosition(), stateOut.getPosition(), positionTolerance); 4467ec07680309116890213ff39ae753b719a66eadbHyundo Moon } 4477ec07680309116890213ff39ae753b719a66eadbHyundo Moon } 4487ec07680309116890213ff39ae753b719a66eadbHyundo Moon 449182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private class MediaSessionCallback extends MediaSessionCompat.Callback { 450182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private long mSeekPosition; 451182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private long mQueueItemId; 452182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private RatingCompat mRating; 453182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private String mMediaId; 454182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private String mQuery; 455182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private Uri mUri; 456182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private String mAction; 457182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private String mCommand; 458182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private Bundle mExtras; 459182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private ResultReceiver mCommandCallback; 460e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho private boolean mCaptioningEnabled; 461182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private int mRepeatMode; 462182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mShuffleModeEnabled; 46374198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon private int mShuffleMode; 464db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon private int mQueueIndex; 465db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon private MediaDescriptionCompat mQueueDescription; 46665cde2c4554985493a2e7560b5e71c5f24969287Sungsoo private List<MediaSessionCompat.QueueItem> mQueue = new ArrayList<>(); 467182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 468182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPlayCalled; 469182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPauseCalled; 470182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnStopCalled; 471182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnFastForwardCalled; 472182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnRewindCalled; 473182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSkipToPreviousCalled; 474182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSkipToNextCalled; 475182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSeekToCalled; 476182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSkipToQueueItemCalled; 477182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSetRatingCalled; 478182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPlayFromMediaIdCalled; 479182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPlayFromSearchCalled; 480182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPlayFromUriCalled; 481182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnCustomActionCalled; 482182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnCommandCalled; 483182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPrepareCalled; 484182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPrepareFromMediaIdCalled; 485182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPrepareFromSearchCalled; 486182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnPrepareFromUriCalled; 487e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho private boolean mOnSetCaptioningEnabledCalled; 488182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSetRepeatModeCalled; 489182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon private boolean mOnSetShuffleModeEnabledCalled; 49074198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon private boolean mOnSetShuffleModeCalled; 491db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon private boolean mOnAddQueueItemCalled; 492db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon private boolean mOnAddQueueItemAtCalled; 493db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon private boolean mOnRemoveQueueItemCalled; 494182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 495182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void reset() { 496182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSeekPosition = -1; 497182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mQueueItemId = -1; 498182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mRating = null; 499182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mMediaId = null; 500182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mQuery = null; 501182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mUri = null; 502182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mAction = null; 503182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = null; 504182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCommand = null; 505182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCommandCallback = null; 506e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mCaptioningEnabled = false; 507182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mShuffleModeEnabled = false; 508182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mRepeatMode = PlaybackStateCompat.REPEAT_MODE_NONE; 50974198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mShuffleMode = PlaybackStateCompat.SHUFFLE_MODE_NONE; 510db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mQueueIndex = -1; 511db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mQueueDescription = null; 512182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 513182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayCalled = false; 514182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPauseCalled = false; 515182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnStopCalled = false; 516182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnFastForwardCalled = false; 517182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnRewindCalled = false; 518182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToPreviousCalled = false; 519182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToNextCalled = false; 520182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToQueueItemCalled = false; 521182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSeekToCalled = false; 522182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetRatingCalled = false; 523182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromMediaIdCalled = false; 524182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromSearchCalled = false; 525182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromUriCalled = false; 526182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnCustomActionCalled = false; 527182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnCommandCalled = false; 528182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareCalled = false; 529182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromMediaIdCalled = false; 530182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromSearchCalled = false; 531182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromUriCalled = false; 532e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mOnSetCaptioningEnabledCalled = false; 533182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetRepeatModeCalled = false; 534182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetShuffleModeEnabledCalled = false; 53574198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mOnSetShuffleModeCalled = false; 536db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnAddQueueItemCalled = false; 537db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnAddQueueItemAtCalled = false; 538db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnRemoveQueueItemCalled = false; 539182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 540182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 541182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 542182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPlay() { 543182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 544182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayCalled = true; 545182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 546182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 547182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 548182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 549182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 550182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPause() { 551182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 552182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPauseCalled = true; 553182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 554182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 555182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 556182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 557182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 558182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onStop() { 559182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 560182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnStopCalled = true; 561182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 562182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 563182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 564182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 565182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 566182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onFastForward() { 567182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 568182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnFastForwardCalled = true; 569182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 570182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 571182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 572182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 573182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 574182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onRewind() { 575182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 576182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnRewindCalled = true; 577182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 578182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 579182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 580182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 581182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 582182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSkipToPrevious() { 583182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 584182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToPreviousCalled = true; 585182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 586182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 587182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 588182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 589182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 590182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSkipToNext() { 591182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 592182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToNextCalled = true; 593182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 594182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 595182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 596182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 597182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 598182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSeekTo(long pos) { 599182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 600182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSeekToCalled = true; 601182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mSeekPosition = pos; 602182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 603182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 604182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 605182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 606182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 607182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSetRating(RatingCompat rating) { 608182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 609182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetRatingCalled = true; 610182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mRating = rating; 611182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 612182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 613182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 614182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 615182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 616182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPlayFromMediaId(String mediaId, Bundle extras) { 617182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 618182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromMediaIdCalled = true; 619182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mMediaId = mediaId; 620182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 621182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 622182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 623182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 624182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 625182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 626182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPlayFromSearch(String query, Bundle extras) { 627182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 628182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromSearchCalled = true; 629182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mQuery = query; 630182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 631182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 632182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 633182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 634182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 635182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 636182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPlayFromUri(Uri uri, Bundle extras) { 637182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 638182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPlayFromUriCalled = true; 639182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mUri = uri; 640182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 641182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 642182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 643182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 644182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 645182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 646182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onCustomAction(String action, Bundle extras) { 647182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 648182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnCustomActionCalled = true; 649182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mAction = action; 650182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 651182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 652182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 653182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 654182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 655182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 656182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSkipToQueueItem(long id) { 657182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 658182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSkipToQueueItemCalled = true; 659182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mQueueItemId = id; 660182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 661182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 662182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 663182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 664182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 665182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onCommand(String command, Bundle extras, ResultReceiver cb) { 666182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 667182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnCommandCalled = true; 668182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCommand = command; 669182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 670182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mCommandCallback = cb; 671182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 672182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 673182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 674182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 675182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 676182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPrepare() { 677182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 678182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareCalled = true; 679182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 680182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 681182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 682182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 683182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 684182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPrepareFromMediaId(String mediaId, Bundle extras) { 685182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 686182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromMediaIdCalled = true; 687182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mMediaId = mediaId; 688182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 689182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 690182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 691182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 692182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 693182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 694182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPrepareFromSearch(String query, Bundle extras) { 695182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 696182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromSearchCalled = true; 697182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mQuery = query; 698182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 699182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 700182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 701182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 702182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 703182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 704182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onPrepareFromUri(Uri uri, Bundle extras) { 705182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 706182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnPrepareFromUriCalled = true; 707182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mUri = uri; 708182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mExtras = extras; 709182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 710182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 711182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 712182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 713182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 714182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSetRepeatMode(int repeatMode) { 715182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 716182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetRepeatModeCalled = true; 717182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mRepeatMode = repeatMode; 718182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 719182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 720182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 721182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon 722182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon @Override 723db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon public void onAddQueueItem(MediaDescriptionCompat description) { 724db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon synchronized (mWaitLock) { 725db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnAddQueueItemCalled = true; 726db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mQueueDescription = description; 72765cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mQueue.add(new MediaSessionCompat.QueueItem(description, mQueue.size())); 72865cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mSession.setQueue(mQueue); 729db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.notify(); 730db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 731db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 732db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 733db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon @Override 734db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon public void onAddQueueItem(MediaDescriptionCompat description, int index) { 735db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon synchronized (mWaitLock) { 736db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnAddQueueItemAtCalled = true; 737db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mQueueIndex = index; 738db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mQueueDescription = description; 73965cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mQueue.add(index, new MediaSessionCompat.QueueItem(description, mQueue.size())); 74065cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mSession.setQueue(mQueue); 741db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.notify(); 742db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 743db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 744db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 745db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon @Override 746db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon public void onRemoveQueueItem(MediaDescriptionCompat description) { 747db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon synchronized (mWaitLock) { 748db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mOnRemoveQueueItemCalled = true; 74965cde2c4554985493a2e7560b5e71c5f24969287Sungsoo String mediaId = description.getMediaId(); 75065cde2c4554985493a2e7560b5e71c5f24969287Sungsoo for (int i = mQueue.size() - 1; i >= 0; --i) { 75165cde2c4554985493a2e7560b5e71c5f24969287Sungsoo if (mediaId.equals(mQueue.get(i).getDescription().getMediaId())) { 75265cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mQueueDescription = mQueue.remove(i).getDescription(); 75365cde2c4554985493a2e7560b5e71c5f24969287Sungsoo mSession.setQueue(mQueue); 75465cde2c4554985493a2e7560b5e71c5f24969287Sungsoo break; 75565cde2c4554985493a2e7560b5e71c5f24969287Sungsoo } 75665cde2c4554985493a2e7560b5e71c5f24969287Sungsoo } 757db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon mWaitLock.notify(); 758db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 759db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon } 760db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon 761db6b58731980f2972bfec455abbf2b82ad773a8dHyundo Moon @Override 762e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho public void onSetCaptioningEnabled(boolean enabled) { 763e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho synchronized (mWaitLock) { 764e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mOnSetCaptioningEnabledCalled = true; 765e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mCaptioningEnabled = enabled; 766e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho mWaitLock.notify(); 767e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho } 768e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho } 769e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho 770e90c068c82ce62a0069c4e88f6b26e92468231d6Donghyun Cho @Override 771182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon public void onSetShuffleModeEnabled(boolean enabled) { 772182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon synchronized (mWaitLock) { 773182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mOnSetShuffleModeEnabledCalled = true; 774182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mShuffleModeEnabled = enabled; 775182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon mWaitLock.notify(); 776182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 777182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 77874198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon 77974198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon @Override 78074198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon public void onSetShuffleMode(int shuffleMode) { 78174198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon synchronized (mWaitLock) { 78274198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mOnSetShuffleModeCalled = true; 78374198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mShuffleMode = shuffleMode; 78474198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon mWaitLock.notify(); 78574198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon } 78674198cdcc6e4f53c7c6586d99ff727886de2441aHyundo Moon } 787182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon } 788182e4c394eb936f191cd4f615d6cbadeef6e902dHyundo Moon} 789