19730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson/* 29730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * Copyright (C) 2011 The Android Open Source Project 39730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * 49730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * Licensed under the Apache License, Version 2.0 (the "License"); 59730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * you may not use this file except in compliance with the License. 69730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * You may obtain a copy of the License at 79730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * 89730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * http://www.apache.org/licenses/LICENSE-2.0 99730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * 109730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * Unless required by applicable law or agreed to in writing, software 119730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * distributed under the License is distributed on an "AS IS" BASIS, 129730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * See the License for the specific language governing permissions and 149730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * limitations under the License. 159730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson */ 169730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson 179730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonpackage com.android.ex.variablespeed; 189730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson 199730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonimport android.media.MediaPlayer; 209730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson 219730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonimport java.util.concurrent.Callable; 229730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonimport java.util.concurrent.FutureTask; 239730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonimport java.util.concurrent.TimeUnit; 249730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson 259730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson/** 269730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson * Tests that MediaPlayerProxyTestCase contains reasonable tests with a real {@link MediaPlayer}. 279730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson */ 289730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudsonpublic class RealMediaPlayerTest extends MediaPlayerProxyTestCase { 299730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson @Override 309730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson public MediaPlayerProxy createTestMediaPlayer() throws Exception { 319730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson // We have to construct the MediaPlayer on the main thread (or at least on a thread with an 329730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson // associated looper) otherwise we don't get sent the messages when callbacks should be 339730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson // invoked. I've raised a bug for this: http://b/4602011. 349730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson Callable<MediaPlayer> callable = new Callable<MediaPlayer>() { 359730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson @Override 369730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson public MediaPlayer call() throws Exception { 379730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson return new MediaPlayer(); 389730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson } 399730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson }; 409730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson FutureTask<MediaPlayer> future = new FutureTask<MediaPlayer>(callable); 419730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson getInstrumentation().runOnMainSync(future); 429730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson return DynamicProxy.dynamicProxy(MediaPlayerProxy.class, future.get(1, TimeUnit.SECONDS)); 439730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson } 449730f15ebbf4b64cd48e0777850e56cb516a9ed4Hugo Hudson} 45