package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.res.TypedArray; import android.os.Handler; import android.os.Message; 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.enums.ScanSignalType; import com.iwedia.dtv.scan.SignalInfo; import com.iwedia.dtv.service.Service; import com.iwedia.dtv.service.ServiceDescriptor; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVProgressBar; import com.iwedia.gui.config_handler.ConfigHandler; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import java.util.ArrayList; /** * Manual tuning dialog * * @author Branimir Pavlovic */ public class ChannelInstallationSignalInformationDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener, OnSeekBarChangeListener { public static final String TAG = "ChannelInstallationSignalInformationDialog"; private int currentTunerType = -1; /** IDs for buttons in this dialog */ public static final int tv_menu_channel_installation_signal_information_service_name = 100, tv_menu_channel_installation_signal_info_service_id = 101, tv_menu_channel_installation_signal_info_channel_id = 111, tv_menu_channel_installation_signal_info_multiplex = 102, tv_menu_channel_installation_signal_info_network = 103, tv_menu_channel_installation_signal_info_network_id = 108, tv_menu_channel_installation_signal_info_bit_error_level = 104, tv_menu_channel_installation_signal_info_centre_frequency = 110; /** IDs for edit text in this dialog */ public static final int tv_menu_channel_installation_signal_information = 105; /** IDs for progress in this dialog */ public static final int tv_menu_channel_installation_signal_info_signal_strength = 106, tv_menu_channel_installation_signal_info_signal_quality = 107; // 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>(); private Thread backgroundThread; private Runnable run; private Handler handler; private boolean nordic = false; private final String[] channelString = { "S1", "D1", "S2", "S3", "D2", "S4", "D3", "S5", "D4", "S6", "D5", "S7", "D6", "S8", "D7", "S9", "D8", "S10", "K5", "D9", "K6", "D10", "K7", "D11", "K8", "D12", "K9", "D13", "K10", "D14", "K11", "D15", "K12", "S11", "D16", "S12", "D17", "S13", "D18", "S14", "D19", "S15", "D20", "S16", "D21", "S17", "D22", "S18", "S19", "D23", "S20", "D24", "S21", "S22", "S23", "S24", "S25", "S26", "S27", "S28", "S29", "S30", "S31", "S32", "S33", "S34", "S35", "S36", "S37", "S38", "S39", "S40", "S41", "K21", "K22", "K23", "K24", "K25", "K26", "K27", "K28", "K29", "K30", "K31", "K32", "K33", "K34", "K35", "K36", "K37", "K38", "K39", "K40", "K41", "K42", "K43", "K44", "K45", "K46", "K47", "K48", "K49", "K50", "K51", "K52", "K53", "K54", "K55", "K56", "K57", "K58", "K59", "K60", "K61", "K62", "K63", "K64", "K65", "K66", "K67", "K68", "K69" }; private final int[] frequency = { 107500, 114000, 114500, 121500, 122000, 128500, 130000, 135500, 138000, 142500, 146000, 149500, 154000, 156500, 162000, 163500, 170000, 170500, 177500, 178000, 184500, 186000, 191500, 194000, 198500, 202000, 205500, 210000, 212500, 218000, 219500, 226000, 226500, 233500, 234000, 240500, 242000, 247500, 250000, 254500, 258000, 261500, 266000, 268500, 274000, 275500, 282000, 282500, 289500, 290000, 296500, 298000, 306000, 314000, 322000, 330000, 338000, 346000, 354000, 362000, 370000, 378000, 386000, 394000, 402000, 410000, 418000, 426000, 434000, 442000, 450000, 458000, 466000, 474000, 482000, 490000, 498000, 506000, 514000, 522000, 530000, 538000, 546000, 554000, 562000, 570000, 578000, 586000, 594000, 602000, 610000, 618000, 626000, 634000, 642000, 650000, 658000, 666000, 674000, 682000, 690000, 698000, 706000, 714000, 722000, 730000, 738000, 746000, 754000, 762000, 770000, 778000, 786000, 794000, 802000, 810000, 818000, 826000, 834000, 842000, 850000, 858000 }; public ChannelInstallationSignalInformationDialog(Context context) { super(context, checkTheme(context), 0); // fill lists returnArrayListsWithDialogContents(contentList, contentListIDs, titleIDs); // set content to dialog fillDialog(); // set attributes setDialogAttributes(); // init runnable to be run in thread run = new Runnable() { @Override public void run() { while (true) { Thread thisThread = Thread.currentThread(); if (thisThread.equals(backgroundThread)) { handler.sendEmptyMessage(0); try { // Sleep 5 seconds Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } }; // init handler handler = new Handler() { @Override public void handleMessage(Message msg) { setValuesToViews(true); super.handleMessage(msg); } }; } @Override public void show() { nordic = checkForNordic(); startThread(run); // fillViewsWithData(true); super.show(); } @Override public void onBackPressed() { stopThread(); super.onBackPressed(); } @Override public void cancel() { stopThread(); super.cancel(); } @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; } @Override public void onClick(View v) { } private boolean checkForNordic() { // TODO check if it is for nordic int activeCountry; String country = ""; try { activeCountry = MainActivity.service.getSetupControl() .getActiveCountry(); country = MainActivity.service.getSetupControl().getCountryCode( activeCountry); } catch (Exception e) { e.printStackTrace(); } if (country == null) { country = "Unknown"; } Log.e("nordic", "country:" + country); Log.d("ACTIVE COUNTRY LOADED FOR NORDIC CHECK", country); if (country.equalsIgnoreCase("IRE") || country.equalsIgnoreCase("SWE") || country.equalsIgnoreCase("NOR") || country.equalsIgnoreCase("DNK") || country.equalsIgnoreCase("FIN")) { return true; } return false; } /** * Set values to views * * @param fromHisClass * called from his class or not */ public void setValuesToViews(boolean fromHisClass) { int freq = 0; // check what tunner is selected try { currentTunerType = MainActivity.service.getScanControl() .getScanType(); } catch (RemoteException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * selectedTunerType = ((A4TVSpinner) MainActivity.activity * .getDialogManager() .getChannelInstallationDialog() .findViewById( * ChannelInstallationDialog * .TV_MENU_CHANNEL_INSTALLATION_SETTINGS_TUNER_TYPE)) * .getCHOOSEN_ITEM_INDEX(); */ SignalInfo signalInfo = null; ServiceDescriptor serviceDesc = null; try { Service activeService = MainActivity.service.getServiceControl() .getActiveService(); serviceDesc = MainActivity.service.getServiceControl() .getServiceDescriptor(activeService.getListIndex(), activeService.getServiceIndex()); signalInfo = MainActivity.service.getScanControl().getSignalInfo(); } catch (Exception e) { e.printStackTrace(); } if (signalInfo != null) { // set values to views ((A4TVButton) findViewById(tv_menu_channel_installation_signal_information_service_name)) .setText(serviceDesc.getName()); ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_service_id)) .setText(String.valueOf(serviceDesc.getServiceId())); ((A4TVProgressBar) findViewById(tv_menu_channel_installation_signal_info_signal_strength)) .setProgress(signalInfo.getSignalStrenght()); findViewById( tv_menu_channel_installation_signal_info_signal_strength) .setEnabled(false); ((A4TVProgressBar) findViewById(tv_menu_channel_installation_signal_info_signal_quality)) .setProgress(signalInfo.getSignalQuality()); findViewById( tv_menu_channel_installation_signal_info_signal_quality) .setEnabled(false); if (currentTunerType == ScanSignalType.SIGNAL_TYPE_TERRESTRIAL) { freq = serviceDesc.getFrequency(); if (nordic) { if (ConfigHandler.TV_FEATURES) { ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_channel_id)) .setText(channelString[freq - 1]); } ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_centre_frequency)) .setText((String .valueOf(frequency[freq - 1] / 1000)) + " MHz"); } else { if (ConfigHandler.TV_FEATURES) { ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_channel_id)) .setText(String.valueOf(String.valueOf(freq))); } ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_centre_frequency)) .setText(freq / 1000000 + " MHz"); } } else { freq = (serviceDesc.getFrequency()) / 1000000; if (ConfigHandler.TV_FEATURES) { ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_channel_id)) .setText(""); } ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_centre_frequency)) .setText(String.valueOf(freq) + " MHz"); } if (ConfigHandler.TV_FEATURES) { ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_network)) .setText(serviceDesc.getNetworkName()); ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_multiplex)) .setText(Integer.toString(serviceDesc.getTSID())); } ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_network_id)) .setText(Integer.toString(serviceDesc.getONID())); ((A4TVButton) findViewById(tv_menu_channel_installation_signal_info_bit_error_level)) .setText(signalInfo.getBitErrorLevel()); } } /** * Start background thread * * @param run * Runnable to run in thread */ public void startThread(Runnable run) { Log.d(TAG, "start thread entered"); if (backgroundThread == null) { backgroundThread = new Thread(run); backgroundThread.setPriority(Thread.MIN_PRIORITY); backgroundThread.start(); } } /** * Stops background thread */ public void stopThread() { Log.d(TAG, "stop thread entered"); if (backgroundThread != null) { Thread moribund = backgroundThread; backgroundThread = null; moribund.interrupt(); } } @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.drawable.channel_installation); titleIDs.add(R.string.tv_menu_channel_installation_settings_signal_info); // service name ****************************************** ArrayList<Integer> list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_service_name); list.add(tv_menu_channel_installation_signal_information_service_name); contentListIDs.add(list); // service id ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_service_id); list.add(tv_menu_channel_installation_signal_info_service_id); contentListIDs.add(list); if (ConfigHandler.TV_FEATURES) { // channel id ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_channel_id); list.add(tv_menu_channel_installation_signal_info_channel_id); contentListIDs.add(list); } // centre frequency list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_centre_frequency); list.add(tv_menu_channel_installation_signal_info_centre_frequency); contentListIDs.add(list); if (ConfigHandler.TV_FEATURES) { // multiplex ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_multiplex); list.add(tv_menu_channel_installation_signal_info_multiplex); contentListIDs.add(list); // network ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_network); list.add(tv_menu_channel_installation_signal_info_network); contentListIDs.add(list); } // network id ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_network_id); list.add(tv_menu_channel_installation_signal_info_network_id); contentListIDs.add(list); // bit error level ****************************************** list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_channel_installation_signal_info_bit_error_level); list.add(tv_menu_channel_installation_signal_info_bit_error_level); contentListIDs.add(list); // signal strength******************************************* 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_channel_installation_signal_info_signal_strength); list.add(tv_menu_channel_installation_signal_info_signal_strength); contentListIDs.add(list); // signal quality******************************************* 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_channel_installation_signal_info_signal_quality); list.add(tv_menu_channel_installation_signal_info_signal_quality); contentListIDs.add(list); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { Log.e("progress", "onProgressChanged progress:" + progress); if (currentTunerType == ScanSignalType.SIGNAL_TYPE_TERRESTRIAL && nordic) { if (progress < 34) { ((A4TVProgressBar) seekBar).setTextInformation( String.valueOf(progress), "POOR"); } else { if (progress < 67) { ((A4TVProgressBar) seekBar).setTextInformation( String.valueOf(progress), "FAIR"); } else { ((A4TVProgressBar) seekBar).setTextInformation( String.valueOf(progress), "GOOD"); } } } else { ((A4TVProgressBar) seekBar).setText(String.valueOf(seekBar .getProgress())); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }