diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2012-07-08 12:45:09 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2012-07-08 12:45:09 +0200 |
commit | d18def3fb3e71e9c5a21c25b45015c72187f2534 (patch) | |
tree | ada36f3517f68cb1cec84f17f9016f45e97f80d7 /src | |
parent | 5c9a2d260d777cc334e5ab424d39a7411273c04f (diff) | |
download | AntennaPod-d18def3fb3e71e9c5a21c25b45015c72187f2534.zip |
Implemented pauseOnHeadsetDisconnect preference
Diffstat (limited to 'src')
-rw-r--r-- | src/de/podfetcher/service/PlaybackService.java | 76 |
1 files changed, 62 insertions, 14 deletions
diff --git a/src/de/podfetcher/service/PlaybackService.java b/src/de/podfetcher/service/PlaybackService.java index 81fd1501e..7958e0c43 100644 --- a/src/de/podfetcher/service/PlaybackService.java +++ b/src/de/podfetcher/service/PlaybackService.java @@ -5,9 +5,11 @@ import java.io.IOException; import android.R; import android.app.PendingIntent; import android.app.Service; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -17,6 +19,7 @@ import android.media.MediaPlayer; import android.os.AsyncTask; import android.os.Binder; import android.os.IBinder; +import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; import android.util.Log; import android.view.KeyEvent; @@ -118,6 +121,8 @@ public class PlaybackService extends Service { mediaButtonReceiver = new ComponentName(getPackageName(), MediaButtonReceiver.class.getName()); audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver); + registerReceiver(headsetDisconnected, new IntentFilter( + Intent.ACTION_HEADSET_PLUG)); } @@ -125,6 +130,7 @@ public class PlaybackService extends Service { public void onDestroy() { super.onDestroy(); isRunning = false; + unregisterReceiver(headsetDisconnected); Log.d(TAG, "Service is about to be destroyed"); audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiver); audioManager.abandonAudioFocus(audioFocusChangeListener); @@ -421,6 +427,12 @@ public class PlaybackService extends Service { } }; + /** + * Saves the current position and pauses playback + * + * @param abandonFocus + * is true if the service should release audio focus + */ public void pause(boolean abandonFocus) { if (player.isPlaying()) { Log.d(TAG, "Pausing playback."); @@ -532,36 +544,60 @@ public class PlaybackService extends Service { media.setPosition(player.getCurrentPosition()); manager.setFeedMedia(this, media); } - + private void stopWidgetUpdater() { if (widgetUpdater != null) { widgetUpdater.cancel(true); } } - + private void setupWidgetUpdater() { if (widgetUpdater == null || widgetUpdater.isCancelled()) { widgetUpdater = new WidgetUpdateWorker(); widgetUpdater.execute(); } } - + private void updateWidget() { Log.d(TAG, "Sending widget update request"); - PlaybackService.this.sendBroadcast(new Intent(PlayerWidget.FORCE_WIDGET_UPDATE)); - } - - public PlayerStatus getStatus() { - return status; + PlaybackService.this.sendBroadcast(new Intent( + PlayerWidget.FORCE_WIDGET_UPDATE)); } - public FeedMedia getMedia() { - return media; - } + /** + * Pauses playback when the headset is disconnected and the preference is + * set + */ + private BroadcastReceiver headsetDisconnected = new BroadcastReceiver() { + private static final String TAG = "headsetDisconnected"; + private static final int UNPLUGGED = 0; - public MediaPlayer getPlayer() { - return player; - } + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { + int state = intent.getIntExtra("state", -1); + if (state != -1) { + Log.d(TAG, "Headset plug event. State is " + state); + boolean pauseOnDisconnect = PreferenceManager + .getDefaultSharedPreferences( + getApplicationContext()) + .getBoolean( + PodcastApp.PREF_PAUSE_ON_HEADSET_DISCONNECT, + false); + Log.d(TAG, "pauseOnDisconnect preference is " + + pauseOnDisconnect); + if (state == UNPLUGGED && pauseOnDisconnect + && status == PlayerStatus.PLAYING) { + Log.d(TAG, + "Pausing playback because headset was disconnected"); + pause(true); + } + } else { + Log.e(TAG, "Received invalid ACTION_HEADSET_PLUG intent"); + } + } + } + }; /** Periodically saves the position of the media file */ class PositionSaver extends AsyncTask<Void, Void, Void> { @@ -621,4 +657,16 @@ public class PlaybackService extends Service { return shouldStream; } + public PlayerStatus getStatus() { + return status; + } + + public FeedMedia getMedia() { + return media; + } + + public MediaPlayer getPlayer() { + return player; + } + } |