Disable the media button controls when in a call

This commit is contained in:
Christopher Eby 2010-04-08 14:52:14 -05:00
parent 9a982a709e
commit 605632f547
2 changed files with 13 additions and 3 deletions

View File

@ -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();
}
}
}
}

View File

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