diff --git a/res/values/strings.xml b/res/values/strings.xml index 537ac6b6..3fba4ea6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -98,10 +98,8 @@ THE SOFTWARE. Music volume Use Headset Controls Single click for play/pause. Double click for next. - External Output Only - Only play music through an external output (e.g. headphones, Bluetooth) - Pause When Unplugged - Pause when the headphones are unplugged. + Pause When Headset Disconnected + Pause when the headphones or Bluetooth device are disconnected. Notifications Notification Mode diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index d622135a..afae9264 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -33,11 +33,6 @@ THE SOFTWARE. android:title="@string/media_button_title" android:summary="@string/media_button_summary" android:defaultValue="true" /> - - \ No newline at end of file + diff --git a/src/org/kreed/vanilla/PlaybackService.java b/src/org/kreed/vanilla/PlaybackService.java index 2d5f4a44..f7076bfb 100644 --- a/src/org/kreed/vanilla/PlaybackService.java +++ b/src/org/kreed/vanilla/PlaybackService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Christopher Eby + * Copyright (C) 2010, 2011 Christopher Eby * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -157,7 +157,6 @@ public final class PlaybackService extends Service implements Handler.Callback, public static final int ALWAYS = 2; boolean mHeadsetPause; - boolean mHeadsetOnly; private boolean mScrobble; private int mNotificationMode; /** @@ -181,7 +180,6 @@ public final class PlaybackService extends Service implements Handler.Callback, boolean mPlayingBeforeCall; private int mPendingSeek; private Song mLastSongBroadcast; - boolean mPlugged; private ContentObserver mMediaObserver; public Receiver mReceiver; public InCallListener mCallListener; @@ -196,7 +194,6 @@ public final class PlaybackService extends Service implements Handler.Callback, */ private float mCurrentVolume = 1.0f; - private Method mIsWiredHeadsetOn; private Method mStartForeground; private Method mStopForeground; @@ -373,17 +370,8 @@ public final class PlaybackService extends Service implements Handler.Callback, Log.d("VanillaMusic", "falling back to pre-2.0 Service APIs"); } - if (!"3".equals(Build.VERSION.SDK)) { - try { - mIsWiredHeadsetOn = mAudioManager.getClass().getMethod("isWiredHeadsetOn", (Class[])null); - } catch (NoSuchMethodException e) { - Log.d("VanillaMusic", "falling back to pre-1.6 AudioManager APIs"); - } - } - SharedPreferences settings = getSettings(); settings.registerOnSharedPreferenceChangeListener(this); - mHeadsetOnly = settings.getBoolean("headset_only", false); mNotificationMode = Integer.parseInt(settings.getString("notification_mode", "1")); mScrobble = settings.getBoolean("scrobble", false); float volume = settings.getFloat("volume", 1.0f); @@ -411,10 +399,6 @@ public final class PlaybackService extends Service implements Handler.Callback, SharedPreferences settings = getSettings(); if ("headset_pause".equals(key)) { mHeadsetPause = settings.getBoolean("headset_pause", true); - } else if ("headset_only".equals(key)) { - mHeadsetOnly = settings.getBoolean(key, false); - if (mHeadsetOnly && isSpeakerOn()) - unsetFlag(FLAG_PLAYING); } else if ("remote_player".equals(key)) { // the preference is loaded in SongNotification class updateNotification(getSong(0)); @@ -466,7 +450,7 @@ public final class PlaybackService extends Service implements Handler.Callback, { state &= ALL_FLAGS; - if ((state & FLAG_NO_MEDIA) != 0 || mHeadsetOnly && isSpeakerOn()) + if ((state & FLAG_NO_MEDIA) != 0) state &= ~FLAG_PLAYING; Song song = getSong(0); @@ -556,29 +540,6 @@ public final class PlaybackService extends Service implements Handler.Callback, } } - boolean isSpeakerOn() - { - if (mAudioManager.isBluetoothA2dpOn() || mAudioManager.isBluetoothScoOn()) - return false; - - if (mIsWiredHeadsetOn != null) { - try { - if ((Boolean)mIsWiredHeadsetOn.invoke(mAudioManager, (Object[])null)) - return false; - } catch (InvocationTargetException e) { - Log.w("VanillaMusic", e); - } catch (IllegalAccessException e) { - Log.w("VanillaMusic", e); - } - } - - if (mPlugged) - return false; - - // Why is there no true equivalent to this in Android 2.0? - return (mAudioManager.getRouting(mAudioManager.getMode()) & AudioManager.ROUTE_SPEAKER) != 0; - } - /** * Toggle a flag in the state on or off * @@ -695,10 +656,8 @@ public final class PlaybackService extends Service implements Handler.Callback, { String action = intent.getAction(); - if (Intent.ACTION_HEADSET_PLUG.equals(action)) { - boolean oldPlugged = mPlugged; - mPlugged = intent.getIntExtra("state", 0) != 0; - if (mPlugged != oldPlugged && mHeadsetPause && !mPlugged || mHeadsetOnly && isSpeakerOn()) + if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(action)) { + if (mHeadsetPause) unsetFlag(FLAG_PLAYING); } else if (Intent.ACTION_MEDIA_BUTTON.equals(action)) { if (MediaButtonHandler.getInstance().process(intent)) @@ -763,7 +722,7 @@ public final class PlaybackService extends Service implements Handler.Callback, } IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_HEADSET_PLUG); + filter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY); if (MediaButtonHandler.getInstance().useHeadsetControls()) filter.addAction(Intent.ACTION_MEDIA_BUTTON); filter.setPriority(2000);