diff --git a/src/org/kreed/vanilla/MediaButtonReceiver.java b/src/org/kreed/vanilla/MediaButtonReceiver.java index c5f3a3f7..4676b1ba 100644 --- a/src/org/kreed/vanilla/MediaButtonReceiver.java +++ b/src/org/kreed/vanilla/MediaButtonReceiver.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.BroadcastReceiver; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.telephony.TelephonyManager; public class MediaButtonReceiver extends BroadcastReceiver { @Override @@ -31,9 +32,12 @@ public class MediaButtonReceiver extends BroadcastReceiver { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); if (settings.getBoolean("media_button", true)) { - intent.setClass(context, PlaybackService.class); - context.startService(intent); - abortBroadcast(); + TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); + if (telephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE) { + intent.setClass(context, PlaybackService.class); + context.startService(intent); + abortBroadcast(); + } } } } diff --git a/src/org/kreed/vanilla/PlaybackService.java b/src/org/kreed/vanilla/PlaybackService.java index be086679..c39c879b 100644 --- a/src/org/kreed/vanilla/PlaybackService.java +++ b/src/org/kreed/vanilla/PlaybackService.java @@ -105,6 +105,7 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP public InCallListener mCallListener; private boolean mIgnoreNextUp; private boolean mLoaded; + private boolean mInCall; private Method mIsWiredHeadsetOn; private Method mStartForeground; @@ -558,6 +559,9 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP private boolean handleMediaKey(KeyEvent event) { + if (mInCall) + return false; + int action = event.getAction(); switch (event.getKeyCode()) { @@ -626,10 +630,12 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP switch (state) { case TelephonyManager.CALL_STATE_RINGING: case TelephonyManager.CALL_STATE_OFFHOOK: + mInCall = true; if (!mPlayingBeforeCall) mPlayingBeforeCall = unsetFlag(FLAG_PLAYING); break; case TelephonyManager.CALL_STATE_IDLE: + mInCall = false; if (mPlayingBeforeCall) { setFlag(FLAG_PLAYING); mPlayingBeforeCall = false;