diff options
author | Ayaz Ahmad <aahmad@codeaurora.org> | 2013-08-22 12:19:43 +0530 |
---|---|---|
committer | Ayaz Ahmad <aahmad@codeaurora.org> | 2013-09-05 13:05:25 +0530 |
commit | 954bed185ea5ec1e104a30ca89fe16aeee3f614d (patch) | |
tree | 581f5a2a9462774b4d34c7e9bcb361e355173974 | |
parent | b0880e7472611a74c9f5df1a9e8176d2b76f984c (diff) | |
download | android_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.java | 149 | ||||
-rw-r--r-- | fmapp2/src/com/caf/fmradio/FMStats.java | 127 | ||||
-rw-r--r-- | fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java | 97 | ||||
-rw-r--r-- | fmapp2/src/com/caf/fmradio/Settings.java | 31 |
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); + } } |