From cd9ddcdbf3ae0b8936f107ed82ba8fe6409a5c1f Mon Sep 17 00:00:00 2001 From: Kamal Negi <kamaln@codeaurora.org> Date: Mon, 13 Mar 2017 18:01:03 +0530 Subject: [PATCH] fm: Resume FM after telephony state become idle On call disconnection, AUDIOFOCUS_GAIN received before telephony state intent and telephony state update happens after audio focus gain. Hence FM turn on won't happen. Turn on FM if telephony intent received or rety once after 100ms. Change-Id: I6bdc7f13afd024be8d3428c83f7117277affc45f --- .../src/com/caf/fmradio/FMRadioService.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java index 2d157c6..6588571 100644 --- a/fmapp2/src/com/caf/fmradio/FMRadioService.java +++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java @@ -1449,31 +1449,33 @@ public class FMRadioService extends Service resolver.insert(uri, values); } - private void resumeAfterCall() { - if (getCallState() != TelephonyManager.CALL_STATE_IDLE) - return; - - // start playing again - if (!mResumeAfterCall) - return; - - // resume playback only if FM Radio was playing - // when the call was answered - if (isAntennaAvailable() && (!isFmOn()) && mServiceInUse) { - Log.d(LOGTAG, "Resuming after call:"); - if(!fmOn()) { + Runnable resumeAfterCall = new Runnable() { + public void run() { + if (getCallState() != TelephonyManager.CALL_STATE_IDLE) return; - } - mResumeAfterCall = false; - if (mCallbacks != null) { - try { - mCallbacks.onEnabled(); - } catch (RemoteException e) { - e.printStackTrace(); + + // start playing again + if (!mResumeAfterCall) + return; + + // resume playback only if FM Radio was playing + // when the call was answered + if (isAntennaAvailable() && (!isFmOn()) && mServiceInUse) { + Log.d(LOGTAG, "Resuming after call:"); + if(!fmOn()) { + return; + } + mResumeAfterCall = false; + if (mCallbacks != null) { + try { + mCallbacks.onEnabled(); + } catch (RemoteException e) { + e.printStackTrace(); + } } } } - } + }; private void fmActionOnCallState( int state ) { //if Call Status is non IDLE we need to Mute FM as well stop recording if @@ -1623,7 +1625,11 @@ public class FMRadioService extends Service mStoppedOnFocusLoss = false; if (mResumeAfterCall) { Log.v(LOGTAG, "resumeAfterCall"); - resumeAfterCall(); + if (getCallState() != TelephonyManager.CALL_STATE_IDLE) { + mHandler.postDelayed(resumeAfterCall, 100); + return; + } + mHandler.post(resumeAfterCall); break; } if(false == mPlaybackInProgress) -- GitLab