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,