aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2014-06-10 17:26:22 -0700
committerScott Jackson <daneren2005@gmail.com>2014-06-10 17:26:22 -0700
commitcf2795ada0897f97fd4db963a103d05a8b64cb3a (patch)
tree86844cc0ad6924c24a9e4402a3fc3ea281064cb5 /src
parentcc480686122e19c46f9e74c3c1227c9c8ff3b78c (diff)
downloaddsub-cf2795ada0897f97fd4db963a103d05a8b64cb3a.tar.gz
dsub-cf2795ada0897f97fd4db963a103d05a8b64cb3a.tar.bz2
dsub-cf2795ada0897f97fd4db963a103d05a8b64cb3a.zip
#360, #331 Change to use AUDIO_NOISY event. Fixes issues with both pausing during any bluetooth disconnect, and delay when music is playing after unplugging headphones
Diffstat (limited to 'src')
-rw-r--r--src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java51
-rw-r--r--src/github/daneren2005/dsub/receiver/BluetoothIntentReceiver.java85
-rw-r--r--src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java25
3 files changed, 51 insertions, 110 deletions
diff --git a/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java b/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java
new file mode 100644
index 00000000..058d04b4
--- /dev/null
+++ b/src/github/daneren2005/dsub/receiver/AudioNoisyReceiver.java
@@ -0,0 +1,51 @@
+/*
+ This file is part of Subsonic.
+ Subsonic is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ Subsonic 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. See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
+ Copyright 2014 (C) Scott Jackson
+*/
+
+package github.daneren2005.dsub.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.media.AudioManager;
+import android.util.Log;
+
+import github.daneren2005.dsub.domain.PlayerState;
+import github.daneren2005.dsub.service.DownloadService;
+import github.daneren2005.dsub.util.Constants;
+import github.daneren2005.dsub.util.Util;
+
+public class AudioNoisyReceiver extends BroadcastReceiver {
+ private static final String TAG = AudioNoisyReceiver.class.getSimpleName();
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ DownloadService downloadService = DownloadService.getInstance();
+ // Don't do anything if downloadService is not started
+ if(downloadService == null) {
+ return;
+ }
+
+ if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals (intent.getAction ())) {
+ if(!downloadService.isRemoteEnabled() && downloadService.getPlayerState() == PlayerState.STARTED) {
+ SharedPreferences prefs = Util.getPreferences(downloadService);
+ int pausePref = Integer.parseInt(prefs.getString(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT, "0"));
+ if(pausePref == 0) {
+ downloadService.pause();
+ }
+ }
+ }
+ }
+}
diff --git a/src/github/daneren2005/dsub/receiver/BluetoothIntentReceiver.java b/src/github/daneren2005/dsub/receiver/BluetoothIntentReceiver.java
deleted file mode 100644
index 13de4d86..00000000
--- a/src/github/daneren2005/dsub/receiver/BluetoothIntentReceiver.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic 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. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2010 (C) Sindre Mehus
- */
-package github.daneren2005.dsub.receiver;
-
-import android.bluetooth.BluetoothDevice;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import github.daneren2005.dsub.service.DownloadService;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.Util;
-
-/**
- * Request media button focus when connected to Bluetooth A2DP.
- *
- * @author Sindre Mehus
- */
-public class BluetoothIntentReceiver extends BroadcastReceiver {
- private static final String TAG = BluetoothIntentReceiver.class.getSimpleName();
- // Same as constants in android.bluetooth.BluetoothProfile, which is API level 11.
- private static final int STATE_DISCONNECTED = 0;
- private static final int STATE_CONNECTED = 2;
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.i(TAG, "GOT INTENT " + intent);
- if (isConnected(intent)) {
- Log.i(TAG, "Connected to Bluetooth A2DP, requesting media button focus.");
- Util.registerMediaButtonEventReceiver(context);
- } else if (isDisconnected(intent)) {
- Log.i(TAG, "Disconnected from Bluetooth A2DP, requesting pause.");
- SharedPreferences prefs = Util.getPreferences(context);
- int pausePref = Integer.parseInt(prefs.getString(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT, "0"));
- if(pausePref == 0 || pausePref == 2) {
- context.sendBroadcast(new Intent(DownloadService.CMD_PAUSE));
- }
- }
- }
- private boolean isConnected(Intent intent) {
- if ("android.bluetooth.a2dp.action.SINK_STATE_CHANGED".equals(intent.getAction()) &&
- intent.getIntExtra("android.bluetooth.a2dp.extra.SINK_STATE", -1) == STATE_CONNECTED) {
- return true;
- }
- else if ("android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED".equals(intent.getAction()) &&
- intent.getIntExtra("android.bluetooth.profile.extra.STATE", -1) == STATE_CONNECTED) {
- return true;
- }
- else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(intent.getAction())) {
- return true;
- }
- return false;
- }
- private boolean isDisconnected(Intent intent) {
- if ("android.bluetooth.a2dp.action.SINK_STATE_CHANGED".equals(intent.getAction()) &&
- intent.getIntExtra("android.bluetooth.a2dp.extra.SINK_STATE", -1) == STATE_DISCONNECTED) {
- return true;
- }
- else if ("android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED".equals(intent.getAction()) &&
- intent.getIntExtra("android.bluetooth.profile.extra.STATE", -1) == STATE_DISCONNECTED) {
- return true;
- }
- else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(intent.getAction())) {
- return true;
- }
- return false;
- }
-}
diff --git a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
index db69517c..ed092328 100644
--- a/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
+++ b/src/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
@@ -54,7 +54,6 @@ public class DownloadServiceLifecycleSupport {
private final DownloadService downloadService;
private Looper eventLooper;
private Handler eventHandler;
- private BroadcastReceiver headsetEventReceiver;
private BroadcastReceiver ejectEventReceiver;
private PhoneStateListener phoneStateListener;
private boolean externalStorageAvailable= true;
@@ -118,29 +117,6 @@ public class DownloadServiceLifecycleSupport {
}
}, "DownloadServiceLifecycleSupport").start();
- // Pause when headset is unplugged.
- headsetEventReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.i(TAG, "Headset event for: " + intent.getExtras().get("name"));
- if (intent.getExtras().getInt("state") == 0) {
- eventHandler.post(new Runnable() {
- @Override
- public void run() {
- if(!downloadService.isRemoteEnabled()) {
- SharedPreferences prefs = Util.getPreferences(downloadService);
- int pausePref = Integer.parseInt(prefs.getString(Constants.PREFERENCES_KEY_PAUSE_DISCONNECT, "0"));
- if(pausePref == 0 || pausePref == 1) {
- downloadService.pause();
- }
- }
- }
- });
- }
- }
- };
- downloadService.registerReceiver(headsetEventReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
-
// Stop when SD card is ejected.
ejectEventReceiver = new BroadcastReceiver() {
@Override
@@ -210,7 +186,6 @@ public class DownloadServiceLifecycleSupport {
eventLooper.quit();
serializeDownloadQueueNow();
downloadService.unregisterReceiver(ejectEventReceiver);
- downloadService.unregisterReceiver(headsetEventReceiver);
downloadService.unregisterReceiver(intentReceiver);
TelephonyManager telephonyManager = (TelephonyManager) downloadService.getSystemService(Context.TELEPHONY_SERVICE);