package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.res.TypedArray; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.iwedia.comm.IInputOutputControl; import com.iwedia.comm.system.ISoundSettings; import com.iwedia.dtv.sound.AudioEqualizerBand; import com.iwedia.dtv.sound.SoundMode; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVProgressBar; import com.iwedia.gui.components.A4TVSpinner; import com.iwedia.gui.components.A4TVSpinner.OnSelectA4TVSpinnerListener; import com.iwedia.gui.config_handler.ConfigHandler; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import java.util.ArrayList; /** * Sound settings dialog * * @author Marko Krnjetin */ public class SoundPostProcessingDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener, OnSeekBarChangeListener { private static final String TAG = "SoundSettingsDialog"; private static final int EQ_BANDS_NO = 5; private static final int EQ_NEUTRAL_POWER = 10; /** IDs for spinner */ public static final int TV_MENU_SOUND_PP_SOUND_MODE = 39799; /** IDs for progress */ public static final int TV_MENU_SOUND_PP_TREBLE = 39798, TV_MENU_SOUND_PP_BASS = 39797, TV_MENU_SOUND_PP_EQ_BANDS_START = 39800; public static final int eqBandNames[] = { R.string.tv_menu_sound_settings_eq_band_1, R.string.tv_menu_sound_settings_eq_band_2, R.string.tv_menu_sound_settings_eq_band_3, R.string.tv_menu_sound_settings_eq_band_4, R.string.tv_menu_sound_settings_eq_band_5 }; // fields for creating dialogs private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(), contentListIDs = new ArrayList<ArrayList<Integer>>(); private ArrayList<Integer> titleIDs = new ArrayList<Integer>(); /** Spinners **/ private A4TVSpinner spinnerSoundMode; /** Progress bars */ private A4TVProgressBar progressTreble, progressBass; private A4TVProgressBar eqBandProgress[] = null; private ISoundSettings soundSettings; private IInputOutputControl ioControl = null; public SoundPostProcessingDialog(Context context) { super(context, checkTheme(context), 0); // fill lists returnArrayListsWithDialogContents(contentList, contentListIDs, titleIDs); // set content to dialog fillDialog(); // set attributes setDialogAttributes(); init(); } @Override public void fillDialog() { View view = DialogManager.dialogCreator.fillDialogWithContents( contentList, contentListIDs, titleIDs, this, this, null);// , // pictureBackgroundID); setContentView(view); } @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } /** * Function that load theme * * @param ctx * @return */ private static int checkTheme(Context ctx) { TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.A4TVDialog }); int i = atts.getResourceId(0, 0); atts.recycle(); return i; } /** Init views */ private void init() { /** Switch buttons */ if (ConfigHandler.COMPLEX_AUDIO) { /** Spinners */ spinnerSoundMode = (A4TVSpinner) findViewById(TV_MENU_SOUND_PP_SOUND_MODE); spinnerSoundMode .setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() { @Override public void onSelect(A4TVSpinner spinner, int index, String[] contents) { try { soundSettings.setActiveSoundMode(SoundMode .values()[index]); show(); } catch (Exception e) { e.printStackTrace(); } } }); /** Progress bar */ progressTreble = (A4TVProgressBar) findViewById(TV_MENU_SOUND_PP_TREBLE); progressBass = (A4TVProgressBar) findViewById(TV_MENU_SOUND_PP_BASS); try { int eqBandsNo = soundSettings.getNumberOfEqualizerBands(); if (eqBandsNo == EQ_BANDS_NO) { eqBandProgress = new A4TVProgressBar[EQ_BANDS_NO]; for (int i = 0; i < eqBandsNo; i++) { eqBandProgress[i] = (A4TVProgressBar) findViewById(TV_MENU_SOUND_PP_EQ_BANDS_START + i); eqBandProgress[i].setMax(EQ_NEUTRAL_POWER * 2); } } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void show() { Log.d("SoundPP", "Entering show()"); fillViews(); super.show(); } private void fillViews() { soundSettings = null; Log.d("SoundPP", "Entering fillViews()"); try { soundSettings = MainActivity.service.getSystemControl() .getSoundControl(); ioControl = MainActivity.service.getInputOutputControl(); } catch (Exception e) { e.printStackTrace(); } if (soundSettings != null) { if (ConfigHandler.COMPLEX_AUDIO) { /******************************** SOUND MODE *****************************/ int soundMode = 0; try { soundMode = soundSettings.getActiveSoundMode().getValue(); } catch (Exception e) { e.printStackTrace(); } Log.d("SoundPP", "Got sound mode:" + soundMode); spinnerSoundMode.setSelection(soundMode); setSoundControleVisibility(soundMode); /******************************** TREBLE *****************************/ int treble = 50; try { Log.d("SoundPP", "Updating treble fillViews()"); treble = soundSettings.getTreble(); } catch (Exception e) { e.printStackTrace(); } progressTreble.setProgress(treble); Log.d("SoundPP", "Updatated treble fillViews()"); /******************************** BASS *****************************/ int bass = 50; try { bass = soundSettings.getBass(); } catch (Exception e) { e.printStackTrace(); } progressBass.setProgress(bass); /******************************** EQ *****************************/ try { if (eqBandProgress != null) { int eqBandsNo = soundSettings .getNumberOfEqualizerBands(); for (int i = 0; i < eqBandsNo; i++) { int value = soundSettings .getEqualizerBandValue(AudioEqualizerBand .getFromValue(i)); Log.d("SoundPP", "Setting EQ progress: " + i + " progress:" + (value + EQ_NEUTRAL_POWER)); eqBandProgress[i].setProgress(value + EQ_NEUTRAL_POWER); } } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { ((A4TVProgressBar) seekBar).setText(String.valueOf(seekBar .getProgress())); switch (seekBar.getId()) { case TV_MENU_SOUND_PP_TREBLE: { try { soundSettings.setTreble(progress); } catch (Exception e) { e.printStackTrace(); } break; } case TV_MENU_SOUND_PP_BASS: { try { soundSettings.setBass(progress); } catch (Exception e) { e.printStackTrace(); } break; } default: try { /* Check the EQ bands */ int eqBandsNo = soundSettings.getNumberOfEqualizerBands(); for (int i = 0; i < eqBandsNo; i++) { if (seekBar.getId() == TV_MENU_SOUND_PP_EQ_BANDS_START + i) { Log.d("SoundPP", "Setting EQ value: " + i + " progress:" + (progress - EQ_NEUTRAL_POWER)); soundSettings.setEqualizerBandValue( AudioEqualizerBand.getFromValue(i), progress - EQ_NEUTRAL_POWER); break; } } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } } @Override public void onClick(View v) { } @Override public void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { // clear old data in lists contentList.clear(); contentListIDs.clear(); titleIDs.clear(); // title titleIDs.add(R.drawable.settings_icon); titleIDs.add(R.drawable.tv_menu_icon); titleIDs.add(R.string.tv_menu_sound_settings); ArrayList<Integer> list; if (ConfigHandler.COMPLEX_AUDIO) { // sound mode****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVSpinner); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_sound_settings_sound_mode); list.add(TV_MENU_SOUND_PP_SOUND_MODE); contentListIDs.add(list); // treble******************************************* list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVProgressBar); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_sound_settings_treble); list.add(TV_MENU_SOUND_PP_TREBLE); contentListIDs.add(list); // bass**************************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVProgressBar); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_sound_settings_bass); list.add(TV_MENU_SOUND_PP_BASS); contentListIDs.add(list); try { soundSettings = MainActivity.service.getSystemControl() .getSoundControl(); /* * For now only show EQ if it is a 5 band EQ. We cannot * dynamically set the string for the slider (it has to be * predefined in xml). So for now we only support 5 band EQ * (this is what we use in MW now) */ int eqBandsNo; eqBandsNo = soundSettings.getNumberOfEqualizerBands(); if (eqBandsNo == EQ_BANDS_NO) { for (int i = 0; i < eqBandsNo; i++) { list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVProgressBar); contentList.add(list); // int eqBandFreq = // soundSettings.getEqualizerBandFrequency(i); list = new ArrayList<Integer>(); list.add(eqBandNames[i]); list.add(TV_MENU_SOUND_PP_EQ_BANDS_START + i); contentListIDs.add(list); } } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void setSoundControleVisibility(int soundMode) { int displayMode = (soundMode == 5) ? DisplayMode.SHOW : DisplayMode.DISABLE; setLayoutDisplayMode(R.string.tv_menu_sound_settings_treble, displayMode); setLayoutDisplayMode(R.string.tv_menu_sound_settings_bass, displayMode); try { int eqBandsNo = soundSettings.getNumberOfEqualizerBands(); if (eqBandsNo == EQ_BANDS_NO) { for (int i = 0; i < eqBandsNo; i++) { setLayoutDisplayMode(eqBandNames[i], displayMode); } } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }