From 0b01d3d66ac08a11a7c5a1467f1fff010ba459c4 Mon Sep 17 00:00:00 2001 From: Arseniy Borisov Date: Wed, 1 Feb 2017 13:47:30 +0300 Subject: [PATCH] rename isPlugged -> isConnected --- .../utils/audio/HeadsetStateObserver.java | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/src/main/java/ru/touchin/roboswag/components/utils/audio/HeadsetStateObserver.java b/src/main/java/ru/touchin/roboswag/components/utils/audio/HeadsetStateObserver.java index c1928e5..69ebcb1 100644 --- a/src/main/java/ru/touchin/roboswag/components/utils/audio/HeadsetStateObserver.java +++ b/src/main/java/ru/touchin/roboswag/components/utils/audio/HeadsetStateObserver.java @@ -32,7 +32,7 @@ import rx.subjects.BehaviorSubject; /** * Created by Gavriil Sitnikov on 02/11/2015. - * Simple observer of wired or wireless (bluetooth A2DP) headsets state (plugged in or not). + * Simple observer of wired or wireless (bluetooth A2DP) headsets state (connected or not). *
You require android.permission.BLUETOOTH and API level >= 11 if want to observe wireless headset state */ public final class HeadsetStateObserver { @@ -40,68 +40,78 @@ public final class HeadsetStateObserver { @NonNull private final AudioManager audioManager; @NonNull - private final Observable isPluggedInObservable; + private final Observable isConnectedObservable; public HeadsetStateObserver(@NonNull final Context context) { audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); - isPluggedInObservable = Observable - .create(subscriber -> { - subscriber.onNext(new IsPluggedInReceiver(audioManager)); + isConnectedObservable = Observable + .create(subscriber -> { + subscriber.onNext(new IsConnectedReceiver(audioManager)); subscriber.onCompleted(); }) - .switchMap(isPluggedInReceiver -> Observable.combineLatest(isPluggedInReceiver.isWiredPluggedInChangedEvent, - isPluggedInReceiver.isWirelessPluggedInChangedEvent, - (isWiredPluggedIn, isWirelessPluggedIn) -> isWiredPluggedIn || isWirelessPluggedIn) + .switchMap(isConnectedReceiver -> Observable.combineLatest(isConnectedReceiver.isWiredConnectedChangedEvent, + isConnectedReceiver.isWirelessConnectedChangedEvent, + (isWiredConnected, isWirelessConnected) -> isWiredConnected || isWirelessConnected) .distinctUntilChanged() .doOnSubscribe(() -> { final IntentFilter headsetStateIntentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { headsetStateIntentFilter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); } - context.registerReceiver(isPluggedInReceiver, headsetStateIntentFilter); + context.registerReceiver(isConnectedReceiver, headsetStateIntentFilter); }) - .doOnUnsubscribe(() -> context.unregisterReceiver(isPluggedInReceiver))) + .doOnUnsubscribe(() -> context.unregisterReceiver(isConnectedReceiver))) .replay(1) .refCount(); } /** - * Observes plugged in state of headset. + * Returns if wired or wireless headset is connected. * - * @return Returns observable which will provide current plugged in state and any of it's udpdate. + * @return True if headset is connected. */ - @NonNull - public Observable observeIsPluggedIn() { - return isPluggedInObservable; + @SuppressWarnings("deprecation") + public boolean isConnected() { + return audioManager.isWiredHeadsetOn() || audioManager.isBluetoothA2dpOn(); } - private static class IsPluggedInReceiver extends BroadcastReceiver { + /** + * Observes connection state of headset. + * + * @return Returns observable which will provide current connection state and any of it's udpdate. + */ + @NonNull + public Observable observeIsConnected() { + return isConnectedObservable; + } + + private static class IsConnectedReceiver extends BroadcastReceiver { @NonNull - private final BehaviorSubject isWiredPluggedInChangedEvent; + private final BehaviorSubject isWiredConnectedChangedEvent; @NonNull - private final BehaviorSubject isWirelessPluggedInChangedEvent; + private final BehaviorSubject isWirelessConnectedChangedEvent; @SuppressWarnings("deprecation") - public IsPluggedInReceiver(@NonNull final AudioManager audioManager) { - isWiredPluggedInChangedEvent = BehaviorSubject.create(audioManager.isWiredHeadsetOn()); - isWirelessPluggedInChangedEvent = BehaviorSubject.create(audioManager.isBluetoothA2dpOn()); + public IsConnectedReceiver(@NonNull final AudioManager audioManager) { + isWiredConnectedChangedEvent = BehaviorSubject.create(audioManager.isWiredHeadsetOn()); + isWirelessConnectedChangedEvent = BehaviorSubject.create(audioManager.isBluetoothA2dpOn()); } @Override public void onReceive(final Context context, final Intent intent) { if (Intent.ACTION_HEADSET_PLUG.equals(intent.getAction()) && !isInitialStickyBroadcast()) { - isWiredPluggedInChangedEvent.onNext(intent.getIntExtra("state", 0) != 0); + isWiredConnectedChangedEvent.onNext(intent.getIntExtra("state", 0) != 0); } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB && BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED.equals(intent.getAction())) { final int bluetoothState = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, BluetoothA2dp.STATE_DISCONNECTED); switch (bluetoothState) { case BluetoothA2dp.STATE_DISCONNECTED: - isWirelessPluggedInChangedEvent.onNext(false); + isWirelessConnectedChangedEvent.onNext(false); break; case BluetoothA2dp.STATE_CONNECTED: - isWirelessPluggedInChangedEvent.onNext(true); + isWirelessConnectedChangedEvent.onNext(true); break; default: break;