diff options
author | fredc <fredc@broadcom.com> | 2012-05-19 10:17:14 -0700 |
---|---|---|
committer | Matthew Xie <mattx@google.com> | 2012-07-16 15:38:38 -0700 |
commit | afedeacd575d51edc4f741bd2c8f75dd4928f2b6 (patch) | |
tree | 6b2df59ea0d30b4a6d5454ffd57438a10e5b93e5 /src/com/android/settings/bluetooth | |
parent | c7b490c7a03dff00faf859d6aba3440b6a3921d5 (diff) | |
download | packages_apps_settings-afedeacd575d51edc4f741bd2c8f75dd4928f2b6.zip packages_apps_settings-afedeacd575d51edc4f741bd2c8f75dd4928f2b6.tar.gz packages_apps_settings-afedeacd575d51edc4f741bd2c8f75dd4928f2b6.tar.bz2 |
Fixed null pointer exception when BT is enabled from settings screen with previously bonded devices
Change-Id: Ia0cf763920fd99897994ea15445aec1dcd48853e
Diffstat (limited to 'src/com/android/settings/bluetooth')
4 files changed, 38 insertions, 7 deletions
diff --git a/src/com/android/settings/bluetooth/A2dpProfile.java b/src/com/android/settings/bluetooth/A2dpProfile.java index fdf3325..1a7a2d9 100755 --- a/src/com/android/settings/bluetooth/A2dpProfile.java +++ b/src/com/android/settings/bluetooth/A2dpProfile.java @@ -28,6 +28,7 @@ import android.util.Log; import com.android.settings.R; +import java.util.ArrayList; import java.util.List; final class A2dpProfile implements LocalBluetoothProfile { @@ -53,7 +54,7 @@ final class A2dpProfile implements LocalBluetoothProfile { implements BluetoothProfile.ServiceListener { public void onServiceConnected(int profile, BluetoothProfile proxy) { - if (V) Log.d(TAG,"Bluetooth service disconnected"); + if (V) Log.d(TAG,"Bluetooth service connected"); mService = (BluetoothA2dp) proxy; mProfileManager.setA2dpServiceUp(true); mIsProfileReady=true; @@ -70,7 +71,6 @@ final class A2dpProfile implements LocalBluetoothProfile { return mIsProfileReady; } A2dpProfile(Context context, LocalBluetoothProfileManager profileManager) { - mProfileManager = profileManager; BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); adapter.getProfileProxy(context, new A2dpServiceListener(), @@ -86,6 +86,7 @@ final class A2dpProfile implements LocalBluetoothProfile { } public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) return new ArrayList<BluetoothDevice>(0); return mService.getDevicesMatchingConnectionStates( new int[] {BluetoothProfile.STATE_CONNECTED, BluetoothProfile.STATE_CONNECTING, @@ -93,6 +94,7 @@ final class A2dpProfile implements LocalBluetoothProfile { } public boolean connect(BluetoothDevice device) { + if (mService == null) return false; List<BluetoothDevice> sinks = getConnectedDevices(); if (sinks != null) { for (BluetoothDevice sink : sinks) { @@ -103,6 +105,7 @@ final class A2dpProfile implements LocalBluetoothProfile { } public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; return mService.disconnect(device); } @@ -110,6 +113,7 @@ final class A2dpProfile implements LocalBluetoothProfile { // as setPreferred() takes only boolean input but getPreferred() supports interger output. // Also this need not implemented by all profiles so this has been added here. public void enableAutoConnect(BluetoothDevice device, boolean enable) { + if (mService == null) return; if (enable) { mService.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT); } else { @@ -120,18 +124,24 @@ final class A2dpProfile implements LocalBluetoothProfile { } public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } return mService.getConnectionState(device); } public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; } public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; return mService.getPriority(device); } public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; if (preferred) { if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { mService.setPriority(device, BluetoothProfile.PRIORITY_ON); @@ -142,6 +152,7 @@ final class A2dpProfile implements LocalBluetoothProfile { } boolean isA2dpPlaying() { + if (mService == null) return false; List<BluetoothDevice> sinks = mService.getConnectedDevices(); if (!sinks.isEmpty()) { if (mService.isA2dpPlaying(sinks.get(0))) { @@ -164,7 +175,7 @@ final class A2dpProfile implements LocalBluetoothProfile { } public int getSummaryResourceForDevice(BluetoothDevice device) { - int state = mService.getConnectionState(device); + int state = getConnectionStatus(device); switch (state) { case BluetoothProfile.STATE_DISCONNECTED: { diff --git a/src/com/android/settings/bluetooth/HeadsetProfile.java b/src/com/android/settings/bluetooth/HeadsetProfile.java index 33811c7..04c50ec 100755 --- a/src/com/android/settings/bluetooth/HeadsetProfile.java +++ b/src/com/android/settings/bluetooth/HeadsetProfile.java @@ -28,6 +28,7 @@ import android.util.Log; import com.android.settings.R; +import java.util.ArrayList; import java.util.List; /** @@ -114,6 +115,7 @@ final class HeadsetProfile implements LocalBluetoothProfile { } public boolean connect(BluetoothDevice device) { + if (mService == null) return false; List<BluetoothDevice> sinks = mService.getConnectedDevices(); if (sinks != null) { for (BluetoothDevice sink : sinks) { @@ -124,6 +126,7 @@ final class HeadsetProfile implements LocalBluetoothProfile { } public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; List<BluetoothDevice> deviceList = mService.getConnectedDevices(); if (!deviceList.isEmpty() && deviceList.get(0).equals(device)) { // Downgrade priority as user is disconnecting the headset. @@ -138,7 +141,6 @@ final class HeadsetProfile implements LocalBluetoothProfile { public int getConnectionStatus(BluetoothDevice device) { if (mService == null) return BluetoothProfile.STATE_DISCONNECTED; - List<BluetoothDevice> deviceList = mService.getConnectedDevices(); return !deviceList.isEmpty() && deviceList.get(0).equals(device) @@ -147,14 +149,17 @@ final class HeadsetProfile implements LocalBluetoothProfile { } public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; } public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; return mService.getPriority(device); } public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; if (preferred) { if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { mService.setPriority(device, BluetoothProfile.PRIORITY_ON); @@ -165,6 +170,7 @@ final class HeadsetProfile implements LocalBluetoothProfile { } public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) return new ArrayList<BluetoothDevice>(0); return mService.getDevicesMatchingConnectionStates( new int[] {BluetoothProfile.STATE_CONNECTED, BluetoothProfile.STATE_CONNECTING, @@ -176,6 +182,7 @@ final class HeadsetProfile implements LocalBluetoothProfile { // as setPreferred() takes only boolean input but getPreferred() supports interger output. // Also this need not implemented by all profiles so this has been added here. public void enableAutoConnect(BluetoothDevice device, boolean enable) { + if (mService == null) return; if (enable) { mService.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT); } else { @@ -198,7 +205,7 @@ final class HeadsetProfile implements LocalBluetoothProfile { } public int getSummaryResourceForDevice(BluetoothDevice device) { - int state = mService.getConnectionState(device); + int state = getConnectionStatus(device); switch (state) { case BluetoothProfile.STATE_DISCONNECTED: return R.string.bluetooth_headset_profile_summary_use_for; diff --git a/src/com/android/settings/bluetooth/HidProfile.java b/src/com/android/settings/bluetooth/HidProfile.java index 225cf2e..c530fa6 100644 --- a/src/com/android/settings/bluetooth/HidProfile.java +++ b/src/com/android/settings/bluetooth/HidProfile.java @@ -77,14 +77,19 @@ final class HidProfile implements LocalBluetoothProfile { } public boolean connect(BluetoothDevice device) { + if (mService == null) return false; return mService.connect(device); } public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; return mService.disconnect(device); } public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } List<BluetoothDevice> deviceList = mService.getConnectedDevices(); return !deviceList.isEmpty() && deviceList.get(0).equals(device) @@ -93,14 +98,17 @@ final class HidProfile implements LocalBluetoothProfile { } public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; } public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; return mService.getPriority(device); } public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; if (preferred) { if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { mService.setPriority(device, BluetoothProfile.PRIORITY_ON); @@ -124,7 +132,7 @@ final class HidProfile implements LocalBluetoothProfile { } public int getSummaryResourceForDevice(BluetoothDevice device) { - int state = mService.getConnectionState(device); + int state = getConnectionStatus(device); switch (state) { case BluetoothProfile.STATE_DISCONNECTED: return R.string.bluetooth_hid_profile_summary_use_for; diff --git a/src/com/android/settings/bluetooth/PanProfile.java b/src/com/android/settings/bluetooth/PanProfile.java index bd7b760..b9db77b 100644 --- a/src/com/android/settings/bluetooth/PanProfile.java +++ b/src/com/android/settings/bluetooth/PanProfile.java @@ -83,6 +83,7 @@ final class PanProfile implements LocalBluetoothProfile { } public boolean connect(BluetoothDevice device) { + if (mService == null) return false; List<BluetoothDevice> sinks = mService.getConnectedDevices(); if (sinks != null) { for (BluetoothDevice sink : sinks) { @@ -93,10 +94,14 @@ final class PanProfile implements LocalBluetoothProfile { } public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; return mService.disconnect(device); } public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } return mService.getConnectionState(device); } @@ -129,7 +134,7 @@ final class PanProfile implements LocalBluetoothProfile { } public int getSummaryResourceForDevice(BluetoothDevice device) { - int state = mService.getConnectionState(device); + int state = getConnectionStatus(device); switch (state) { case BluetoothProfile.STATE_DISCONNECTED: return R.string.bluetooth_pan_profile_summary_use_for; |