From a8bf7536acb0f62ae3f6ca38f5b1afa155a2de49 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Tue, 23 Aug 2011 22:04:35 -0500 Subject: [PATCH] Handle media keys in PlaybackActivities Avoids the overhead of the broadcast when the activity has focus --- src/org/kreed/vanilla/MediaButtonHandler.java | 26 +++++++++++------ src/org/kreed/vanilla/PlaybackActivity.java | 28 +++++++++++++++++++ 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/org/kreed/vanilla/MediaButtonHandler.java b/src/org/kreed/vanilla/MediaButtonHandler.java index b5cb8b7a..d2b50815 100644 --- a/src/org/kreed/vanilla/MediaButtonHandler.java +++ b/src/org/kreed/vanilla/MediaButtonHandler.java @@ -139,15 +139,10 @@ public class MediaButtonHandler implements Handler.Callback { } /** - * Process a MediaButton broadcast. - * - * @param intent The intent that was broadcast - * @return True if the intent was handled and the broadcast should be - * aborted. + * Process a media button key press. */ - public boolean process(Intent intent) + public boolean processKey(KeyEvent event) { - KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null || isInCall() || !useHeadsetControls()) return false; @@ -156,7 +151,7 @@ public class MediaButtonHandler implements Handler.Callback { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_HEADSETHOOK: case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: - // single click: pause/resume. + // single click: pause/resume. // double click: next track if (action == KeyEvent.ACTION_DOWN) { @@ -184,6 +179,19 @@ public class MediaButtonHandler implements Handler.Callback { return true; } + /** + * Process a MediaButton broadcast. + * + * @param intent The intent that was broadcast + * @return True if the intent was handled and the broadcast should be + * aborted. + */ + public boolean process(Intent intent) + { + KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); + return processKey(event); + } + /** * A delayed message that performs the single press action after the double * click period has expired. @@ -202,4 +210,4 @@ public class MediaButtonHandler implements Handler.Callback { return true; } -} \ No newline at end of file +} diff --git a/src/org/kreed/vanilla/PlaybackActivity.java b/src/org/kreed/vanilla/PlaybackActivity.java index 2f86d4a1..dd3681fa 100644 --- a/src/org/kreed/vanilla/PlaybackActivity.java +++ b/src/org/kreed/vanilla/PlaybackActivity.java @@ -93,6 +93,34 @@ public class PlaybackActivity extends Activity implements Handler.Callback, View return false; } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) + { + switch (keyCode) { + case KeyEvent.KEYCODE_HEADSETHOOK: + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + case KeyEvent.KEYCODE_MEDIA_NEXT: + case KeyEvent.KEYCODE_MEDIA_PREVIOUS: + return MediaButtonHandler.getInstance().processKey(event); + } + + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) + { + switch (keyCode) { + case KeyEvent.KEYCODE_HEADSETHOOK: + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + case KeyEvent.KEYCODE_MEDIA_NEXT: + case KeyEvent.KEYCODE_MEDIA_PREVIOUS: + return MediaButtonHandler.getInstance().processKey(event); + } + + return super.onKeyUp(keyCode, event); + } + @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) {