From b24e11baac589fe16426f2d243b460ab84991c7b Mon Sep 17 00:00:00 2001 From: Nick Pelly Date: Tue, 8 Sep 2009 17:40:43 -0700 Subject: [PATCH] API_CHANGE Deprecate BluetoothError.java. I spent a lot of time experimenting with a class BluetoothError to enumerate the many error codes returned by the Bluetooth API. But at the end of the day they were never used. The vast majority of method calls only really need a true/false error value, and often not even that. Methods which do need more detailed error enumeration (for example, bonding failures) can have there own enumerated error codes. But there is no need for a common set of error codes. Also change the IPC failed warnings in BluetoothA2dp to Log.e. These indicate a very serious error. Introduce BluetoothAdapter.ERROR and BluetoothDevice.ERROR as helper sentinel values. --- api/current.xml | 22 ++++++++++ .../java/android/bluetooth/BluetoothA2dp.java | 39 ++++++++-------- .../android/bluetooth/BluetoothAdapter.java | 9 ++++ .../android/bluetooth/BluetoothDevice.java | 21 ++++++--- .../android/bluetooth/BluetoothError.java | 44 ------------------- .../android/bluetooth/IBluetoothA2dp.aidl | 6 +-- .../android/server/BluetoothA2dpService.java | 40 ++++++++--------- .../android/server/BluetoothEventLoop.java | 3 +- .../java/android/server/BluetoothService.java | 5 +-- .../server/status/StatusBarPolicy.java | 4 +- 10 files changed, 91 insertions(+), 102 deletions(-) delete mode 100644 core/java/android/bluetooth/BluetoothError.java diff --git a/api/current.xml b/api/current.xml index e640389acc49e..fa9ab9362db19 100644 --- a/api/current.xml +++ b/api/current.xml @@ -25610,6 +25610,17 @@ visibility="public" > + + + + (Arrays.asList(mService.getConnectedSinks()))); } catch (RemoteException e) { - Log.w(TAG, "", e); + Log.e(TAG, "", e); return null; } } /** Get the state of an A2DP sink * @param device Remote BT device. - * @return State code, or negative on error + * @return State code, one of STATE_ * @hide */ public int getSinkState(BluetoothDevice device) { @@ -171,8 +168,8 @@ public final class BluetoothA2dp { try { return mService.getSinkState(device); } catch (RemoteException e) { - Log.w(TAG, "", e); - return BluetoothError.ERROR_IPC; + Log.e(TAG, "", e); + return BluetoothA2dp.STATE_DISCONNECTED; } } @@ -186,15 +183,15 @@ public final class BluetoothA2dp { * @param device Paired sink * @param priority Integer priority, for example PRIORITY_AUTO or * PRIORITY_NONE - * @return Result code, negative indicates an error + * @return true if priority is set, false on error */ - public int setSinkPriority(BluetoothDevice device, int priority) { + public boolean setSinkPriority(BluetoothDevice device, int priority) { if (DBG) log("setSinkPriority(" + device + ", " + priority + ")"); try { return mService.setSinkPriority(device, priority); } catch (RemoteException e) { - Log.w(TAG, "", e); - return BluetoothError.ERROR_IPC; + Log.e(TAG, "", e); + return false; } } @@ -208,8 +205,8 @@ public final class BluetoothA2dp { try { return mService.getSinkPriority(device); } catch (RemoteException e) { - Log.w(TAG, "", e); - return BluetoothError.ERROR_IPC; + Log.e(TAG, "", e); + return PRIORITY_OFF; } } diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 1770bc79351ad..18f6995d26cb2 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -42,6 +42,15 @@ import java.util.HashSet; public final class BluetoothAdapter { private static final String TAG = "BluetoothAdapter"; + /** + * Sentinel error value for this class. Guaranteed to not equal any other + * integer constant in this class. Provided as a convenience for functions + * that require a sentinel error value, for example: + *

Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, + * BluetoothAdapter.ERROR) + */ + public static final int ERROR = -1; + /** * Broadcast Action: The state of the local Bluetooth adapter has been * changed. diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 7086557a574e7..1ab4389b4350b 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -44,6 +44,15 @@ import java.io.UnsupportedEncodingException; public final class BluetoothDevice implements Parcelable { private static final String TAG = "BluetoothDevice"; + /** + * Sentinel error value for this class. Guaranteed to not equal any other + * integer constant in this class. Provided as a convenience for functions + * that require a sentinel error value, for example: + *

Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, + * BluetoothAdapter.ERROR) + */ + public static final int ERROR = -1; + /** We do not have a link key for the remote device, and are therefore not * bonded * @hide*/ @@ -65,7 +74,9 @@ public final class BluetoothDevice implements Parcelable { * @hide */ public static final int DEVICE_PICKER_FILTER_TYPE_TRANSFER = 2; - //TODO: Unify these result codes in BluetoothResult or BluetoothError + /** A bond attempt succeeded + * @hide */ + public static final int BOND_SUCCESS = 0; /** A bond attempt failed because pins did not match, or remote device did * not respond to pin request in time * @hide */ @@ -252,8 +263,8 @@ public final class BluetoothDevice implements Parcelable { * Get the bonding state of a remote device. * * Result is one of: - * BluetoothError.* * BOND_* + * ERROR * * @param address Bluetooth hardware address of the remote device to check. * @return Result code @@ -263,7 +274,7 @@ public final class BluetoothDevice implements Parcelable { try { return sService.getBondState(mAddress); } catch (RemoteException e) {Log.e(TAG, "", e);} - return BluetoothError.ERROR_IPC; + return BluetoothDevice.ERROR; } /** @@ -298,7 +309,7 @@ public final class BluetoothDevice implements Parcelable { try { return sService.getRemoteClass(mAddress); } catch (RemoteException e) {Log.e(TAG, "", e);} - return BluetoothError.ERROR_IPC; + return BluetoothDevice.ERROR; } /** @hide */ @@ -314,7 +325,7 @@ public final class BluetoothDevice implements Parcelable { try { return sService.getRemoteServiceChannel(mAddress, uuid); } catch (RemoteException e) {Log.e(TAG, "", e);} - return BluetoothError.ERROR_IPC; + return BluetoothDevice.ERROR; } /** @hide */ diff --git a/core/java/android/bluetooth/BluetoothError.java b/core/java/android/bluetooth/BluetoothError.java deleted file mode 100644 index 81c1ce9dee7e8..0000000000000 --- a/core/java/android/bluetooth/BluetoothError.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.bluetooth; - -/** - * Bluetooth API error codes. - * - * Errors are always negative. - * - * TODO: Deprecate this class. - * - * @hide - */ -public class BluetoothError { - /** No error */ - public static final int SUCCESS = 0; - - /** Generic error */ - public static final int ERROR = -1000; - - /** Bluetooth currently disabled */ - public static final int ERROR_DISABLED = -1001; - - /** IPC is not ready, for example service is not yet bound */ - public static final int ERROR_IPC_NOT_READY = -1011; - - /** Some other IPC error, for example a RemoteException */ - public static final int ERROR_IPC = -1012; - -} diff --git a/core/java/android/bluetooth/IBluetoothA2dp.aidl b/core/java/android/bluetooth/IBluetoothA2dp.aidl index e6c6be2594f1a..2df7f238552db 100644 --- a/core/java/android/bluetooth/IBluetoothA2dp.aidl +++ b/core/java/android/bluetooth/IBluetoothA2dp.aidl @@ -24,10 +24,10 @@ import android.bluetooth.BluetoothDevice; * {@hide} */ interface IBluetoothA2dp { - int connectSink(in BluetoothDevice device); - int disconnectSink(in BluetoothDevice device); + boolean connectSink(in BluetoothDevice device); + boolean disconnectSink(in BluetoothDevice device); BluetoothDevice[] getConnectedSinks(); // change to Set<> once AIDL supports int getSinkState(in BluetoothDevice device); - int setSinkPriority(in BluetoothDevice device, int priority); + boolean setSinkPriority(in BluetoothDevice device, int priority); int getSinkPriority(in BluetoothDevice device); } diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java index 4fa81bb5856d3..a24e0d21bb409 100644 --- a/core/java/android/server/BluetoothA2dpService.java +++ b/core/java/android/server/BluetoothA2dpService.java @@ -25,7 +25,6 @@ package android.server; import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothError; import android.bluetooth.BluetoothIntent; import android.bluetooth.BluetoothUuid; import android.bluetooth.IBluetoothA2dp; @@ -83,7 +82,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { intent.getParcelableExtra(BluetoothIntent.DEVICE); if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, - BluetoothError.ERROR); + BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_ON: onBluetoothEnable(); @@ -94,7 +93,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { } } else if (action.equals(BluetoothIntent.BOND_STATE_CHANGED_ACTION)) { int bondState = intent.getIntExtra(BluetoothIntent.BOND_STATE, - BluetoothError.ERROR); + BluetoothDevice.ERROR); switch(bondState) { case BluetoothDevice.BOND_BONDED: setSinkPriority(device, BluetoothA2dp.PRIORITY_AUTO); @@ -273,7 +272,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { mAudioManager.setParameters(BLUETOOTH_ENABLED + "=false"); } - public synchronized int connectSink(BluetoothDevice device) { + public synchronized boolean connectSink(BluetoothDevice device) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); if (DBG) log("connectSink(" + device + ")"); @@ -284,11 +283,11 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { BluetoothA2dp.STATE_CONNECTED, BluetoothA2dp.STATE_PLAYING, BluetoothA2dp.STATE_DISCONNECTING}).size() != 0) { - return BluetoothError.ERROR; + return false; } if (mAudioDevices.get(device) == null && !addAudioSink(device)) - return BluetoothError.ERROR; + return false; int state = mAudioDevices.get(device); @@ -296,44 +295,44 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { case BluetoothA2dp.STATE_CONNECTED: case BluetoothA2dp.STATE_PLAYING: case BluetoothA2dp.STATE_DISCONNECTING: - return BluetoothError.ERROR; + return false; case BluetoothA2dp.STATE_CONNECTING: - return BluetoothError.SUCCESS; + return true; } String path = mBluetoothService.getObjectPathFromAddress(device.getAddress()); if (path == null) - return BluetoothError.ERROR; + return false; // State is DISCONNECTED if (!connectSinkNative(path)) { - return BluetoothError.ERROR; + return false; } - return BluetoothError.SUCCESS; + return true; } - public synchronized int disconnectSink(BluetoothDevice device) { + public synchronized boolean disconnectSink(BluetoothDevice device) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); if (DBG) log("disconnectSink(" + device + ")"); String path = mBluetoothService.getObjectPathFromAddress(device.getAddress()); if (path == null) { - return BluetoothError.ERROR; + return false; } switch (getSinkState(device)) { case BluetoothA2dp.STATE_DISCONNECTED: - return BluetoothError.ERROR; + return false; case BluetoothA2dp.STATE_DISCONNECTING: - return BluetoothError.SUCCESS; + return true; } // State is CONNECTING or CONNECTED or PLAYING if (!disconnectSinkNative(path)) { - return BluetoothError.ERROR; + return false; } else { - return BluetoothError.SUCCESS; + return true; } } @@ -359,15 +358,14 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { BluetoothA2dp.PRIORITY_OFF); } - public synchronized int setSinkPriority(BluetoothDevice device, int priority) { + public synchronized boolean setSinkPriority(BluetoothDevice device, int priority) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); if (!BluetoothDevice.checkBluetoothAddress(device.getAddress())) { - return BluetoothError.ERROR; + return false; } return Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.getBluetoothA2dpSinkPriorityKey(device.getAddress()), priority) ? - BluetoothError.SUCCESS : BluetoothError.ERROR; + Settings.Secure.getBluetoothA2dpSinkPriorityKey(device.getAddress()), priority); } private synchronized void onSinkPropertyChanged(String path, String []propValues) { diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index 9f36f7ee666e2..b5eb9ac402d61 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -20,7 +20,6 @@ import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothError; import android.bluetooth.BluetoothIntent; import android.bluetooth.BluetoothUuid; import android.content.Context; @@ -169,7 +168,7 @@ class BluetoothEventLoop { private void onCreatePairedDeviceResult(String address, int result) { address = address.toUpperCase(); - if (result == BluetoothError.SUCCESS) { + if (result == BluetoothDevice.BOND_SUCCESS) { mBluetoothService.getBondState().setBondState(address, BluetoothDevice.BOND_BONDED); if (mBluetoothService.getBondState().isAutoPairingAttemptsInProgress(address)) { mBluetoothService.getBondState().clearPinAttempts(address); diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index 694007581944c..6482c4c8c4f83 100644 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -27,7 +27,6 @@ package android.server; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothError; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothIntent; import android.bluetooth.IBluetooth; @@ -810,7 +809,7 @@ public class BluetoothService extends IBluetooth.Stub { public synchronized int getBondState(String address) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); if (!BluetoothDevice.checkBluetoothAddress(address)) { - return BluetoothError.ERROR; + return BluetoothDevice.ERROR; } return mBondState.getBondState(address.toUpperCase()); } @@ -984,7 +983,7 @@ public class BluetoothService extends IBluetooth.Stub { public int getRemoteServiceChannel(String address, String uuid) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); if (!BluetoothDevice.checkBluetoothAddress(address)) { - return BluetoothError.ERROR_IPC; + return BluetoothDevice.ERROR; } return getDeviceServiceChannelNative(getObjectPathFromAddress(address), uuid, 0x0004); } diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java index c663e544b807a..f3127f3de028d 100644 --- a/services/java/com/android/server/status/StatusBarPolicy.java +++ b/services/java/com/android/server/status/StatusBarPolicy.java @@ -19,7 +19,6 @@ package com.android.server.status; import android.app.AlertDialog; import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothError; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothIntent; import android.bluetooth.BluetoothPbap; @@ -1073,8 +1072,7 @@ public class StatusBarPolicy { String action = intent.getAction(); if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { - int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, - BluetoothError.ERROR); + int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); mBluetoothEnabled = state == BluetoothAdapter.STATE_ON; } else if (action.equals(BluetoothIntent.HEADSET_STATE_CHANGED_ACTION)) { mBluetoothHeadsetState = intent.getIntExtra(BluetoothIntent.HEADSET_STATE,