Merge "FMRecord: Handle shutdown intent"
diff --git a/fmapp/src/com/codeaurora/fmradio/FMRadioService.java b/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
index 3ca96e9..d0270ca 100644
--- a/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
+++ b/fmapp/src/com/codeaurora/fmradio/FMRadioService.java
@@ -765,7 +765,6 @@
            Log.d(LOGTAG, "FMRadio: Requesting to stop FM");
            AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM,
                                     AudioSystem.DEVICE_STATE_UNAVAILABLE, "");
-           sendRecordServiceIntent(RECORD_STOP);
        }
        mPlaybackInProgress = false;
    }
@@ -1640,6 +1639,7 @@
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
 
+      sendRecordServiceIntent(RECORD_STOP);
       if (isAnalogModeEnabled()) {
               SystemProperties.set("hw.fm.isAnalog","false");
               misAnalogPathEnabled = false;
diff --git a/fmapp/src/com/codeaurora/fmradio/Settings.java b/fmapp/src/com/codeaurora/fmradio/Settings.java
index d5222c9..f29c3df 100644
--- a/fmapp/src/com/codeaurora/fmradio/Settings.java
+++ b/fmapp/src/com/codeaurora/fmradio/Settings.java
@@ -292,7 +292,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) {
                String valStr = mUserBandMinPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                max_freq = FmSharedPreferences.getUpperLimit();
                min_freq = FmSharedPreferences.getLowerLimit();
                if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
@@ -305,7 +311,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
                String valStr = mUserBandMaxPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                min_freq = FmSharedPreferences.getLowerLimit();
                max_freq = FmSharedPreferences.getUpperLimit();
                if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
diff --git a/fmapp2/res/values-zh-rCN/arrays.xml b/fmapp2/res/values-zh-rCN/arrays.xml
index d0a95a0..773dd45 100644
--- a/fmapp2/res/values-zh-rCN/arrays.xml
+++ b/fmapp2/res/values-zh-rCN/arrays.xml
@@ -160,6 +160,7 @@
     <item>土耳其</item>
     <item>英国</item>
     <item>美国</item>
+    <item>用户定义的乐队</item>
   </string-array>
 
   <string-array name="regional_band_summary">
@@ -199,5 +200,6 @@
     <item>土耳其 (87.5MHz - 108.0MHz ,步长 100 Khz)</item>
     <item>英国 (87.5MHz - 108.0MHz ,步长 100 Khz)</item>
     <item>美国 (88.1MHz - 107.9MHz ,步长 200 Khz)</item>
+    <item>用户定义的乐队</item>
   </string-array>
 </resources>
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index c33bbbd..335ce4f 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -532,6 +532,7 @@
       if (station != null) {
           mTunedStation.Copy(station);
       }
+      mStereo = FmSharedPreferences.getLastAudioMode();
       mHandler.post(mUpdateProgramService);
       mHandler.post(mUpdateRadioText);
       mHandler.post(mOnStereo);
@@ -2593,6 +2594,7 @@
          }else {
              mStereoTV.setText("");
          }
+         FmSharedPreferences.setLastAudioMode(mStereo);
       }
    };
 
@@ -2954,6 +2956,7 @@
          }
          cleanupTimeoutHandler();
          mHandler.post(mUpdateStationInfo);
+         mHandler.post(mOnStereo);
       }
 
       public void onProgramServiceChanged() {
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 5dfe72d..fb36a9c 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -762,7 +762,6 @@
            Log.d(LOGTAG, "FMRadio: Requesting to stop FM");
            AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM,
                                      AudioSystem.DEVICE_STATE_UNAVAILABLE, "");
-           sendRecordServiceIntent(RECORD_STOP);
        }
        mPlaybackInProgress = false;
    }
@@ -1637,6 +1636,7 @@
          Log.d(LOGTAG, "audioManager.setFmRadioOn false done \n" );
       }
 
+      sendRecordServiceIntent(RECORD_STOP);
       if (isAnalogModeEnabled()) {
               SystemProperties.set("hw.fm.isAnalog","false");
               misAnalogPathEnabled = false;
@@ -2500,7 +2500,7 @@
             }
             /* Update the frequency in the StatusBar's Notification */
             startNotification();
-
+            enableStereo(FmSharedPreferences.getAudioOutputMode());
          }
          catch (RemoteException e)
          {
diff --git a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
index 53e43f7..bf8119a 100644
--- a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
+++ b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
@@ -137,7 +137,6 @@
    private static final String LAST_RECORD_DURATION = "last_record_duration";
    private static String  LAST_AF_JUMP_VALUE = "last_af_jump_value";
    private static final String AUDIO_OUTPUT_MODE = "audio_output_mode";
-
    private static Map<String, String> mNameMap = new HashMap<String, String>();
    private static List<PresetList> mListOfPlists = new ArrayList<PresetList>();
    public static Set[] tagList = new TreeSet[FmSharedPreferences.MAX_NUM_TAG_TYPES];
@@ -166,6 +165,7 @@
    private static boolean mAudioOutputMode = true;
    private static boolean mAFAutoSwitch = true;
    private static int mRecordDuration = 0;
+   private static int mLastAudioMode = -1;
 
    FmSharedPreferences(Context context){
       mContext = context.getApplicationContext();
@@ -449,6 +449,7 @@
       mTunedFrequency = sp.getInt(PREF_LAST_TUNED_FREQUENCY, DEFAULT_NO_FREQUENCY);
       mRecordDuration = sp.getInt(LAST_RECORD_DURATION, RECORD_DUR_INDEX_0_VAL);
       mAFAutoSwitch = sp.getBoolean(LAST_AF_JUMP_VALUE, true);
+      mAudioOutputMode = sp.getBoolean(AUDIO_OUTPUT_MODE, true);
 
       if(sp.getInt(FMCONFIG_COUNTRY, 0) == REGIONAL_BAND_USER_DEFINED) {
          mBandMinFreq = sp.getInt(FMCONFIG_MIN, mBandMinFreq);
@@ -556,6 +557,7 @@
       }
       ed.putInt(LAST_RECORD_DURATION, mRecordDuration);
       ed.putBoolean(LAST_AF_JUMP_VALUE, mAFAutoSwitch);
+      ed.putBoolean(AUDIO_OUTPUT_MODE, mAudioOutputMode);
       ed.commit();
    }
 
@@ -1119,6 +1121,13 @@
       return mAudioOutputMode;
    }
 
+   public static int getLastAudioMode() {
+       return mLastAudioMode;
+   }
+
+   public static void setLastAudioMode(int audiomode) {
+       mLastAudioMode = audiomode;
+   }
    public static void setRecordDuration(int durationIndex) {
 
       Log.d(LOGTAG, "setRecordDuration "+durationIndex);
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java
index c5683f1..328126a 100644
--- a/fmapp2/src/com/caf/fmradio/Settings.java
+++ b/fmapp2/src/com/caf/fmradio/Settings.java
@@ -300,7 +300,13 @@
                clearStationList();
            }else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) {
                String valStr = mUserBandMinPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                max_freq = FmSharedPreferences.getUpperLimit();
                min_freq = FmSharedPreferences.getLowerLimit();
                if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
@@ -314,7 +320,13 @@
                }
            }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
                String valStr = mUserBandMaxPref.getText();
-               double freq = Double.parseDouble(valStr) * 1000;
+               double freq = 0;
+               try {
+                    freq = Double.parseDouble(valStr) * 1000;
+               }catch(NumberFormatException e) {
+                    e.printStackTrace();
+                    return;
+               }
                min_freq = FmSharedPreferences.getLowerLimit();
                max_freq = FmSharedPreferences.getUpperLimit();
                if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
@@ -374,6 +386,7 @@
                          // Mono
                          FmSharedPreferences.setAudioOutputMode(false);
                      }
+                     mPrefs.Save();
                      FMRadio.fmAudioOutputMode();
                  }
               }