12e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen/* 22e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Copyright (C) 2009 The Android Open Source Project 32e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 42e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 52e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * you may not use this file except in compliance with the License. 62e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * You may obtain a copy of the License at 72e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 82e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 92e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Unless required by applicable law or agreed to in writing, software 112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * See the License for the specific language governing permissions and 142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * limitations under the License. 152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen */ 162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpackage com.android.effectstest; 182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.app.Activity; 202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.content.Context; 212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.content.Intent; 222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.os.Bundle; 232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.util.Log; 242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.KeyEvent; 252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.Menu; 262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.View.OnClickListener; 272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.View; 282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.ViewGroup; 292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.Button; 302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.TextView; 312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.ListView; 322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.BaseAdapter; 332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.LinearLayout; 342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.AudioEffect; 3580cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen 362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.util.UUID; 372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpublic class EffectsTest extends Activity { 392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private final static String TAG = "EffectsTest"; 412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EffectsTest() { 442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "contructor"); 452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCreate(Bundle icicle) { 492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onCreate(icicle); 502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen setContentView(R.layout.effectstest); 512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Button button = (Button) findViewById(R.id.env_reverb_actvity); 532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, EnvReverbTest.class)); 562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button = (Button) findViewById(R.id.preset_reverb_actvity); 602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, PresetReverbTest.class)); 632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button = (Button) findViewById(R.id.equalizer_actvity); 672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, EqualizerTest.class)); 702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button = (Button) findViewById(R.id.virtualizer_actvity); 742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, VirtualizerTest.class)); 772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button = (Button) findViewById(R.id.bassboost_actvity); 812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, BassBoostTest.class)); 842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button = (Button) findViewById(R.id.visualizer_actvity); 882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen button.setOnClickListener(new OnClickListener() { 892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onClick(View v) { 902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen startActivity(new Intent(EffectsTest.this, VisualizerTest.class)); 912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }); 932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioEffect.Descriptor[] descriptors = AudioEffect.queryEffects(); 952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ListView list = (ListView) findViewById(R.id.effect_list); 972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen list.setAdapter(new EffectListAdapter(this, descriptors)); 982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class EffectListAdapter extends BaseAdapter { 1022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private Context mContext; 1042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioEffect.Descriptor[] mDescriptors; 1062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EffectListAdapter(Context context, AudioEffect.Descriptor[] descriptors) { 1082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "EffectListAdapter contructor"); 1092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mContext = context; 1102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mDescriptors = descriptors; 1112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0; i < mDescriptors.length; i++) { 1122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "Effect: "+i+" name: "+ mDescriptors[i].name); 1132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public int getCount() { 1172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "EffectListAdapter getCount(): "+mDescriptors.length); 1182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return mDescriptors.length; 1192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Object getItem(int position) { 1222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "EffectListAdapter getItem() at: "+position+" name: " 1232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen +mDescriptors[position].name); 1242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return mDescriptors[position]; 1252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public long getItemId(int position) { 1282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return position; 1292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public View getView(int position, View convertView, ViewGroup parent) { 1322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen EffectView ev; 1332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (convertView == null) { 1342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "getView() new EffectView position: " + position); 1352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ev = new EffectView(mContext, mDescriptors); 1362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 1372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "getView() convertView position: " + position); 1382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ev = new EffectView(mContext, mDescriptors); 1392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen //ev = (EffectView) convertView; 1402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ev.set(position); 1422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return ev; 1432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class EffectView extends LinearLayout { 1472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private Context mContext; 1482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioEffect.Descriptor[] mDescriptors; 1492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EffectView(Context context, AudioEffect.Descriptor[] descriptors) { 1512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super(context); 1522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mContext = context; 1542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mDescriptors = descriptors; 1552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen this.setOrientation(VERTICAL); 1562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 15880cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen public String effectUuidToString(UUID effectType) { 15980cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen if (effectType.equals(AudioEffect.EFFECT_TYPE_VIRTUALIZER)) { 16080cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Virtualizer"; 16180cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_ENV_REVERB)){ 16280cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Reverb"; 16380cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_PRESET_REVERB)){ 16480cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Preset Reverb"; 16580cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_EQUALIZER)){ 16680cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Equalizer"; 16780cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_BASS_BOOST)){ 16880cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Bass Boost"; 16980cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AGC)){ 17080cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Automatic Gain Control"; 17180cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AEC)){ 17280cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Acoustic Echo Canceler"; 17380cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } else if (effectType.equals(AudioEffect.EFFECT_TYPE_NS)){ 17480cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return "Noise Suppressor"; 17580cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } 17680cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen 17780cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen return effectType.toString(); 17880cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen } 17980cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen 1802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void set(int position) { 1812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen TextView tv = new TextView(mContext); 1822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv.setText("Effect "+ position); 1832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 1842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 1852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv = new TextView(mContext); 18680cd3fcd5cdae6a2ea4a7c834d1df0dd79eb5b89Marco Nelissen tv.setText(" type: "+ effectUuidToString(mDescriptors[position].type)); 1872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 1882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 1892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv = new TextView(mContext); 1902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv.setText(" uuid: "+ mDescriptors[position].uuid.toString()); 1912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 1922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 1932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv = new TextView(mContext); 1942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv.setText(" name: "+ mDescriptors[position].name); 1952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 1962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 1972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv = new TextView(mContext); 1982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv.setText(" vendor: "+ mDescriptors[position].implementor); 1992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 2002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 2012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv = new TextView(mContext); 2022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen tv.setText(" mode: "+ mDescriptors[position].connectMode); 2032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen addView(tv, new LinearLayout.LayoutParams( 2042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 2052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen} 209