Make MediaButtonReceiver follow code style and remove long press for now
This commit is contained in:
parent
4d7a618d6c
commit
368e04c7ad
@ -31,11 +31,11 @@
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/one_cell_widget" />
|
||||
</receiver>
|
||||
<receiver android:name="MediaButtonReceiver" >
|
||||
<intent-filter android:priority="1000">
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name="MediaButtonReceiver" >
|
||||
<intent-filter android:priority="1000">
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<service android:name="PlaybackService" />
|
||||
<activity android:name="PreferencesActivity" />
|
||||
</application>
|
||||
|
@ -1,148 +1,109 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Christopher Eby <kreed@kreed.org>
|
||||
*
|
||||
* This file is part of Vanilla Music Player.
|
||||
*
|
||||
* Vanilla Music Player is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Vanilla Music Player is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.kreed.vanilla;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.view.KeyEvent;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.Log;
|
||||
|
||||
public class MediaButtonReceiver extends BroadcastReceiver {
|
||||
private static final int MSG_LONGPRESS_TIMEOUT = 1;
|
||||
private static final int MSG_MEDIA_CLICK = 2;
|
||||
private static final int LONG_PRESS_DELAY = 1000;
|
||||
private static final int DOUBLE_CLICK_DELAY = 300;
|
||||
|
||||
private static boolean mIgnoreNextUp;
|
||||
|
||||
private static long mLastClickTime = 0;
|
||||
private static boolean mDown = false;
|
||||
private static boolean mCheckDoubleClick = false;
|
||||
//private static boolean mLaunched = false;
|
||||
private static Handler mHandler= new Handler(){
|
||||
private static Handler mHandler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg){
|
||||
Context context = (Context)msg.obj;
|
||||
Intent i = new Intent(context, PlaybackService.class);
|
||||
Log.d("MAGNUS", "msg.what "+ msg.what);
|
||||
switch (msg.what){
|
||||
case MSG_LONGPRESS_TIMEOUT:
|
||||
|
||||
/* Context context = (Context)msg.obj;
|
||||
Intent i = new Intent(context, PlaybackService.class);
|
||||
|
||||
i.setAction(PlaybackService.NEXT_SONG);
|
||||
context.startService(i);
|
||||
*/
|
||||
break;
|
||||
case MSG_MEDIA_CLICK:
|
||||
if (mCheckDoubleClick) {
|
||||
i.setAction(PlaybackService.NEXT_SONG);
|
||||
mCheckDoubleClick = false;
|
||||
}
|
||||
else {
|
||||
i.setAction(PlaybackService.TOGGLE_PLAYBACK);
|
||||
}
|
||||
context.startService(i);
|
||||
break;
|
||||
default:
|
||||
Log.d("MAGNUS", "msg.what");
|
||||
public void handleMessage(Message msg)
|
||||
{
|
||||
switch (msg.what) {
|
||||
case MSG_MEDIA_CLICK:
|
||||
try {
|
||||
((PendingIntent)msg.obj).send();
|
||||
} catch (PendingIntent.CanceledException e) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static Intent getCommand(Context context, String action)
|
||||
{
|
||||
return new Intent(context, PlaybackService.class).setAction(action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
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*/
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent)
|
||||
{
|
||||
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
|
||||
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
||||
if (event == null)
|
||||
return;
|
||||
|
||||
Log.d("MAGNUS", "action "+intentAction);
|
||||
int action = event.getAction();
|
||||
|
||||
switch (event.getKeyCode()) {
|
||||
case KeyEvent.KEYCODE_HEADSETHOOK:
|
||||
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
|
||||
// single quick press: pause/resume.
|
||||
// double press: next track
|
||||
// long press: unused (could also do next track? open player?)
|
||||
|
||||
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
|
||||
KeyEvent event = (KeyEvent)
|
||||
intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
||||
if (action == KeyEvent.ACTION_UP && mIgnoreNextUp) {
|
||||
mIgnoreNextUp = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (event == null) {
|
||||
return;
|
||||
}
|
||||
if (mHandler.hasMessages(MSG_MEDIA_CLICK)) {
|
||||
// double press
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
mHandler.removeMessages(MSG_MEDIA_CLICK);
|
||||
context.startService(getCommand(context, PlaybackService.NEXT_SONG));
|
||||
mIgnoreNextUp = true;
|
||||
}
|
||||
} else {
|
||||
// single press
|
||||
if (action == KeyEvent.ACTION_UP) {
|
||||
Intent command = getCommand(context, PlaybackService.TOGGLE_PLAYBACK);
|
||||
PendingIntent pendingIntent = PendingIntent.getService(context, 0, command, 0);
|
||||
Message message = mHandler.obtainMessage(MSG_MEDIA_CLICK, pendingIntent);
|
||||
mHandler.sendMessageDelayed(message, DOUBLE_CLICK_DELAY);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KeyEvent.KEYCODE_MEDIA_NEXT:
|
||||
if (action == KeyEvent.ACTION_DOWN)
|
||||
context.startService(getCommand(context, PlaybackService.NEXT_SONG));
|
||||
break;
|
||||
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
|
||||
if (action == KeyEvent.ACTION_DOWN)
|
||||
//context.startService(getCommand(context, PlaybackService.PREVIOUS_SONG));
|
||||
break;
|
||||
default:
|
||||
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.
|
||||
|
||||
Intent i = new Intent(context, PlaybackService.class);
|
||||
String command = null;
|
||||
switch (keycode) {
|
||||
case KeyEvent.KEYCODE_HEADSETHOOK:
|
||||
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
|
||||
command = PlaybackService.TOGGLE_PLAYBACK;
|
||||
i.setAction(PlaybackService.TOGGLE_PLAYBACK);
|
||||
break;
|
||||
case KeyEvent.KEYCODE_MEDIA_NEXT:
|
||||
// not sure this works
|
||||
command = PlaybackService.NEXT_SONG;
|
||||
i.setAction(PlaybackService.NEXT_SONG);
|
||||
break;
|
||||
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
|
||||
// not sure this works
|
||||
command = PlaybackService.PREVIOUS_SONG;
|
||||
i.setAction(PlaybackService.PREVIOUS_SONG);
|
||||
break;
|
||||
}
|
||||
|
||||
Log.d("MAGNUS", "MediaButtonReceiver.onReceive - keyEvent "+ keycode
|
||||
+" - command "+ command
|
||||
+" - mLastClickTime "+ mLastClickTime
|
||||
+" - eventtime "+ eventtime
|
||||
);
|
||||
|
||||
if (command != null) {
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
if (mDown) {
|
||||
if (PlaybackService.TOGGLE_PLAYBACK.equals(command)
|
||||
&& mLastClickTime != 0
|
||||
&& eventtime - mLastClickTime > LONG_PRESS_DELAY) {
|
||||
mHandler.sendMessage(
|
||||
mHandler.obtainMessage(MSG_LONGPRESS_TIMEOUT, context));
|
||||
}
|
||||
} else {
|
||||
|
||||
if (keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
|
||||
// unique button ?
|
||||
// we need to check if it it repeated
|
||||
if ( eventtime - mLastClickTime < DOUBLE_CLICK_DELAY ) {
|
||||
// double
|
||||
mCheckDoubleClick = true;
|
||||
}
|
||||
else {
|
||||
mHandler.sendMessageDelayed(
|
||||
mHandler.obtainMessage(MSG_MEDIA_CLICK, context), DOUBLE_CLICK_DELAY);
|
||||
}
|
||||
mLastClickTime = eventtime;
|
||||
mDown = true;
|
||||
}
|
||||
else {
|
||||
context.startService(i);
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
mHandler.removeMessages(MSG_LONGPRESS_TIMEOUT);
|
||||
mDown = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
abortBroadcast();
|
||||
}
|
||||
abortBroadcast();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user