diff options
author | Scott Jackson <daneren2005@gmail.com> | 2014-06-10 17:26:22 -0700 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2014-06-10 17:26:22 -0700 |
commit | cf2795ada0897f97fd4db963a103d05a8b64cb3a (patch) | |
tree | 86844cc0ad6924c24a9e4402a3fc3ea281064cb5 /src | |
parent | cc480686122e19c46f9e74c3c1227c9c8ff3b78c (diff) | |
download | dsub-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')
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); |