1b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon/* 2b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * Copyright (C) 2016 The Android Open Source Project 3b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * 4b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * Licensed under the Apache License, Version 2.0 (the "License"); 5b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * you may not use this file except in compliance with the License. 6b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * You may obtain a copy of the License at 7b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * 8b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * http://www.apache.org/licenses/LICENSE-2.0 9b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * 10b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * Unless required by applicable law or agreed to in writing, software 11b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * distributed under the License is distributed on an "AS IS" BASIS, 12b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * See the License for the specific language governing permissions and 14b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * limitations under the License. 15b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon */ 16b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonpackage android.support.v4.media; 17b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 18b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport static android.support.test.InstrumentationRegistry.getInstrumentation; 19b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 20b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport static junit.framework.Assert.assertEquals; 21b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport static junit.framework.Assert.assertFalse; 22b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport static junit.framework.Assert.assertNotNull; 2310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moonimport static junit.framework.Assert.assertNull; 24b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport static junit.framework.Assert.assertTrue; 25b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 26b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport android.content.ComponentName; 276e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moonimport android.os.Build; 28b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport android.os.Bundle; 2935232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikasimport android.support.test.filters.MediumTest; 30b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport android.support.test.filters.SmallTest; 31b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport android.support.test.runner.AndroidJUnit4; 3294b428e836047d5865368dd436cec37f9502621dDonghyun Choimport android.support.testutils.PollingCheck; 3310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moonimport android.support.v4.media.MediaBrowserCompat.MediaItem; 34b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 35b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport org.junit.Before; 36b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport org.junit.Test; 37b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport org.junit.runner.RunWith; 38b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 39b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonimport java.util.List; 40b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 41b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon/** 42b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon * Test {@link android.support.v4.media.MediaBrowserServiceCompat}. 43b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon */ 44b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon@RunWith(AndroidJUnit4.class) 45b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moonpublic class MediaBrowserServiceCompatTest { 46b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon // The maximum time to wait for an operation. 47b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private static final long TIME_OUT_MS = 3000L; 48b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private static final long WAIT_TIME_FOR_NO_RESPONSE_MS = 500L; 49b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private static final ComponentName TEST_BROWSER_SERVICE = new ComponentName( 50b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon "android.support.mediacompat.test", 51b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon "android.support.v4.media.StubMediaBrowserServiceCompat"); 52b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon private static final ComponentName TEST_BROWSER_SERVICE_DELAYED_MEDIA_SESSION = 53b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon new ComponentName( 54b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon "android.support.mediacompat.test", 55b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon "android.support.v4.media" 56b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon + ".StubMediaBrowserServiceCompatWithDelayedMediaSession"); 57f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_KEY_1 = "key_1"; 58f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_VALUE_1 = "value_1"; 59f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_KEY_2 = "key_2"; 60f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_VALUE_2 = "value_2"; 61f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_KEY_3 = "key_3"; 62f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_VALUE_3 = "value_3"; 63f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_KEY_4 = "key_4"; 64f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private static final String TEST_VALUE_4 = "value_4"; 65b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private final Object mWaitLock = new Object(); 66b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 67b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private final ConnectionCallback mConnectionCallback = new ConnectionCallback(); 68b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private final SubscriptionCallback mSubscriptionCallback = new SubscriptionCallback(); 69b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private final ItemCallback mItemCallback = new ItemCallback(); 7010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon private final SearchCallback mSearchCallback = new SearchCallback(); 71b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 72b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private MediaBrowserCompat mMediaBrowser; 73b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon private MediaBrowserCompat mMediaBrowserForDelayedMediaSession; 74b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private StubMediaBrowserServiceCompat mMediaBrowserService; 75b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private Bundle mRootHints; 76b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 77b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Before 78b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void setUp() throws Exception { 79b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon getInstrumentation().runOnMainSync(new Runnable() { 80b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Override 81b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void run() { 82b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mRootHints = new Bundle(); 83b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mRootHints.putBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_RECENT, true); 84b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mRootHints.putBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_OFFLINE, true); 85b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mRootHints.putBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTED, true); 86b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser = new MediaBrowserCompat(getInstrumentation().getTargetContext(), 87b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon TEST_BROWSER_SERVICE, mConnectionCallback, mRootHints); 88b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 89b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon }); 90b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 91b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser.connect(); 92b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 93b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 94b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertNotNull(mMediaBrowserService); 95f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionExtras = null; 96f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult = null; 97b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 98b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 99b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Test 100b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @SmallTest 101b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testGetSessionToken() { 102b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(StubMediaBrowserServiceCompat.sSession.getSessionToken(), 103b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.getSessionToken()); 104b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 105b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 106b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Test 107b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @SmallTest 108b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testNotifyChildrenChanged() throws Exception { 109b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 110b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 111b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser.subscribe( 112b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon StubMediaBrowserServiceCompat.MEDIA_ID_ROOT, mSubscriptionCallback); 113b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 114b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoaded); 115b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 116b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 117b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.notifyChildrenChanged(StubMediaBrowserServiceCompat.MEDIA_ID_ROOT); 118b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 119b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoaded); 120b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 121b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 122b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 123b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Test 124b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @SmallTest 125b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testNotifyChildrenChangedWithPagination() throws Exception { 126b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 127b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final int pageSize = 5; 128b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final int page = 2; 129b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon Bundle options = new Bundle(); 130b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon options.putInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, pageSize); 131b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon options.putInt(MediaBrowserCompat.EXTRA_PAGE, page); 132b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 133b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 134b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser.subscribe(StubMediaBrowserServiceCompat.MEDIA_ID_ROOT, options, 135b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback); 136b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 137b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoadedWithOptions); 138b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 139b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 140b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.notifyChildrenChanged(StubMediaBrowserServiceCompat.MEDIA_ID_ROOT); 141b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 142b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoadedWithOptions); 143b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 144b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 145b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 146b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Test 14735232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikas @MediumTest 148b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testDelayedNotifyChildrenChanged() throws Exception { 149b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 150b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 151b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser.subscribe(StubMediaBrowserServiceCompat.MEDIA_ID_CHILDREN_DELAYED, 152b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback); 153b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 154b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertFalse(mSubscriptionCallback.mOnChildrenLoaded); 155b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 156b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.sendDelayedNotifyChildrenChanged(); 157b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 158b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoaded); 159b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 160b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mSubscriptionCallback.reset(); 161b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.notifyChildrenChanged( 162b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon StubMediaBrowserServiceCompat.MEDIA_ID_CHILDREN_DELAYED); 163b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 164b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertFalse(mSubscriptionCallback.mOnChildrenLoaded); 165b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 166b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.sendDelayedNotifyChildrenChanged(); 167b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 168b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mSubscriptionCallback.mOnChildrenLoaded); 169b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 170b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 171b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 172f8b5ab79a453d0ba48720d470dbd9cd24b0dcf24Hyundo Moon @Test 17335232c6eaeb9b99f390cb8ef0ac83bf45fa0b3faAurimas Liutikas @MediumTest 174b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testDelayedItem() throws Exception { 175b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 176b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mItemCallback.reset(); 177b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowser.getItem( 178b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon StubMediaBrowserServiceCompat.MEDIA_ID_CHILDREN_DELAYED, mItemCallback); 179b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 180b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertFalse(mItemCallback.mOnItemLoaded); 181b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 182b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mItemCallback.reset(); 183b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService.sendDelayedItemLoaded(); 184b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.wait(TIME_OUT_MS); 185b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertTrue(mItemCallback.mOnItemLoaded); 186b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 187b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 188b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 189b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Test 190b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @SmallTest 19110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void testSearch() throws Exception { 19210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon final String key = "test-key"; 19310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon final String val = "test-val"; 19410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 19510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon synchronized (mWaitLock) { 19610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback.reset(); 19710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mMediaBrowser.search(StubMediaBrowserServiceCompat.SEARCH_QUERY_FOR_NO_RESULT, null, 19810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback); 19910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 20010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertTrue(mSearchCallback.mOnSearchResult); 20110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertTrue(mSearchCallback.mSearchResults != null 20210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon && mSearchCallback.mSearchResults.size() == 0); 20310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertEquals(null, mSearchCallback.mSearchExtras); 20410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 20510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback.reset(); 20610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mMediaBrowser.search(StubMediaBrowserServiceCompat.SEARCH_QUERY_FOR_ERROR, null, 20710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback); 20810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 20910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertTrue(mSearchCallback.mOnSearchResult); 21010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertNull(mSearchCallback.mSearchResults); 21110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertEquals(null, mSearchCallback.mSearchExtras); 21210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 21310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback.reset(); 21410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon Bundle extras = new Bundle(); 21510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon extras.putString(key, val); 21610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mMediaBrowser.search(StubMediaBrowserServiceCompat.SEARCH_QUERY, extras, 21710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchCallback); 21810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 21910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertTrue(mSearchCallback.mOnSearchResult); 22010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertNotNull(mSearchCallback.mSearchResults); 22110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon for (MediaItem item : mSearchCallback.mSearchResults) { 22210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertNotNull(item.getMediaId()); 22310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertTrue(item.getMediaId().contains(StubMediaBrowserServiceCompat.SEARCH_QUERY)); 22410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 22510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertNotNull(mSearchCallback.mSearchExtras); 22610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon assertEquals(val, mSearchCallback.mSearchExtras.getString(key)); 22710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 22810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 22910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 23010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon @Test 23110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon @SmallTest 232f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void testSendCustomAction() throws Exception { 233f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 234f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho CustomActionCallback callback = new CustomActionCallback(); 235f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle extras = new Bundle(); 236f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho extras.putString(TEST_KEY_1, TEST_VALUE_1); 237f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowser.sendCustomAction(StubMediaBrowserServiceCompat.CUSTOM_ACTION, extras, 238f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback); 239f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho new PollingCheck(TIME_OUT_MS) { 240f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 241f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho protected boolean check() { 242f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho return mMediaBrowserService.mCustomActionResult != null; 243f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 244f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho }.run(); 245f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionResult); 246f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionExtras); 247f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, 248f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionExtras.getString(TEST_KEY_1)); 249f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 250f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback.reset(); 251f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle bundle1 = new Bundle(); 252f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho bundle1.putString(TEST_KEY_2, TEST_VALUE_2); 253f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult.sendProgressUpdate(bundle1); 254f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 255f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnProgressUpdateCalled); 256f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mExtras); 257f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, callback.mExtras.getString(TEST_KEY_1)); 258f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mData); 259f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_2, callback.mData.getString(TEST_KEY_2)); 260f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 261f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback.reset(); 262f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle bundle2 = new Bundle(); 263f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho bundle2.putString(TEST_KEY_3, TEST_VALUE_3); 264f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult.sendProgressUpdate(bundle2); 265f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 266f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnProgressUpdateCalled); 267f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mExtras); 268f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, callback.mExtras.getString(TEST_KEY_1)); 269f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mData); 270f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_3, callback.mData.getString(TEST_KEY_3)); 271f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 272f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle bundle3 = new Bundle(); 273f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho bundle3.putString(TEST_KEY_4, TEST_VALUE_4); 274f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback.reset(); 275f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult.sendResult(bundle3); 276f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 277f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnResultCalled); 278f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mExtras); 279f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, callback.mExtras.getString(TEST_KEY_1)); 280f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mData); 281f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_4, callback.mData.getString(TEST_KEY_4)); 282f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 283f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 284f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 285f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Test 286f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @SmallTest 287f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void testSendCustomActionWithDetachedError() throws Exception { 288f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 289f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho CustomActionCallback callback = new CustomActionCallback(); 290f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle extras = new Bundle(); 291f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho extras.putString(TEST_KEY_1, TEST_VALUE_1); 292f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowser.sendCustomAction(StubMediaBrowserServiceCompat.CUSTOM_ACTION, extras, 293f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback); 294f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho new PollingCheck(TIME_OUT_MS) { 295f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 296f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho protected boolean check() { 297f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho return mMediaBrowserService.mCustomActionResult != null; 298f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 299f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho }.run(); 300f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionResult); 301f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionExtras); 302f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, 303f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionExtras.getString(TEST_KEY_1)); 304f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 305f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback.reset(); 306f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle bundle1 = new Bundle(); 307f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho bundle1.putString(TEST_KEY_2, TEST_VALUE_2); 308f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult.sendProgressUpdate(bundle1); 309f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 310f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnProgressUpdateCalled); 311f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mExtras); 312f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, callback.mExtras.getString(TEST_KEY_1)); 313f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mData); 314f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_2, callback.mData.getString(TEST_KEY_2)); 315f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 316f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho callback.reset(); 317f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle bundle2 = new Bundle(); 318f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho bundle2.putString(TEST_KEY_3, TEST_VALUE_3); 319f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowserService.mCustomActionResult.sendError(bundle2); 320f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 321f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnErrorCalled); 322f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mExtras); 323f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, callback.mExtras.getString(TEST_KEY_1)); 324f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(callback.mData); 325f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_3, callback.mData.getString(TEST_KEY_3)); 326f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 327f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 328f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 329f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Test 330f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @SmallTest 331f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void testSendCustomActionWithNullCallback() throws Exception { 332f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle extras = new Bundle(); 333f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho extras.putString(TEST_KEY_1, TEST_VALUE_1); 334f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowser.sendCustomAction(StubMediaBrowserServiceCompat.CUSTOM_ACTION, extras, null); 335f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho new PollingCheck(TIME_OUT_MS) { 336f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 337f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho protected boolean check() { 338f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho return mMediaBrowserService.mCustomActionResult != null; 339f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 340f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho }.run(); 341f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionResult); 342f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionExtras); 343f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertEquals(TEST_VALUE_1, mMediaBrowserService.mCustomActionExtras.getString(TEST_KEY_1)); 344f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 345f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 346f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Test 347f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @SmallTest 348f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void testSendCustomActionWithError() throws Exception { 349f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 350f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho CustomActionCallback callback = new CustomActionCallback(); 351f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mMediaBrowser.sendCustomAction(StubMediaBrowserServiceCompat.CUSTOM_ACTION_FOR_ERROR, 352f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho null, callback); 353f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho new PollingCheck(TIME_OUT_MS) { 354f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 355f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho protected boolean check() { 356f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho return mMediaBrowserService.mCustomActionResult != null; 357f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 358f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho }.run(); 359f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNotNull(mMediaBrowserService.mCustomActionResult); 360f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertNull(mMediaBrowserService.mCustomActionExtras); 361f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 362f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho assertTrue(callback.mOnErrorCalled); 363f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 364f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 365f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 366f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Test 367f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @SmallTest 368b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void testBrowserRoot() { 369b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final String id = "test-id"; 370b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final String key = "test-key"; 371b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final String val = "test-val"; 372b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon final Bundle extras = new Bundle(); 373b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon extras.putString(key, val); 374b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 375b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon MediaBrowserServiceCompat.BrowserRoot browserRoot = 376b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon new MediaBrowserServiceCompat.BrowserRoot(id, extras); 377b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(id, browserRoot.getRootId()); 378b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(val, browserRoot.getExtras().getString(key)); 379b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 380b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 381b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 382b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon @Test 383b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon @SmallTest 384b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon public void testDelayedSetSessionToken() throws Exception { 3856e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon // This test has no meaning in API 21. The framework MediaBrowserService just connects to 3866e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon // the media browser without waiting setMediaSession() to be called. 3876e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon if (Build.VERSION.SDK_INT == 21) { 3886e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon return; 3896e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon } 390b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon final ConnectionCallbackForDelayedMediaSession callback = 391b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon new ConnectionCallbackForDelayedMediaSession(); 392b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 393b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon getInstrumentation().runOnMainSync(new Runnable() { 394b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon @Override 395b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon public void run() { 396b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mMediaBrowserForDelayedMediaSession = 397b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon new MediaBrowserCompat(getInstrumentation().getTargetContext(), 398b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon TEST_BROWSER_SERVICE_DELAYED_MEDIA_SESSION, callback, null); 399b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon } 400b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon }); 401b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 402b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon synchronized (mWaitLock) { 403b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mMediaBrowserForDelayedMediaSession.connect(); 404b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mWaitLock.wait(WAIT_TIME_FOR_NO_RESPONSE_MS); 405b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon assertEquals(0, callback.mConnectedCount); 406b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 407b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon StubMediaBrowserServiceCompatWithDelayedMediaSession.sInstance.callSetSessionToken(); 408b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mWaitLock.wait(TIME_OUT_MS); 409b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon assertEquals(1, callback.mConnectedCount); 4106e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon 4116e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon if (Build.VERSION.SDK_INT >= 21) { 4126e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon assertNotNull( 4136e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon mMediaBrowserForDelayedMediaSession.getSessionToken().getExtraBinder()); 4146e607b82a3b280d28ed6ed71114976e5d6bb6ad8Hyundo Moon } 415b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon } 416b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon } 417b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 41810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon private void assertRootHints(MediaItem item) { 419b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon Bundle rootHints = item.getDescription().getExtras(); 420b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertNotNull(rootHints); 421b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(mRootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_RECENT), 422b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon rootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_RECENT)); 423b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(mRootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_OFFLINE), 424b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon rootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_OFFLINE)); 425b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertEquals(mRootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTED), 426b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon rootHints.getBoolean(MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTED)); 427b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 428b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 429b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private class ConnectionCallback extends MediaBrowserCompat.ConnectionCallback { 430b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Override 431b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void onConnected() { 432b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 433b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mMediaBrowserService = StubMediaBrowserServiceCompat.sInstance; 434b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.notify(); 435b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 436b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 437b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 438b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 439b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private class SubscriptionCallback extends MediaBrowserCompat.SubscriptionCallback { 440b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon boolean mOnChildrenLoaded; 441b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon boolean mOnChildrenLoadedWithOptions; 442b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 443b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Override 44410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void onChildrenLoaded(String parentId, List<MediaItem> children) { 445b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 446b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnChildrenLoaded = true; 447b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon if (children != null) { 44810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon for (MediaItem item : children) { 449b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertRootHints(item); 450b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 451b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 452b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.notify(); 453b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 454b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 455b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 456b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Override 45710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void onChildrenLoaded(String parentId, List<MediaItem> children, Bundle options) { 458b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 459b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnChildrenLoadedWithOptions = true; 460b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon if (children != null) { 46110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon for (MediaItem item : children) { 462b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertRootHints(item); 463b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 464b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 465b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.notify(); 466b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 467b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 468b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 469b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void reset() { 470b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnChildrenLoaded = false; 471b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnChildrenLoadedWithOptions = false; 472b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 473b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 474b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 475b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon private class ItemCallback extends MediaBrowserCompat.ItemCallback { 476b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon boolean mOnItemLoaded; 477b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 478b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon @Override 47910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void onItemLoaded(MediaItem item) { 480b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon synchronized (mWaitLock) { 481b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnItemLoaded = true; 482b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon assertRootHints(item); 483b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mWaitLock.notify(); 484b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 485b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 486b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon 487b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon public void reset() { 488b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon mOnItemLoaded = false; 489b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 490b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon } 49110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 49210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon private class SearchCallback extends MediaBrowserCompat.SearchCallback { 49310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon boolean mOnSearchResult; 49410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon Bundle mSearchExtras; 49510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon List<MediaItem> mSearchResults; 49610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 49710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon @Override 49810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void onSearchResult(String query, Bundle extras, List<MediaItem> items) { 49910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon synchronized (mWaitLock) { 50010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mOnSearchResult = true; 50110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchResults = items; 50210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchExtras = extras; 50310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mWaitLock.notify(); 50410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 50510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 50610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 50710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon @Override 50810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void onError(String query, Bundle extras) { 50910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon synchronized (mWaitLock) { 51010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mOnSearchResult = true; 51110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchResults = null; 51210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchExtras = extras; 51310c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mWaitLock.notify(); 51410c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 51510c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 51610c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon 51710c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon public void reset() { 51810c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mOnSearchResult = false; 51910c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchExtras = null; 52010c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon mSearchResults = null; 52110c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 52210c84c33985e3a44e155fef3a4e796a67ab8e8b5Hyundo Moon } 523f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 524f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho private class CustomActionCallback extends MediaBrowserCompat.CustomActionCallback { 525f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho String mAction; 526f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle mExtras; 527f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho Bundle mData; 528f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho boolean mOnProgressUpdateCalled; 529f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho boolean mOnResultCalled; 530f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho boolean mOnErrorCalled; 531f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 532f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 533f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void onProgressUpdate(String action, Bundle extras, Bundle data) { 534f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 535f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnProgressUpdateCalled = true; 536f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mAction = action; 537f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mExtras = extras; 538f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mData = data; 539f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.notify(); 540f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 541f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 542f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 543f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 544f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void onResult(String action, Bundle extras, Bundle resultData) { 545f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 546f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnResultCalled = true; 547f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mAction = action; 548f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mExtras = extras; 549f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mData = resultData; 550f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.notify(); 551f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 552f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 553f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 554f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho @Override 555f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void onError(String action, Bundle extras, Bundle data) { 556f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho synchronized (mWaitLock) { 557f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnErrorCalled = true; 558f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mAction = action; 559f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mExtras = extras; 560f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mData = data; 561f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mWaitLock.notify(); 562f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 563f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 564f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho 565f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho public void reset() { 566f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnResultCalled = false; 567f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnProgressUpdateCalled = false; 568f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mOnErrorCalled = false; 569f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mAction = null; 570f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mExtras = null; 571f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho mData = null; 572f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 573f4cbb97f8aefa6707cd5f13d3cff14d79ec48e60Donghyun Cho } 574b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 575b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon private class ConnectionCallbackForDelayedMediaSession extends 576b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon MediaBrowserCompat.ConnectionCallback { 577b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon private int mConnectedCount = 0; 578b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 579b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon @Override 580b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon public void onConnected() { 581b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon synchronized (mWaitLock) { 582b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mConnectedCount++; 583b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon mWaitLock.notify(); 584b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon } 585b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon } 586b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon }; 587b3d603228afae9aaedca02554176ffff277cfd3bHyundo Moon 588b159a0873407cbcc836677a8bf052d09bf1a2dc4Hyundo Moon} 589