Merge "FMStats: Don't run runnable in context of handler"
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 1c506c4..091b1b3 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -276,6 +276,7 @@
private Thread mRecordUpdateHandlerThread = null;
private Thread mRunTestThread = null;
+ private Thread mTuneCompleteThread = null;
boolean mRecording = false;
@@ -465,12 +466,10 @@
if (lastCmdSent == CMD_STNPARAM_SINR)
nSINR = msg.arg1;
}
- if (mRunTestThread != null) {
- synchronized (obj) {
- obj.notify();
- }
- }
- lastCmdSent = 0;
+ synchronized (obj) {
+ obj.notify();
+ }
+ lastCmdSent = 0;
break;
case GET_STATION_DBG_PARAM:
status = msg.arg2;
@@ -484,12 +483,10 @@
if (lastCmdSent == CMD_STNDBGPARAM_INFDETOUT)
nIntDet = msg.arg1;
}
- if (mRunTestThread != null) {
- synchronized (obj) {
- mRunTestThread.notify();
- }
- }
- break;
+ synchronized (obj) {
+ obj.notify();
+ }
+ break;
default:
Log.e(LOGTAG, "mCallbackHandler:Default");
break;
@@ -535,9 +532,6 @@
if(mUIUpdateHandlerHandler != null) {
mUIUpdateHandlerHandler.removeCallbacksAndMessages(null);
}
- if(mHandler != null) {
- mHandler.removeCallbacksAndMessages(null);
- }
unRegisterBroadcastReceiver(mBandSweepDelayExprdListener);
unRegisterBroadcastReceiver(mBandSweepDwellExprdListener);
if(null != mFileCursor ) {
@@ -563,6 +557,28 @@
}
};
+ private Runnable mTuneComplete = new Runnable(){
+ public void run(){
+ if((null != mMultiUpdateThread) &&(null != mSync))
+ {
+ synchronized(mSync){
+ mSync.notify();
+ }
+ }
+ if((mTestSelected == SEARCH_TEST) && (mService != null)) {
+ /* On every Tune Complete generate the result for the current
+ Frequency*/
+ Message updateUI = new Message();
+ updateUI.what = STATUS_UPDATE;
+ int freq = FmSharedPreferences.getTunedFrequency();
+ updateUI.obj = (Object)GetFMStatsForFreq(freq);
+ if (updateUI.obj == null)
+ updateUI.what = STATUS_DONE;
+ mUIUpdateHandlerHandler.sendMessage(updateUI);
+ }
+ }
+ };
+
private View.OnClickListener mOnRunListener = new View.OnClickListener() {
public void onClick(View v) {
Log.d(LOGTAG, "mTestRunning=" + mTestRunning);
@@ -2880,12 +2896,12 @@
private boolean isCherokeeChip() {
Log.d(LOGTAG, "isCherokeeChip");
- String chip = SystemProperties.get("qcom.bluetooth.soc");
- if (chip.equals("cherokee"))
- return true;
- else
- return false;
- }
+ String chip = SystemProperties.get("qcom.bluetooth.soc");
+ if (chip.equals("cherokee"))
+ return true;
+ else
+ return false;
+ }
private boolean isRomeChip() {
String chip = "";
@@ -3515,8 +3531,21 @@
public void onTuneStatusChanged()
{
Log.d(LOGTAG, "mServiceCallbacks.onTuneStatusChanged :" + mTestRunning);
- if (mTestRunning)
- mHandler.post(mTuneComplete);
+ if (mTestRunning) {
+ if ((mTuneCompleteThread == null) || (mTuneCompleteThread.getState() == Thread.State.TERMINATED)) {
+ mTuneCompleteThread = new Thread(mTuneComplete,
+ "mTuneCompleteThread");
+ } else {
+ Log.e(LOGTAG, "mTuneCompleteThread is already running");
+ return;
+ }
+ if (mTuneCompleteThread != null) {
+ mTuneCompleteThread.start();
+ } else {
+ Log.e(LOGTAG, "mTuneCompleteThread: new thread create failed");
+ return;
+ }
+ }
}
public void onProgramServiceChanged()
@@ -3737,30 +3766,6 @@
mCallbackHandler.obtainMessage(GET_STATION_DBG_PARAM, val, status).sendToTarget();
}
};
- /* Radio Vars */
- private Handler mHandler = new Handler();
-
- private Runnable mTuneComplete = new Runnable(){
- public void run(){
- if((null != mMultiUpdateThread) &&(null != mSync))
- {
- synchronized(mSync){
- mSync.notify();
- }
- }
- if((mTestSelected == SEARCH_TEST) && (mService != null)) {
- /* On every Tune Complete generate the result for the current
- Frequency*/
- Message updateUI = new Message();
- updateUI.what = STATUS_UPDATE;
- int freq = FmSharedPreferences.getTunedFrequency();
- updateUI.obj = (Object)GetFMStatsForFreq(freq);
- if (updateUI.obj == null)
- updateUI.what = STATUS_DONE;
- mUIUpdateHandlerHandler.sendMessage(updateUI);
- }
- }
- };
private void stopCurTest() {
if (mRunTestThread != null) {
@@ -3779,7 +3784,8 @@
mMultiUpdateThread.interrupt();
break;
case SEARCH_TEST:
- mHandler.removeCallbacks(mTuneComplete);
+ if (mTuneCompleteThread != null)
+ mTuneCompleteThread.interrupt();
if (mService != null) {
try {
Message updateStop = new Message();