diff options
Diffstat (limited to 'src/com/android/settings/bluetooth/DockEventReceiver.java')
| -rw-r--r-- | src/com/android/settings/bluetooth/DockEventReceiver.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/com/android/settings/bluetooth/DockEventReceiver.java b/src/com/android/settings/bluetooth/DockEventReceiver.java index 2d634b2e4..6d119722a 100644 --- a/src/com/android/settings/bluetooth/DockEventReceiver.java +++ b/src/com/android/settings/bluetooth/DockEventReceiver.java @@ -16,12 +16,17 @@ package com.android.settings.bluetooth; +import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile; + import android.app.Service; +import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothHeadset; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.os.PowerManager; import android.util.Log; @@ -75,6 +80,54 @@ public class DockEventReceiver extends BroadcastReceiver { if (DEBUG) Log.e(TAG, "Unknown state"); break; } + } else if (BluetoothHeadset.ACTION_STATE_CHANGED.equals(intent.getAction())) { + /* + * Reconnect to the dock if: + * 1) it is a dock + * 2) it is disconnected + * 3) the disconnect is initiated remotely + * 4) the dock is still docked (check can only be done in the Service) + */ + if (device == null) { + if (DEBUG) Log.d(TAG, "Device is missing"); + return; + } + + int newState = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, + BluetoothHeadset.STATE_CONNECTED); + if (newState != BluetoothHeadset.STATE_DISCONNECTED) return; + + int source = intent.getIntExtra(BluetoothHeadset.EXTRA_DISCONNECT_INITIATOR, + BluetoothHeadset.LOCAL_DISCONNECT); + if (source != BluetoothHeadset.REMOTE_DISCONNECT) return; + + // Too bad, the dock state can't be checked from a BroadcastReceiver. + Intent i = new Intent(intent); + i.setClass(context, DockService.class); + beginStartingService(context, i); + + } else if (BluetoothA2dp.ACTION_SINK_STATE_CHANGED.equals(intent.getAction())) { + /* + * Reconnect to the dock if: + * 1) it is a dock + * 2) it is an unexpected disconnect i.e. didn't go through disconnecting state + * 3) the dock is still docked (check can only be done in the Service) + */ + if (device == null) { + if (DEBUG) Log.d(TAG, "Device is missing"); + return; + } + + int newState = intent.getIntExtra(BluetoothA2dp.EXTRA_SINK_STATE, 0); + int oldState = intent.getIntExtra(BluetoothA2dp.EXTRA_PREVIOUS_SINK_STATE, 0); + if (newState == BluetoothA2dp.STATE_DISCONNECTED && + oldState != BluetoothA2dp.STATE_DISCONNECTING) { + // Too bad, the dock state can't be checked from a BroadcastReceiver. + Intent i = new Intent(intent); + i.setClass(context, DockService.class); + beginStartingService(context, i); + } + } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) { int btState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); if (btState != BluetoothAdapter.STATE_TURNING_ON) { |
