1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.effectstest;
18
19import android.app.Activity;
20import android.content.Context;
21import android.content.Intent;
22import android.os.Bundle;
23import android.util.Log;
24import android.view.KeyEvent;
25import android.view.Menu;
26import android.view.View.OnClickListener;
27import android.view.View;
28import android.view.ViewGroup;
29import android.widget.Button;
30import android.widget.TextView;
31import android.widget.ListView;
32import android.widget.BaseAdapter;
33import android.widget.LinearLayout;
34import android.media.audiofx.AudioEffect;
35
36import java.util.UUID;
37
38public class EffectsTest extends Activity {
39
40    private final static String TAG = "EffectsTest";
41
42
43    public EffectsTest() {
44        Log.d(TAG, "contructor");
45    }
46
47    @Override
48    public void onCreate(Bundle icicle) {
49        super.onCreate(icicle);
50        setContentView(R.layout.effectstest);
51
52        Button button = (Button) findViewById(R.id.env_reverb_actvity);
53        button.setOnClickListener(new OnClickListener() {
54            public void onClick(View v) {
55                startActivity(new Intent(EffectsTest.this, EnvReverbTest.class));
56            }
57        });
58
59        button = (Button) findViewById(R.id.preset_reverb_actvity);
60        button.setOnClickListener(new OnClickListener() {
61            public void onClick(View v) {
62                startActivity(new Intent(EffectsTest.this, PresetReverbTest.class));
63            }
64        });
65
66        button = (Button) findViewById(R.id.equalizer_actvity);
67        button.setOnClickListener(new OnClickListener() {
68            public void onClick(View v) {
69                startActivity(new Intent(EffectsTest.this, EqualizerTest.class));
70            }
71        });
72
73        button = (Button) findViewById(R.id.virtualizer_actvity);
74        button.setOnClickListener(new OnClickListener() {
75            public void onClick(View v) {
76                startActivity(new Intent(EffectsTest.this, VirtualizerTest.class));
77            }
78        });
79
80        button = (Button) findViewById(R.id.bassboost_actvity);
81        button.setOnClickListener(new OnClickListener() {
82            public void onClick(View v) {
83                startActivity(new Intent(EffectsTest.this, BassBoostTest.class));
84            }
85        });
86
87        button = (Button) findViewById(R.id.visualizer_actvity);
88        button.setOnClickListener(new OnClickListener() {
89            public void onClick(View v) {
90                startActivity(new Intent(EffectsTest.this, VisualizerTest.class));
91            }
92        });
93
94        AudioEffect.Descriptor[] descriptors = AudioEffect.queryEffects();
95
96        ListView list = (ListView) findViewById(R.id.effect_list);
97        list.setAdapter(new EffectListAdapter(this, descriptors));
98
99    }
100
101    private class EffectListAdapter extends BaseAdapter {
102
103        private Context mContext;
104
105        AudioEffect.Descriptor[] mDescriptors;
106
107        public EffectListAdapter(Context context, AudioEffect.Descriptor[] descriptors) {
108            Log.d(TAG, "EffectListAdapter contructor");
109            mContext = context;
110            mDescriptors = descriptors;
111            for (int i = 0; i < mDescriptors.length; i++) {
112                Log.d(TAG, "Effect: "+i+" name: "+ mDescriptors[i].name);
113            }
114        }
115
116         public int getCount() {
117            Log.d(TAG, "EffectListAdapter getCount(): "+mDescriptors.length);
118            return mDescriptors.length;
119        }
120
121        public Object getItem(int position) {
122            Log.d(TAG, "EffectListAdapter getItem() at: "+position+" name: "
123                    +mDescriptors[position].name);
124            return mDescriptors[position];
125        }
126
127        public long getItemId(int position) {
128            return position;
129        }
130
131        public View getView(int position, View convertView, ViewGroup parent) {
132            EffectView ev;
133            if (convertView == null) {
134                Log.d(TAG, "getView() new EffectView position: " + position);
135                ev = new EffectView(mContext, mDescriptors);
136            } else {
137                Log.d(TAG, "getView() convertView position: " + position);
138                ev = new EffectView(mContext, mDescriptors);
139                //ev = (EffectView) convertView;
140            }
141            ev.set(position);
142            return ev;
143        }
144    }
145
146    private class EffectView extends LinearLayout {
147        private Context mContext;
148        AudioEffect.Descriptor[] mDescriptors;
149
150        public EffectView(Context context, AudioEffect.Descriptor[] descriptors) {
151            super(context);
152
153            mContext = context;
154            mDescriptors = descriptors;
155            this.setOrientation(VERTICAL);
156        }
157
158        public String effectUuidToString(UUID effectType) {
159            if (effectType.equals(AudioEffect.EFFECT_TYPE_VIRTUALIZER)) {
160                return "Virtualizer";
161            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_ENV_REVERB)){
162                return "Reverb";
163            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_PRESET_REVERB)){
164                return "Preset Reverb";
165            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_EQUALIZER)){
166                return "Equalizer";
167            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_BASS_BOOST)){
168                return "Bass Boost";
169            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AGC)){
170                return "Automatic Gain Control";
171            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AEC)){
172                return "Acoustic Echo Canceler";
173            } else if (effectType.equals(AudioEffect.EFFECT_TYPE_NS)){
174                return "Noise Suppressor";
175            }
176
177            return effectType.toString();
178        }
179
180        public void set(int position) {
181            TextView tv = new TextView(mContext);
182            tv.setText("Effect "+ position);
183            addView(tv, new LinearLayout.LayoutParams(
184                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
185            tv = new TextView(mContext);
186            tv.setText(" type: "+ effectUuidToString(mDescriptors[position].type));
187            addView(tv, new LinearLayout.LayoutParams(
188                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
189            tv = new TextView(mContext);
190            tv.setText(" uuid: "+ mDescriptors[position].uuid.toString());
191            addView(tv, new LinearLayout.LayoutParams(
192                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
193            tv = new TextView(mContext);
194            tv.setText(" name: "+ mDescriptors[position].name);
195            addView(tv, new LinearLayout.LayoutParams(
196                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
197            tv = new TextView(mContext);
198            tv.setText(" vendor: "+ mDescriptors[position].implementor);
199            addView(tv, new LinearLayout.LayoutParams(
200                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
201            tv = new TextView(mContext);
202            tv.setText(" mode: "+ mDescriptors[position].connectMode);
203            addView(tv, new LinearLayout.LayoutParams(
204                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
205        }
206    }
207
208}
209