summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAyaz Ahmad <aahmad@codeaurora.org>2013-08-22 12:19:43 +0530
committerAyaz Ahmad <aahmad@codeaurora.org>2013-09-05 13:05:25 +0530
commit954bed185ea5ec1e104a30ca89fe16aeee3f614d (patch)
tree581f5a2a9462774b4d34c7e9bcb361e355173974
parentb0880e7472611a74c9f5df1a9e8176d2b76f984c (diff)
downloadandroid_hardware_qcom_fm-954bed185ea5ec1e104a30ca89fe16aeee3f614d.tar.gz
android_hardware_qcom_fm-954bed185ea5ec1e104a30ca89fe16aeee3f614d.tar.bz2
android_hardware_qcom_fm-954bed185ea5ec1e104a30ca89fe16aeee3f614d.zip
fm: fmapp2: Fix outofmemory issue during orientation change
FM app crashes after continuous device orientation change Remove all static reference to activity componnent to allow garbage collector to remove previous activities CRs-Fixed: 525905 Change-Id: I1e4cd2c2689ebaaf0a361eee651d8e5786909896
-rw-r--r--fmapp2/src/com/caf/fmradio/FMRadio.java149
-rw-r--r--fmapp2/src/com/caf/fmradio/FMStats.java127
-rw-r--r--fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java97
-rw-r--r--fmapp2/src/com/caf/fmradio/Settings.java31
4 files changed, 275 insertions, 129 deletions
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 335ce4f..9b130ff 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -188,8 +188,8 @@ public class FMRadio extends Activity
public static final String STATION_NAME = "name_of_station";
public static final String STATION_FREQUENCY = "frequency_of_station";
- private static IFMRadioService mService = null;
- private static FmSharedPreferences mPrefs;
+ private IFMRadioService mService = null;
+ private FmSharedPreferences mPrefs;
/* Button Resources */
private ImageView mOnOffButton;
@@ -242,11 +242,11 @@ public class FMRadio extends Activity
private ScrollerText mRadioTextScroller = null;
private ScrollerText mERadioTextScroller = null;
- private static PresetStation mTunedStation = new PresetStation("", 102100);
+ private PresetStation mTunedStation = new PresetStation("", 102100);
private PresetStation mPresetButtonStation = null;
/* Radio Vars */
- final Handler mHandler = new Handler();
+ private Handler mHandler = new Handler();
/* Search Progress Dialog */
private ProgressDialog mProgressDialog = null;
@@ -273,6 +273,8 @@ public class FMRadio extends Activity
/** fm stats property string */
public static final String FM_STATS_PROP = "persist.fm.stats";
+ private BroadcastReceiver mFmSettingReceiver = null;
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -397,6 +399,7 @@ public class FMRadio extends Activity
} else {
Log.d(LOGTAG, "onCreate: Start Service completed successfully");
}
+ registerFMSettingListner();
}
}
@@ -507,6 +510,16 @@ public class FMRadio extends Activity
initiateRecordThread();
}
}
+ mPrefs.Load();
+ if (mPicker != null) {
+ setDisplayvalue();
+ }
+ PresetStation station = new PresetStation("",
+ FmSharedPreferences.getTunedFrequency());
+ if (station != null) {
+ mTunedStation.Copy(station);
+ }
+
}
@Override
@@ -523,15 +536,6 @@ public class FMRadio extends Activity
public void onResume() {
super.onResume();
Log.d(LOGTAG, "FMRadio: onResume");
- mPrefs.Load();
- if (mPicker != null) {
- setDisplayvalue();
- }
- PresetStation station = new PresetStation("",
- FmSharedPreferences.getTunedFrequency());
- if (station != null) {
- mTunedStation.Copy(station);
- }
mStereo = FmSharedPreferences.getLastAudioMode();
mHandler.post(mUpdateProgramService);
mHandler.post(mUpdateRadioText);
@@ -540,13 +544,13 @@ public class FMRadio extends Activity
updateStationInfoToUI();
enableRadioOnOffUI();
}
- private class LoadedDataAndState {
+ private static class LoadedDataAndState {
public LoadedDataAndState(){};
public boolean onOrOff;
}
@Override
public Object onRetainNonConfigurationInstance() {
- final LoadedDataAndState data = new LoadedDataAndState();
+ LoadedDataAndState data = new LoadedDataAndState();
if (mService != null) {
try {
data.onOrOff = mService.isFmOn();
@@ -562,8 +566,18 @@ public class FMRadio extends Activity
@Override
public void onDestroy() {
+ super.onDestroy();
Log.d(LOGTAG, "FMRadio: onDestroy");
+ mHandler.removeCallbacksAndMessages(null);
cleanupTimeoutHandler();
+ if(mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ }
+ if(mSearchProgressHandler != null) {
+ mSearchProgressHandler.removeCallbacksAndMessages(null);
+ }
+ removeDialog(DIALOG_PRESET_OPTIONS);
+ unRegisterReceiver(mFmSettingReceiver);
if (mService != null) {
try {
if(!mService.isFmOn()) {
@@ -576,7 +590,6 @@ public class FMRadio extends Activity
unbindFromService(this);
mService = null;
Log.d(LOGTAG, "onDestroy: unbindFromService completed");
- super.onDestroy();
}
@Override
@@ -790,7 +803,7 @@ public class FMRadio extends Activity
mUIUpdateHandlerHandler.sendMessage(statusUpdate);
} catch (InterruptedException e)
{
- Thread.currentThread().interrupt();
+ break;
}
if(!isRecording()) {
Message finished = new Message();
@@ -1469,7 +1482,7 @@ public class FMRadio extends Activity
}
};
- final FrequencyPickerDialog.OnFrequencySetListener mFrequencyChangeListener
+ FrequencyPickerDialog.OnFrequencySetListener mFrequencyChangeListener
= new FrequencyPickerDialog.OnFrequencySetListener() {
public void onFrequencySet(FrequencyPicker view, int frequency) {
Log.d(LOGTAG, "mFrequencyChangeListener: onFrequencyChanged to: " +
@@ -1687,7 +1700,7 @@ public class FMRadio extends Activity
editor.clear();
editor.commit();
}
- public static boolean fmConfigure() {
+ public boolean fmConfigure() {
boolean bStatus = true;
if(mService != null) {
try {
@@ -1703,7 +1716,7 @@ public class FMRadio extends Activity
}
return bStatus;
}
- public static void fmAutoAFSwitch() {
+ public void fmAutoAFSwitch() {
boolean bStatus = false;
if (mService != null) {
try {
@@ -1718,7 +1731,7 @@ public class FMRadio extends Activity
}
}
- public static void fmAudioOutputMode() {
+ public void fmAudioOutputMode() {
boolean bStatus = false;
if (mService != null) {
try {
@@ -2109,7 +2122,7 @@ public class FMRadio extends Activity
return(mIsSearching);
}
- public static PresetStation getCurrentTunedStation() {
+ public PresetStation getCurrentTunedStation() {
return mTunedStation;
}
@@ -2398,8 +2411,8 @@ public class FMRadio extends Activity
sleepTimerExpired = hasSleepTimerExpired();
}catch (Exception ex) {
Log.d( LOGTAG, "RunningThread InterruptedException");
- Thread.currentThread().interrupt();
- }//try
+ break;
+ }
}
if(true == sleepTimerExpired) {
Message finished = new Message();
@@ -2527,7 +2540,7 @@ public class FMRadio extends Activity
updateStationInfoToUI();
}
- final Runnable mRadioEnabled = new Runnable() {
+ Runnable mRadioEnabled = new Runnable() {
public void run() {
/* Update UI to FM On State */
enableRadioOnOffUI(true);
@@ -2537,7 +2550,7 @@ public class FMRadio extends Activity
}
};
- final Runnable mRadioDisabled = new Runnable() {
+ Runnable mRadioDisabled = new Runnable() {
public void run() {
/* Update UI to FM Off State */
cleanupTimeoutHandler();
@@ -2547,14 +2560,15 @@ public class FMRadio extends Activity
enableRadioOnOffUI(false);
}
};
- final Runnable mRadioReset = new Runnable() {
+
+ Runnable mRadioReset = new Runnable() {
public void run() {
/* Update UI to FM Reset (Off) State */
resetRadio();
}
};
- final Runnable mUpdateStationInfo = new Runnable() {
+ Runnable mUpdateStationInfo = new Runnable() {
public void run() {
cleanupTimeoutHandler();
PresetStation station = new PresetStation("", FmSharedPreferences.getTunedFrequency());
@@ -2566,7 +2580,7 @@ public class FMRadio extends Activity
}
};
- final Runnable mSearchComplete = new Runnable() {
+ Runnable mSearchComplete = new Runnable() {
public void run() {
Log.d(LOGTAG, "mSearchComplete: ");
mScanPty=0;
@@ -2579,13 +2593,13 @@ public class FMRadio extends Activity
}
};
- final Runnable mOnMute = new Runnable() {
+ Runnable mOnMute = new Runnable() {
public void run() {
setMuteModeButtonImage(true);
}
};
- final Runnable mOnStereo = new Runnable() {
+ Runnable mOnStereo = new Runnable() {
public void run() {
if (FMRADIO_UI_STATION_AUDIO_STEREO == mStereo) {
mStereoTV.setText(R.string.audio_type_stereo);
@@ -2598,7 +2612,7 @@ public class FMRadio extends Activity
}
};
- final Runnable mUpdateRadioText = new Runnable() {
+ Runnable mUpdateRadioText = new Runnable() {
public void run() {
String str = "";
if ((mService != null) && isFmOn()) {
@@ -2639,14 +2653,14 @@ public class FMRadio extends Activity
}
};
- final Runnable mRadioChangeFrequency = new Runnable(){
+ Runnable mRadioChangeFrequency = new Runnable(){
public void run() {
mUpdatePickerValue = false;
tuneRadio(mFrequency);
}
};
- final Runnable mUpdateExtenRadioText = new Runnable() {
+ Runnable mUpdateExtenRadioText = new Runnable() {
public void run() {
String str = "";
if ((mService != null) && isFmOn()) {
@@ -2669,7 +2683,7 @@ public class FMRadio extends Activity
};
/* Create runnable for posting */
- final Runnable mUpdateProgramService = new Runnable() {
+ Runnable mUpdateProgramService = new Runnable() {
public void run() {
String str = "";
if (mService != null) {
@@ -2720,7 +2734,7 @@ public class FMRadio extends Activity
* When the entire text is scrolled, the scrolling will restart
* after SCROLLER_RESTART_DELAY_MS
*/
- private static final class ScrollerText extends Handler {
+ private final class ScrollerText extends Handler {
private static final byte SCROLLER_STOPPED = 0x51;
private static final byte SCROLLER_STARTING = 0x52;
private static final byte SCROLLER_RUNNING = 0x53;
@@ -2776,7 +2790,7 @@ public class FMRadio extends Activity
return;
}
removeMessages(SCROLLER_MSG_TICK);
- final TextView textView = mView.get();
+ TextView textView = mView.get();
if (textView != null) {
mStringlength = mOriginalString.length();
String szStr2 = "";
@@ -2812,7 +2826,7 @@ public class FMRadio extends Activity
*/
private void resetScroll() {
mIteration = 0;
- final TextView textView = mView.get();
+ TextView textView = mView.get();
if (textView != null) {
textView.setText(mOriginalString);
}
@@ -2823,7 +2837,7 @@ public class FMRadio extends Activity
* Starts only if Length > 0
*/
void startScroll() {
- final TextView textView = mView.get();
+ TextView textView = mView.get();
if (textView != null) {
mOriginalString = (String)textView.getText();
mStringlength = mOriginalString.length();
@@ -2836,15 +2850,15 @@ public class FMRadio extends Activity
}
- public static IFMRadioService sService = null;
- private static HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
+ public IFMRadioService sService = null;
+ private HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
- public static boolean bindToService(Context context) {
+ public boolean bindToService(Context context) {
Log.e(LOGTAG, "bindToService: Context");
return bindToService(context, null);
}
- public static boolean bindToService(Context context, ServiceConnection callback) {
+ public boolean bindToService(Context context, ServiceConnection callback) {
Log.e(LOGTAG, "bindToService: Context with serviceconnection callback");
context.startService(new Intent(context, FMRadioService.class));
ServiceBinder sb = new ServiceBinder(callback);
@@ -2853,7 +2867,7 @@ public class FMRadio extends Activity
FMRadioService.class), sb, 0);
}
- public static void unbindFromService(Context context) {
+ public void unbindFromService(Context context) {
ServiceBinder sb = (ServiceBinder) sConnectionMap.remove(context);
Log.e(LOGTAG, "unbindFromService: Context");
if (sb == null) {
@@ -2868,7 +2882,7 @@ public class FMRadio extends Activity
}
}
- private static class ServiceBinder implements ServiceConnection {
+ private class ServiceBinder implements ServiceConnection {
ServiceConnection mCallback;
ServiceBinder(ServiceConnection callback) {
mCallback = callback;
@@ -2978,6 +2992,10 @@ public class FMRadio extends Activity
}
public void onSearchComplete() {
Log.d(LOGTAG, "mServiceCallbacks.onSearchComplete :");
+ mScanPty = 0;
+ mIsScaning = false;
+ mIsSeeking = false;
+ mIsSearching = false;
mHandler.post(mSearchComplete);
}
public void onSearchListComplete() {
@@ -3017,4 +3035,45 @@ public class FMRadio extends Activity
startRecordingTimer();
}
};
+
+ private void registerFMSettingListner() {
+ if (mFmSettingReceiver == null) {
+ mFmSettingReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.d(LOGTAG, "Received intent " + intent);
+ String action = intent.getAction();
+ Log.d(LOGTAG, " action = " + action);
+ if (action.equals(Settings.ACTION_FM_SETTING)) {
+ int state = intent.getIntExtra("state", 0);
+ Log.d(LOGTAG, "ACTION_FM_SETTING Intent received" + state);
+ switch(state) {
+ case Settings.FM_BAND_CHANGED:
+ fmConfigure();
+ break;
+ case Settings.FM_CHAN_SPACING_CHANGED:
+ fmConfigure();
+ break;
+ case Settings.FM_AF_OPTION_CHANGED:
+ fmAudioOutputMode();
+ break;
+ case Settings.FM_AUDIO_MODE_CHANGED:
+ fmAudioOutputMode();
+ break;
+ }
+ }
+ }
+ };
+ IntentFilter iFilter = new IntentFilter();
+ iFilter.addAction(Settings.ACTION_FM_SETTING);
+ registerReceiver(mFmSettingReceiver, iFilter);
+ }
+ }
+
+ private void unRegisterReceiver(BroadcastReceiver myReceiver) {
+ if(myReceiver != null) {
+ unregisterReceiver(myReceiver);
+ myReceiver = null;
+ }
+ }
}
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 18ab71c..8defff5 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -178,7 +178,7 @@ public class FMStats extends Activity {
int mTestSelected = 0;
boolean mIsSearching = false;
private static String LOGTAG = "FMStats";
- private static IFMRadioService mService = null;
+ private IFMRadioService mService = null;
private Thread mMultiUpdateThread = null;
private static final int STATUS_UPDATE = 1;
private static final int STATUS_DONE = 2;
@@ -355,6 +355,7 @@ public class FMStats extends Activity {
@Override
public void onStop() {
+ Log.d(LOGTAG, "onStop");
super.onStop();
if(isRecording()) {
try {
@@ -369,12 +370,16 @@ public class FMStats extends Activity {
@Override
public void onDestroy() {
-
+ Log.d(LOGTAG, "onDestroy");
stopCurTest();
-
+ if(mUIUpdateHandlerHandler != null) {
+ mUIUpdateHandlerHandler.removeCallbacksAndMessages(null);
+ }
+ if(mHandler != null) {
+ mHandler.removeCallbacksAndMessages(null);
+ }
unRegisterBroadcastReceiver(mBandSweepDelayExprdListener);
unRegisterBroadcastReceiver(mBandSweepDwellExprdListener);
-
if(null != mFileCursor ) {
try {
mFileCursor.close();
@@ -1707,7 +1712,7 @@ public class FMStats extends Activity {
20 times*/
int freq = FmSharedPreferences.getTunedFrequency();
- for(int i = 0; i < 20; i++) {
+ for(int i = 0; i < 20 && !Thread.currentThread().isInterrupted(); i++) {
try {
Thread.sleep(500);
Message updateUI = new Message();
@@ -1749,19 +1754,27 @@ public class FMStats extends Activity {
/* Thread processing */
private Runnable getManualSweepResults = new Runnable() {
public void run() {
- mWakeLock.acquire(10 * 1000);
- if(mBand.cur_freq <= mBand.hFreq) {
- if(!tuneAndUpdateSweepResult(mBand.cur_freq)) {
- sendStatusDoneMsg();
- }
- mBand.cur_freq += mBand.Spacing;
- if(mBand.cur_freq > mBand.hFreq) {
- sendStatusDoneMsg();
- }else {
- setAlarm(prevDwellTime * 1000, BAND_SWEEP_DWELL_DELAY_TIMEOUT);
- }
- }else {
- sendStatusDoneMsg();
+ try {
+ if(mBand == null) {
+ return;
+ }
+ mWakeLock.acquire(10 * 1000);
+ if(mBand.cur_freq <= mBand.hFreq) {
+ if(!tuneAndUpdateSweepResult(mBand.cur_freq)) {
+ sendStatusDoneMsg();
+ return;
+ }
+ mBand.cur_freq += mBand.Spacing;
+ if(mBand.cur_freq > mBand.hFreq) {
+ sendStatusDoneMsg();
+ }else {
+ setAlarm(prevDwellTime * 1000, BAND_SWEEP_DWELL_DELAY_TIMEOUT);
+ }
+ }else {
+ sendStatusDoneMsg();
+ }
+ }catch(Exception e) {
+ e.printStackTrace();
}
}
};
@@ -1787,31 +1800,37 @@ public class FMStats extends Activity {
boolean status = true;
int freq;
- mWakeLock.acquire(10 * 1000);
- freq = mNextFreqInterface.getNextFreq();
-
- for(; (status = (!mNextFreqInterface.errorOccured()) & (!Thread.currentThread().isInterrupted()));
- freq = mNextFreqInterface.getNextFreq()) {
- if(validFreq(freq)) {
- if(!tuneAndUpdateSweepResult(freq)) {
- status = false;
- break;
- }else {
- setAlarm(prevDwellTime * 1000, BAND_SWEEP_DWELL_DELAY_TIMEOUT);
- break;
- }
- }
- }
- if(!status) {
- sendStatusDoneMsg();
- mNextFreqInterface.Stop();
- mNextFreqInterface = null;
+ try {
+ mWakeLock.acquire(10 * 1000);
+ freq = mNextFreqInterface.getNextFreq();
+ for(; (status = (!mNextFreqInterface.errorOccured()) &
+ (!Thread.currentThread().isInterrupted()));
+ freq = mNextFreqInterface.getNextFreq()) {
+ if(validFreq(freq)) {
+ if(!tuneAndUpdateSweepResult(freq)) {
+ status = false;
+ break;
+ }else {
+ setAlarm(prevDwellTime * 1000,
+ BAND_SWEEP_DWELL_DELAY_TIMEOUT);
+ break;
+ }
+ }
+ }
+ if(!status) {
+ sendStatusDoneMsg();
+ mNextFreqInterface.Stop();
+ mNextFreqInterface = null;
+ }
+ }catch (Exception e) {
+ e.printStackTrace();
}
}
};
private boolean validFreq(int freq) {
- if((freq >= mBand.lFreq) &&
+ if((freq >= mBand.lFreq) && (freq <= mBand.hFreq)
+ &&
(((freq - mBand.lFreq) / mBand.Spacing) >= 0)) {
return true;
}else {
@@ -1870,6 +1889,8 @@ public class FMStats extends Activity {
}
} catch (RemoteException e) {
e.printStackTrace();
+ } catch(Exception e) {
+ e.printStackTrace();
}
try {
@@ -1880,6 +1901,8 @@ public class FMStats extends Activity {
return null;
} catch (RemoteException e) {
e.printStackTrace();
+ } catch(Exception e) {
+ e.printStackTrace();
}
if(isTransportLayerSMD()) {
@@ -1893,6 +1916,8 @@ public class FMStats extends Activity {
}
} catch (RemoteException e) {
e.printStackTrace();
+ } catch(Exception e) {
+ e.printStackTrace();
}
} else {
try {
@@ -1903,6 +1928,8 @@ public class FMStats extends Activity {
return null;
} catch (RemoteException e) {
e.printStackTrace();
+ }catch(Exception e) {
+ e.printStackTrace();
}
}
@@ -1914,6 +1941,8 @@ public class FMStats extends Activity {
return null;
} catch (RemoteException e) {
e.printStackTrace();
+ }catch (Exception e) {
+ e.printStackTrace();
}
} else {
return null;
@@ -1949,15 +1978,15 @@ public class FMStats extends Activity {
}
};
- public static IFMRadioService sService = null;
- private static HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
+ public IFMRadioService sService = null;
+ private HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
- public static boolean bindToService(Context context) {
+ public boolean bindToService(Context context) {
Log.e(LOGTAG, "bindToService: Context");
return bindToService(context, null);
}
- public static boolean bindToService(Context context, ServiceConnection callback) {
+ public boolean bindToService(Context context, ServiceConnection callback) {
Log.e(LOGTAG, "bindToService: Context with serviceconnection callback");
context.startService(new Intent(context, FMRadioService.class));
ServiceBinder sb = new ServiceBinder(callback);
@@ -1966,7 +1995,7 @@ public class FMStats extends Activity {
FMRadioService.class), sb, 0);
}
- public static void unbindFromService(Context context) {
+ public void unbindFromService(Context context) {
ServiceBinder sb = (ServiceBinder) sConnectionMap.remove(context);
Log.e(LOGTAG, "unbindFromService: Context");
if (sb == null)
@@ -1983,7 +2012,7 @@ public class FMStats extends Activity {
}
}
- private static class ServiceBinder implements ServiceConnection
+ private class ServiceBinder implements ServiceConnection
{
ServiceConnection mCallback;
ServiceBinder(ServiceConnection callback) {
@@ -2136,9 +2165,9 @@ public class FMStats extends Activity {
}
};
/* Radio Vars */
- final Handler mHandler = new Handler();
+ private Handler mHandler = new Handler();
- final Runnable mTuneComplete = new Runnable(){
+ private Runnable mTuneComplete = new Runnable(){
public void run(){
if((null != mMultiUpdateThread) &&(null != mSync))
{
@@ -2297,8 +2326,10 @@ public class FMStats extends Activity {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(LOGTAG, "received Band sweep Dwell expired");
- mWakeLock.acquire(5 * 1000);
- ResumeBandSweep();
+ if(mTestRunning) {
+ mWakeLock.acquire(5 * 1000);
+ ResumeBandSweep();
+ }
}
};
IntentFilter intentFilter = new IntentFilter(BAND_SWEEP_DWELL_DELAY_TIMEOUT);
diff --git a/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java b/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
index e83f61f..9798e3e 100644
--- a/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
+++ b/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
@@ -98,8 +98,8 @@ public class FMTransmitterActivity extends Activity {
private static final int ACTIVITY_RESULT_SETTINGS = 1;
private static final int MAX_PRESETS = 7;
- private static IFMTransmitterService mService = null;
- private static FmSharedPreferences mPrefs;
+ private IFMTransmitterService mService = null;
+ private FmSharedPreferences mPrefs;
/* Button Resources */
private ImageView mOnOffButton;
@@ -134,9 +134,9 @@ public class FMTransmitterActivity extends Activity {
private String mPSData = null;
/* Radio Vars */
- final Handler mHandler = new Handler();
- private final Handler enableRadioHandler = new Handler();
- private final Handler disableRadioHandler = new Handler();
+ private Handler mHandler = new Handler();
+ private Handler enableRadioHandler = new Handler();
+ private Handler disableRadioHandler = new Handler();
/* Search Progress Dialog */
private ProgressDialog mProgressDialog = null;
@@ -150,6 +150,7 @@ public class FMTransmitterActivity extends Activity {
private static final int FREQUENCY_STEP_LARGE = 200;
public static boolean mUpdatePickerValue = false;
+ private BroadcastReceiver mFmSettingReceiver = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -243,6 +244,7 @@ public class FMTransmitterActivity extends Activity {
}else {
Log.d(LOGTAG, "onCreate: Start Service completed successfully");
}
+ registerFMSettingListner();
}
}
@@ -341,6 +343,7 @@ public class FMTransmitterActivity extends Activity {
@Override
public void onResume() {
super.onResume();
+ Log.d(LOGTAG, "Resuming");
LoadPreferences();
if(mPicker != null) {
setDisplayvalue();
@@ -353,20 +356,30 @@ public class FMTransmitterActivity extends Activity {
@Override
public void onDestroy() {
+ super.onDestroy();
+ mHandler.removeCallbacksAndMessages(null);
+ if(mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ mProgressDialog = null;
+ }
+ if(mSearchProgressHandler != null) {
+ mSearchProgressHandler.removeCallbacksAndMessages(null);
+ }
+ removeDialog(DIALOG_PRESET_LIST_AUTO_SET);
+ unRegisterReceiver(mFmSettingReceiver);
unbindFromService(this);
mService = null;
Log.d(LOGTAG, "onDestroy: unbindFromService completed");
- super.onDestroy();
}
- private class LoadedDataAndState {
+ private static class LoadedDataAndState {
public LoadedDataAndState(){};
public boolean onOrOff;
}
@Override
public Object onRetainNonConfigurationInstance() {
- final LoadedDataAndState data = new LoadedDataAndState();
+ LoadedDataAndState data = new LoadedDataAndState();
if(mService != null) {
try {
data.onOrOff = mService.isFmOn();
@@ -759,7 +772,7 @@ public class FMTransmitterActivity extends Activity {
}
};
- final FrequencyPickerDialog.OnFrequencySetListener
+ private FrequencyPickerDialog.OnFrequencySetListener
mFrequencyChangeListener =
new FrequencyPickerDialog.OnFrequencySetListener() {
public void onFrequencySet
@@ -867,7 +880,7 @@ public class FMTransmitterActivity extends Activity {
}
}
- public static void fmConfigure() {
+ public void fmConfigure() {
if(mService != null) {
try {
mService.fmReconfigure();
@@ -1051,7 +1064,7 @@ public class FMTransmitterActivity extends Activity {
return (mIsSearching);
}
- public static int getCurrentTunedFrequency() {
+ public int getCurrentTunedFrequency() {
return mTunedFrequency;
}
@@ -1148,14 +1161,14 @@ public class FMTransmitterActivity extends Activity {
}
- final Runnable mUpdateStationInfo = new Runnable() {
+ private Runnable mUpdateStationInfo = new Runnable() {
public void run() {
updateSearchProgress();
resetFMStationInfoUI();
}
};
- final Runnable mSearchListComplete = new Runnable() {
+ private Runnable mSearchListComplete = new Runnable() {
public void run() {
Log.d(LOGTAG, "mSearchListComplete: ");
mIsSearching = false;
@@ -1196,7 +1209,7 @@ public class FMTransmitterActivity extends Activity {
- final Runnable mUpdateRadioText = new Runnable() {
+ private Runnable mUpdateRadioText = new Runnable() {
public void run() {
String str = "";
if((mService != null) && isFmOn()) {
@@ -1237,7 +1250,7 @@ public class FMTransmitterActivity extends Activity {
}
};
- final Runnable mRadioChangeFrequency = new Runnable(){
+ private Runnable mRadioChangeFrequency = new Runnable(){
public void run() {
mUpdatePickerValue = false;
tuneRadio(mFrequency);
@@ -1260,7 +1273,7 @@ public class FMTransmitterActivity extends Activity {
* character after every SCROLLER_UPDATE_DELAY_MS When the entire text is
* scrolled, the scrolling will restart after SCROLLER_RESTART_DELAY_MS
*/
- private static final class ScrollerText extends Handler {
+ private final class ScrollerText extends Handler {
private static final byte SCROLLER_STOPPED = 0x51;
private static final byte SCROLLER_STARTING = 0x52;
@@ -1379,15 +1392,15 @@ public class FMTransmitterActivity extends Activity {
}
}
- public static IFMTransmitterService sService = null;
- private static HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
+ public IFMTransmitterService sService = null;
+ private HashMap<Context, ServiceBinder> sConnectionMap = new HashMap<Context, ServiceBinder>();
- public static boolean bindToService(Context context) {
+ public boolean bindToService(Context context) {
Log.e(LOGTAG, "bindToService: Context");
return bindToService(context, null);
}
- public static boolean bindToService(Context context,
+ public boolean bindToService(Context context,
ServiceConnection callback) {
Log.e(LOGTAG, "bindToService: Context with serviceconnection callback");
context.startService(new Intent(context, FMTransmitterService.class));
@@ -1397,7 +1410,7 @@ public class FMTransmitterActivity extends Activity {
FMTransmitterService.class), sb, 0);
}
- public static void unbindFromService(Context context) {
+ public void unbindFromService(Context context) {
ServiceBinder sb = (ServiceBinder) sConnectionMap.remove(context);
Log.e(LOGTAG, "unbindFromService: Context");
if(sb == null) {
@@ -1413,7 +1426,7 @@ public class FMTransmitterActivity extends Activity {
}
}
- private static class ServiceBinder implements ServiceConnection {
+ private class ServiceBinder implements ServiceConnection {
ServiceConnection mCallback;
ServiceBinder(ServiceConnection callback) {
@@ -1530,7 +1543,7 @@ public class FMTransmitterActivity extends Activity {
}
};
- final Runnable mRadioStateUpdated = new Runnable() {
+ private Runnable mRadioStateUpdated = new Runnable() {
public void run() {
enableRadioOnOffButton();
/* Update UI to FM On State */
@@ -1551,7 +1564,7 @@ public class FMTransmitterActivity extends Activity {
}
};
- final Runnable mRadioReset = new Runnable() {
+ private Runnable mRadioReset = new Runnable() {
public void run() {
/* Save the existing frequency */
resetSearchProgress();
@@ -1560,4 +1573,40 @@ public class FMTransmitterActivity extends Activity {
enableRadioOnOffUI(false);
}
};
+
+ private void registerFMSettingListner() {
+ if(mFmSettingReceiver == null) {
+ mFmSettingReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.d(LOGTAG, "Received intent " + intent);
+ String action = intent.getAction();
+ Log.d(LOGTAG, " action = " + action);
+ if (action.equals(Settings.ACTION_FM_SETTING)) {
+ int state = intent.getIntExtra("state", 0);
+ Log.d(LOGTAG, "ACTION_FM_SETTING Intent received" + state);
+ switch(state) {
+ case Settings.FM_BAND_CHANGED:
+ fmConfigure();
+ break;
+ case Settings.FM_CHAN_SPACING_CHANGED:
+ fmConfigure();
+ break;
+ }
+ }
+ }
+ };
+ IntentFilter iFilter = new IntentFilter();
+ iFilter.addAction(Settings.ACTION_FM_SETTING);
+ registerReceiver(mFmSettingReceiver, iFilter);
+ }
+ }
+
+ private void unRegisterReceiver(BroadcastReceiver myReceiver) {
+ if(myReceiver != null) {
+ unregisterReceiver(myReceiver);
+ myReceiver = null;
+ }
+ }
+
}
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java
index 328126a..d64621b 100644
--- a/fmapp2/src/com/caf/fmradio/Settings.java
+++ b/fmapp2/src/com/caf/fmradio/Settings.java
@@ -62,7 +62,11 @@ public class Settings extends PreferenceActivity implements
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";
-
+ public static final String ACTION_FM_SETTING = "com.caf.fmradio.settings.changed";
+ public static final int FM_BAND_CHANGED = 1;
+ public static final int FM_CHAN_SPACING_CHANGED = 2;
+ public static final int FM_AF_OPTION_CHANGED = 3;
+ public static final int FM_AUDIO_MODE_CHANGED = 4;
private static final String LOGTAG = FMRadio.LOGTAG;
private static final String USR_BAND_MSG = "Enter Freq from range 76.0 - 108.0";
@@ -272,8 +276,7 @@ public class Settings extends PreferenceActivity implements
+ index);
FmSharedPreferences.setCountry(index);
setBandSummary(index);
- bStatus = FMRadio.fmConfigure();
- FMTransmitterActivity.fmConfigure();
+ sendSettingsChangedIntent(FM_BAND_CHANGED);
if (curList != null) {
curList.clear();
}
@@ -286,14 +289,13 @@ public class Settings extends PreferenceActivity implements
if(valStr != null) {
index = mChannelSpacingPref.findIndexOfValue(valStr);
}
- if ((index < 0) || (index >= summaryRecordItems.length)) {
+ if ((index < 0) || (index >= chSpacingItems.length)) {
index = 0;
mChannelSpacingPref.setValueIndex(0);
}
mChannelSpacingPref.setSummary(chSpacingItems[index]);
FmSharedPreferences.setChSpacing(2 - index);
- FMRadio.fmConfigure();
- FMTransmitterActivity.fmConfigure();
+ sendSettingsChangedIntent(FM_CHAN_SPACING_CHANGED);
if(curList != null) {
curList.clear();
}
@@ -311,8 +313,7 @@ public class Settings extends PreferenceActivity implements
min_freq = FmSharedPreferences.getLowerLimit();
if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
FmSharedPreferences.setLowerLimit((int)freq);
- FMRadio.fmConfigure();
- FMTransmitterActivity.fmConfigure();
+ sendSettingsChangedIntent(FM_BAND_CHANGED);
setBandSummary(summaryBandItems.length - 1);
clearStationList();
}else {
@@ -331,8 +332,7 @@ public class Settings extends PreferenceActivity implements
max_freq = FmSharedPreferences.getUpperLimit();
if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
FmSharedPreferences.setUpperLimit((int)freq);
- FMRadio.fmConfigure();
- FMTransmitterActivity.fmConfigure();
+ sendSettingsChangedIntent(FM_BAND_CHANGED);
setBandSummary(summaryBandItems.length - 1);
clearStationList();
}else {
@@ -345,8 +345,8 @@ public class Settings extends PreferenceActivity implements
Log.d(LOGTAG, "onSharedPreferenceChanged: Auto AF Enable: "
+ bAFAutoSwitch);
FmSharedPreferences.setAutoAFSwitch(bAFAutoSwitch);
- FMRadio.fmAutoAFSwitch();
mPrefs.Save();
+ sendSettingsChangedIntent(FM_AF_OPTION_CHANGED);
}else if(key.equals(RECORD_DURATION_KEY)) {
if(FMRadio.RECORDING_ENABLE) {
String valueStr = mRecordDurPreference.getValue();
@@ -387,7 +387,7 @@ public class Settings extends PreferenceActivity implements
FmSharedPreferences.setAudioOutputMode(false);
}
mPrefs.Save();
- FMRadio.fmAudioOutputMode();
+ sendSettingsChangedIntent(FM_AUDIO_MODE_CHANGED);
}
}
}
@@ -526,4 +526,11 @@ public class Settings extends PreferenceActivity implements
private void displayToast(String msg) {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}
+
+ private void sendSettingsChangedIntent(int action) {
+ Intent intent = new Intent(ACTION_FM_SETTING);
+ intent.putExtra("state", action);
+ Log.d(LOGTAG, "Sending FM SETTING Change intent for = " + action);
+ getApplicationContext().sendBroadcast(intent);
+ }
}