1441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/* 2441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Copyright (C) 2010 The Android Open Source Project 3441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 4441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * you may not use this file except in compliance with the License. 6441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * You may obtain a copy of the License at 7441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 8441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * 10441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Unless required by applicable law or agreed to in writing, software 11441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * See the License for the specific language governing permissions and 14441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * limitations under the License. 15441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */ 16441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 17db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangpackage com.android.mediaframeworktest.functional.audio; 18441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 19441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaFrameworkTest; 20441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaNames; 21db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangimport com.android.mediaframeworktest.functional.EnergyProbe; 22441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.Context; 23441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.res.AssetFileDescriptor; 241a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.AudioEffect; 25441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioManager; 261a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Virtualizer; 271a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Visualizer; 28441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.MediaPlayer; 29441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 30441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.os.Looper; 31441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.LargeTest; 32441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.MediumTest; 33441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.Suppress; 34441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.ActivityInstrumentationTestCase2; 35441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.util.Log; 36441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 37441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteOrder; 38441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteBuffer; 39441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.util.UUID; 40441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 41441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/** 42441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Junit / Instrumentation test case for the media AudioTrack api 43441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 44441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */ 45441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentpublic class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 46441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private String TAG = "MediaVirtualizerTest"; 47441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private final static short TEST_STRENGTH = 500; 48441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 49441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private Virtualizer mVirtualizer = null; 50441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private int mSession = -1; 51441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 52441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public MediaVirtualizerTest() { 53441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super("com.android.mediaframeworktest", MediaFrameworkTest.class); 54441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 55441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 56441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @Override 57441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent protected void setUp() throws Exception { 58441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super.setUp(); 59441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 60441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 61441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @Override 62441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent protected void tearDown() throws Exception { 63441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent super.tearDown(); 64441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 65441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 66441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 67441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private static void assumeTrue(String message, boolean cond) { 68441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue("(assume)"+message, cond); 69441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 70441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 71441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void log(String testName, String message) { 72441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.v(TAG, "["+testName+"] "+message); 73441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 74441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 75441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void loge(String testName, String message) { 76441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "["+testName+"] "+message); 77441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 78441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 79441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 80441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // VIRTUALIZER TESTS: 81441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 82441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 83441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 84441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 85441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // 0 - constructor 86441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 87441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 88441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 0.0: test constructor and release 89441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 90441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test0_0ConstructorAndRelease() throws Exception { 91441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 92441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_0ConstructorAndRelease()"; 93441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Virtualizer virtualizer = null; 94441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 95441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent virtualizer = new Virtualizer(0, 0); 96441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertNotNull(msg + ": could not create Virtualizer", virtualizer); 97441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 98441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": invalid effect ID", (virtualizer.getId() != 0)); 99441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Virtualizer not initialized"); 101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Virtualizer not found"); 105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Effect library not loaded"); 107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (virtualizer != null) { 109441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent virtualizer.release(); 110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 111441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 113441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 116441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // 1 - get/set parameters 118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 1.0: test strength 121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test1_0Strength() throws Exception { 123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_0Strength()"; 125441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent getVirtualizer(0); 126441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer.getStrengthSupported()) { 128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setStrength((short)TEST_STRENGTH); 129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent short strength = mVirtualizer.getRoundedStrength(); 130441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // allow 10% difference between set strength and rounded strength 131441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": got incorrect strength", 132441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent ((float)strength > (float)TEST_STRENGTH * 0.9f) && 133441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent ((float)strength < (float)TEST_STRENGTH * 1.1f)); 134441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } else { 135441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent short strength = mVirtualizer.getRoundedStrength(); 136441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg +": got incorrect strength", strength >= 0 && strength <= 1000); 137441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 138441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 139441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 140441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Bad parameter value"); 141441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "Bad parameter value"); 142441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 143441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": get parameter() rejected"); 144441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() rejected"); 145441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 146441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 147441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() called in wrong state"); 148441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //Test case 1.1: test properties 155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent @LargeTest 156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent public void test1_1Properties() throws Exception { 157441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent boolean result = false; 158441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String msg = "test1_1Properties()"; 159441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent getVirtualizer(0); 160441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 161441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Virtualizer.Settings settings = mVirtualizer.getProperties(); 162441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent String str = settings.toString(); 163441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent settings = new Virtualizer.Settings(str); 164441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.setProperties(settings); 165441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent result = true; 166441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": Bad parameter value"); 168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "Bad parameter value"); 169441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat(": get parameter() rejected"); 171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() rejected"); 172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalStateException e) { 173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent msg = msg.concat("get parameter() called in wrong state"); 174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent loge(msg, "get parameter() called in wrong state"); 175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } finally { 176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent releaseVirtualizer(); 177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 178441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertTrue(msg, result); 179441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 180441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //----------------------------------------------------------------- 182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent // private methods 183441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent //---------------------------------- 184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void getVirtualizer(int session) { 186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer == null || session != mSession) { 187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (session != mSession && mVirtualizer != null) { 188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.release(); 189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = null; 190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent try { 192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = new Virtualizer(0, session); 193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mSession = session; 194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (IllegalArgumentException e) { 195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "getVirtualizer() Virtualizer not found exception: "+e); 196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } catch (UnsupportedOperationException e) { 197441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent Log.e(TAG, "getVirtualizer() Effect library not loaded exception: "+e); 198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 200441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent assertNotNull("could not create mVirtualizer", mVirtualizer); 201441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 202441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 203441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent private void releaseVirtualizer() { 204441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent if (mVirtualizer != null) { 205441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer.release(); 206441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent mVirtualizer = null; 207441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent } 209441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent 210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent} 211