diff options
author | Ayaz Ahmad <aahmad@codeaurora.org> | 2013-08-01 15:40:16 +0530 |
---|---|---|
committer | Ayaz Ahmad <aahmad@codeaurora.org> | 2013-08-01 16:35:58 +0530 |
commit | 8204f7166eb03dc32692ec20599a23c3fb775f35 (patch) | |
tree | 1d30ec65739bcbe036f2fa19b311387a52ca842c /fmapp2/src/com/caf/fmradio/Settings.java | |
parent | 3c842318357bf79574be64468d06aa8b4141aad2 (diff) | |
download | android_hardware_qcom_fm-8204f7166eb03dc32692ec20599a23c3fb775f35.tar.gz android_hardware_qcom_fm-8204f7166eb03dc32692ec20599a23c3fb775f35.tar.bz2 android_hardware_qcom_fm-8204f7166eb03dc32692ec20599a23c3fb775f35.zip |
FM-APP2: Added support for configurable FM band sweep
- Option to set channel spacing
- Option to set lower/upper frequency limit of band
- Option to set start delay, dwell time
- Option to load frequency list from a file
Change-Id: I79ee6ccaa032d0d53692e12ede43b14be5fc195d
Diffstat (limited to 'fmapp2/src/com/caf/fmradio/Settings.java')
-rw-r--r-- | fmapp2/src/com/caf/fmradio/Settings.java | 285 |
1 files changed, 202 insertions, 83 deletions
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java index f5c5d07..c5683f1 100644 --- a/fmapp2/src/com/caf/fmradio/Settings.java +++ b/fmapp2/src/com/caf/fmradio/Settings.java @@ -42,6 +42,9 @@ import android.preference.CheckBoxPreference; import android.preference.PreferenceCategory; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; +import android.preference.EditTextPreference; +import android.text.InputType; +import android.widget.Toast; import java.util.Locale; import android.util.Log; @@ -55,19 +58,34 @@ public class Settings extends PreferenceActivity implements public static final String AUTO_AF = "af_checkbox_preference"; public static final String RESTORE_FACTORY_DEFAULT = "revert_to_fac"; public static final int RESTORE_FACTORY_DEFAULT_INT = 1; + public static final String USER_DEFINED_BAND_MIN_KEY = "user_defined_band_min"; + public static final String USER_DEFINED_BAND_MAX_KEY = "user_defined_band_max"; + public static final String CHAN_SPACING_KEY = "chanl_spacing"; public static final String RESTORE_FACTORY_DEFAULT_ACTION = "com.caf.fmradio.settings.revert_to_defaults"; private static final String LOGTAG = FMRadio.LOGTAG; + private static final String USR_BAND_MSG = "Enter Freq from range 76.0 - 108.0"; private ListPreference mBandPreference; private ListPreference mAudioPreference; private ListPreference mRecordDurPreference; private CheckBoxPreference mAfPref; + private EditTextPreference mUserBandMinPref; + private EditTextPreference mUserBandMaxPref; + private ListPreference mChannelSpacingPref; private Preference mRestoreDefaultPreference; private FmSharedPreferences mPrefs = null; private boolean mRxMode = false; + private int min_freq; + private int max_freq; + private int chan_spacing; + private String[] summaryBandItems; + private String[] chSpacingItems; + private String[] summaryAudioModeItems; + private String[] summaryRecordItems; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -90,62 +108,87 @@ public class Settings extends PreferenceActivity implements PreferenceScreen root = getPreferenceManager().createPreferenceScreen( this); - // Band/Country - String[] summaryBandItems = getResources().getStringArray( + summaryBandItems = getResources().getStringArray( R.array.regional_band_summary); - mBandPreference = new ListPreference(this); - mBandPreference.setEntries(R.array.regional_band_entries); - mBandPreference.setEntryValues(R.array.regional_band_values); - mBandPreference.setDialogTitle(R.string.sel_band_menu); - mBandPreference.setKey(REGIONAL_BAND_KEY); - mBandPreference.setTitle(R.string.regional_band); - index = FmSharedPreferences.getCountry(); - Log.d(LOGTAG, "createPreferenceHierarchy: Country: " + index); - // Get the preference and list the value. - if ((index < 0) || (index >= summaryBandItems.length)) { + chSpacingItems = getResources().getStringArray( + R.array.channel_spacing_entries); + mBandPreference = new ListPreference(this); + mBandPreference.setEntries(R.array.regional_band_entries); + mBandPreference.setEntryValues(R.array.regional_band_values); + mBandPreference.setDialogTitle(R.string.sel_band_menu); + mBandPreference.setKey(REGIONAL_BAND_KEY); + mBandPreference.setTitle(R.string.regional_band); + index = FmSharedPreferences.getCountry(); + Log.d(LOGTAG, "createPreferenceHierarchy: Country: " + index); + // Get the preference and list the value. + if ((index < 0) || (index >= summaryBandItems.length)) { index = 0; - } - Log.d(LOGTAG, "createPreferenceHierarchy: CountrySummary: " - + summaryBandItems[index]); - mBandPreference.setSummary(summaryBandItems[index]); - mBandPreference.setValueIndex(index); - root.addPreference(mBandPreference); + } + mBandPreference.setValueIndex(index); + root.addPreference(mBandPreference); - if (mRxMode) { - // Audio Output (Stereo or Mono) - String[] summaryAudioModeItems = getResources().getStringArray( - R.array.ster_mon_entries); - mAudioPreference = new ListPreference(this); - mAudioPreference.setEntries(R.array.ster_mon_entries); - mAudioPreference.setEntryValues(R.array.ster_mon_values); - mAudioPreference.setDialogTitle(R.string.sel_audio_output); - mAudioPreference.setKey(AUDIO_OUTPUT_KEY); - mAudioPreference.setTitle(R.string.aud_output_mode); - boolean audiomode = FmSharedPreferences.getAudioOutputMode(); - if (audiomode) { - index = 0; - }else { - index = 1; - } - Log.d(LOGTAG, "createPreferenceHierarchy: audiomode: " + audiomode); - mAudioPreference.setSummary(summaryAudioModeItems[index]); - mAudioPreference.setValueIndex(index); - root.addPreference(mAudioPreference); + mChannelSpacingPref = new ListPreference(this); + mChannelSpacingPref.setEntries(R.array.channel_spacing_entries); + mChannelSpacingPref.setEntryValues(R.array.channel_spacing_val); + mChannelSpacingPref.setDialogTitle(R.string.sel_chanl_spacing); + mChannelSpacingPref.setTitle(R.string.chanl_spacing); + mChannelSpacingPref.setKey(CHAN_SPACING_KEY); + + mUserBandMinPref = new EditTextPreference(this); + mUserBandMinPref.setKey(USER_DEFINED_BAND_MIN_KEY); + mUserBandMinPref.setTitle(R.string.usr_def_band_min); + mUserBandMinPref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | + InputType.TYPE_NUMBER_FLAG_DECIMAL); + mUserBandMinPref.setDialogTitle(R.string.usr_def_band_min); + + mUserBandMaxPref = new EditTextPreference(this); + mUserBandMaxPref.setKey(USER_DEFINED_BAND_MAX_KEY); + mUserBandMaxPref.setTitle(R.string.usr_def_band_max); + mUserBandMaxPref.setDialogTitle(R.string.usr_def_band_max); + mUserBandMaxPref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | + InputType.TYPE_NUMBER_FLAG_DECIMAL); - // AF Auto Enable (Checkbox) - mAfPref = new CheckBoxPreference(this); - mAfPref.setKey(AUTO_AF); - mAfPref.setTitle(R.string.auto_select_af); - mAfPref.setSummaryOn(R.string.auto_select_af_enabled); - mAfPref.setSummaryOff(R.string.auto_select_af_disabled); - boolean bAFAutoSwitch = FmSharedPreferences.getAutoAFSwitch(); - Log.d(LOGTAG, "createPreferenceHierarchy: bAFAutoSwitch: " - + bAFAutoSwitch); - mAfPref.setChecked(bAFAutoSwitch); - root.addPreference(mAfPref); + setBandSummary(index); + + root.addPreference(mChannelSpacingPref); + root.addPreference(mUserBandMinPref); + root.addPreference(mUserBandMaxPref); + + if (mRxMode) { + // Audio Output (Stereo or Mono) + summaryAudioModeItems = getResources().getStringArray( + R.array.ster_mon_entries); + mAudioPreference = new ListPreference(this); + mAudioPreference.setEntries(R.array.ster_mon_entries); + mAudioPreference.setEntryValues(R.array.ster_mon_values); + mAudioPreference.setDialogTitle(R.string.sel_audio_output); + mAudioPreference.setKey(AUDIO_OUTPUT_KEY); + mAudioPreference.setTitle(R.string.aud_output_mode); + boolean audiomode = FmSharedPreferences.getAudioOutputMode(); + if (audiomode) { + index = 0; + } else { + index = 1; + } + Log.d(LOGTAG, "createPreferenceHierarchy: audiomode: " + audiomode); + mAudioPreference.setSummary(summaryAudioModeItems[index]); + mAudioPreference.setValueIndex(index); + root.addPreference(mAudioPreference); + + // AF Auto Enable (Checkbox) + mAfPref = new CheckBoxPreference(this); + mAfPref.setKey(AUTO_AF); + mAfPref.setTitle(R.string.auto_select_af); + mAfPref.setSummaryOn(R.string.auto_select_af_enabled); + mAfPref.setSummaryOff(R.string.auto_select_af_disabled); + boolean bAFAutoSwitch = FmSharedPreferences.getAutoAFSwitch(); + Log.d(LOGTAG, "createPreferenceHierarchy: bAFAutoSwitch: " + + bAFAutoSwitch); + mAfPref.setChecked(bAFAutoSwitch); + root.addPreference(mAfPref); if(FMRadio.RECORDING_ENABLE) { - String[] summaryRecordItems = getResources().getStringArray( + summaryRecordItems = getResources().getStringArray( R.array.record_durations_entries); int nRecordDuration = 0; mRecordDurPreference = new ListPreference(this); @@ -197,40 +240,92 @@ public class Settings extends PreferenceActivity implements root.addPreference(mRestoreDefaultPreference); return root; } - public void clearStationList() { + + public void clearStationList() { SharedPreferences sp = getSharedPreferences(FMRadio.SCAN_STATION_PREFS_NAME, 0); SharedPreferences.Editor editor = sp.edit(); editor.clear(); editor.commit(); } + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { int mTunedFreq = 0; boolean bStatus = false; if (key.equals(REGIONAL_BAND_KEY)) { - int curListIndex = FmSharedPreferences.getCurrentListIndex(); - PresetList curList = FmSharedPreferences.getStationList(curListIndex); - String[] summaryBandItems = getResources().getStringArray( - R.array.regional_band_summary); + int curListIndex = FmSharedPreferences.getCurrentListIndex(); + PresetList curList = FmSharedPreferences.getStationList(curListIndex); String valueStr = sharedPreferences.getString(key, ""); int index = 0; - if (valueStr != null) { + if(valueStr != null) { index = mBandPreference.findIndexOfValue(valueStr); } - if ((index < 0) || (index >= summaryBandItems.length)) { + if((index < 0) || (index >= summaryBandItems.length)) { index = 0; mBandPreference.setValueIndex(0); + }else if((index + 1) == summaryBandItems.length) { + mChannelSpacingPref.setEnabled(true); + }else { + mChannelSpacingPref.setEnabled(false); } Log.d(LOGTAG, "onSharedPreferenceChanged: Country Change: " + index); - mBandPreference.setSummary(summaryBandItems[index]); FmSharedPreferences.setCountry(index); + setBandSummary(index); bStatus = FMRadio.fmConfigure(); FMTransmitterActivity.fmConfigure(); if (curList != null) { curList.clear(); } clearStationList(); + }else if(key.equals(CHAN_SPACING_KEY)) { + int curListIndex = FmSharedPreferences.getCurrentListIndex(); + PresetList curList = FmSharedPreferences.getStationList(curListIndex); + String valStr = mChannelSpacingPref.getValue(); + int index = 0; + if(valStr != null) { + index = mChannelSpacingPref.findIndexOfValue(valStr); + } + if ((index < 0) || (index >= summaryRecordItems.length)) { + index = 0; + mChannelSpacingPref.setValueIndex(0); + } + mChannelSpacingPref.setSummary(chSpacingItems[index]); + FmSharedPreferences.setChSpacing(2 - index); + FMRadio.fmConfigure(); + FMTransmitterActivity.fmConfigure(); + if(curList != null) { + curList.clear(); + } + clearStationList(); + }else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) { + String valStr = mUserBandMinPref.getText(); + double freq = Double.parseDouble(valStr) * 1000; + max_freq = FmSharedPreferences.getUpperLimit(); + min_freq = FmSharedPreferences.getLowerLimit(); + if((freq > 0) && (freq < max_freq) && (freq >= 76000)) { + FmSharedPreferences.setLowerLimit((int)freq); + FMRadio.fmConfigure(); + FMTransmitterActivity.fmConfigure(); + setBandSummary(summaryBandItems.length - 1); + clearStationList(); + }else { + displayToast(USR_BAND_MSG); + } + }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) { + String valStr = mUserBandMaxPref.getText(); + double freq = Double.parseDouble(valStr) * 1000; + min_freq = FmSharedPreferences.getLowerLimit(); + max_freq = FmSharedPreferences.getUpperLimit(); + if((freq > 0) && (freq > min_freq) && (freq <= 108000)) { + FmSharedPreferences.setUpperLimit((int)freq); + FMRadio.fmConfigure(); + FMTransmitterActivity.fmConfigure(); + setBandSummary(summaryBandItems.length - 1); + clearStationList(); + }else { + displayToast(USR_BAND_MSG); + } }else { if(mRxMode) { if (key.equals(AUTO_AF)) { @@ -242,40 +337,36 @@ public class Settings extends PreferenceActivity implements mPrefs.Save(); }else if(key.equals(RECORD_DURATION_KEY)) { if(FMRadio.RECORDING_ENABLE) { - String[] recordItems = getResources().getStringArray( - R.array.record_durations_entries); String valueStr = mRecordDurPreference.getValue(); int index = 0; if (valueStr != null) { index = mRecordDurPreference.findIndexOfValue(valueStr); } - if ((index < 0) || (index >= recordItems.length)) { + if ((index < 0) || (index >= summaryRecordItems.length)) { index = 0; mRecordDurPreference.setValueIndex(index); } Log.d(LOGTAG, "onSharedPreferenceChanged: recorddur: " - + recordItems[index]); - mRecordDurPreference.setSummary(recordItems[index]); - FmSharedPreferences.setRecordDuration(index); - } - }else if (key.equals(AUDIO_OUTPUT_KEY)) { - String[] bandItems = getResources().getStringArray( - R.array.ster_mon_entries); - String valueStr = mAudioPreference.getValue(); - int index = 0; - if (valueStr != null) { - index = mAudioPreference.findIndexOfValue(valueStr); - } - if (index != 1) { - if (index != 0) { - index = 0; - /* It shud be 0(Stereo) or 1(Mono) */ - mAudioPreference.setValueIndex(index); - } - } - Log.d(LOGTAG, "onSharedPreferenceChanged: audiomode: " - + bandItems[index]); - mAudioPreference.setSummary(bandItems[index]); + + summaryRecordItems[index]); + mRecordDurPreference.setSummary(summaryRecordItems[index]); + FmSharedPreferences.setRecordDuration(index); + } + } else if (key.equals(AUDIO_OUTPUT_KEY)) { + String valueStr = mAudioPreference.getValue(); + int index = 0; + if (valueStr != null) { + index = mAudioPreference.findIndexOfValue(valueStr); + } + if (index != 1) { + if (index != 0) { + index = 0; + /* It shud be 0(Stereo) or 1(Mono) */ + mAudioPreference.setValueIndex(index); + } + } + Log.d(LOGTAG, "onSharedPreferenceChanged: audiomode: " + + summaryAudioModeItems[index]); + mAudioPreference.setSummary(summaryAudioModeItems[index]); if (index == 0) { // Stereo FmSharedPreferences.setAudioOutputMode(true); @@ -394,4 +485,32 @@ public class Settings extends PreferenceActivity implements sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } } + private void setBandSummary(int index) { + if((index + 1) == summaryBandItems.length) { + min_freq = FmSharedPreferences.getLowerLimit(); + max_freq = FmSharedPreferences.getUpperLimit(); + chan_spacing = FmSharedPreferences.getChSpacing(); + if(chan_spacing < 0) { + chan_spacing = 0; + } + mBandPreference.setSummary(summaryBandItems[index] + "( " + + (min_freq / 1000.0) +"Mhz To " + (max_freq / 1000.0) + + "Mhz)"); + mChannelSpacingPref.setValueIndex(2 - chan_spacing); + mChannelSpacingPref.setSummary(chSpacingItems[2 - chan_spacing]); + mChannelSpacingPref.setEnabled(true); + mUserBandMinPref.setEnabled(true); + mUserBandMaxPref.setEnabled(true); + mUserBandMinPref.setSummary((min_freq / 1000.0) + "Mhz"); + mUserBandMaxPref.setSummary((max_freq / 1000.0) + "Mhz"); + }else { + mBandPreference.setSummary(summaryBandItems[index]); + mChannelSpacingPref.setEnabled(false); + mUserBandMinPref.setEnabled(false); + mUserBandMaxPref.setEnabled(false); + } + } + private void displayToast(String msg) { + Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); + } } |