Merge change 24274 into eclair

* changes:
  API_CHANGE
This commit is contained in:
Android (Google) Code Review
2009-09-09 14:34:44 -04:00
10 changed files with 91 additions and 102 deletions

View File

@@ -25610,6 +25610,17 @@
visibility="public"
>
</field>
<field name="ERROR"
type="int"
transient="false"
volatile="false"
value="-1"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
<field name="EXTRA_PREVIOUS_SCAN_MODE"
type="java.lang.String"
transient="false"
@@ -25805,6 +25816,17 @@
<parameter name="flags" type="int">
</parameter>
</method>
<field name="ERROR"
type="int"
transient="false"
volatile="false"
value="-1"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
</class>
<class name="BluetoothServerSocket"
extends="java.lang.Object"

View File

@@ -42,9 +42,6 @@ import java.util.HashSet;
*
* Currently the BluetoothA2dp service runs in the system server and this
* proxy object will be immediately bound to the service on construction.
* However this may change in future releases, and error codes such as
* BluetoothError.ERROR_IPC_NOT_READY will be returned from this API when the
* proxy object is not yet attached.
*
* Currently this class provides methods to connect to A2DP audio sinks.
*
@@ -105,16 +102,16 @@ public final class BluetoothA2dp {
* Listen for SINK_STATE_CHANGED_ACTION to find out when the
* connection is completed.
* @param device Remote BT device.
* @return Result code, negative indicates an immediate error.
* @return false on immediate error, true otherwise
* @hide
*/
public int connectSink(BluetoothDevice device) {
public boolean connectSink(BluetoothDevice device) {
if (DBG) log("connectSink(" + device + ")");
try {
return mService.connectSink(device);
} catch (RemoteException e) {
Log.w(TAG, "", e);
return BluetoothError.ERROR_IPC;
Log.e(TAG, "", e);
return false;
}
}
@@ -122,16 +119,16 @@ public final class BluetoothA2dp {
* Listen for SINK_STATE_CHANGED_ACTION to find out when
* disconnect is completed.
* @param device Remote BT device.
* @return Result code, negative indicates an immediate error.
* @return false on immediate error, true otherwise
* @hide
*/
public int disconnectSink(BluetoothDevice device) {
public boolean disconnectSink(BluetoothDevice device) {
if (DBG) log("disconnectSink(" + device + ")");
try {
return mService.disconnectSink(device);
} catch (RemoteException e) {
Log.w(TAG, "", e);
return BluetoothError.ERROR_IPC;
Log.e(TAG, "", e);
return false;
}
}
@@ -156,14 +153,14 @@ public final class BluetoothA2dp {
return Collections.unmodifiableSet(
new HashSet<BluetoothDevice>(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;
}
}

View File

@@ -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:
* <p><code>Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
* BluetoothAdapter.ERROR)</code>
*/
public static final int ERROR = -1;
/**
* Broadcast Action: The state of the local Bluetooth adapter has been
* changed.

View File

@@ -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:
* <p><code>Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
* BluetoothAdapter.ERROR)</code>
*/
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 */

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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,