String intentAction = intent.getAction();
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) {
Intent i = new Intent(context, MediaPlaybackService.class);
i.setAction(MediaPlaybackService.SERVICECMD);
i.putExtra(MediaPlaybackService.CMDNAME, MediaPlaybackService.CMDPAUSE);
context.startService(i);
} else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = (KeyEvent)
intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null) {
return;
}
int keycode = event.getKeyCode();
int action = event.getAction();
long eventtime = event.getEventTime();
// single quick press: pause/resume.
// double press: next track
// long press: start auto-shuffle mode.
String command = null;
switch (keycode) {
case KeyEvent.KEYCODE_MEDIA_STOP:
command = MediaPlaybackService.CMDSTOP;
break;
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
command = MediaPlaybackService.CMDTOGGLEPAUSE;
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
command = MediaPlaybackService.CMDNEXT;
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
command = MediaPlaybackService.CMDPREVIOUS;
break;
}
if (command != null) {
if (action == KeyEvent.ACTION_DOWN) {
if (!mDown) {
// only if this isn't a repeat event
if (MediaPlaybackService.CMDTOGGLEPAUSE.equals(command)) {
// We're not using the original time of the event as the
// base here, because in some cases it can take more than
// one second for us to receive the event, in which case
// we would go immediately to auto shuffle mode, even if
// the user didn't long press.
mHandler.sendMessageDelayed(
mHandler.obtainMessage(MSG_LONGPRESS_TIMEOUT, context),
LONG_PRESS_DELAY);
}
SharedPreferences pref = context.getSharedPreferences("Music",
Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
String q = pref.getString("queue", "");
// The service may or may not be running, but we need to send it
// a command.
Intent i = new Intent(context, MediaPlaybackService.class);
i.setAction(MediaPlaybackService.SERVICECMD);
if (keycode == KeyEvent.KEYCODE_HEADSETHOOK &&
eventtime - mLastClickTime < 300) {
i.putExtra(MediaPlaybackService.CMDNAME, MediaPlaybackService.CMDNEXT);
context.startService(i);
mLastClickTime = 0;
} else {
i.putExtra(MediaPlaybackService.CMDNAME, command);
context.startService(i);
mLastClickTime = eventtime;
}
mLaunched = false;
mDown = true;
}
} else {
mHandler.removeMessages(MSG_LONGPRESS_TIMEOUT);
mDown = false;
}
abortBroadcast();
}
}