diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java index 0c5713b68c6546a6edd69beaf9a54722a0c053f0..002224ddd7504318a40e0fd58362ba930b6a0cdc 100644 --- a/fmapp2/src/com/caf/fmradio/FMRadioService.java +++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java @@ -212,11 +212,13 @@ public class FMRadioService extends Service private boolean mIsRecordSink = false; private static final int AUDIO_FRAMES_COUNT_TO_IGNORE = 3; private Object mRecordSinkLock = new Object(); + private Object mEventWaitLock = new Object(); private boolean mIsFMDeviceLoopbackActive = false; private File mStoragePath = null; private static final int FM_OFF_FROM_APPLICATION = 1; private static final int FM_OFF_FROM_ANTENNA = 2; + private static final int RADIO_TIMEOUT = 1500; private static Object mNotchFilterLock = new Object(); @@ -2284,6 +2286,21 @@ public class FMRadioService extends Service if (mReceiver != null) { bStatus = mReceiver.disable(this); + if (bStatus && + (mReceiver.getFMState() == mReceiver.subPwrLevel_FMTurning_Off)) { + synchronized (mEventWaitLock) { + Log.d(LOGTAG, "waiting for disable event"); + try { + mEventWaitLock.wait(RADIO_TIMEOUT); + } catch (IllegalMonitorStateException e) { + Log.e(LOGTAG, "Exception caught while waiting for event"); + e.printStackTrace(); + } catch (InterruptedException ex) { + Log.e(LOGTAG, "Exception caught while waiting for event"); + ex.printStackTrace(); + } + } + } mReceiver = null; } fmOperationsOff(); @@ -2291,7 +2308,6 @@ public class FMRadioService extends Service return(bStatus); } - private boolean fmOff(int off_from) { if (off_from == FM_OFF_FROM_APPLICATION || off_from == FM_OFF_FROM_ANTENNA) { Log.d(LOGTAG, "FM application close button pressed or antenna removed"); @@ -3025,6 +3041,9 @@ public class FMRadioService extends Service Log.d(LOGTAG, "FmRxEvDisableReceiver"); mFMOn = false; FmSharedPreferences.clearTags(); + synchronized (mEventWaitLock) { + mEventWaitLock.notify(); + } } public void FmRxEvRadioReset() { diff --git a/qcom/fmradio/FmRxEventListner.java b/qcom/fmradio/FmRxEventListner.java index 0ad7c0ccb03c1c69499cc41b1d5e3e633d0deb55..c178f17b5271bc1db5ed98708a2daf53409dc6de 100644 --- a/qcom/fmradio/FmRxEventListner.java +++ b/qcom/fmradio/FmRxEventListner.java @@ -214,9 +214,9 @@ class FmRxEventListner { Log.d(TAG, "Got RADIO_DISABLED"); if (FmTransceiver.getFMPowerState() == FmTransceiver.subPwrLevel_FMTurning_Off) { FmTransceiver.release("/dev/radio0"); - cb.FmRxEvDisableReceiver(); /*Set the state as FMOff */ FmTransceiver.setFMPowerState(FmTransceiver.FMState_Turned_Off); + cb.FmRxEvDisableReceiver(); Log.v(TAG, "RxEvtList: CURRENT-STATE : FMTurningOff ---> NEW-STATE : FMOff"); Thread.currentThread().interrupt(); } else {