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;
21441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.res.AssetFileDescriptor;
221a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.AudioEffect;
23441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioFormat;
24441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioManager;
25441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioTrack;
2609f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurentimport android.media.AudioRecord;
271a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.EnvironmentalReverb;
281a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Equalizer;
29441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.MediaPlayer;
3009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurentimport android.media.MediaRecorder;
31441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
32441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.os.Looper;
33441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.LargeTest;
34441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.MediumTest;
35441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.Suppress;
36441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.ActivityInstrumentationTestCase2;
37441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.util.Log;
38441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
39441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteOrder;
40441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteBuffer;
41441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.util.UUID;
42441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
43441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/**
44441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Junit / Instrumentation test case for the media AudioTrack api
45441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
46441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */
47441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentpublic class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
48441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private String TAG = "MediaAudioEffectTest";
49441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
50441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private AudioEffect mEffect = null;
51441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private boolean mHasControl = false;
52441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private boolean mIsEnabled = false;
53441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private int mParameterChanged = -1;
54441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private MediaPlayer mMediaPlayer = null;
55441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private boolean mInitialized = false;
56441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private Looper mLooper = null;
57441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private int mError = 0;
58441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final Object lock = new Object();
5909f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent    private final static int SAMPLING_RATE = 44100;
60441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
61441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public MediaAudioEffectTest() {
62441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
63441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
64441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
65441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
66441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void setUp() throws Exception {
67441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent      super.setUp();
68441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
69441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
70441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
71441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void tearDown() throws Exception {
72441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super.tearDown();
73441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
74441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
75441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private static void assumeTrue(String message, boolean cond) {
76441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("(assume)"+message, cond);
77441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
78441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
79441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void log(String testName, String message) {
80441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.v(TAG, "["+testName+"] "+message);
81441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
82441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
83441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void loge(String testName, String message) {
84441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.e(TAG, "["+testName+"] "+message);
85441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
86441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
87441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
88441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // AUDIOEFFECT TESTS:
89441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
90441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
91441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
92441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 0 - static methods
93441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
94441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
95441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 0.0: test queryEffects() and available effects
96441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
97441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test0_0QueryEffects() throws Exception {
98441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
99441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect.Descriptor[] desc = AudioEffect.queryEffects();
100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("test0_0QueryEffects: number of effects < 4: "+desc.length, (desc.length >= 4));
102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean hasEQ = false;
104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean hasBassBoost = false;
105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean hasVirtualizer = false;
106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean hasEnvReverb = false;
107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        for (int i = 0; i < desc.length; i++) {
1091a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            if (desc[i].type.equals(AudioEffect.EFFECT_TYPE_EQUALIZER)) {
110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                hasEQ = true;
1111a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            } if (desc[i].type.equals(AudioEffect.EFFECT_TYPE_BASS_BOOST)) {
112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                hasBassBoost = true;
1131a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            } else if (desc[i].type.equals(AudioEffect.EFFECT_TYPE_VIRTUALIZER)) {
114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                hasVirtualizer = true;
115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1161a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            else if (desc[i].type.equals(AudioEffect.EFFECT_TYPE_ENV_REVERB)) {
117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                hasEnvReverb = true;
118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("test0_0QueryEffects: equalizer not found", hasEQ);
121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("test0_0QueryEffects: bass boost not found", hasBassBoost);
122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("test0_0QueryEffects: virtualizer not found", hasVirtualizer);
123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("test0_0QueryEffects: environmental reverb not found", hasEnvReverb);
124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
125441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
126441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 1 - constructor
128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
13009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent    private AudioRecord getAudioRecord() {
13109f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent        AudioRecord ar = null;
13209f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent        try {
13309f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            ar = new AudioRecord(MediaRecorder.AudioSource.DEFAULT,
13409f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    SAMPLING_RATE,
13509f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
13609f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    AudioFormat.ENCODING_PCM_16BIT,
13709f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    AudioRecord.getMinBufferSize(SAMPLING_RATE,
13809f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                            AudioFormat.CHANNEL_CONFIGURATION_MONO,
13909f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                            AudioFormat.ENCODING_PCM_16BIT) * 10);
14009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            assertNotNull("Could not create AudioRecord", ar);
14109f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            assertEquals("AudioRecord not initialized",
14209f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    AudioRecord.STATE_INITIALIZED, ar.getState());
14309f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent        } catch (IllegalArgumentException e) {
14409f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            fail("AudioRecord invalid parameter");
14509f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent        }
14609f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent        return ar;
14709f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent    }
14809f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent
149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.0: test constructor from effect type and get effect ID
150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_0ConstructorFromType() throws Exception {
152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = true;
153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_0ConstructorFromType()";
154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect.Descriptor[] desc = AudioEffect.queryEffects();
155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg+": no effects found", (desc.length != 0));
156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
15709f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            int sessionId;
15809f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            AudioRecord ar = null;
15909f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            if (AudioEffect.EFFECT_PRE_PROCESSING.equals(desc[0].connectMode)) {
16009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                ar = getAudioRecord();
16109f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                sessionId = ar.getAudioSessionId();
16209f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            } else {
16309f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                sessionId = 0;
16409f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            }
16509f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent
1661a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            AudioEffect effect = new AudioEffect(desc[0].type,
167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
16909f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    sessionId);
170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg +": invalid effect ID", (effect.getId() != 0));
173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": AudioEffect not initialized");
175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = false;
176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } finally {
177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
17809f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                if (ar != null) {
17909f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    ar.release();
18009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                }
181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1831a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            msg = msg.concat(": Effect not found: "+desc[0].name);
184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.1: test constructor from effect uuid
193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_1ConstructorFromUuid() throws Exception {
195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = true;
196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_1ConstructorFromUuid()";
197441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect.Descriptor[] desc = AudioEffect.queryEffects();
198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg+"no effects found", (desc.length != 0));
199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
20009f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            int sessionId;
20109f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            AudioRecord ar = null;
20209f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            if (AudioEffect.EFFECT_PRE_PROCESSING.equals(desc[0].connectMode)) {
20309f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                ar = getAudioRecord();
20409f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                sessionId = ar.getAudioSessionId();
20509f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            } else {
20609f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                sessionId = 0;
20709f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            }
208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_NULL,
2091a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent                    desc[0].uuid,
210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
21109f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                    sessionId);
212441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
213441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
21409f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            if (ar != null) {
21509f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent                ar.release();
21609f1735fadf985f321abef5fe696d0b80c6b46c7Eric Laurent            }
217441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
2181a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent            msg = msg.concat(": Effect not found: "+desc[0].name);
219441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
220441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
221441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
222441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
223441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
224441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
225441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
226441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
227441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.2: test constructor failure from unknown type
228441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
229441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_2ConstructorUnknownType() throws Exception {
230441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
231441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_2ConstructorUnknownType()";
232441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
233441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
234441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(UUID.randomUUID(),
235441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
236441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
237441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
238441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": could create random AudioEffect");
239441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
240441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
241441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
242441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
243441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
244441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
245441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
246441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
247441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
248441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
249441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
250441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.3: test getEnabled() failure when called on released effect
251441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
252441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_3GetEnabledAfterRelease() throws Exception {
253441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
254441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_3GetEnabledAfterRelease()";
255441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
256441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
257441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
258441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
259441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
260441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
261441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
262441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
263441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
264441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.getEnabled();
265441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
266441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
267441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
268441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
269441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
270441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
271441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
272441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
273441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
274441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
275441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
276441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.4: test contructor on mediaPlayer audio session
277441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
278441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_4InsertOnMediaPlayer() throws Exception {
279441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
280441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_4InsertOnMediaPlayer()";
281441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
282441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
283441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            MediaPlayer mp = new MediaPlayer();
284441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.setDataSource(MediaNames.SHORTMP3);
285441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
286441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
287441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
288441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
289441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mp.getAudioSessionId());
290441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
291441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
292441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                loge(msg, ": effect.setEnabled");
293441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.setEnabled(true);
294441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
295441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": AudioEffect not initialized");
296441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
297441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
298441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
299441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
300441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.release();
301441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
302441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
303441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
304441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
305441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
306441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
307441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
308441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
309441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
310441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
311441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
312441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
313441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.5: test auxiliary effect attachement on MediaPlayer
314441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
315441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_5AuxiliaryOnMediaPlayer() throws Exception {
316441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
317441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_5AuxiliaryOnMediaPlayer()";
318441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
319441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
320441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            MediaPlayer mp = new MediaPlayer();
321441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.setDataSource(MediaNames.SHORTMP3);
322441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
323441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
324441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
325441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
326441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
327441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
328441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.attachAuxEffect(effect.getId());
329441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.setAuxEffectSendLevel(1.0f);
330441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
331441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
332441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mp.release();
333441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
334441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
335441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
336441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
337441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
338441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
339441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
340441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
341441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
342441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
343441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
344441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
345441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.6: test auxiliary effect attachement failure before setDatasource
346441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
347441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_6AuxiliaryOnMediaPlayerFailure() throws Exception {
348441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
349441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_6AuxiliaryOnMediaPlayerFailure()";
350441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
351441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
352441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            createMediaPlayerLooper();
353441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
354441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
355441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
356441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
357441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Looper creation: wait was interrupted.");
358441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
359441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
360441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(mInitialized);  // mMediaPlayer has been initialized?
361441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mError = 0;
362441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
363441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
364441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
365441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
366441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
367441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
368441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
369441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
370441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mMediaPlayer.attachAuxEffect(effect.getId());
371441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
372441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
373441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Attach effect: wait was interrupted.");
374441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
375441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
376441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": no error on attachAuxEffect", mError != 0);
377441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
378441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
379441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            terminateMediaPlayerLooper();
380441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
381441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
382441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
383441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
384441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
385441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
386441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
387441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
388441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
389441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
390441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
391441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
392441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
393441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.7: test auxiliary effect attachement on AudioTrack
394441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
395441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_7AuxiliaryOnAudioTrack() throws Exception {
396441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
397441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_7AuxiliaryOnAudioTrack()";
398441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
399441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
400441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioTrack track = new AudioTrack(
401441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                        AudioManager.STREAM_MUSIC,
402441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                        44100,
403441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                        AudioFormat.CHANNEL_OUT_MONO,
404441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                        AudioFormat.ENCODING_PCM_16BIT,
405441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                        AudioTrack.getMinBufferSize(44100,
406441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                                                    AudioFormat.CHANNEL_OUT_MONO,
407441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                                                    AudioFormat.ENCODING_PCM_16BIT),
408441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                                                    AudioTrack.MODE_STREAM);
409441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioTrack", track);
410441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
411441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
412441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
413441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
414441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
415441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            track.attachAuxEffect(effect.getId());
416441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            track.setAuxEffectSendLevel(1.0f);
417441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
418441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
419441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            track.release();
420441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
421441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
422441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
423441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
424441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
425441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
426441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
427441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
428441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
429441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
430441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
431441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 2 - enable/ disable
432441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
433441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
434441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
435441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 2.0: test setEnabled() and getEnabled() in valid state
436441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
437441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test2_0SetEnabledGetEnabled() throws Exception {
438441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
439441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test2_0SetEnabledGetEnabled()";
440441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
441441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
442441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
443441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
444441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
445441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
446441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
447441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
448441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.setEnabled(true);
449441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg + ": invalid state from getEnabled", effect.getEnabled());
450441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.setEnabled(false);
451441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertFalse(msg + ": invalid state to getEnabled", effect.getEnabled());
452441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
453441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
454441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": setEnabled() in wrong state");
455441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } finally {
456441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
457441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
458441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
459441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
460441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
461441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
462441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
463441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
464441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
465441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
466441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
467441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
468441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 2.1: test setEnabled() throws exception after release
469441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
470441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test2_1SetEnabledAfterRelease() throws Exception {
471441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
472441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test2_1SetEnabledAfterRelease()";
473441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
474441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
475441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
476441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
477441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
478441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
479441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
480441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
481441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
482441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.setEnabled(true);
483441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
484441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
485441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
486441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
487441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
488441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
489441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
490441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
491441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
492441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
493441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
494441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
495441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
496441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
497441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 3 - set parameters
498441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
499441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
500441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.0: test setParameter(byte[], byte[])
501441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
502441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_0SetParameterByteArrayByteArray() throws Exception {
503441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
504441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_0SetParameterByteArrayByteArray()";
505441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
506441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
507441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
508441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
509441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
510441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
511441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
512441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] param = intToByteArray(Equalizer.PARAM_CURRENT_PRESET);
513441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = shortToByteArray((short)0);
514441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(param, value) == AudioEffect.SUCCESS) {
515441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
516441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
517441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
518441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
519441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
520441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
521441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
522441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
523441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
524441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
525441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
526441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
527441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
528441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
529441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
530441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
531441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
532441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
533441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
534441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.1: test setParameter(int, int)
535441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
536441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_1SetParameterIntInt() throws Exception {
537441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
538441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_1SetParameterIntInt()";
539441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
540441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
541441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
542441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
543441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
544441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
545441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
546441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(EnvironmentalReverb.PARAM_DECAY_TIME, 0)
547441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
548441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
549441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
550441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
551441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
552441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
553441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
554441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
555441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
556441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
557441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
558441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
559441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
560441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
561441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
562441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
563441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
564441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
565441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
566441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
567441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.2: test setParameter(int, short)
568441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
569441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_2SetParameterIntShort() throws Exception {
570441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
571441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_2SetParameterIntShort()";
572441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
573441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
574441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
575441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
576441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
577441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
578441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
579441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(Equalizer.PARAM_CURRENT_PRESET, (short)0)
580441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
581441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
582441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
583441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
584441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
585441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
586441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
587441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
588441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
589441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
590441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
591441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
592441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
593441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
594441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
595441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
596441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
597441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
598441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
599441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
600441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.3: test setParameter(int, byte[])
601441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
602441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_3SetParameterIntByteArray() throws Exception {
603441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
604441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_3SetParameterIntByteArray()";
605441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
606441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
607441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
608441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
609441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
610441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
611441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
612441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = shortToByteArray((short)0);
613441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(Equalizer.PARAM_CURRENT_PRESET, value)
614441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
615441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
616441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
617441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
618441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
619441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
620441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
621441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
622441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
623441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
624441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
625441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
626441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
627441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
628441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
629441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
630441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
631441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
632441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
633441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
634441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.4: test setParameter(int[], int[])
635441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
636441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_4SetParameterIntArrayIntArray() throws Exception {
637441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
638441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_4SetParameterIntArrayIntArray()";
639441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
640441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
641441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
642441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
643441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
644441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
645441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
646441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
647441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] value = new int[1];
648441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = EnvironmentalReverb.PARAM_DECAY_TIME;
649441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            value[0] = 0;
650441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(param, value)
651441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
652441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
653441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
654441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
655441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
656441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
657441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
658441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
659441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
660441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
661441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
662441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
663441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
664441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
665441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
666441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
667441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
668441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
669441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
670441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
671441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.5: test setParameter(int[], short[])
672441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
673441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_5SetParameterIntArrayShortArray() throws Exception {
674441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
675441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_5SetParameterIntArrayShortArray()";
676441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
677441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
678441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
679441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
680441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
681441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
682441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
683441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
684441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] value = new short[1];
685441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = Equalizer.PARAM_CURRENT_PRESET;
686441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            value[0] = (short)0;
687441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(param, value)
688441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
689441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
690441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
691441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
692441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
693441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
694441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
695441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
696441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
697441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
698441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
699441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
700441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
701441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
702441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
703441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
704441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
705441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
706441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
707441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
708441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.6: test setParameter(int[], byte[])
709441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
710441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_6SetParameterIntArrayByteArray() throws Exception {
711441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
712441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_6SetParameterIntArrayByteArray()";
713441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
714441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
715441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
716441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
717441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
718441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
719441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
720441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
721441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = shortToByteArray((short)0);
722441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = Equalizer.PARAM_CURRENT_PRESET;
723441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect.setParameter(param, value)
724441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    == AudioEffect.SUCCESS) {
725441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
726441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
727441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
728441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
729441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
730441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
731441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
732441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
733441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
734441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("setParameter() called in wrong state");
735441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() called in wrong state");
736441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
737441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
738441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
739441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
740441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
741441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
742441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
743441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
744441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 3.7: test setParameter() throws exception after release()
745441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
746441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test3_7SetParameterAfterRelease() throws Exception {
747441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
748441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test3_7SetParameterAfterRelease()";
749441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
750441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
751441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
752441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
753441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
754441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
755441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
756441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
757441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.setParameter(Equalizer.PARAM_CURRENT_PRESET, (short)0);
758441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
759441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
760441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
761441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
762441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": setParameter() rejected");
763441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "setParameter() rejected");
764441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
765441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
766441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
767441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
768441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
769441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
770441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
771441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
772441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
773441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
774441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
775441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 4 - get parameters
776441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
777441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
778441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.0: test getParameter(byte[], byte[])
779441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
780441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_0GetParameterByteArrayByteArray() throws Exception {
781441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
782441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_0GetParameterByteArrayByteArray()";
783441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
784441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
785441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
786441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
787441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
788441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
789441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
790441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] param = intToByteArray(Equalizer.PARAM_CURRENT_PRESET);
791441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = new byte[2];
792602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(param, value))) {
793441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
794441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
795441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
796441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
797441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
798441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
799441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
800441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
801441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
802441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
803441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
804441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
805441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
806441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
807441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
808441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
809441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
810441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
811441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
812441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.1: test getParameter(int, int[])
813441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
814441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_1GetParameterIntIntArray() throws Exception {
815441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
816441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_1GetParameterIntIntArray()";
817441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
818441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
819441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
820441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
821441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
822441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
823441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
824441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] value = new int[1];
825602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(
826602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent                    effect.getParameter(EnvironmentalReverb.PARAM_DECAY_TIME, value))) {
827441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
828441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
829441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
830441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
831441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
832441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
833441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
834441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
835441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
836441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
837441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
838441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
839441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
840441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
841441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
842441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
843441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
844441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
845441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
846441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.2: test getParameter(int, short[])
847441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
848441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_2GetParameterIntShortArray() throws Exception {
849441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
850441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_2GetParameterIntShortArray()";
851441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
852441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
853441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
854441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
855441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
856441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
857441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
858441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] value = new short[1];
859602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(Equalizer.PARAM_CURRENT_PRESET, value))) {
860441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
861441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
862441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
863441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
864441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
865441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
866441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
867441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
868441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
869441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
870441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
871441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
872441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
873441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
874441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
875441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
876441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
877441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
878441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
879441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.3: test getParameter(int, byte[])
880441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
881441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_3GetParameterIntByteArray() throws Exception {
882441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
883441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_3GetParameterIntByteArray()";
884441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
885441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
886441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
887441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
888441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
889441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
890441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
891441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = new byte[2];
892602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(Equalizer.PARAM_CURRENT_PRESET, value))) {
893441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
894441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
895441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
896441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
897441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
898441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
899441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
900441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
901441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
902441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
903441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
904441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
905441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
906441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
907441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
908441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
909441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
910441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
911441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
912441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.4: test getParameter(int[], int[])
913441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
914441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_4GetParameterIntArrayIntArray() throws Exception {
915441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
916441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_4GetParameterIntArrayIntArray()";
917441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
918441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
919441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
920441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
921441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
922441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
923441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
924441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
925441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] value = new int[1];
926441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = EnvironmentalReverb.PARAM_DECAY_TIME;
927602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(param, value))) {
928441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
929441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
930441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
931441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
932441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
933441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
934441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
935441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
936441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
937441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
938441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
939441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
940441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
941441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
942441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
943441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
944441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
945441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
946441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
947441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.5: test getParameter(int[], short[])
948441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
949441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_5GetParameterIntArrayShortArray() throws Exception {
950441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
951441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_5GetParameterIntArrayShortArray()";
952441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
953441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
954441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
955441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
956441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
957441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
958441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
959441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
960441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] value = new short[1];
961441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = Equalizer.PARAM_CURRENT_PRESET;
962602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(param, value))) {
963441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
964441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
965441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
966441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
967441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
968441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
969441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
970441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
971441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
972441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
973441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
974441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
975441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
976441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
977441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
978441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
979441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
980441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
981441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
982441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.6: test getParameter(int[], byte[])
983441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
984441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_6GetParameterIntArrayByteArray() throws Exception {
985441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
986441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_6GetParameterIntArrayByteArray()";
987441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
988441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
989441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
990441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
991441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
992441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
993441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
994441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] param = new int[1];
995441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            byte[] value = new byte[2];
996441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            param[0] = Equalizer.PARAM_CURRENT_PRESET;
997602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            if (!AudioEffect.isError(effect.getParameter(param, value))) {
998441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
999441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1000441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1001441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
1002441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
1003441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1004441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
1005441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
1006441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
1007441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("getParameter() called in wrong state");
1008441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() called in wrong state");
1009441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1010441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
1011441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
1012441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1013441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1014441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1015441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1016441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1017441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 4.7: test getParameter() throws exception after release()
1018441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1019441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test4_7GetParameterAfterRelease() throws Exception {
1020441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1021441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test4_7GetParameterAfterRelease()";
1022441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
1023441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1024441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1025441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
1026441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
1027441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
1028441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
1029441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.release();
1030441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] value = new short[1];
1031441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect.getParameter(Equalizer.PARAM_CURRENT_PRESET, value);
1032441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1033441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
1034441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
1035441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1036441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": getParameter() rejected");
1037441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "getParameter() rejected");
1038441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
1039441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1040441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1041441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
1042441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
1043441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1044441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1045441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1046441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1047441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1048441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
1049441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 5 priority and listeners
1050441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
1051441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1052441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 5.0: test control passed to higher priority client
1053441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1054441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test5_0setEnabledLowerPriority() throws Exception {
1055441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1056441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test5_0setEnabledLowerPriority()";
1057441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect1 = null;
1058441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect2 = null;
1059441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1060441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect1 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1061441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
1062441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
1063441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
1064441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect2 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1065441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
1066441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    1,
1067441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
1068441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1069441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect1);
1070441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect2);
1071441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1072441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": Effect2 does not have control", effect2.hasControl());
1073441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertFalse(msg + ": Effect1 has control", effect1.hasControl());
1074441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": Effect1 can enable",
1075441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    effect1.setEnabled(true) == AudioEffect.ERROR_INVALID_OPERATION);
1076441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertFalse(msg + ": Effect1 has enabled", effect2.getEnabled());
1077441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1078441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1079441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect not found");
1080441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
1081441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1082441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1083441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
1084441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1085441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect1 != null) {
1086441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect1.release();
1087441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1088441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect2 != null) {
1089441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect2.release();
1090441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1091441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1092441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1093441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1094441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1095441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 5.1: test control passed to higher priority client
1096441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1097441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test5_1setParameterLowerPriority() throws Exception {
1098441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1099441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test5_1setParameterLowerPriority()";
1100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect1 = null;
1101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect2 = null;
1102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect1 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    AudioEffect.EFFECT_TYPE_NULL,
1105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0,
1106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    0);
1107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect2 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
1109441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    1,
1110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
1111441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect1);
1113441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect2);
1114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int status = effect2.setParameter(Equalizer.PARAM_CURRENT_PRESET, (short)0);
1116441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertEquals(msg + ": Effect2 setParameter failed",
1117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.SUCCESS, status);
1118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            status = effect1.setParameter(Equalizer.PARAM_CURRENT_PRESET, (short)1);
1120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertEquals(msg + ": Effect1 setParameter did not fail",
1121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.ERROR_INVALID_OPERATION, status);
1122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] value = new short[1];
1124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            status = effect2.getParameter(Equalizer.PARAM_CURRENT_PRESET, value);
1125602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent            assertFalse(msg + ": Effect2 getParameter failed",
1126602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent                    AudioEffect.isError(status));
1127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertEquals(msg + ": Effect1 changed parameter",
1128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    (short)0, value[0]);
1129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1130441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1131441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1132441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect not found");
1133441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
1134441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1135441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1136441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = false;
1137441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1138441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect1 != null) {
1139441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect1.release();
1140441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1141441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect2 != null) {
1142441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect2.release();
1143441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1144441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1145441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1146441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1147441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1148441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 5.2: test control status listener
1149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test5_2ControlStatusListener() throws Exception {
1151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test5_2ControlStatusListener()";
1153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        mEffect = null;
1154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect2 = null;
1155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mHasControl = true;
1157441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            createListenerLooper(true, false, false);
1158441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1159441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1160441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1161441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1162441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Looper creation: wait was interrupted.");
1163441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1164441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1165441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(mInitialized);
1166441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    effect2 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1169441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            AudioEffect.EFFECT_TYPE_NULL,
1170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            1,
1171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            0);
1172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    assertNotNull(msg + ": could not create AudioEffect", effect2);
1173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Create second effect: wait was interrupted.");
1176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1178441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertFalse(msg + ": effect control not lost by effect1", mHasControl);
1179441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1180441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
1182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
1183441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
1186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
1187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
1188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            terminateListenerLooper();
1190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect2 != null) {
1191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect2.release();
1192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1197441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 5.3: test enable status listener
1198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test5_3EnableStatusListener() throws Exception {
1200441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1201441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test5_3EnableStatusListener()";
1202441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        mEffect = null;
1203441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect2 = null;
1204441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1205441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            createListenerLooper(false, true, false);
1206441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1207441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1209441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Looper creation: wait was interrupted.");
1211441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1212441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1213441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(mInitialized);
1214441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEffect.setEnabled(true);
1215441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mIsEnabled = true;
1216441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect2 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1217441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
1218441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    1,
1219441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
1220441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect2);
1221441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": effect not enabled", effect2.getEnabled());
1222441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1223441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1224441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    effect2.setEnabled(false);
1225441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1226441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1227441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Create second effect: wait was interrupted.");
1228441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1229441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1230441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertFalse(msg + ": enable status not updated", mIsEnabled);
1231441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1232441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1233441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
1234441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
1235441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1236441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1237441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
1238441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
1239441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
1240441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1241441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            terminateListenerLooper();
1242441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect2 != null) {
1243441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect2.release();
1244441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1245441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1246441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1247441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1248441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1249441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 5.4: test parameter changed listener
1250441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1251441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test5_4ParameterChangedListener() throws Exception {
1252441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1253441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test5_4ParameterChangedListener()";
1254441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        mEffect = null;
1255441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect2 = null;
1256441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1257441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            createListenerLooper(false, false, true);
1258441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1259441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1260441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1261441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1262441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Looper creation: wait was interrupted.");
1263441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1264441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1265441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(mInitialized);
1266441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            effect2 = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1267441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
1268441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    1,
1269441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
1270441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect2);
1271441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            synchronized(lock) {
1272441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                try {
1273441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mParameterChanged = -1;
1274441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    effect2.setParameter(Equalizer.PARAM_CURRENT_PRESET, (short)0);
1275441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.wait(1000);
1276441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                } catch(Exception e) {
1277441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Log.e(TAG, "Create second effect: wait was interrupted.");
1278441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1279441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1280441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertEquals(msg + ": parameter change not received",
1281441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    Equalizer.PARAM_CURRENT_PRESET, mParameterChanged);
1282441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
1283441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1284441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
1285441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
1286441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1287441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1288441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
1289441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
1290441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
1291441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1292441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            terminateListenerLooper();
1293441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect2 != null) {
1294441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect2.release();
1295441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1296441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1297441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1298441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1299441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1300441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
1301441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 6 command method
1302441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
1303441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1304441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1305441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 6.0: test command method
1306441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
1307441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test6_0Command() throws Exception {
1308441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
1309441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test6_0Command()";
1310441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        AudioEffect effect = null;
1311441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
1312441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             effect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1313441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    AudioEffect.EFFECT_TYPE_NULL,
1314441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0,
1315441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    0);
1316441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create AudioEffect", effect);
1317441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
1318441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                byte[] cmd = new byte[0];
1319441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                byte[] reply = new byte[4];
1320441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                int status = effect.command(3, cmd, reply);
1321602b3286ffe7da6e70bf2d9e4861a5d74ff7c473Eric Laurent                assertFalse(msg + ": command failed", AudioEffect.isError(status));
1322441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg + ": effect not enabled", effect.getEnabled());
1323441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                result = true;
1324441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
1325441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": command in illegal state");
1326441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1327441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
1328441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
1329441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Equalizer not found");
1330441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
1331441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
1332441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, ": Effect library not loaded");
1333441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (Exception e){
1334441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Could not create media player:" + e);
1335441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
1336441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (effect != null) {
1337441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                effect.release();
1338441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1339441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1340441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
1341441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1342441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1343441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
1344441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // private methods
1345441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
1346441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1347441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    /*
1348441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     * Initializes the message looper so that the MediaPlayer object can
1349441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     * receive the callback messages.
1350441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     */
1351441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void createMediaPlayerLooper() {
1352441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        new Thread() {
1353441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            @Override
1354441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            public void run() {
1355441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // Set up a looper to be used by mMediaPlayer.
1356441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Looper.prepare();
1357441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1358441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // Save the looper so that we can terminate this thread
1359441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // after we are done with it.
1360441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mLooper = Looper.myLooper();
1361441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1362441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mMediaPlayer = new MediaPlayer();
1363441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
1364441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    public boolean onError(MediaPlayer player, int what, int extra) {
1365441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        synchronized(lock) {
1366441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            mError = what;
1367441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            lock.notify();
1368441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        }
1369441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        return true;
1370441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    }
1371441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                });
1372441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
1373441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    public void onCompletion(MediaPlayer player) {
1374441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        synchronized(lock) {
1375441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            lock.notify();
1376441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        }
1377441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    }
1378441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                });
1379441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                synchronized(lock) {
1380441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mInitialized = true;
1381441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.notify();
1382441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1383441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Looper.loop();  // Blocks forever until Looper.quit() is called.
1384441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1385441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }.start();
1386441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1387441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    /*
1388441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     * Terminates the message looper thread.
1389441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     */
1390441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void terminateMediaPlayerLooper() {
1391441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mLooper != null) {
1392441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mLooper.quit();
1393441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mLooper = null;
1394441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1395441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mMediaPlayer != null) {
1396441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mMediaPlayer.release();
1397441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1398441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1399441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1400441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    /*
1401441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     * Initializes the message looper fro effect listener
1402441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     */
1403441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    class ListenerThread extends Thread {
1404441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean mControl;
1405441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean mEnable;
1406441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean mParameter;
1407441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1408441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        public ListenerThread(boolean control, boolean enable, boolean parameter) {
1409441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            super();
1410441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mControl = control;
1411441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEnable = enable;
1412441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mParameter = parameter;
1413441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1414441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1415441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void createListenerLooper(boolean control, boolean enable, boolean parameter) {
1416441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1417441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        new ListenerThread(control, enable, parameter) {
1418441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            @Override
1419441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            public void run() {
1420441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // Set up a looper to be used by mEffect.
1421441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Looper.prepare();
1422441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1423441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // Save the looper so that we can terminate this thread
1424441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // after we are done with it.
1425441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mLooper = Looper.myLooper();
1426441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1427441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mEffect = new AudioEffect(AudioEffect.EFFECT_TYPE_EQUALIZER,
1428441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        AudioEffect.EFFECT_TYPE_NULL,
1429441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        0,
1430441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        0);
1431441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertNotNull("could not create AudioEffect", mEffect);
1432441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1433441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                if (mControl) {
1434441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mEffect.setControlStatusListener(new AudioEffect.OnControlStatusChangeListener() {
1435441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        public void onControlStatusChange(AudioEffect effect, boolean controlGranted) {
1436441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            synchronized(lock) {
1437441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                if (effect == mEffect) {
1438441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    mHasControl = controlGranted;
1439441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    lock.notify();
1440441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                }
1441441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            }
1442441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        }
1443441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    });
1444441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1445441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                if (mEnable) {
1446441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mEffect.setEnableStatusListener(new AudioEffect.OnEnableStatusChangeListener() {
1447441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        public void onEnableStatusChange(AudioEffect effect, boolean enabled) {
1448441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            synchronized(lock) {
1449441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                if (effect == mEffect) {
1450441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    mIsEnabled = enabled;
1451441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    lock.notify();
1452441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                }
1453441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            }
1454441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        }
1455441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    });
1456441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1457441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                if (mParameter) {
1458441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mEffect.setParameterListener(new AudioEffect.OnParameterChangeListener() {
1459441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        public void onParameterChange(AudioEffect effect, int status, byte[] param,
1460441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                byte[] value) {
1461441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            synchronized(lock) {
1462441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                if (effect == mEffect) {
1463441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    mParameterChanged = byteArrayToInt(param);
1464441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                    lock.notify();
1465441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                                }
1466441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                            }
1467441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        }
1468441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    });
1469441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1470441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1471441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                synchronized(lock) {
1472441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    mInitialized = true;
1473441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    lock.notify();
1474441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                }
1475441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Looper.loop();  // Blocks forever until Looper.quit() is called.
1476441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
1477441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }.start();
1478441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1479441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    /*
1480441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     * Terminates the listener looper thread.
1481441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent     */
1482441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void terminateListenerLooper() {
1483441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mEffect != null) {
1484441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEffect.release();
1485441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEffect = null;
1486441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1487441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mLooper != null) {
1488441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mLooper.quit();
1489441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mLooper = null;
1490441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
1491441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1492441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1493441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected int byteArrayToInt(byte[] valueBuf) {
1494441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return byteArrayToInt(valueBuf, 0);
1495441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1496441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1497441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1498441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected int byteArrayToInt(byte[] valueBuf, int offset) {
1499441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        ByteBuffer converter = ByteBuffer.wrap(valueBuf);
1500441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.order(ByteOrder.nativeOrder());
1501441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return converter.getInt(offset);
1502441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1503441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1504441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1505441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected byte[] intToByteArray(int value) {
1506441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        ByteBuffer converter = ByteBuffer.allocate(4);
1507441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.order(ByteOrder.nativeOrder());
1508441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.putInt(value);
1509441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return converter.array();
1510441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1511441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1512441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected short byteArrayToShort(byte[] valueBuf) {
1513441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return byteArrayToShort(valueBuf, 0);
1514441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1515441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1516441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected short byteArrayToShort(byte[] valueBuf, int offset) {
1517441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        ByteBuffer converter = ByteBuffer.wrap(valueBuf);
1518441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.order(ByteOrder.nativeOrder());
1519441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return converter.getShort(offset);
1520441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1521441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1522441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1523441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected byte[] shortToByteArray(short value) {
1524441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        ByteBuffer converter = ByteBuffer.allocate(2);
1525441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.order(ByteOrder.nativeOrder());
1526441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        short sValue = (short) value;
1527441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        converter.putShort(sValue);
1528441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        return converter.array();
1529441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
1530441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
1531441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent}
1532