Make media button play/pause pause immediately.
It provides a faster response and there isn't any reason not to---a double click will restart playback.
This commit is contained in:
parent
69bbfbb255
commit
339a9fcf85
@ -30,8 +30,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.SystemClock;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
@ -41,7 +40,7 @@ import android.view.KeyEvent;
|
||||
* Handle a provided MediaButton event and take the appropriate action in
|
||||
* PlaybackService.
|
||||
*/
|
||||
public class MediaButtonHandler implements Handler.Callback {
|
||||
public class MediaButtonHandler {
|
||||
/**
|
||||
* If another button event is received before this time in milliseconds
|
||||
* expires, the event with be considered a double click.
|
||||
@ -52,10 +51,6 @@ public class MediaButtonHandler implements Handler.Callback {
|
||||
* The current global instance of this class.
|
||||
*/
|
||||
private static MediaButtonHandler mInstance;
|
||||
/**
|
||||
* The Handler for delayed processing.
|
||||
*/
|
||||
private Handler mHandler;
|
||||
/**
|
||||
* Whether the headset controls should be used. 1 for yes, 0 for no, -1 for
|
||||
* uninitialized.
|
||||
@ -66,6 +61,10 @@ public class MediaButtonHandler implements Handler.Callback {
|
||||
* uninitialized.
|
||||
*/
|
||||
private int mInCall = -1;
|
||||
/**
|
||||
* Time of the last play/pause click. Used to detect double-clicks.
|
||||
*/
|
||||
private long mLastClickTime;
|
||||
|
||||
private static AudioManager mAudioManager;
|
||||
private static Method mRegisterMediaButtonEventReceiver;
|
||||
@ -91,8 +90,6 @@ public class MediaButtonHandler implements Handler.Callback {
|
||||
*/
|
||||
private MediaButtonHandler()
|
||||
{
|
||||
mHandler = new Handler(this);
|
||||
|
||||
Context context = ContextApplication.getContext();
|
||||
|
||||
mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
|
||||
@ -185,13 +182,12 @@ public class MediaButtonHandler implements Handler.Callback {
|
||||
// double click: next track
|
||||
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
if (mHandler.hasMessages(MSG_SINGLE_PRESS_TIMEOUT)) {
|
||||
// double click
|
||||
mHandler.removeMessages(MSG_SINGLE_PRESS_TIMEOUT);
|
||||
long time = SystemClock.uptimeMillis();
|
||||
if (time - mLastClickTime < DOUBLE_CLICK_DELAY)
|
||||
act(PlaybackService.ACTION_NEXT_SONG_AUTOPLAY);
|
||||
} else {
|
||||
mHandler.sendEmptyMessageDelayed(MSG_SINGLE_PRESS_TIMEOUT, DOUBLE_CLICK_DELAY);
|
||||
}
|
||||
else
|
||||
act(PlaybackService.ACTION_TOGGLE_PLAYBACK);
|
||||
mLastClickTime = time;
|
||||
}
|
||||
break;
|
||||
case KeyEvent.KEYCODE_MEDIA_NEXT:
|
||||
@ -222,25 +218,6 @@ public class MediaButtonHandler implements Handler.Callback {
|
||||
return processKey(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* A delayed message that performs the single press action after the double
|
||||
* click period has expired.
|
||||
*/
|
||||
private static final int MSG_SINGLE_PRESS_TIMEOUT = 0;
|
||||
|
||||
public boolean handleMessage(Message message)
|
||||
{
|
||||
switch (message.what) {
|
||||
case MSG_SINGLE_PRESS_TIMEOUT:
|
||||
act(PlaybackService.ACTION_TOGGLE_PLAYBACK);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Request focus on the media buttons from AudioManager.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user