1 /* 2 * 3 * Copyright 2001-2010 Texas Instruments, Inc. - http://www.ti.com/ 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.ti.fmrxapp; 19 20 import java.io.FileInputStream; 21 import java.io.FileOutputStream; 22 import java.io.IOException; 23 import java.io.ObjectInputStream; 24 import java.io.ObjectOutputStream; 25 import java.util.ArrayList; 26 import java.util.HashMap; 27 import java.util.Iterator; 28 29 import android.app.Activity; 30 import android.app.ProgressDialog; 31 import android.content.BroadcastReceiver; 32 import android.content.Context; 33 import android.content.Intent; 34 import android.content.IntentFilter; 35 import android.os.Bundle; 36 import android.os.Handler; 37 import android.os.Message; 38 import android.util.Log; 39 import android.view.KeyEvent; 40 import android.view.Menu; 41 import android.view.MenuItem; 42 import android.view.OrientationListener; 43 import android.view.View; 44 import android.widget.Button; 45 import android.widget.ImageButton; 46 import android.widget.ImageView; 47 import android.widget.TextView; 48 import com.ti.fm.FmRadio; 49 import com.ti.fm.FmRadioIntent; 50 import com.ti.fm.IFmConstants; 51 import android.app.AlertDialog; 52 import android.os.Bundle; 53 import android.content.SharedPreferences; 54 import android.content.res.Configuration; 55 import android.database.Cursor; 56 import android.database.SQLException; 57 import android.app.Notification; 58 import android.app.NotificationManager; 59 import android.app.PendingIntent; 60 import android.view.Window; 61 import android.media.AudioManager; 62 import android.widget.Toast; 63 import android.view.Gravity; 64 import android.view.LayoutInflater; 65 import android.view.ViewGroup; 66 67 /* 68 FM Boot up Sequence: 69 70 FM APIS NON Blocking: 71 72 sFmRadio.rxEnable() is called from FM application, when the user selects FM radio icon from main menu. 73 74 Once the callback for sFmRadio.rxEnable() is received (EVENT_FM_ENABLED), 75 the default configurations which have been saved in the preference will be loaded using loadDefaultConfiguration() function . 76 After this sFmRadio.rxSetVolume() with default volume will be called. 77 78 Once the callback for sFmRadio.rxSetVolume() is received(EVENT_VOLUME_CHANGE), 79 sFmRadio.rxSetBand() with default band will be called. 80 81 Once the callback for sFmRadio.rxSetBand() is received(EVENT_BAND_CHANGE), sFmRadio.rxTune_nb() 82 with default frequency will be called. 83 84 Once the callback for sFmRadio.rxTune_nb()is received (EVENT_TUNE_COMPLETE) 85 sFmRadio.rxEnableAudioRouting() will be called to enable audio. 86 87 After these sequences user can hear the FM audio. 88 89 90 The rest of the APIS will be called based on the user actions like when user presses seek up or down 91 sFmRadio.rxSeek_nb() will be called and the callback for the same will be EVENT_SEEK_STARTED. 92 93 To increase decrease the volume sFmRadio.rxSetVolume() will be called and the callback for 94 the same will be EVENT_VOLUME_CHANGE. 95 96 To mute /unmute, sFmRadio.rxSetMuteMode() will be called and the callback 97 for the same will be EVENT_MUTE_CHANGE. 98 99 100 FM APIS Blocking: 101 102 In case of blocking FM APIS, the above sequence holds good. The difference will be the FM Events will not posted 103 as intents and the usage of FM APIS will be sequential. 104 */ 105 106 public class FmRxApp extends Activity implements View.OnClickListener, 107 IFmConstants, FmRxAppConstants , FmRadio.ServiceListener { 108 public static final String TAG = "FmRxApp"; 109 private static final boolean DBG = false; 110 111 /******************************************** 112 * Widgets 113 ********************************************/ 114 115 private ImageView imgFmPower, imgFmMode, imgFmVolume, imgFmAudiopath; 116 private ImageButton imgFmSeekUp, imgFmSeekDown; 117 private TextView txtStatusMsg, txtRadioText; 118 private TextView txtPsText; 119 static TextView txtStationName; 120 private static Button btnStation1, btnStation2, btnStation3; 121 private static Button btnStation4, btnStation5, btnStation6; 122 private ProgressDialog pd = null, configPd; 123 124 /******************************************** 125 * Menu Constants 126 ********************************************/ 127 public static final int MENU_CONFIGURE = Menu.FIRST + 1; 128 public static final int MENU_EXIT = Menu.FIRST + 2; 129 public static final int MENU_ABOUT = Menu.FIRST + 3; 130 public static final int MENU_PRESET = Menu.FIRST + 4; 131 public static final int MENU_SETFREQ = Menu.FIRST + 5; 132 133 public boolean mPreset = false; 134 135 /******************************************** 136 * private variables 137 ********************************************/ 138 private int mToggleMode = 0; // To toggle between the mono/stereo 139 private int mToggleAudio = 1; // To toggle between the speaker/headset 140 private boolean mToggleMute = false; // To toggle between the mute/unmute 141 142 private boolean mRdsState = false; 143 /* Default values */ 144 private int mVolume = DEF_VOLUME; 145 private int mMode = DEFAULT_MODE; 146 private boolean mRds = DEFAULT_RDS; 147 private boolean mRdsAf = DEFAULT_RDS_AF; 148 private int mRdsSystem = INITIAL_VAL; 149 private int mDeEmpFilter = INITIAL_VAL; 150 private int mRssi = INITIAL_RSSI; 151 // Seek up/down direction 152 private int mDirection = FM_SEEK_UP; 153 154 /* State values */ 155 156 // variable to make sure that the next configuration change happens after 157 // the current configuration request has been completed. 158 private int configurationState = CONFIGURATION_STATE_IDLE; 159 // variable to make sure that the next volume change happens after the 160 // current volume request has been completed. 161 private boolean mVolState = VOL_REQ_STATE_IDLE; 162 // variable to make sure that the next seek happens after the current seek 163 // request has been completed. 164 private boolean mSeekState = SEEK_REQ_STATE_IDLE; 165 166 private boolean mStatus; 167 private int mIndex = 0; 168 private int mStationIndex; 169 170 171 /* 172 * Variable to identify whether we need to do the default setting when 173 * entering the FM application. Based on this variable,the default 174 * configurations for the FM will be done for the first time 175 */ 176 177 private static boolean sdefaultSettingOn = false; 178 179 private static boolean mIsDbPresent = false; 180 181 private NotificationManager mNotificationManager; 182 183 static final String FM_INTERRUPTED_KEY = "fm_interrupted"; 184 static final String FM_STATE_KEY = "fm_state"; 185 /* Flag to know whether FM App was interrupted due to orientation change */ 186 boolean mFmInterrupted = false; 187 188 /*Flag to check if service is connected*/ 189 boolean mFmServiceConnected = false; 190 /******************************************** 191 * public variables 192 ********************************************/ 193 public static int sBand = DEFAULT_BAND; 194 public static int sChannelSpace = DEFAULT_CHANNELSPACE; 195 196 public static Float lastTunedFrequency = (float) DEFAULT_FREQ_EUROPE; 197 public static FmRadio sFmRadio; 198 199 /** Arraylist of stations */ 200 public static ArrayList<HashMap<String, String>> stations = new ArrayList<HashMap<String, String>>( 201 6); 202 public static TextView txtFmRxTunedFreq; 203 private OrientationListener mOrientationListener; 204 205 Context mContext; 206 207 DBAdapter db; 208 209 /** Called when the activity is first created. */ 210 211 public void onCreate(Bundle savedInstanceState) { 212 213 super.onCreate(savedInstanceState); 214 mContext = this; 215 /* Retrieve the fm_state and find out whether FM App was interrupted */ 216 217 if (savedInstanceState != null) { 218 Bundle fmState = savedInstanceState.getBundle(FM_STATE_KEY); 219 if (fmState != null) { 220 mFmInterrupted = fmState.getBoolean(FM_INTERRUPTED_KEY, false); 221 222 } 223 } 224 225 // Create orientation listenter. 226 227 228 //requestWindowFeature(Window.FEATURE_NO_TITLE); 229 setVolumeControlStream(AudioManager.STREAM_MUSIC); 230 231 // Register for FM intent broadcasts. 232 IntentFilter intentFilter = new IntentFilter(); 233 intentFilter.addAction(FmRadioIntent.FM_ENABLED_ACTION); 234 intentFilter.addAction(FmRadioIntent.FM_DISABLED_ACTION); 235 intentFilter.addAction(FmRadioIntent.GET_FREQUENCY_ACTION); 236 intentFilter.addAction(FmRadioIntent.SEEK_ACTION); 237 intentFilter.addAction(FmRadioIntent.BAND_CHANGE_ACTION); 238 intentFilter.addAction(FmRadioIntent.GET_CHANNEL_SPACE_ACTION); 239 intentFilter.addAction(FmRadioIntent.SET_MODE_MONO_STEREO_ACTION); 240 intentFilter.addAction(FmRadioIntent.VOLUME_CHANGED_ACTION); 241 intentFilter.addAction(FmRadioIntent.RDS_TEXT_CHANGED_ACTION); 242 intentFilter.addAction(FmRadioIntent.PS_CHANGED_ACTION); 243 intentFilter.addAction(FmRadioIntent.AUDIO_PATH_CHANGED_ACTION); 244 intentFilter.addAction(FmRadioIntent.TUNE_COMPLETE_ACTION); 245 intentFilter.addAction(FmRadioIntent.SEEK_STOP_ACTION); 246 intentFilter.addAction(FmRadioIntent.MUTE_CHANGE_ACTION); 247 intentFilter.addAction(FmRadioIntent.DISPLAY_MODE_MONO_STEREO_ACTION); 248 intentFilter.addAction(FmRadioIntent.ENABLE_RDS_ACTION); 249 intentFilter.addAction(FmRadioIntent.DISABLE_RDS_ACTION); 250 intentFilter.addAction(FmRadioIntent.SET_RDS_AF_ACTION); 251 intentFilter.addAction(FmRadioIntent.SET_RDS_SYSTEM_ACTION); 252 intentFilter.addAction(FmRadioIntent.SET_DEEMP_FILTER_ACTION); 253 intentFilter.addAction(FmRadioIntent.SET_RSSI_THRESHHOLD_ACTION); 254 intentFilter.addAction(FmRadioIntent.SET_RF_DEPENDENT_MUTE_ACTION); 255 intentFilter.addAction(FmRadioIntent.PI_CODE_CHANGED_ACTION); 256 intentFilter.addAction(FmRadioIntent.MASTER_VOLUME_CHANGED_ACTION); 257 intentFilter.addAction(FmRadioIntent.CHANNEL_SPACING_CHANGED_ACTION); 258 intentFilter.addAction(FmRadioIntent.COMPLETE_SCAN_DONE_ACTION); 259 intentFilter.addAction(FmRadioIntent.COMPLETE_SCAN_STOP_ACTION); 260 intentFilter.addAction(FmRadioIntent.GET_BAND_ACTION); 261 intentFilter.addAction(FmRadioIntent.GET_MONO_STEREO_MODE_ACTION); 262 intentFilter.addAction(FmRadioIntent.GET_MUTE_MODE_ACTION); 263 intentFilter.addAction(FmRadioIntent.GET_RF_MUTE_MODE_ACTION); 264 intentFilter.addAction(FmRadioIntent.GET_RSSI_THRESHHOLD_ACTION); 265 intentFilter.addAction(FmRadioIntent.GET_DEEMPHASIS_FILTER_ACTION); 266 intentFilter.addAction(FmRadioIntent.GET_VOLUME_ACTION); 267 intentFilter.addAction(FmRadioIntent.GET_RDS_SYSTEM_ACTION); 268 intentFilter.addAction(FmRadioIntent.GET_RDS_GROUPMASK_ACTION); 269 intentFilter.addAction(FmRadioIntent.GET_RDS_AF_SWITCH_MODE_ACTION); 270 intentFilter.addAction(FmRadioIntent.GET_RSSI_ACTION); 271 intentFilter.addAction(FmRadioIntent.COMPLETE_SCAN_PROGRESS_ACTION); 272 intentFilter.addAction(FmRadioIntent.SET_RDS_AF_ACTION); 273 intentFilter.addAction(FmRadioIntent.SET_RF_DEPENDENT_MUTE_ACTION); 274 intentFilter.addAction(FmRadioIntent.SET_CHANNEL_SPACE_ACTION); 275 276 registerReceiver(mReceiver, intentFilter); 277 278 db = new DBAdapter(this); 279 createEmptyList(); 280 /* 281 * Need to enable the FM if it is not enabled earlier 282 */ 283 284 sFmRadio = new FmRadio(this, this); 285 } 286 private void setButtonLabels() { 287 288 //Log.d(TAG, "setButtonLabels"); 289 Iterator<HashMap<String, String>> stationIterator = stations.iterator(); 290 while (stationIterator.hasNext()) { 291 HashMap<String, String> item = (HashMap<String, String>) stationIterator.next(); 292 293 //Log.d(TAG, "setButtonLabels item " + item); 294 String freq = item.get(ITEM_VALUE); 295 int iButtonNo = Integer.parseInt(item.get(ITEM_KEY)); 296 switch (iButtonNo) { 297 case 1: 298 if (freq.equals("")) 299 btnStation1.setEnabled(false); 300 else { 301 btnStation1.setEnabled(true); 302 btnStation1.setText(freq); 303 } 304 break; 305 case 2: 306 if (freq.equals("")) 307 btnStation2.setEnabled(false); 308 else { 309 btnStation2.setEnabled(true); 310 btnStation2.setText(freq); 311 } 312 break; 313 case 3: 314 if (freq.equals("")) 315 btnStation3.setEnabled(false); 316 else { 317 btnStation3.setEnabled(true); 318 btnStation3.setText(freq); 319 } 320 break; 321 case 4: 322 if (freq.equals("")) 323 btnStation4.setEnabled(false); 324 else { 325 btnStation4.setEnabled(true); 326 btnStation4.setText(freq); 327 } 328 break; 329 case 5: 330 if (freq.equals("")) 331 btnStation5.setEnabled(false); 332 else { 333 btnStation5.setEnabled(true); 334 btnStation5.setText(freq); 335 } 336 break; 337 case 6: 338 if (freq.equals("")) 339 btnStation6.setEnabled(false); 340 else { 341 btnStation6.setEnabled(true); 342 btnStation6.setText(freq); 343 } 344 break; 345 346 } 347 348 } 349 350 } 351 private void startup() { 352 //Log.i(TAG, "startup"); 353 354 355 switch (sFmRadio.rxGetFMState()) { 356 /* FM is alreary enabled. Just update the UI. */ 357 case FmRadio.STATE_ENABLED: 358 Log.i(TAG, "FmRadio.STATE_ENABLED "); 359 // Fm app is on and we are entering from the other screens 360 loadDefaultConfiguration(); 361 setContentView(R.layout.fmrxmain); 362 initControls(); 363 setButtonLabels(); 364 if (sFmRadio.rxIsFMPaused()) { 365 Log.i(TAG, "FmRadio.STATE_PAUSE "); 366 mStatus = sFmRadio.resumeFm(); 367 if (mStatus == false) { 368 showAlert(this, "FmRadio", "Cannot resume Radio!!!!"); 369 } 370 } 371 372 break; 373 374 case FmRadio.STATE_DISABLED: 375 Log.i(TAG, "FmRadio.STATE_DISABLED "); 376 sdefaultSettingOn = false; 377 378 mStatus = sFmRadio.rxEnable(); 379 if (mStatus == false) { 380 showAlert(this, "FmRadio", "Cannot enable Radio!!!!"); 381 382 } 383 384 else { /* Display the dialog till FM is enabled */ 385 pd = ProgressDialog.show(this, "Please wait..", 386 "Powering on Radio", true, false); 387 } 388 389 break; 390 /* FM has not been started. Start the FM */ 391 case FmRadio.STATE_DEFAULT: 392 393 Log.i(TAG, "FmRadio.STATE_DEFAULT "); 394 sdefaultSettingOn = false; 395 /* 396 * Make sure not to start the FM_Enable() again, if it has been 397 * already called before orientation change 398 */ 399 if (mFmInterrupted == false) { 400 401 mStatus = sFmRadio.rxEnable(); 402 if (mStatus == false) { 403 showAlert(this, "FmRadio", "Cannot enable Radio!!!!"); 404 405 } 406 407 else { /* Display the dialog till FM is enabled */ 408 pd = ProgressDialog.show(this, "Please wait..", 409 "Powering on Radio", true, false); 410 } 411 } else { 412 Log.w(TAG, "mFmInterrupted is true dont call enable"); 413 414 } 415 break; 416 } 417 } 418 419 public void onServiceConnected() { 420 //Log.i(TAG, "onServiceConnected"); 421 mFmServiceConnected = true; 422 startup(); 423 } 424 425 public void onServiceDisconnected() { 426 //Log.d(TAG, "Lost connection to service"); 427 mFmServiceConnected = false ; 428 sFmRadio = null; 429 } 430 431 432 /* 433 * Set the arraylist with the selected station name and display the name on 434 * main screen 435 */ 436 public static void UpdateRenameStation(int index, String name) { 437 txtStationName.setText(name.toString()); 438 // Store the name in the selected index in Arraylist 439 SetStation(index, "", name); 440 441 } 442 443 /* 444 * Set the arraylist and the buttons with the selected station and make the 445 * button enabled so that user can select it to select the stored stations 446 */ 447 public static void updateSetStation(int index, String freq, String name) { 448 switch (index) { 449 case 0: 450 if (freq.equals("")) 451 btnStation1.setEnabled(false); 452 else { 453 btnStation1.setEnabled(true); 454 btnStation1.setText(freq); 455 } 456 457 break; 458 case 1: 459 if (freq.equals("")) 460 btnStation2.setEnabled(false); 461 else { 462 btnStation2.setEnabled(true); 463 btnStation2.setText(freq); 464 } 465 466 break; 467 case 2: 468 if (freq.equals("")) 469 btnStation3.setEnabled(false); 470 else { 471 btnStation3.setEnabled(true); 472 btnStation3.setText(freq); 473 } 474 break; 475 case 3: 476 if (freq.equals("")) 477 btnStation4.setEnabled(false); 478 else { 479 btnStation4.setEnabled(true); 480 btnStation4.setText(freq); 481 } 482 483 break; 484 case 4: 485 if (freq.equals("")) 486 btnStation5.setEnabled(false); 487 else { 488 btnStation5.setEnabled(true); 489 btnStation5.setText(freq); 490 } 491 492 break; 493 case 5: 494 if (freq.equals("")) 495 btnStation6.setEnabled(false); 496 else { 497 btnStation6.setEnabled(true); 498 btnStation6.setText(freq); 499 } 500 break; 501 } 502 // Store the freq in the selected index in Arraylist 503 SetStation(index, freq, ""); 504 505 } 506 507 /* 508 * Unset the arraylist and the button with the empty station and make the 509 * button disabled so that user cannot select it 510 */ 511 512 public static void updateUnSetStation(int index) { 513 switch (index) { 514 case 0: 515 btnStation1.setEnabled(false); 516 btnStation1.setText("1"); 517 break; 518 case 1: 519 btnStation2.setEnabled(false); 520 btnStation2.setText("2"); 521 break; 522 case 2: 523 btnStation3.setEnabled(false); 524 btnStation3.setText("3"); 525 break; 526 case 3: 527 btnStation4.setEnabled(false); 528 btnStation4.setText("4"); 529 break; 530 case 4: 531 532 btnStation5.setEnabled(false); 533 btnStation5.setText("4"); 534 break; 535 case 5: 536 btnStation6.setEnabled(false); 537 btnStation6.setText("6"); 538 break; 539 } 540 541 UnSetStation(index, "", ""); 542 543 } 544 545 /* Set particular station name or frequency in the stations arraylist */ 546 public static void SetStation(Integer index, String freq, String name) { 547 Log.i(TAG, "SetStation"); 548 Integer pos = new Integer(index.intValue() + 1); 549 try { 550 HashMap<String, String> item = stations.get(index.intValue()); 551 item.put(ITEM_KEY, pos.toString()); 552 // Update the name only 553 if ((freq.equals(""))) { 554 item.put(ITEM_NAME, name); 555 556 // Empty name string is passed. Update the name 557 if ((name.equals(""))) 558 item.put(ITEM_NAME, name); 559 } 560 561 // Update the frequency only 562 else if ((name.equals(""))) { 563 item.put(ITEM_VALUE, freq); 564 565 } 566 stations.set(index.intValue(), item); 567 } catch (NullPointerException e) { 568 Log.e(TAG, "Tried to add null value"); 569 } 570 } 571 572 /* UnSet particular station name and frequency in the stations arraylist */ 573 public static void UnSetStation(Integer index, String freq, String name) { 574 Log.i(TAG, "UnSetStation"); 575 Integer pos = new Integer(index.intValue() + 1); 576 try { 577 HashMap<String, String> item = stations.get(index.intValue()); 578 item.put(ITEM_KEY, pos.toString()); 579 item.put(ITEM_VALUE, freq); 580 item.put(ITEM_NAME, name); 581 stations.set(index.intValue(), item); 582 } catch (NullPointerException e) { 583 Log.e(TAG, "Tried to add null value"); 584 } 585 } 586 587 /* Get particular station from the stations arraylist */ 588 589 public static String GetStation(Integer index) { 590 Log.i(TAG, "GetStation"); 591 Integer pos = new Integer(index.intValue() + 1); 592 try { 593 HashMap<String, String> item = stations.get(index.intValue()); 594 Object freq = item.get(ITEM_VALUE); 595 Object name = item.get(ITEM_NAME); 596 if (name != null) { 597 txtStationName.setText(name.toString()); 598 } else { 599 Log.w(TAG, "There is no name in the HashMap."); 600 } 601 602 if (freq != null) { 603 return freq.toString(); 604 } else { 605 Log.w(TAG, "There is no key in the HashMap."); 606 } 607 } catch (NullPointerException e) { 608 Log.e(TAG, "Tried to add null value"); 609 } 610 return null; 611 } 612 613 /* 614 * Handler for all the FM related events. The events will be handled only 615 * when we are in the FM application main menu 616 */ 617 618 private Handler mHandler = new Handler() { 619 StringBuilder sb ; 620 StringBuilder sbPs ; 621 622 public void handleMessage(Message msg) { 623 624 switch (msg.what) { 625 626 /* 627 * After FM is enabled dismiss the progress dialog and display the 628 * FM main screen. Set the default volume. 629 */ 630 631 case EVENT_FM_ENABLED: 632 633 Log.i(TAG, "enter handleMessage ----EVENT_FM_ENABLED"); 634 if (pd != null) 635 pd.dismiss(); 636 637 loadDefaultConfiguration(); 638 setContentView(R.layout.fmrxmain); 639 /* At Power up, FM should be always unmuted. */ 640 mToggleMute = false; 641 //Log.i(TAG, " handleMessage init mToggleMute" + mToggleMute); 642 initControls(); 643 setButtonLabels(); 644 imgFmPower.setImageResource(R.drawable.poweron); 645 646 break; 647 648 /* 649 * Update the icon on main screen with appropriate mono/stereo 650 * icon 651 */ 652 case EVENT_MONO_STEREO_CHANGE: 653 654 Log.i(TAG, "enter handleMessage ---EVENT_MONO_STEREO_CHANGE"); 655 if (mMode == 0) { 656 imgFmMode.setImageResource(R.drawable.fm_stereo); 657 } else { 658 imgFmMode.setImageResource(R.drawable.fm_mono); 659 } 660 break; 661 662 /* 663 * Update the icon on main screen with appropriate mono/stereo 664 * icon 665 */ 666 case EVENT_MONO_STEREO_DISPLAY: 667 668 Log.i(TAG, "enter handleMessage ---EVENT_MONO_STEREO_DISPLAY"); 669 670 Integer mode = (Integer) msg.obj; 671 //Log.i(TAG, "enter handleMessage ---mode" + mode.intValue()); 672 if (mode.intValue() == 0) { 673 imgFmMode.setImageResource(R.drawable.fm_stereo); 674 } else { 675 imgFmMode.setImageResource(R.drawable.fm_mono); 676 } 677 break; 678 679 /* 680 * Update the icon on main screen with appropriate mute/unmute icon 681 */ 682 case EVENT_MUTE_CHANGE: 683 Log.i(TAG,"enter handleMessage ---EVENT_MUTE_CHANGE "); 684 685 break; 686 687 case EVENT_SEEK_STOPPED: 688 689 Log.i(TAG, "enter handleMessage ---EVENT_SEEK_STOPPED"); 690 Integer seekFreq = (Integer) msg.obj; 691 //Log.i(TAG, "enter handleMessage ----EVENT_SEEK_STOPPED seekFreq" + seekFreq); 692 lastTunedFrequency = (float) seekFreq / 1000; 693 txtStatusMsg.setText(R.string.playing); 694 txtFmRxTunedFreq.setText(lastTunedFrequency.toString()); 695 696 break; 697 698 case EVENT_FM_DISABLED: 699 700 Log.i(TAG, "enter handleMessage ----EVENT_FM_DISABLED"); 701 702 /* 703 * we have exited the FM App. Set the sdefaultSettingOn flag to 704 * false Save the default configuration in the preference 705 */ 706 sdefaultSettingOn = false; 707 saveDefaultConfiguration(); 708 finish(); 709 break; 710 711 case EVENT_SEEK_STARTED: 712 713 Integer freq = (Integer) msg.obj; 714 //Log.i(TAG, "enter handleMessage ----EVENT_SEEK_STARTED freq" + freq); 715 lastTunedFrequency = (float) freq / 1000; 716 txtStatusMsg.setText(R.string.playing); 717 txtFmRxTunedFreq.setText(lastTunedFrequency.toString()); 718 // clear the RDS text 719 txtRadioText.setText(null); 720 721 // clear the PS text 722 txtPsText.setText(null); 723 724 /* 725 * Seek up/down will be completed here. So set the state to 726 * idle, so that user can seek to other frequency. 727 */ 728 729 mSeekState = SEEK_REQ_STATE_IDLE; 730 731 break; 732 733 /* 734 * Set the default band , if the fm app is getting started first 735 * time 736 */ 737 case EVENT_VOLUME_CHANGE: 738 Log.i(TAG, "enter handleMessage ----EVENT_VOLUME_CHANGE"); 739 740 /* 741 * volume change will be completed here. So set the state to 742 * idle, so that user can set other volume. 743 */ 744 mVolState = VOL_REQ_STATE_IDLE; 745 /* 746 * Setting the default band after the volume change when FM app 747 * is started for the first time 748 */ 749 if (sdefaultSettingOn == false) { 750 /* Set the default band */ 751 if (MAKE_FM_APIS_BLOCKING == true) { 752 // Code for blocking call 753 mStatus = sFmRadio.rxSetBand(sBand); 754 if (mStatus == false) { 755 showAlert(getParent(), "FmRadio","Not able to setband!!!!"); 756 } else { 757 lastTunedFrequency = (float) lastTunedFrequency ; 758 mStatus = sFmRadio.rxTune_nb((int)(lastTunedFrequency.floatValue()* 1000)); 759 if (mStatus == false) { 760 showAlert(getParent(), "FmRadio","Not able to tune!!!!"); 761 } 762 } 763 764 } else { 765 // Code for non blocking call 766 mStatus = sFmRadio.rxSetBand_nb(sBand); 767 if (mStatus == false) { 768 showAlert(getParent(), "FmRadio","Not able to setband!!!!"); 769 } 770 } 771 772 773 774 } 775 break; 776 777 case EVENT_COMPLETE_SCAN_PROGRESS: 778 Log.i(TAG, "enter handleMessage ----EVENT_COMPLETE_SCAN_PROGRESS"); 779 780 Integer progress = (Integer) msg.obj; 781 // Log.i(TAG,"enter handleMessage ----EVENT_COMPLETE_SCAN_PROGRESS progress"+ progress); 782 break; 783 784 /* 785 * enable audio routing , if the fm app is getting started first 786 * time 787 */ 788 case EVENT_TUNE_COMPLETE: 789 Integer tuneFreq = (Integer) msg.obj; 790 Log.i(TAG,"enter handleMessage ----EVENT_TUNE_COMPLETE tuneFreq" 791 + tuneFreq); 792 lastTunedFrequency = (float) tuneFreq / 1000; 793 txtStatusMsg.setText(R.string.playing); 794 txtFmRxTunedFreq.setText(lastTunedFrequency.toString()); 795 // clear the RDS text 796 txtRadioText.setText(null); 797 // clear the PS text 798 txtPsText.setText(null); 799 800 //Log.d(TAG, "sdefaultSettingOn" + sdefaultSettingOn); 801 802 /* 803 * Enable the Audio routing after the tune complete , when FM 804 * app is started for the first time or after reentering the Fm 805 * app 806 */ 807 if (sdefaultSettingOn == false) { 808 /* 809 mStatus = sFmRadio.rxEnableAudioRouting(); 810 if (mStatus == false) { 811 showAlert(getParent(), "FmRadio", 812 "Not able to enable audio!!!!"); 813 } 814 */ 815 /* 816 * The default setting for the FMApp are completed here. If 817 * the user selects back and goes out of the FM App, when he 818 * reenters we dont have to do the default configurations 819 */ 820 sdefaultSettingOn = true; 821 } 822 823 // clear the RDS text 824 txtRadioText.setText(null); 825 826 // clear the PS text 827 txtPsText.setText(null); 828 829 break; 830 831 /* Display the RDS text on UI */ 832 case EVENT_RDS_TEXT: 833 Log.i(TAG, "enter handleMessage ----EVENT_RDS_TEXT"); 834 if (FM_SEND_RDS_IN_BYTEARRAY == true) { 835 byte[] rdsText = (byte[]) msg.obj; 836 837 for (int i = 0; i < 4; i++) 838 Log.i(TAG, "rdsText" + rdsText[i]); 839 } else { 840 String rds = (String) msg.obj; 841 Log.i(TAG, "enter handleMessage ----EVENT_RDS_TEXT rds" + rds); 842 sb = new StringBuilder("[RDS] "); 843 sb.append(rds); 844 Log.i(TAG, "enter handleMessage ----EVENT_RDS_TEXT sb.toString()"+ sb.toString()); 845 txtRadioText.setText(sb.toString()); 846 } 847 break; 848 849 /* Display the RDS text on UI */ 850 case EVENT_PI_CODE: 851 String pi = (String) msg.obj; 852 Log.i(TAG, "enter handleMessage ----EVENT_PI_CODE rds" + pi); 853 854 break; 855 856 case EVENT_SET_CHANNELSPACE: 857 Log.i(TAG, "enter handleMessage ----EVENT_SET_CHANNELSPACE"); 858 break; 859 860 861 case EVENT_GET_CHANNEL_SPACE_CHANGE: 862 Log.i(TAG, "enter handleMessage ----EVENT_GET_CHANNEL_SPACE_CHANGE"); 863 Long gChSpace = (Long) msg.obj; 864 //Log.d(TAG, "enter handleMessage ----gChSpace" + gChSpace); 865 break; 866 867 /* tune to default frequency after the band change callback . */ 868 869 case EVENT_BAND_CHANGE: 870 Log.i(TAG, "enter handleMessage ----EVENT_BAND_CHANGE"); 871 /* 872 * Tune to the last stored frequency at the 873 * enable/re-enable,else tune to the default frequency when band 874 * changes 875 */ 876 877 if (sdefaultSettingOn == true) { 878 /* Set the default frequency */ 879 if (sBand == FM_BAND_EUROPE_US) 880 lastTunedFrequency = (float) DEFAULT_FREQ_EUROPE; 881 else 882 lastTunedFrequency = (float) DEFAULT_FREQ_JAPAN; 883 } 884 885 mStatus = sFmRadio.rxTune_nb((int)(lastTunedFrequency.floatValue()*1000)); 886 if (mStatus == false) { 887 showAlert(getParent(), "FmRadio", "Not able to tune!!!!"); 888 } 889 890 break; 891 892 /* Enable RDS system after enale RDS callback . */ 893 894 case EVENT_ENABLE_RDS: 895 Log.i(TAG, "enter handleMessage ----EVENT_ENABLE_RDS"); 896 break; 897 898 /* Set RSSI after SET_RDS_AF callback */ 899 case EVENT_SET_RDS_AF: 900 Log.i(TAG, "enter handleMessage ----EVENT_SET_RDS_AF"); 901 break; 902 /* Set RDS AF after SET_RDS_SYSTEM callback */ 903 case EVENT_SET_RDS_SYSTEM: 904 Log.i(TAG, "enter handleMessage ----EVENT_SET_RDS_SYSTEM"); 905 break; 906 /* Set RSSI after disable RDS callback */ 907 case EVENT_DISABLE_RDS: 908 Log.i(TAG, "enter handleMessage ----EVENT_DISABLE_RDS"); 909 txtPsText.setText(null); 910 txtRadioText.setText(null); 911 break; 912 913 case EVENT_SET_DEEMP_FILTER: 914 Log.i(TAG, "enter handleMessage ----EVENT_SET_DEEMP_FILTER"); 915 break; 916 917 /* Display the PS text on UI */ 918 case EVENT_PS_CHANGED: 919 Log.i(TAG, "enter handleMessage ----EVENT_PS_CHANGED"); 920 921 if (FM_SEND_RDS_IN_BYTEARRAY == true) { 922 byte[] psName = (byte[]) msg.obj; 923 924 for (int i = 0; i < 4; i++) 925 Log.i(TAG, "psName" + psName[i]); 926 } else { 927 String ps = (String) msg.obj; 928 Log.i(TAG, "ps String is " + ps); 929 sbPs = new StringBuilder("[PS] "); 930 sbPs.append(ps); 931 //Log.i(TAG, "enter handleMessage ----EVENT_PS_CHANGED sbPs.toString()"+ sbPs.toString()); 932 txtPsText.setText(sbPs.toString()); 933 } 934 935 break; 936 937 case EVENT_SET_RSSI_THRESHHOLD: 938 Log.i(TAG, "enter handleMessage ----EVENT_SET_RSSI_THRESHHOLD"); 939 /* 940 * All the configurations will be completed here. So set the 941 * state to idle, so that user can configure again 942 */ 943 configurationState = CONFIGURATION_STATE_IDLE; 944 break; 945 case EVENT_SET_RF_DEPENDENT_MUTE: 946 Log.i(TAG,"enter handleMessage ----EVENT_SET_RF_DEPENDENT_MUTE"); 947 break; 948 949 case EVENT_COMPLETE_SCAN_STOP: 950 Log.i(TAG, "enter handleMessage ----EVENT_COMPLETE_SCAN_STOP"); 951 break; 952 953 case EVENT_COMPLETE_SCAN_DONE: 954 Log.i(TAG, "enter handleMessage ----EVENT_COMPLETE_SCAN_DONE"); 955 956 int[] channelList = (int[]) msg.obj; 957 int noOfChannels = (int) msg.arg2; 958 959 Log.i(TAG, "noOfChannels" + noOfChannels); 960 961 for (int i = 0; i < noOfChannels; i++) 962 Log.i(TAG, "channelList" + channelList[i]); 963 964 break; 965 966 case EVENT_GET_BAND : 967 968 Long gBand = (Long) msg.obj; 969 Log.i(TAG,"enter handleMessage ----EVENT_GET_BAND"); 970 Log.d(TAG, "enter handleMessage ----gBand" + gBand); 971 break; 972 973 case EVENT_GET_FREQUENCY : 974 975 Integer gFreq = (Integer) msg.obj; 976 Log.i(TAG,"enter handleMessage ----EVENT_GET_FREQUENCY"); 977 //Log.d(TAG, "enter handleMessage ----gFreq" + gFreq); 978 break; 979 case EVENT_GET_VOLUME : 980 Long gVol = (Long) msg.obj; 981 Log.i(TAG,"enter handleMessage ----EVENT_GET_VOLUME"); 982 Log.d(TAG, "enter handleMessage ----gVol" + gVol); 983 break; 984 case EVENT_GET_MODE : 985 Long gMode = (Long) msg.obj; 986 Log.i(TAG,"enter handleMessage ----EVENT_GET_MODE"); 987 Log.d(TAG, "enter handleMessage ----gMode" + gMode); 988 break; 989 case EVENT_GET_MUTE_MODE : 990 991 Long gMuteMode = (Long) msg.obj; 992 993 if(gMuteMode ==(long) FM_UNMUTE) 994 imgFmVolume.setImageResource(R.drawable.fm_volume); 995 else if (gMuteMode ==(long) FM_MUTE) 996 imgFmVolume.setImageResource(R.drawable.fm_volume_mute); 997 998 Log.i(TAG,"enter handleMessage ----EVENT_GET_MUTE_MODE"); 999 //Log.d(TAG, "enter handleMessage ----gMuteMode" + gMuteMode); 1000 break; 1001 case EVENT_GET_RF_MUTE_MODE : 1002 1003 Long gRfMuteMode = (Long) msg.obj; 1004 Log.i(TAG,"enter handleMessage ----EVENT_GET_RF_MUTE_MODE"); 1005 //Log.d(TAG, "enter handleMessage ----gRfMuteMode" + gRfMuteMode); 1006 break; 1007 case EVENT_GET_RSSI_THRESHHOLD : 1008 Long gRssi = (Long) msg.obj; 1009 Log.i(TAG,"enter handleMessage ----EVENT_GET_RSSI_THRESHHOLD"); 1010 Log.d(TAG, "enter handleMessage ----gRssi" + gRssi); 1011 break; 1012 1013 case EVENT_GET_RSSI : 1014 Integer rssi = (Integer) msg.obj; 1015 Log.i(TAG,"enter handleMessage ----EVENT_GET_RSSI"); 1016 Log.d(TAG, "enter handleMessage ----rssi" + rssi); 1017 break; 1018 case EVENT_GET_DEEMPHASIS_FILTER : 1019 Long gFilter= (Long) msg.obj; 1020 Log.i(TAG,"enter handleMessage ----EVENT_GET_DEEMPHASIS_FILTER"); 1021 Log.d(TAG, "enter handleMessage ----gFilter" + gFilter); 1022 break; 1023 1024 case EVENT_GET_RDS_SYSTEM : 1025 Long gRdsSys= (Long) msg.obj; 1026 Log.i(TAG, "enter handleMessage ----EVENT_GET_RDS_SYSTEM"); 1027 Log.d(TAG, "enter handleMessage ----gRdsSys" + gRdsSys); 1028 break; 1029 case EVENT_GET_RDS_GROUPMASK : 1030 Long gRdsMask= (Long) msg.obj; 1031 Log.i(TAG, "enter handleMessage ----EVENT_GET_RDS_GROUPMASK"); 1032 Log.d(TAG, "enter handleMessage ----gRdsMask" + gRdsMask); 1033 break; 1034 1035 case EVENT_MASTER_VOLUME_CHANGED: 1036 Integer vol = (Integer) msg.obj; 1037 mVolume = vol; 1038 Log.i(TAG, "enter handleMessage ----EVENT_MASTER_VOLUME_CHANGED"); 1039 Log.d(TAG, "enter handleMessage ----mVolume" + vol); 1040 } 1041 } 1042 }; 1043 1044 /* Display alert dialog */ 1045 public void showAlert(Context context, String title, String msg) { 1046 1047 new AlertDialog.Builder(context).setTitle(title).setIcon( 1048 android.R.drawable.ic_dialog_alert).setMessage(msg) 1049 .setNegativeButton(android.R.string.cancel, null).show(); 1050 1051 } 1052 1053 1054 private void setRdsConfig() { 1055 Log.i(TAG, "setRdsConfig()-entered"); 1056 configurationState = CONFIGURATION_STATE_PENDING; 1057 SharedPreferences fmConfigPreferences = getSharedPreferences( 1058 "fmConfigPreferences", MODE_PRIVATE); 1059 1060 // Set Band 1061 int band = fmConfigPreferences.getInt(BAND, DEFAULT_BAND); 1062 Log.i(TAG, "setRdsConfig()--- band= " + band); 1063 if (band != sBand) // If Band is same as the one set already donot set 1064 // it again 1065 { 1066 1067 if (MAKE_FM_APIS_BLOCKING == true) { 1068 // Code for blocking call 1069 mStatus = sFmRadio.rxSetBand(band); 1070 if (mStatus == false) { 1071 Log.e(TAG, "setRdsConfig()-- setBand ->Erorr"); 1072 showAlert(this, "FmRadio", 1073 "Cannot setBand to selected Value!!!!"); 1074 } else { 1075 sBand = band; 1076 if (sdefaultSettingOn == true) { 1077 /* Set the default frequency */ 1078 if (sBand == FM_BAND_EUROPE_US) 1079 lastTunedFrequency = (float) DEFAULT_FREQ_EUROPE; 1080 else 1081 lastTunedFrequency = (float) DEFAULT_FREQ_JAPAN; 1082 } 1083 1084 lastTunedFrequency = (float) lastTunedFrequency ; 1085 mStatus = sFmRadio.rxTune_nb((int)(lastTunedFrequency.floatValue()*1000)); 1086 if (mStatus == false) { 1087 showAlert(getParent(), "FmRadio", "Not able to tune!!!!"); 1088 } 1089 1090 } 1091 1092 } 1093 1094 else 1095 { 1096 1097 mStatus = sFmRadio.rxSetBand_nb(band); 1098 if (mStatus == false) { 1099 Log.e(TAG, "setRdsConfig()-- setBand ->Erorr"); 1100 showAlert(this, "FmRadio", 1101 "Cannot setBand to selected Value!!!!"); 1102 } else { 1103 sBand = band; 1104 if (sdefaultSettingOn == true) { 1105 /* Set the default frequency */ 1106 if (sBand == FM_BAND_EUROPE_US) 1107 lastTunedFrequency = (float) DEFAULT_FREQ_EUROPE; 1108 else 1109 lastTunedFrequency = (float) DEFAULT_FREQ_JAPAN; 1110 } 1111 1112 } 1113 } 1114 } 1115 1116 1117 // Set De-emp Filter 1118 int deEmp = fmConfigPreferences.getInt(DEEMP, DEFAULT_DEEMP); 1119 if (mDeEmpFilter != deEmp)// If De-Emp filter is same as the one set 1120 // already donot set it again 1121 { 1122 if (MAKE_FM_APIS_BLOCKING == true) 1123 mStatus = sFmRadio.rxSetDeEmphasisFilter(deEmp); 1124 else 1125 mStatus = sFmRadio.rxSetDeEmphasisFilter_nb(deEmp); 1126 1127 Log.i(TAG, "setRdsConfig()--- DeEmp= " + deEmp); 1128 1129 if (mStatus == false) { 1130 Log.e(TAG, "setRdsConfig()-- setDeEmphasisFilter ->Erorr"); 1131 showAlert(this, "FmRadio", 1132 "Cannot set De-Emp Fileter to selected Value!!!!"); 1133 1134 } 1135 mDeEmpFilter = deEmp; 1136 1137 } 1138 1139 1140 // Set Mode 1141 int mode = fmConfigPreferences.getInt(MODE, DEFAULT_MODE); 1142 if (mMode != mode)// If Mode is same as the one set already donot set it 1143 // again 1144 { 1145 1146 if (MAKE_FM_APIS_BLOCKING == true) 1147 mStatus = sFmRadio.rxSetMonoStereoMode(mode); 1148 else 1149 mStatus = sFmRadio.rxSetMonoStereoMode_nb(mode); 1150 if (mStatus == false) { 1151 showAlert(this, "FmRadio", "Not able to setmode!!!!"); 1152 } else { 1153 mMode = mode; 1154 if (mMode == 0) { 1155 imgFmMode.setImageResource(R.drawable.fm_stereo); 1156 } else { 1157 imgFmMode.setImageResource(R.drawable.fm_mono); 1158 } 1159 } 1160 1161 } 1162 1163 1164 /** Set channel spacing to the one selected by the user */ 1165 int channelSpace = fmConfigPreferences.getInt(CHANNELSPACE, 1166 DEFAULT_CHANNELSPACE); 1167 Log.i(TAG, "setChannelSpacing()--- channelSpace= " + channelSpace); 1168 if (channelSpace != sChannelSpace) // If channelSpace is same as the one 1169 // set already donot set 1170 // it again 1171 { 1172 if (MAKE_FM_APIS_BLOCKING == true) 1173 mStatus = sFmRadio.rxSetChannelSpacing(channelSpace); 1174 else 1175 mStatus = sFmRadio.rxSetChannelSpacing_nb(channelSpace); 1176 1177 if (mStatus == false) { 1178 Log.e(TAG, "setChannelSpacing()-- setChannelSpacing ->Erorr"); 1179 showAlert(this, "FmRadio", 1180 "Cannot setChannelSpacing to selected Value!!!!"); 1181 } 1182 sChannelSpace = channelSpace; 1183 } 1184 1185 1186 // set RDS related configuration 1187 boolean rdsEnable = fmConfigPreferences.getBoolean(RDS, DEFAULT_RDS); 1188 Log.i(TAG, "setRDS()--- rdsEnable= " + rdsEnable); 1189 if (mRds != rdsEnable) { 1190 1191 if (rdsEnable) { 1192 if (MAKE_FM_APIS_BLOCKING == true) 1193 mStatus = sFmRadio.rxEnableRds(); 1194 else 1195 mStatus = sFmRadio.rxEnableRds_nb(); 1196 if (mStatus == false) { 1197 Log.e(TAG, "setRDS()-- enableRds() ->Erorr"); 1198 showAlert(this, "FmRadio", "Cannot enable RDS!!!!"); 1199 } 1200 1201 } else { 1202 if (MAKE_FM_APIS_BLOCKING == true) 1203 mStatus = sFmRadio.rxDisableRds(); 1204 else 1205 mStatus = sFmRadio.rxDisableRds_nb(); 1206 1207 if (mStatus == false) { 1208 Log.e(TAG, "setRDS()-- disableRds() ->Erorr"); 1209 showAlert(this, "FmRadio", "Cannot disable RDS!!!!"); 1210 } else { 1211 Log.e(TAG, "setRDS()-- disableRds() ->success"); 1212 /* clear the PS and RDS text */ 1213 txtPsText.setText(null); 1214 txtRadioText.setText(null); 1215 } 1216 } 1217 mRds = rdsEnable; 1218 } 1219 1220 // setRdssystem 1221 int rdsSystem = fmConfigPreferences.getInt(RDSSYSTEM, 1222 DEFAULT_RDS_SYSTEM); 1223 if (DBG) 1224 Log.d(TAG, "setRdsSystem()--- rdsSystem= " + rdsSystem); 1225 if (mRdsSystem != rdsSystem) { 1226 // Set RDS-SYSTEM if a new choice is made by the user 1227 1228 if (MAKE_FM_APIS_BLOCKING == true) 1229 mStatus = sFmRadio.rxSetRdsSystem(fmConfigPreferences.getInt( 1230 RDSSYSTEM, DEFAULT_RDS_SYSTEM)); 1231 else 1232 mStatus = sFmRadio.rxSetRdsSystem_nb(fmConfigPreferences.getInt( 1233 RDSSYSTEM, DEFAULT_RDS_SYSTEM)); 1234 1235 if (mStatus == false) { 1236 Log.e(TAG, " setRdsSystem()-- setRdsSystem ->Erorr"); 1237 showAlert(this, "FmRadio", 1238 "Cannot set Rds System to selected Value!!!!"); 1239 } 1240 mRdsSystem = rdsSystem; 1241 } 1242 1243 boolean rdsAfSwitch = fmConfigPreferences.getBoolean(RDSAF, 1244 DEFAULT_RDS_AF); 1245 int rdsAf = 0; 1246 rdsAf = rdsAfSwitch ? 1 : 0; 1247 if (DBG) 1248 Log.d(TAG, "setRdsAf()--- rdsAfSwitch= " + rdsAf); 1249 if (mRdsAf != rdsAfSwitch) { 1250 // Set RDS-AF if a new choice is made by the user 1251 1252 if (MAKE_FM_APIS_BLOCKING == true) 1253 mStatus = sFmRadio.rxSetRdsAfSwitchMode(rdsAf); 1254 else 1255 mStatus = sFmRadio.rxSetRdsAfSwitchMode_nb(rdsAf); 1256 if (mStatus == false) { 1257 Log.e(TAG, "setRdsAf()-- setRdsAfSwitchMode(1) ->Erorr"); 1258 showAlert(this, "FmRadio", "Cannot set RDS AF Mode ON!!!!"); 1259 } 1260 mRdsAf = rdsAfSwitch; 1261 } 1262 // Set Rssi 1263 int rssiThreshHold = fmConfigPreferences.getInt(RSSI, DEFAULT_RSSI); 1264 Log.i(TAG, "setRssi()-ENTER --- rssiThreshHold= " + rssiThreshHold); 1265 1266 // Set RSSI if a new value is entered by the user 1267 1268 if (MAKE_FM_APIS_BLOCKING == true) 1269 mStatus = sFmRadio.rxSetRssiThreshold(rssiThreshHold); 1270 else 1271 mStatus = sFmRadio.rxSetRssiThreshold_nb(rssiThreshHold); 1272 1273 if (mStatus == false) { 1274 showAlert(this, "FmRadio", "Not able to setRssiThreshold!!!!"); 1275 } 1276 1277 mRssi = rssiThreshHold; 1278 1279 1280 Log.i(TAG, "setRdsConfig()-exit"); 1281 1282 } 1283 1284 /* Load the Default values from the preference when the application starts */ 1285 private void loadDefaultConfiguration() { 1286 1287 Log.i(TAG, "loadDefaultConfiguration()-entered"); 1288 SharedPreferences fmConfigPreferences = getSharedPreferences("fmConfigPreferences", 1289 MODE_PRIVATE); 1290 1291 if (mPreset) 1292 saveObject(); 1293 1294 /* Read the stations stored in DB and update the UI */ 1295 try { 1296 db.open(); 1297 Cursor c = db.getStation(1); 1298 if (c != null && c.moveToFirst()) 1299 mIsDbPresent = true; 1300 else 1301 mIsDbPresent = false; 1302 c.close(); 1303 db.close(); 1304 } catch (SQLException e) { 1305 mIsDbPresent = false; 1306 } catch (Exception ex) { 1307 mIsDbPresent = false; 1308 } 1309 1310 if (mIsDbPresent == false) { 1311 1312 Log.d(TAG, " mIsDbPresent writeobject" + mIsDbPresent); 1313 writeObject(); 1314 mIsDbPresent = true; 1315 } else { 1316 Log.d(TAG, " mIsDbPresent readobject" + mIsDbPresent); 1317 readObject(); 1318 } 1319 1320 Log.d(TAG, " mIsDbPresent " + mIsDbPresent); 1321 sBand = fmConfigPreferences.getInt(BAND, DEFAULT_BAND); 1322 lastTunedFrequency = fmConfigPreferences.getFloat(FREQUENCY, 1323 (sBand == FM_BAND_EUROPE_US ? DEFAULT_FREQ_EUROPE 1324 : DEFAULT_FREQ_JAPAN)); 1325 mMode = fmConfigPreferences.getInt(MODE, DEFAULT_MODE); 1326 mToggleMute = fmConfigPreferences.getBoolean(MUTE, false); 1327 mRdsState = fmConfigPreferences.getBoolean(RDS, false); 1328 1329 if (DBG) 1330 Log.d(TAG, " Load default band " + sBand + "default volume" + mVolume + "last fre" 1331 + lastTunedFrequency + "mode" + mMode + "mToggleMute" + mToggleMute +"mRdsState"+mRdsState); 1332 1333 } 1334 1335 private void createEmptyList() { 1336 1337 Log.d(TAG, " createEmptyList "); 1338 stations = new ArrayList<HashMap<String, String>>(6); 1339 for (int i = 1; i < 7; i++) { 1340 HashMap<String, String> stationsMap = new HashMap<String, String>(); 1341 1342 stationsMap.put(ITEM_KEY, String.valueOf(i)); 1343 stationsMap.put(ITEM_VALUE, ""); 1344 stationsMap.put(ITEM_NAME, ""); 1345 stations.add(i - 1, stationsMap); 1346 } 1347 1348 } 1349 /* Save the Default values to the preference when the application exits */ 1350 private void saveDefaultConfiguration() { 1351 Log.i(TAG, "saveDefaultConfiguration()-Entered"); 1352 1353 SharedPreferences fmConfigPreferences = getSharedPreferences( 1354 "fmConfigPreferences", MODE_PRIVATE); 1355 SharedPreferences.Editor editor = fmConfigPreferences.edit(); 1356 editor.putInt(BAND, sBand); 1357 editor.putBoolean(MUTE, mToggleMute); 1358 editor.putFloat(FREQUENCY, lastTunedFrequency); 1359 if (DBG) 1360 Log.d(TAG, " save default band " + sBand + "default volume" + mVolume 1361 + "last fre" + lastTunedFrequency+"mToggleMute"+mToggleMute); 1362 /* Write the stations stored to text file */ 1363 saveObject(); 1364 editor.commit(); 1365 } 1366 1367 /* Read the Stations from the text file in file system */ 1368 void readObject() { 1369 Log.i(TAG, "readObject "); 1370 1371 db.open(); 1372 Cursor c = db.getAllStations(); 1373 int count = c.getCount(); 1374 1375 Log.i(TAG, "readObject cursor count " + count); 1376 int iCount = 0; 1377 if (c.moveToFirst()) { 1378 do { 1379 1380 HashMap<String, String> stations1 = new HashMap<String, String>(); 1381 1382 stations1.put(ITEM_KEY, c.getString(1)); 1383 stations1.put(ITEM_VALUE, c.getString(2)); 1384 stations1.put(ITEM_NAME, c.getString(3)); 1385 stations.set(iCount, stations1); 1386 iCount++; 1387 1388 } while (c.moveToNext()); 1389 1390 } else 1391 Toast.makeText(this, "No station found", Toast.LENGTH_LONG).show(); 1392 c.close(); 1393 db.close(); 1394 1395 } 1396 1397 /* Write the Stations to the text file in file system */ 1398 void writeObject() { 1399 Log.i(TAG, "writeObject "); 1400 1401 db.open(); 1402 long id; 1403 id = db.insertStation("1", "", ""); 1404 id = db.insertStation("2", "", " "); 1405 id = db.insertStation("3", "", ""); 1406 id = db.insertStation("4", "", " "); 1407 id = db.insertStation("5", "", " "); 1408 id = db.insertStation("6", "", " "); 1409 db.close(); 1410 1411 } 1412 1413 void saveObject() { 1414 1415 Log.i(TAG, "enter saveObject"); 1416 db.open(); 1417 Iterator iterator = stations.iterator(); 1418 1419 while (iterator.hasNext()) { 1420 HashMap<String, String> item = (HashMap<String, String>) iterator.next(); 1421 Object v = item.get(ITEM_VALUE); 1422 Object n = item.get(ITEM_NAME); 1423 Object i = item.get(ITEM_KEY); 1424 1425 try { 1426 mIndex = Integer.parseInt(i.toString()); 1427 updateSetStation((mIndex - 1), v.toString(), n.toString()); 1428 db.updateStation(mIndex, i.toString(), v.toString(), n.toString()); 1429 } catch (Exception e) { 1430 Log.e(TAG, "Exception"); 1431 e.printStackTrace(); 1432 } 1433 1434 } 1435 1436 db.close(); 1437 1438 } 1439 /* Initialise all the widgets */ 1440 private void initControls() { 1441 /** 1442 * Start FM RX 1443 */ 1444 Log.i(TAG, "enter initControls"); 1445 1446 imgFmPower = (ImageView) findViewById(R.id.imgPower); 1447 imgFmPower.setOnClickListener(this); 1448 1449 imgFmMode = (ImageView) findViewById(R.id.imgMode); 1450 if (mMode == 0) { 1451 Log.i(TAG, " setting stereo icon" +mMode); 1452 imgFmMode.setImageResource(R.drawable.fm_stereo); 1453 } else { 1454 Log.i(TAG, " setting mono icon" +mMode); 1455 imgFmMode.setImageResource(R.drawable.fm_mono); 1456 } 1457 1458 imgFmVolume = (ImageView) findViewById(R.id.imgMute); 1459 imgFmVolume.setOnClickListener(this); 1460 1461 if (mToggleMute == true) { 1462 imgFmVolume.setImageResource(R.drawable.fm_volume_mute); 1463 Log.i(TAG, " initControls mute" +mToggleMute); 1464 } else { 1465 imgFmVolume.setImageResource(R.drawable.fm_volume); 1466 Log.i(TAG, " initControls mute" +mToggleMute); 1467 } 1468 1469 1470 imgFmSeekUp = (ImageButton) findViewById(R.id.imgseekup); 1471 imgFmSeekUp.setOnClickListener(this); 1472 1473 imgFmSeekDown = (ImageButton) findViewById(R.id.imgseekdown); 1474 imgFmSeekDown.setOnClickListener(this); 1475 1476 txtFmRxTunedFreq = (TextView) findViewById(R.id.txtRxFreq); 1477 txtFmRxTunedFreq.setText(lastTunedFrequency.toString()); 1478 1479 txtStatusMsg = (TextView) findViewById(R.id.txtStatusMsg); 1480 txtRadioText = (TextView) findViewById(R.id.txtRadioText); 1481 txtPsText = (TextView) findViewById(R.id.txtPsText); 1482 1483 txtStationName = (TextView) findViewById(R.id.txtStationName); 1484 txtStationName.setText(null); 1485 1486 btnStation1 = (Button) findViewById(R.id.station1); 1487 btnStation1.setOnClickListener(this); 1488 btnStation1.setEnabled(false); 1489 1490 btnStation2 = (Button) findViewById(R.id.station2); 1491 btnStation2.setOnClickListener(this); 1492 btnStation2.setEnabled(false); 1493 1494 btnStation3 = (Button) findViewById(R.id.station3); 1495 btnStation3.setOnClickListener(this); 1496 btnStation3.setEnabled(false); 1497 1498 btnStation4 = (Button) findViewById(R.id.station4); 1499 btnStation4.setOnClickListener(this); 1500 btnStation4.setEnabled(false); 1501 1502 btnStation5 = (Button) findViewById(R.id.station5); 1503 btnStation5.setOnClickListener(this); 1504 btnStation5.setEnabled(false); 1505 1506 btnStation6 = (Button) findViewById(R.id.station6); 1507 btnStation6.setOnClickListener(this); 1508 btnStation6.setEnabled(false); 1509 1510 // Get the notification manager service. 1511 mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 1512 1513 } 1514 1515 /** Adds Delay of 3 seconds */ 1516 private void insertDelayThread() { 1517 1518 new Thread() { 1519 public void run() { 1520 try { 1521 // Add some delay to make sure all configuration has been 1522 // completed. 1523 sleep(3000); 1524 } catch (Exception e) { 1525 Log.e(TAG, "InsertDelayThread()-- Exception !!"); 1526 } 1527 // Dismiss the Dialog 1528 configPd.dismiss(); 1529 } 1530 }.start(); 1531 1532 } 1533 1534 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 1535 super.onActivityResult(requestCode, resultCode, data); 1536 Log.i(TAG, "onActivityResult"); 1537 switch (requestCode) { 1538 case (ACTIVITY_PRESET): { 1539 if (resultCode == Activity.RESULT_OK) { 1540 Log.i(TAG, "Prests saved"); 1541 saveObject(); 1542 1543 } 1544 } 1545 break; 1546 case (ACTIVITY_TUNE): { 1547 if (resultCode == Activity.RESULT_OK && data != null) { 1548 1549 Bundle extras = data.getExtras(); 1550 if (extras != null) { 1551 1552 lastTunedFrequency = (float) extras.getFloat(FREQ_VALUE, 0); 1553 txtFmRxTunedFreq.setText(lastTunedFrequency.toString()); 1554 mStatus = sFmRadio.rxTune_nb((int)(lastTunedFrequency.floatValue()*1000)); 1555 if (mStatus == false) { 1556 showAlert(this, "FmRadio", "Not able to tune!!!!"); 1557 } 1558 } 1559 } 1560 } 1561 break; 1562 1563 case (ACTIVITY_CONFIG): { 1564 if (resultCode == Activity.RESULT_OK) { 1565 Log.i(TAG, "ActivityFmRdsConfig configurationState " 1566 + configurationState); 1567 if(configurationState == CONFIGURATION_STATE_IDLE) 1568 { 1569 1570 1571 setRdsConfig(); 1572 configPd = ProgressDialog.show(this, "Please wait..", 1573 "Applying new Configuration", true, false); 1574 // The delay is inserted to make sure all the configurations 1575 // have been completed. 1576 insertDelayThread(); 1577 } 1578 } 1579 1580 } 1581 break; 1582 1583 } 1584 } 1585 1586 public boolean onKeyDown(int keyCode, KeyEvent event) { 1587 1588 switch (keyCode) { 1589 case KeyEvent.KEYCODE_DPAD_DOWN: 1590 1591 return true; 1592 case KeyEvent.KEYCODE_DPAD_UP: 1593 1594 return true; 1595 case KeyEvent.KEYCODE_BACK: 1596 1597 saveDefaultConfiguration(); 1598 finish(); 1599 return true; 1600 /* Keys A to L are mapped to different get APIs for Testing */ 1601 case KeyEvent.KEYCODE_A: 1602 1603 if (MAKE_FM_APIS_BLOCKING == true) { 1604 // Code for blocking call 1605 Log.i(TAG, "Testing getVolume() returned volume = " 1606 + sFmRadio.rxGetVolume()); 1607 1608 } else { 1609 // Code for non blocking call 1610 Log.i(TAG, "Testing getVolume_nb() returned volume = " 1611 + sFmRadio.rxGetVolume_nb()); 1612 1613 } 1614 1615 1616 return true; 1617 1618 case KeyEvent.KEYCODE_B: 1619 1620 if (MAKE_FM_APIS_BLOCKING == true) { 1621 // Code for blocking call 1622 Log.i(TAG, "Testing getTunedFrequency() returned Tuned Freq = " 1623 + sFmRadio.rxGetTunedFrequency()); 1624 1625 } else { 1626 // Code for non blocking call 1627 Log.i(TAG, "Testing getTunedFrequency_nb() returned Tuned Freq = " 1628 + sFmRadio.rxGetTunedFrequency_nb()); 1629 1630 } 1631 1632 return true; 1633 1634 case KeyEvent.KEYCODE_C: 1635 if (MAKE_FM_APIS_BLOCKING == true) { 1636 // Code for blocking call 1637 Log.i(TAG, "Testing getRssiThreshold() returned RSSI thrshld = " 1638 + sFmRadio.rxGetRssiThreshold()); 1639 } else { 1640 // Code for non blocking call 1641 Log.i(TAG, "Testing getRssiThreshold_nb() returned RSSI thrshld = " 1642 + sFmRadio.rxGetRssiThreshold_nb()); 1643 } 1644 1645 return true; 1646 1647 case KeyEvent.KEYCODE_D: 1648 if (MAKE_FM_APIS_BLOCKING == true) { 1649 // Code for blocking call 1650 Log.i(TAG, "Testing getBand() returned Band = " 1651 + sFmRadio.rxGetBand()); 1652 } else { 1653 // Code for non blocking call 1654 Log.i(TAG, "Testing getBand_nb() returned Band = " 1655 + sFmRadio.rxGetBand_nb()); 1656 } 1657 1658 return true; 1659 1660 case KeyEvent.KEYCODE_E: 1661 if (MAKE_FM_APIS_BLOCKING == true) { 1662 // Code for blocking call 1663 Log.i(TAG, "Testing getDeEmphasisFilter() returned De-emp = " 1664 + sFmRadio.rxGetDeEmphasisFilter()); 1665 } else { 1666 // Code for non blocking call 1667 Log.i(TAG, "Testing getDeEmphasisFilter_nb() returned De-emp = " 1668 + sFmRadio.rxGetDeEmphasisFilter_nb()); 1669 } 1670 1671 return true; 1672 1673 case KeyEvent.KEYCODE_F: 1674 if (MAKE_FM_APIS_BLOCKING == true) { 1675 // Code for blocking call 1676 Log.i(TAG, "Testing getMonoStereoMode() returned MonoStereo = " 1677 + sFmRadio.rxGetMonoStereoMode()); 1678 1679 } else { 1680 // Code for non blocking call 1681 Log.i(TAG, "Testing getMonoStereoMode_nb() returned MonoStereo = " 1682 + sFmRadio.rxGetMonoStereoMode_nb()); 1683 1684 } 1685 1686 return true; 1687 1688 case KeyEvent.KEYCODE_G: 1689 if (MAKE_FM_APIS_BLOCKING == true) { 1690 // Code for blocking call 1691 Log.i(TAG, "Testing getMuteMode() returned MuteMode = " 1692 + sFmRadio.rxGetMuteMode()); 1693 } else { 1694 // Code for non blocking call 1695 Log.i(TAG, "Testing getMuteMode_nb() returned MuteMode = " 1696 + sFmRadio.rxGetMuteMode_nb()); 1697 } 1698 1699 return true; 1700 1701 case KeyEvent.KEYCODE_H: 1702 if (MAKE_FM_APIS_BLOCKING == true) { 1703 // Code for blocking call 1704 Log.i(TAG, 1705 "Testing getRdsAfSwitchMode() returned RdsAfSwitchMode = " 1706 + sFmRadio.rxGetRdsAfSwitchMode()); 1707 } else { 1708 // Code for non blocking call 1709 Log.i(TAG, 1710 "Testing getRdsAfSwitchMode_nb() returned RdsAfSwitchMode = " 1711 + sFmRadio.rxGetRdsAfSwitchMode_nb()); 1712 } 1713 1714 return true; 1715 1716 case KeyEvent.KEYCODE_I: 1717 if (MAKE_FM_APIS_BLOCKING == true) { 1718 // Code for blocking call 1719 Log.i(TAG, "Testing getRdsGroupMask() returned RdsGrpMask = " 1720 + sFmRadio.rxGetRdsGroupMask()); 1721 } else { 1722 // Code for non blocking call 1723 Log.i(TAG, "Testing getRdsGroupMask_nb() returned RdsGrpMask = " 1724 + sFmRadio.rxGetRdsGroupMask_nb()); 1725 } 1726 1727 return true; 1728 1729 case KeyEvent.KEYCODE_J: 1730 if (MAKE_FM_APIS_BLOCKING == true) { 1731 // Code for blocking call 1732 Log.i(TAG, "Testing getRdsSystem() returned Rds System = " 1733 + sFmRadio.rxGetRdsSystem()); 1734 } else { 1735 // Code for non blocking call 1736 Log.i(TAG, "Testing getRdsSystem_nb() returned Rds System = " 1737 + sFmRadio.rxGetRdsSystem_nb()); 1738 } 1739 1740 return true; 1741 1742 case KeyEvent.KEYCODE_K: 1743 if (MAKE_FM_APIS_BLOCKING == true) { 1744 // Code for blocking call 1745 Log.i(TAG, 1746 "Testing getRfDependentMuteMode() returned RfDepndtMuteMode = " 1747 + sFmRadio.rxGetRfDependentMuteMode()); 1748 } else { 1749 // Code for non blocking call 1750 Log.i(TAG, 1751 "Testing getRfDependentMuteMode_nb() returned RfDepndtMuteMode = " 1752 + sFmRadio.rxGetRfDependentMuteMode_nb()); 1753 } 1754 1755 return true; 1756 1757 case KeyEvent.KEYCODE_L: 1758 1759 if (MAKE_FM_APIS_BLOCKING == true) { 1760 1761 LayoutInflater inflater = getLayoutInflater(); 1762 View layout = inflater.inflate(R.layout.toast, 1763 (ViewGroup) findViewById(R.id.toast_layout)); 1764 TextView text = (TextView) layout.findViewById(R.id.text); 1765 text.setText("The current Rssi " + sFmRadio.rxGetRssi()); 1766 1767 Toast toast = new Toast(getApplicationContext()); 1768 toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_VERTICAL, 0, 0); 1769 toast.setDuration(Toast.LENGTH_LONG); 1770 toast.setView(layout); 1771 toast.show(); 1772 } 1773 else 1774 { 1775 Log.i(TAG, 1776 "Testing rxGetRssi_nb() returned = " 1777 + sFmRadio.rxGetRssi_nb()); 1778 } 1779 1780 return true; 1781 1782 case KeyEvent.KEYCODE_M: 1783 Log.i(TAG, "Testing isValidChannel() returned isValidChannel = " 1784 + sFmRadio.rxIsValidChannel()); 1785 1786 return true; 1787 1788 case KeyEvent.KEYCODE_N: 1789 Log.i(TAG, "Testing getFwVersion() returned getFwVersion = " 1790 + sFmRadio.rxGetFwVersion()); 1791 1792 return true; 1793 1794 case KeyEvent.KEYCODE_O: 1795 if (MAKE_FM_APIS_BLOCKING == true) { 1796 // Code for blocking call 1797 Log.i(TAG, 1798 "Testing getChannelSpacing() returned getChannelSpacing = " 1799 + sFmRadio.rxGetChannelSpacing()); 1800 } else { 1801 // Code for non blocking call 1802 Log.i(TAG, 1803 "Testing getChannelSpacing_nb() returned getChannelSpacing = " 1804 + sFmRadio.rxGetChannelSpacing_nb()); 1805 } 1806 1807 1808 return true; 1809 1810 case KeyEvent.KEYCODE_P: 1811 Log.i(TAG, "Testing completescan()"); 1812 sFmRadio.rxCompleteScan_nb(); 1813 return true; 1814 1815 case KeyEvent.KEYCODE_Q: 1816 1817 if (MAKE_FM_APIS_BLOCKING == true) { 1818 Log.i(TAG, 1819 "Testing getCompleteScanProgress() returned scan progress = " 1820 + sFmRadio.rxGetCompleteScanProgress()); 1821 } 1822 else 1823 { 1824 Log.i(TAG, 1825 "Testing getCompleteScanProgress() returned scan progress = " 1826 + sFmRadio.rxGetCompleteScanProgress_nb()); 1827 } 1828 1829 return true; 1830 1831 case KeyEvent.KEYCODE_R: 1832 if (MAKE_FM_APIS_BLOCKING == true) { 1833 Log.i(TAG, "Testing stopCompleteScan() returned status = " 1834 + sFmRadio.rxStopCompleteScan()); 1835 } 1836 else 1837 { 1838 Log.i(TAG, "Testing stopCompleteScan() returned status = " 1839 + sFmRadio.rxStopCompleteScan_nb()); 1840 } 1841 1842 return true; 1843 1844 case KeyEvent.KEYCODE_S: 1845 1846 if (MAKE_FM_APIS_BLOCKING == true) { 1847 // Code for blocking call 1848 Log.i(TAG, 1849 "Testing setRfDependentMuteMode() returned RfDepndtMuteMode = " 1850 + sFmRadio.rxSetRfDependentMuteMode(1)); 1851 } else { 1852 // Code for non blocking call 1853 Log.i(TAG, 1854 "Testing setRfDependentMuteMode() returned RfDepndtMuteMode = " 1855 + sFmRadio.rxSetRfDependentMuteMode_nb(1)); 1856 } 1857 1858 return true; 1859 1860 } 1861 1862 return false; 1863 } 1864 1865 /* Get the stored frequency from the arraylist and tune to that frequency */ 1866 void tuneStationFrequency(String text) { 1867 try { 1868 float iFreq = Float.parseFloat(text); 1869 if (iFreq != 0) { 1870 lastTunedFrequency = (float) iFreq ; 1871 if (DBG) 1872 Log.d(TAG, "lastTunedFrequency" + lastTunedFrequency); 1873 mStatus = sFmRadio.rxTune_nb((int)(lastTunedFrequency.floatValue()*1000)); 1874 if (mStatus == false) { 1875 showAlert(getParent(), "FmRadio", "Not able to tune!!!!"); 1876 } 1877 } else { 1878 1879 new AlertDialog.Builder(this).setIcon( 1880 android.R.drawable.ic_dialog_alert).setMessage( 1881 "Enter valid frequency!!").setNegativeButton( 1882 android.R.string.ok, null).show(); 1883 1884 } 1885 } catch (NumberFormatException nfe) { 1886 Log.e(TAG, "nfe"); 1887 } 1888 } 1889 1890 public void onClick(View v) { 1891 int id = v.getId(); 1892 1893 switch (id) { 1894 case R.id.imgPower: 1895 1896 /* 1897 * The exit from the FM application happens here The audio will be 1898 * disabled and when he callback for this is recived, FM will be 1899 * disabled 1900 */ 1901 1902 // mStatus = sFmRadio.rxDisableAudioRouting(); 1903 // Log.d(TAG, "mStatus is : " + mStatus ); 1904 1905 // try{ 1906 // if (mStatus == false) { 1907 // showAlert(getParent(), "FmRadio", 1908 // "Not able to disable audio!!!!"); 1909 // } 1910 // }catch (NumberFormatException e) { 1911 // Log.e(TAG, "showAlert - disableAudioRouting exception (" + e.toString() + ")"); 1912 // } 1913 1914 mStatus = sFmRadio.rxDisable(); 1915 mPreset = false; 1916 break; 1917 case R.id.imgMode: 1918 break; 1919 //case R.id.imgAudiopath: 1920 1921 // TODO 1922 //break; 1923 case R.id.imgMute: 1924 1925 1926 Log.d(TAG, " imgMute mToggleMute " + mToggleMute ); 1927 int muteValue =0; 1928 if(mToggleMute ==true) 1929 muteValue =1 ; 1930 else 1931 muteValue =0; 1932 1933 if (MAKE_FM_APIS_BLOCKING == true) { 1934 // Code for blocking call 1935 mStatus = sFmRadio.rxSetMuteMode(muteValue); 1936 } else { 1937 // Code for non blocking call 1938 mStatus = sFmRadio.rxSetMuteMode_nb(muteValue); 1939 } 1940 1941 if (mStatus == false) { 1942 showAlert(this, "FmRadio", "Not able to setmute!!!!"); 1943 } else { 1944 1945 mToggleMute = !mToggleMute ; 1946 if (mToggleMute == true) { 1947 imgFmVolume.setImageResource(R.drawable.fm_volume_mute); 1948 } else { 1949 imgFmVolume.setImageResource(R.drawable.fm_volume); 1950 } 1951 } 1952 1953 break; 1954 1955 case R.id.imgseekdown: 1956 mDirection = FM_SEEK_DOWN; 1957 // FM seek down 1958 1959 if (mSeekState == SEEK_REQ_STATE_IDLE) { 1960 txtStationName.setText(null); // set the station name to null 1961 mStatus = sFmRadio.rxSeek_nb(mDirection); 1962 if (mStatus == false) { 1963 showAlert(this, "FmRadio", "Not able to seek down!!!!"); 1964 } else { 1965 mSeekState = SEEK_REQ_STATE_PENDING; 1966 txtStatusMsg.setText(R.string.seeking); 1967 } 1968 1969 } 1970 1971 break; 1972 case R.id.imgseekup: 1973 mDirection = FM_SEEK_UP; 1974 // FM seek up 1975 if (mSeekState == SEEK_REQ_STATE_IDLE) { 1976 txtStationName.setText(null); // set the station name to null 1977 mStatus = sFmRadio.rxSeek_nb(mDirection); 1978 if (mStatus == false) { 1979 showAlert(this, "FmRadio", "Not able to seek up!!!!"); 1980 1981 } else { 1982 mSeekState = SEEK_REQ_STATE_PENDING; 1983 txtStatusMsg.setText(R.string.seeking); 1984 } 1985 } 1986 1987 break; 1988 case R.id.station1: 1989 mStationIndex = 0; 1990 updateStationDisplay(mStationIndex); 1991 1992 break; 1993 case R.id.station2: 1994 mStationIndex = 1; 1995 updateStationDisplay(mStationIndex); 1996 1997 break; 1998 case R.id.station3: 1999 mStationIndex = 2; 2000 updateStationDisplay(mStationIndex); 2001 2002 break; 2003 case R.id.station4: 2004 mStationIndex = 3; 2005 updateStationDisplay(mStationIndex); 2006 break; 2007 2008 case R.id.station5: 2009 mStationIndex = 4; 2010 updateStationDisplay(mStationIndex); 2011 2012 break; 2013 case R.id.station6: 2014 mStationIndex = 5; 2015 updateStationDisplay(mStationIndex); 2016 break; 2017 } 2018 2019 } 2020 2021 /* Gets the stored frequency and tunes to it. */ 2022 void updateStationDisplay(int index) { 2023 String tunedFreq = null; 2024 tunedFreq = GetStation(index); 2025 tuneStationFrequency(tunedFreq); 2026 txtFmRxTunedFreq.setText(tunedFreq.toString()); 2027 2028 } 2029 2030 /* Creates the menu items */ 2031 public boolean onCreateOptionsMenu(Menu menu) { 2032 2033 super.onCreateOptionsMenu(menu); 2034 MenuItem item; 2035 2036 item = menu.add(0, MENU_CONFIGURE, 0, R.string.configure); 2037 item.setIcon(R.drawable.configure); 2038 2039 item = menu.add(0, MENU_ABOUT, 0, R.string.about); 2040 item.setIcon(R.drawable.fm_menu_help); 2041 2042 item = menu.add(0, MENU_EXIT, 0, R.string.exit); 2043 item.setIcon(R.drawable.icon); 2044 2045 item = menu.add(0, MENU_PRESET, 0, R.string.preset); 2046 item.setIcon(R.drawable.fm_menu_preferences); 2047 2048 item = menu.add(0, MENU_SETFREQ, 0, R.string.setfreq); 2049 item.setIcon(R.drawable.fm_menu_manage); 2050 2051 return true; 2052 } 2053 2054 /* Handles item selections */ 2055 public boolean onOptionsItemSelected(MenuItem item) { 2056 2057 switch (item.getItemId()) { 2058 case MENU_CONFIGURE: 2059 /* Start the configuration window */ 2060 Intent irds = new Intent(INTENT_RDS_CONFIG); 2061 startActivityForResult(irds, ACTIVITY_CONFIG); 2062 break; 2063 case MENU_PRESET: 2064 /* Start the Presets window */ 2065 Intent i = new Intent(INTENT_PRESET); 2066 mPreset = true; 2067 startActivity(i); 2068 break; 2069 case MENU_EXIT: 2070 /* 2071 * The exit from the FM application happens here The audio will be 2072 * disabled and when he callback for this is recived, FM will be 2073 * disabled 2074 */ 2075 // mStatus = sFmRadio.rxDisableAudioRouting(); 2076 // if (mStatus == false) { 2077 // showAlert(getParent(), "FmRadio", 2078 // "Not able to disable audio!!!!"); 2079 // } 2080 // Log.d(TAG, "MENU_EXIT ------------------- 2"); 2081 2082 mStatus = sFmRadio.rxDisable(); 2083 mPreset = false; 2084 2085 break; 2086 case MENU_ABOUT: 2087 /* Start the help window */ 2088 Intent iTxHelp = new Intent(INTENT_RXHELP); 2089 startActivity(iTxHelp); 2090 break; 2091 2092 case MENU_SETFREQ: 2093 /* Start the Manual frequency input window */ 2094 Intent iRxTune = new Intent(INTENT_RXTUNE); 2095 startActivityForResult(iRxTune, ACTIVITY_TUNE); 2096 break; 2097 2098 } 2099 return super.onOptionsItemSelected(item); 2100 } 2101 2102 protected void onSaveInstanceState(Bundle icicle) { 2103 super.onSaveInstanceState(icicle); 2104 Log.i(TAG, "onSaveInstanceState"); 2105 /* save the fm state into bundle for the activity restart */ 2106 mFmInterrupted = true; 2107 Bundle fmState = new Bundle(); 2108 fmState.putBoolean(FM_INTERRUPTED_KEY, mFmInterrupted); 2109 2110 icicle.putBundle(FM_STATE_KEY, fmState); 2111 } 2112 2113 public void onStart() { 2114 Log.i(TAG, "onStart"); 2115 super.onStart(); 2116 } 2117 2118 public void onPause() { 2119 super.onPause(); 2120 Log.i(TAG, "onPause"); 2121 2122 if (pd != null) 2123 pd.dismiss(); 2124 2125 saveDefaultConfiguration(); 2126 2127 } 2128 2129 public void onConfigurationChanged(Configuration newConfig) { 2130 Log.i(TAG, "onConfigurationChanged"); 2131 super.onConfigurationChanged(newConfig); 2132 2133 } 2134 2135 public void onResume() { 2136 Log.i(TAG, "onResume"); 2137 super.onResume(); 2138 if(mFmServiceConnected == true) 2139 startup(); 2140 } 2141 2142 public void onDestroy() { 2143 Log.i(TAG, "onDestroy"); 2144 super.onDestroy(); 2145 /* 2146 * Unregistering the receiver , so that we dont handle any FM events 2147 * when out of the FM application screen 2148 */ 2149 unregisterReceiver(mReceiver); 2150 } 2151 2152 // Receives all of the FM intents and dispatches to the proper handler 2153 2154 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 2155 2156 public void onReceive(Context context, Intent intent) { 2157 2158 String fmAction = intent.getAction(); 2159 2160 Log.i(TAG, "enter onReceive" + fmAction); 2161 if (fmAction.equals(FmRadioIntent.FM_ENABLED_ACTION)) { 2162 Log.i(TAG, "enter onReceive FM_ENABLED_ACTION " + fmAction); 2163 2164 mHandler.sendMessage(mHandler 2165 .obtainMessage(EVENT_FM_ENABLED, 0)); 2166 } 2167 if (fmAction.equals(FmRadioIntent.FM_DISABLED_ACTION)) { 2168 Log.i(TAG, "enter onReceive FM_DISABLED_ACTION " + fmAction); 2169 mHandler.sendMessage(mHandler.obtainMessage(EVENT_FM_DISABLED, 2170 0)); 2171 } 2172 2173 if (fmAction.equals(FmRadioIntent.SET_MODE_MONO_STEREO_ACTION)) { 2174 Log.i(TAG, "enter onReceive SET_MODE_MONO_STEREO_ACTION " 2175 + fmAction); 2176 mHandler.sendMessage(mHandler.obtainMessage( 2177 EVENT_MONO_STEREO_CHANGE, 0)); 2178 } 2179 if (fmAction 2180 .equals(FmRadioIntent.DISPLAY_MODE_MONO_STEREO_ACTION)) { 2181 Log.i(TAG, "enter onReceive DISPLAY_MODE_MONO_STEREO_ACTION " 2182 + fmAction); 2183 Integer modeDisplay = intent.getIntExtra( 2184 FmRadioIntent.MODE_MONO_STEREO, 0); 2185 mHandler.sendMessage(mHandler.obtainMessage( 2186 EVENT_MONO_STEREO_DISPLAY, modeDisplay)); 2187 } 2188 2189 if (fmAction.equals(FmRadioIntent.RDS_TEXT_CHANGED_ACTION)) { 2190 Log.i(TAG, "enter onReceive RDS_TEXT_CHANGED_ACTION " 2191 + fmAction); 2192 if (FM_SEND_RDS_IN_BYTEARRAY == true) { 2193 Bundle extras = intent.getExtras(); 2194 2195 byte[] rdsText = extras.getByteArray(FmRadioIntent.RDS); 2196 int status = extras.getInt(FmRadioIntent.STATUS, 0); 2197 2198 mHandler.sendMessage(mHandler.obtainMessage(EVENT_RDS_TEXT, 2199 status, 0, rdsText)); 2200 } else { 2201 String rdstext = intent 2202 .getStringExtra(FmRadioIntent.RADIOTEXT_CONVERTED); 2203 mHandler.sendMessage(mHandler.obtainMessage(EVENT_RDS_TEXT, 2204 rdstext)); 2205 } 2206 } 2207 if (fmAction.equals(FmRadioIntent.PI_CODE_CHANGED_ACTION)) { 2208 Log 2209 .i(TAG, "enter onReceive PI_CODE_CHANGED_ACTION " 2210 + fmAction); 2211 2212 Integer pi = intent.getIntExtra(FmRadioIntent.PI, 0); 2213 2214 mHandler.sendMessage(mHandler.obtainMessage(EVENT_PI_CODE, pi 2215 .toString())); 2216 } 2217 2218 if (fmAction.equals(FmRadioIntent.TUNE_COMPLETE_ACTION)) { 2219 Log.i(TAG, "enter onReceive TUNE_COMPLETE_ACTION " + fmAction); 2220 2221 int tuneFreq = intent.getIntExtra( 2222 FmRadioIntent.TUNED_FREQUENCY, 0); 2223 2224 mHandler.sendMessage(mHandler.obtainMessage( 2225 EVENT_TUNE_COMPLETE, tuneFreq)); 2226 2227 } 2228 2229 if (fmAction.equals(FmRadioIntent.COMPLETE_SCAN_PROGRESS_ACTION)) { 2230 Log.i(TAG, "enter onReceive COMPLETE_SCAN_PROGRESS_ACTION " + fmAction); 2231 2232 int progress = intent.getIntExtra( 2233 FmRadioIntent.SCAN_PROGRESS, 0); 2234 2235 mHandler.sendMessage(mHandler.obtainMessage( 2236 EVENT_COMPLETE_SCAN_PROGRESS, progress)); 2237 2238 } 2239 2240 2241 if (fmAction.equals(FmRadioIntent.VOLUME_CHANGED_ACTION)) { 2242 Log.i(TAG, "enter onReceive VOLUME_CHANGED_ACTION " + fmAction); 2243 mHandler.sendMessage(mHandler.obtainMessage( 2244 EVENT_VOLUME_CHANGE, 0)); 2245 } 2246 2247 if (fmAction.equals(FmRadioIntent.MUTE_CHANGE_ACTION)) { 2248 Log.i(TAG, "enter onReceive MUTE_CHANGE_ACTION " + fmAction); 2249 mHandler.sendMessage(mHandler.obtainMessage(EVENT_MUTE_CHANGE, 2250 0)); 2251 } 2252 2253 if (fmAction.equals(FmRadioIntent.SEEK_STOP_ACTION)) { 2254 Log.i(TAG, "enter onReceive SEEK_STOP_ACTION " + fmAction); 2255 2256 int freq = intent.getIntExtra(FmRadioIntent.SEEK_FREQUENCY, 2257 0); 2258 2259 mHandler.sendMessage(mHandler.obtainMessage(EVENT_SEEK_STOPPED, 2260 freq)); 2261 } 2262 2263 if (fmAction.equals(FmRadioIntent.SEEK_ACTION)) { 2264 Log.i(TAG, "enter onReceive SEEK_ACTION " + fmAction); 2265 2266 int freq = intent.getIntExtra(FmRadioIntent.SEEK_FREQUENCY, 2267 0); 2268 2269 mHandler.sendMessage(mHandler.obtainMessage(EVENT_SEEK_STARTED, 2270 freq)); 2271 } 2272 2273 if (fmAction.equals(FmRadioIntent.BAND_CHANGE_ACTION)) { 2274 Log.i(TAG, "enter onReceive BAND_CHANGE_ACTION " + fmAction); 2275 2276 mHandler.sendMessage(mHandler.obtainMessage(EVENT_BAND_CHANGE, 2277 0)); 2278 } 2279 2280 2281 if (fmAction.equals(FmRadioIntent.GET_CHANNEL_SPACE_ACTION)) { 2282 Log.i(TAG, "enter onReceive GET_CHANNEL_SPACE_ACTION " + fmAction); 2283 2284 Long chSpace = intent.getLongExtra( 2285 FmRadioIntent.GET_CHANNEL_SPACE, 0); 2286 mHandler.sendMessage(mHandler.obtainMessage( 2287 EVENT_GET_CHANNEL_SPACE_CHANGE, chSpace)); 2288 } 2289 2290 2291 if (fmAction.equals(FmRadioIntent.SET_CHANNEL_SPACE_ACTION)) { 2292 Log.i(TAG, "enter onReceive SET_CHANNEL_SPACE_ACTION " + fmAction); 2293 2294 mHandler.sendMessage(mHandler.obtainMessage( 2295 EVENT_SET_CHANNELSPACE, 0)); 2296 } 2297 2298 2299 2300 if (fmAction.equals(FmRadioIntent.GET_RDS_AF_SWITCH_MODE_ACTION)) { 2301 Log.i(TAG, "enter onReceive GET_RDS_AF_SWITCH_MODE_ACTION " + fmAction); 2302 2303 Long switchMode = intent.getLongExtra( 2304 FmRadioIntent.GET_RDS_AF_SWITCHMODE, 0); 2305 mHandler.sendMessage(mHandler.obtainMessage( 2306 EVENT_GET_RDS_AF_SWITCHMODE, switchMode)); 2307 } 2308 2309 2310 if (fmAction.equals(FmRadioIntent.GET_VOLUME_ACTION)) { 2311 Log.i(TAG, "enter onReceive GET_VOLUME_ACTION " + fmAction); 2312 2313 Long gVolume = intent.getLongExtra( 2314 FmRadioIntent.GET_VOLUME, 0); 2315 mHandler.sendMessage(mHandler.obtainMessage( 2316 EVENT_GET_VOLUME, gVolume)); 2317 } 2318 2319 2320 if (fmAction.equals(FmRadioIntent.GET_MONO_STEREO_MODE_ACTION)) { 2321 Log.i(TAG, "enter onReceive GET_MONO_STEREO_MODE_ACTION " + fmAction); 2322 2323 Long gMode = intent.getLongExtra( 2324 FmRadioIntent.GET_MODE, 0); 2325 mHandler.sendMessage(mHandler.obtainMessage( 2326 EVENT_GET_MODE, gMode)); 2327 } 2328 2329 2330 2331 if (fmAction.equals(FmRadioIntent.GET_MUTE_MODE_ACTION)) { 2332 Log.i(TAG, "enter onReceive GET_MUTE_MODE_ACTION " + fmAction); 2333 2334 Long gMuteMode = intent.getLongExtra( 2335 FmRadioIntent.GET_MUTE_MODE, 0); 2336 mHandler.sendMessage(mHandler.obtainMessage( 2337 EVENT_GET_MUTE_MODE, gMuteMode)); 2338 } 2339 2340 2341 2342 2343 if (fmAction.equals(FmRadioIntent.GET_BAND_ACTION)) { 2344 Log.i(TAG, "enter onReceive GET_BAND_ACTION " + fmAction); 2345 2346 Long gBand = intent.getLongExtra( 2347 FmRadioIntent.GET_BAND, 0); 2348 mHandler.sendMessage(mHandler.obtainMessage( 2349 EVENT_GET_BAND, gBand)); 2350 } 2351 2352 2353 if (fmAction.equals(FmRadioIntent.GET_FREQUENCY_ACTION)) { 2354 Log.i(TAG, "enter onReceive GET_FREQUENCY_ACTION " + fmAction); 2355 2356 int gFreq = intent.getIntExtra( 2357 FmRadioIntent.TUNED_FREQUENCY, 0); 2358 mHandler.sendMessage(mHandler.obtainMessage( 2359 EVENT_GET_FREQUENCY, gFreq)); 2360 } 2361 2362 2363 if (fmAction.equals(FmRadioIntent.GET_RF_MUTE_MODE_ACTION)) { 2364 Log.i(TAG, "enter onReceive GET_RF_MUTE_MODE_ACTION " + fmAction); 2365 2366 Long gRfMuteMode = intent.getLongExtra( 2367 FmRadioIntent.GET_RF_MUTE_MODE, 0); 2368 mHandler.sendMessage(mHandler.obtainMessage( 2369 EVENT_GET_RF_MUTE_MODE, gRfMuteMode)); 2370 } 2371 2372 2373 2374 if (fmAction.equals(FmRadioIntent.GET_RSSI_THRESHHOLD_ACTION)) { 2375 Log.i(TAG, "enter onReceive GET_RSSI_THRESHHOLD_ACTION " + fmAction); 2376 2377 Long gRssiThreshhold = intent.getLongExtra( 2378 FmRadioIntent.GET_RSSI_THRESHHOLD, 0); 2379 mHandler.sendMessage(mHandler.obtainMessage( 2380 EVENT_GET_RSSI_THRESHHOLD, gRssiThreshhold)); 2381 } 2382 2383 2384 if (fmAction.equals(FmRadioIntent.GET_DEEMPHASIS_FILTER_ACTION)) { 2385 Log.i(TAG, "enter onReceive GET_DEEMPHASIS_FILTER_ACTION " + fmAction); 2386 2387 Long gFilter = intent.getLongExtra( 2388 FmRadioIntent.GET_DEEMPHASIS_FILTER, 0); 2389 mHandler.sendMessage(mHandler.obtainMessage( 2390 EVENT_GET_DEEMPHASIS_FILTER, gFilter)); 2391 } 2392 2393 2394 if (fmAction.equals(FmRadioIntent.GET_RSSI_ACTION)) { 2395 Log.i(TAG, "enter onReceive GET_RSSI_ACTION " + fmAction); 2396 2397 int gRssi = intent.getIntExtra( 2398 FmRadioIntent.GET_RSSI, 0); 2399 mHandler.sendMessage(mHandler.obtainMessage( 2400 EVENT_GET_RSSI, gRssi)); 2401 } 2402 2403 2404 if (fmAction.equals(FmRadioIntent.GET_RDS_SYSTEM_ACTION)) { 2405 Log.i(TAG, "enter onReceive GET_RDS_SYSTEM_ACTION " + fmAction); 2406 2407 Long gRdsSystem = intent.getLongExtra( 2408 FmRadioIntent.GET_RDS_SYSTEM, 0); 2409 mHandler.sendMessage(mHandler.obtainMessage( 2410 EVENT_GET_RDS_SYSTEM, gRdsSystem)); 2411 } 2412 2413 2414 if (fmAction.equals(FmRadioIntent.GET_RDS_GROUPMASK_ACTION)) { 2415 Log.i(TAG, "enter onReceive GET_RDS_GROUPMASK_ACTION " + fmAction); 2416 2417 Long gRdsMask = intent.getLongExtra( 2418 FmRadioIntent.GET_RDS_GROUPMASK, 0); 2419 mHandler.sendMessage(mHandler.obtainMessage( 2420 EVENT_GET_RDS_GROUPMASK, gRdsMask)); 2421 } 2422 2423 2424 2425 if (fmAction.equals(FmRadioIntent.ENABLE_RDS_ACTION)) { 2426 Log.i(TAG, "enter onReceive ENABLE_RDS_ACTION " + fmAction); 2427 2428 mHandler.sendMessage(mHandler 2429 .obtainMessage(EVENT_ENABLE_RDS, 0)); 2430 } 2431 2432 if (fmAction.equals(FmRadioIntent.DISABLE_RDS_ACTION)) { 2433 Log.i(TAG, "enter onReceive DISABLE_RDS_ACTION " + fmAction); 2434 2435 mHandler.sendMessage(mHandler.obtainMessage(EVENT_DISABLE_RDS, 2436 0)); 2437 } 2438 2439 if (fmAction.equals(FmRadioIntent.SET_RDS_AF_ACTION)) { 2440 Log.i(TAG, "enter onReceive SET_RDS_AF_ACTION " + fmAction); 2441 2442 mHandler.sendMessage(mHandler 2443 .obtainMessage(EVENT_SET_RDS_AF, 0)); 2444 } 2445 2446 if (fmAction.equals(FmRadioIntent.SET_RDS_SYSTEM_ACTION)) { 2447 Log.i(TAG, "enter onReceive SET_RDS_SYSTEM_ACTION " + fmAction); 2448 2449 mHandler.sendMessage(mHandler.obtainMessage( 2450 EVENT_SET_RDS_SYSTEM, 0)); 2451 } 2452 2453 if (fmAction.equals(FmRadioIntent.SET_DEEMP_FILTER_ACTION)) { 2454 Log.i(TAG, "enter onReceive SET_DEEMP_FILTER_ACTION " 2455 + fmAction); 2456 2457 mHandler.sendMessage(mHandler.obtainMessage( 2458 EVENT_SET_DEEMP_FILTER, 0)); 2459 } 2460 2461 if (fmAction.equals(FmRadioIntent.PS_CHANGED_ACTION)) { 2462 Log.i(TAG, "enter onReceive PS_CHANGED_ACTION " + fmAction); 2463 2464 if (FM_SEND_RDS_IN_BYTEARRAY == true) { 2465 Bundle extras = intent.getExtras(); 2466 byte[] psName = extras.getByteArray(FmRadioIntent.PS); 2467 int status = extras.getInt(FmRadioIntent.STATUS, 0); 2468 2469 mHandler.sendMessage(mHandler.obtainMessage( 2470 EVENT_PS_CHANGED, status, 0, psName)); 2471 } else { 2472 2473 String name = intent 2474 .getStringExtra(FmRadioIntent.PS_CONVERTED); 2475 2476 mHandler.sendMessage(mHandler.obtainMessage( 2477 EVENT_PS_CHANGED, name)); 2478 } 2479 } 2480 2481 if (fmAction.equals(FmRadioIntent.SET_RSSI_THRESHHOLD_ACTION)) { 2482 Log.i(TAG, "enter onReceive SET_RSSI_THRESHHOLD_ACTION " 2483 + fmAction); 2484 2485 mHandler.sendMessage(mHandler.obtainMessage( 2486 EVENT_SET_RSSI_THRESHHOLD, 0)); 2487 } 2488 2489 if (fmAction.equals(FmRadioIntent.SET_RF_DEPENDENT_MUTE_ACTION)) { 2490 Log.i(TAG, "enter onReceive SET_RF_DEPENDENT_MUTE_ACTION " 2491 + fmAction); 2492 2493 mHandler.sendMessage(mHandler.obtainMessage( 2494 EVENT_SET_RF_DEPENDENT_MUTE, 0)); 2495 } 2496 2497 if (fmAction.equals(FmRadioIntent.COMPLETE_SCAN_DONE_ACTION)) { 2498 Log.i(TAG, "enter onReceive COMPLETE_SCAN_DONE_ACTION " 2499 + fmAction); 2500 2501 Bundle extras = intent.getExtras(); 2502 2503 int[] channelList = extras 2504 .getIntArray(FmRadioIntent.SCAN_LIST); 2505 2506 int noOfChannels = extras.getInt( 2507 FmRadioIntent.SCAN_LIST_COUNT, 0); 2508 2509 int status = extras.getInt(FmRadioIntent.STATUS, 0); 2510 2511 Log.i(TAG, "noOfChannels" + noOfChannels); 2512 2513 for (int i = 0; i < noOfChannels; i++) 2514 2515 Log.i(TAG, "channelList" + channelList[i]); 2516 2517 mHandler.sendMessage(mHandler.obtainMessage( 2518 EVENT_COMPLETE_SCAN_DONE, status, noOfChannels, 2519 channelList)); 2520 } 2521 2522 if (fmAction.equals(FmRadioIntent.COMPLETE_SCAN_STOP_ACTION)) { 2523 Log.i(TAG, "enter onReceive COMPLETE_SCAN_STOP_ACTION " 2524 + fmAction); 2525 Bundle extras = intent.getExtras(); 2526 int status = extras.getInt(FmRadioIntent.STATUS, 0); 2527 int channelValue = extras.getInt( 2528 FmRadioIntent.LAST_SCAN_CHANNEL, 0); 2529 Log.i(TAG, "Last Scanned Channel Frequency before calling Stop Scan" + channelValue); 2530 mHandler.sendMessage(mHandler.obtainMessage( 2531 EVENT_COMPLETE_SCAN_STOP, status , channelValue)); 2532 } 2533 2534 if (fmAction.equals(FmRadioIntent.MASTER_VOLUME_CHANGED_ACTION)) { 2535 Log.i(TAG, "enter onReceive MASTER_VOLUME_CHANGED_ACTION " 2536 + fmAction); 2537 mVolume = intent.getIntExtra(FmRadioIntent.MASTER_VOLUME, 0); 2538 mHandler.sendMessage(mHandler.obtainMessage( 2539 EVENT_MASTER_VOLUME_CHANGED, mVolume)); 2540 } 2541 2542 } 2543 }; 2544 2545 /* Get the volume */ 2546 void getNewGain(int volume) { 2547 Log.d(TAG, "getNewGain" + volume); 2548 if (volume <= GAIN_STEP) { 2549 mVolume = MIN_VOLUME; 2550 } 2551 2552 else if (volume >= MAX_VOLUME) { 2553 mVolume = MAX_VOLUME; 2554 } else { 2555 mVolume = volume; 2556 } 2557 } 2558 2559 } 2560