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
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 @@
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 @@
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)