Merge "Deprecate BluetoothHealth APIs"

This commit is contained in:
Treehugger Robot
2019-01-10 04:46:21 +00:00
committed by Gerrit Code Review
6 changed files with 239 additions and 486 deletions

View File

@@ -8339,42 +8339,44 @@ package android.bluetooth {
field public static final java.lang.String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid";
}
public final class BluetoothHealth implements android.bluetooth.BluetoothProfile {
method public boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
method public boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int);
public final deprecated class BluetoothHealth implements android.bluetooth.BluetoothProfile {
ctor public BluetoothHealth();
method public deprecated boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
method public deprecated boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int);
method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
method public int getConnectionState(android.bluetooth.BluetoothDevice);
method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
method public android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
method public boolean registerSinkAppConfiguration(java.lang.String, int, android.bluetooth.BluetoothHealthCallback);
method public boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration);
field public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1
field public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0
field public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3
field public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2
field public static final int CHANNEL_TYPE_RELIABLE = 10; // 0xa
field public static final int CHANNEL_TYPE_STREAMING = 11; // 0xb
field public static final int SINK_ROLE = 2; // 0x2
field public static final int SOURCE_ROLE = 1; // 0x1
field public static final int STATE_CHANNEL_CONNECTED = 2; // 0x2
field public static final int STATE_CHANNEL_CONNECTING = 1; // 0x1
field public static final int STATE_CHANNEL_DISCONNECTED = 0; // 0x0
field public static final int STATE_CHANNEL_DISCONNECTING = 3; // 0x3
method public deprecated android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
method public deprecated boolean registerSinkAppConfiguration(java.lang.String, int, android.bluetooth.BluetoothHealthCallback);
method public deprecated boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration);
field public static final deprecated int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1
field public static final deprecated int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0
field public static final deprecated int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3
field public static final deprecated int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2
field public static final deprecated int CHANNEL_TYPE_RELIABLE = 10; // 0xa
field public static final deprecated int CHANNEL_TYPE_STREAMING = 11; // 0xb
field public static final deprecated int SINK_ROLE = 2; // 0x2
field public static final deprecated int SOURCE_ROLE = 1; // 0x1
field public static final deprecated int STATE_CHANNEL_CONNECTED = 2; // 0x2
field public static final deprecated int STATE_CHANNEL_CONNECTING = 1; // 0x1
field public static final deprecated int STATE_CHANNEL_DISCONNECTED = 0; // 0x0
field public static final deprecated int STATE_CHANNEL_DISCONNECTING = 3; // 0x3
}
public final class BluetoothHealthAppConfiguration implements android.os.Parcelable {
public final deprecated class BluetoothHealthAppConfiguration implements android.os.Parcelable {
ctor public BluetoothHealthAppConfiguration();
method public int describeContents();
method public int getDataType();
method public java.lang.String getName();
method public int getRole();
method public deprecated int getDataType();
method public deprecated java.lang.String getName();
method public deprecated int getRole();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
field public static final deprecated android.os.Parcelable.Creator<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
}
public abstract class BluetoothHealthCallback {
public abstract deprecated class BluetoothHealthCallback {
ctor public BluetoothHealthCallback();
method public void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int);
method public void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int);
method public deprecated void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int);
method public deprecated void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int);
}
public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
@@ -8471,7 +8473,7 @@ package android.bluetooth {
field public static final int GATT = 7; // 0x7
field public static final int GATT_SERVER = 8; // 0x8
field public static final int HEADSET = 1; // 0x1
field public static final int HEALTH = 3; // 0x3
field public static final deprecated int HEALTH = 3; // 0x3
field public static final int HID_DEVICE = 19; // 0x13
field public static final int SAP = 10; // 0xa
field public static final int STATE_CONNECTED = 2; // 0x2

View File

@@ -2066,8 +2066,7 @@ public final class BluetoothAdapter {
* Get the current connection state of a profile.
* This function can be used to check whether the local Bluetooth adapter
* is connected to any remote device for a specific profile.
* Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET},
* {@link BluetoothProfile#A2DP}.
* Profile can be one of {@link BluetoothProfile#HEADSET}, {@link BluetoothProfile#A2DP}.
*
* <p> Return value can be one of
* {@link BluetoothProfile#STATE_DISCONNECTED},
@@ -2441,16 +2440,15 @@ public final class BluetoothAdapter {
/**
* Get the profile proxy object associated with the profile.
*
* <p>Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET},
* {@link BluetoothProfile#A2DP}, {@link BluetoothProfile#GATT}, or
* {@link BluetoothProfile#GATT_SERVER}. Clients must implement
* {@link BluetoothProfile.ServiceListener} to get notified of
* the connection status and to get the proxy object.
* <p>Profile can be one of {@link BluetoothProfile#HEADSET}, {@link BluetoothProfile#A2DP},
* {@link BluetoothProfile#GATT}, or {@link BluetoothProfile#GATT_SERVER}. Clients must
* implement {@link BluetoothProfile.ServiceListener} to get notified of the connection status
* and to get the proxy object.
*
* @param context Context of the application
* @param listener The service Listener for connection callbacks.
* @param profile The Bluetooth profile; either {@link BluetoothProfile#HEALTH}, {@link
* BluetoothProfile#HEADSET}, {@link BluetoothProfile#A2DP}. {@link BluetoothProfile#GATT} or
* @param profile The Bluetooth profile; either {@link BluetoothProfile#HEADSET},
* {@link BluetoothProfile#A2DP}. {@link BluetoothProfile#GATT} or
* {@link BluetoothProfile#GATT_SERVER}.
* @return true on success, false on error
*/
@@ -2479,8 +2477,8 @@ public final class BluetoothAdapter {
BluetoothPan pan = new BluetoothPan(context, listener);
return true;
} else if (profile == BluetoothProfile.HEALTH) {
BluetoothHealth health = new BluetoothHealth(context, listener);
return true;
Log.e(TAG, "getProfileProxy(): BluetoothHealth is deprecated");
return false;
} else if (profile == BluetoothProfile.MAP) {
BluetoothMap map = new BluetoothMap(context, listener);
return true;
@@ -2512,8 +2510,7 @@ public final class BluetoothAdapter {
*
* <p> Clients should call this when they are no longer using
* the proxy obtained from {@link #getProfileProxy}.
* Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET} or
* {@link BluetoothProfile#A2DP}
* Profile can be one of {@link BluetoothProfile#HEADSET} or {@link BluetoothProfile#A2DP}
*
* @param profile
* @param proxy Profile proxy object
@@ -2548,10 +2545,6 @@ public final class BluetoothAdapter {
BluetoothPan pan = (BluetoothPan) proxy;
pan.close();
break;
case BluetoothProfile.HEALTH:
BluetoothHealth health = (BluetoothHealth) proxy;
health.close();
break;
case BluetoothProfile.GATT:
BluetoothGatt gatt = (BluetoothGatt) proxy;
gatt.close();

View File

@@ -16,14 +16,7 @@
package android.bluetooth;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Binder;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.util.Log;
import java.util.ArrayList;
@@ -53,79 +46,59 @@ import java.util.List;
* <li> When done, close the health channel by calling {@link #disconnectChannel}
* and unregister the application configuration calling
* {@link #unregisterAppConfiguration}
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps
* should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public final class BluetoothHealth implements BluetoothProfile {
private static final String TAG = "BluetoothHealth";
private static final boolean DBG = true;
private static final boolean VDBG = false;
/**
* Health Profile Source Role - the health device.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int SOURCE_ROLE = 1 << 0;
/**
* Health Profile Sink Role the device talking to the health device.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int SINK_ROLE = 1 << 1;
/**
* Health Profile - Channel Type used - Reliable
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int CHANNEL_TYPE_RELIABLE = 10;
/**
* Health Profile - Channel Type used - Streaming
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int CHANNEL_TYPE_STREAMING = 11;
/**
* @hide
*/
public static final int CHANNEL_TYPE_ANY = 12;
/** @hide */
public static final int HEALTH_OPERATION_SUCCESS = 6000;
/** @hide */
public static final int HEALTH_OPERATION_ERROR = 6001;
/** @hide */
public static final int HEALTH_OPERATION_INVALID_ARGS = 6002;
/** @hide */
public static final int HEALTH_OPERATION_GENERIC_FAILURE = 6003;
/** @hide */
public static final int HEALTH_OPERATION_NOT_FOUND = 6004;
/** @hide */
public static final int HEALTH_OPERATION_NOT_ALLOWED = 6005;
private final IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
new IBluetoothStateChangeCallback.Stub() {
public void onBluetoothStateChange(boolean up) {
if (DBG) Log.d(TAG, "onBluetoothStateChange: up=" + up);
if (!up) {
if (VDBG) Log.d(TAG, "Unbinding service...");
synchronized (mConnection) {
try {
mService = null;
mContext.unbindService(mConnection);
} catch (Exception re) {
Log.e(TAG, "", re);
}
}
} else {
synchronized (mConnection) {
try {
if (mService == null) {
if (VDBG) Log.d(TAG, "Binding service...");
doBind();
}
} catch (Exception re) {
Log.e(TAG, "", re);
}
}
}
}
};
/**
* Register an application configuration that acts as a Health SINK.
@@ -141,53 +114,17 @@ public final class BluetoothHealth implements BluetoothProfile {
* @param callback A callback to indicate success or failure of the registration and all
* operations done on this application configuration.
* @return If true, callback will be called.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public boolean registerSinkAppConfiguration(String name, int dataType,
BluetoothHealthCallback callback) {
if (!isEnabled() || name == null) return false;
if (VDBG) log("registerSinkApplication(" + name + ":" + dataType + ")");
return registerAppConfiguration(name, dataType, SINK_ROLE,
CHANNEL_TYPE_ANY, callback);
}
/**
* Register an application configuration that acts as a Health SINK or in a Health
* SOURCE role.This is an asynchronous call and so
* the callback is used to notify success or failure if the function returns true.
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
*
* @param name The friendly name associated with the application or configuration.
* @param dataType The dataType of the Source role of Health Profile.
* @param channelType The channel type. Will be one of {@link #CHANNEL_TYPE_RELIABLE} or {@link
* #CHANNEL_TYPE_STREAMING}
* @param callback - A callback to indicate success or failure.
* @return If true, callback will be called.
* @hide
*/
public boolean registerAppConfiguration(String name, int dataType, int role,
int channelType, BluetoothHealthCallback callback) {
boolean result = false;
if (!isEnabled() || !checkAppParam(name, role, channelType, callback)) return result;
if (VDBG) log("registerApplication(" + name + ":" + dataType + ")");
BluetoothHealthCallbackWrapper wrapper = new BluetoothHealthCallbackWrapper(callback);
BluetoothHealthAppConfiguration config =
new BluetoothHealthAppConfiguration(name, dataType, role, channelType);
final IBluetoothHealth service = mService;
if (service != null) {
try {
result = service.registerAppConfiguration(config, wrapper);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
return result;
Log.e(TAG, "registerSinkAppConfiguration(): BluetoothHealth is deprecated");
return false;
}
/**
@@ -198,22 +135,16 @@ public final class BluetoothHealth implements BluetoothProfile {
*
* @param config The health app configuration
* @return Success or failure.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public boolean unregisterAppConfiguration(BluetoothHealthAppConfiguration config) {
boolean result = false;
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && config != null) {
try {
result = service.unregisterAppConfiguration(config);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
return result;
Log.e(TAG, "unregisterAppConfiguration(): BluetoothHealth is deprecated");
return false;
}
/**
@@ -227,49 +158,16 @@ public final class BluetoothHealth implements BluetoothProfile {
* @param config The application configuration which has been registered using {@link
* #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) }
* @return If true, the callback associated with the application config will be called.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public boolean connectChannelToSource(BluetoothDevice device,
BluetoothHealthAppConfiguration config) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && isValidDevice(device) && config != null) {
try {
return service.connectChannelToSource(device, config);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
return false;
}
/**
* Connect to a health device which has the {@link #SINK_ROLE}.
* This is an asynchronous call. If this function returns true, the callback
* associated with the application configuration will be called.
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
*
* @param device The remote Bluetooth device.
* @param config The application configuration which has been registered using {@link
* #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) }
* @return If true, the callback associated with the application config will be called.
* @hide
*/
public boolean connectChannelToSink(BluetoothDevice device,
BluetoothHealthAppConfiguration config, int channelType) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && isValidDevice(device) && config != null) {
try {
return service.connectChannelToSink(device, config, channelType);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
Log.e(TAG, "connectChannelToSource(): BluetoothHealth is deprecated");
return false;
}
@@ -285,20 +183,16 @@ public final class BluetoothHealth implements BluetoothProfile {
* #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) }
* @param channelId The channel id associated with the channel
* @return If true, the callback associated with the application config will be called.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public boolean disconnectChannel(BluetoothDevice device,
BluetoothHealthAppConfiguration config, int channelId) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && isValidDevice(device) && config != null) {
try {
return service.disconnectChannel(device, config, channelId);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
Log.e(TAG, "disconnectChannel(): BluetoothHealth is deprecated");
return false;
}
@@ -314,20 +208,16 @@ public final class BluetoothHealth implements BluetoothProfile {
* @param device The remote Bluetooth health device
* @param config The application configuration
* @return null on failure, ParcelFileDescriptor on success.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public ParcelFileDescriptor getMainChannelFd(BluetoothDevice device,
BluetoothHealthAppConfiguration config) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && isValidDevice(device) && config != null) {
try {
return service.getMainChannelFd(device, config);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
Log.e(TAG, "getMainChannelFd(): BluetoothHealth is deprecated");
return null;
}
@@ -347,17 +237,7 @@ public final class BluetoothHealth implements BluetoothProfile {
*/
@Override
public int getConnectionState(BluetoothDevice device) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled() && isValidDevice(device)) {
try {
return service.getHealthDeviceConnectionState(device);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
} else {
Log.w(TAG, "Proxy not attached to service");
if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
}
Log.e(TAG, "getConnectionState(): BluetoothHealth is deprecated");
return STATE_DISCONNECTED;
}
@@ -377,17 +257,8 @@ public final class BluetoothHealth implements BluetoothProfile {
*/
@Override
public List<BluetoothDevice> getConnectedDevices() {
final IBluetoothHealth service = mService;
if (service != null && isEnabled()) {
try {
return service.getConnectedHealthDevices();
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
}
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
Log.e(TAG, "getConnectedDevices(): BluetoothHealth is deprecated");
return new ArrayList<>();
}
/**
@@ -409,163 +280,81 @@ public final class BluetoothHealth implements BluetoothProfile {
*/
@Override
public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
final IBluetoothHealth service = mService;
if (service != null && isEnabled()) {
try {
return service.getHealthDevicesMatchingConnectionStates(states);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
return new ArrayList<BluetoothDevice>();
}
}
if (service == null) Log.w(TAG, "Proxy not attached to service");
return new ArrayList<BluetoothDevice>();
Log.e(TAG, "getDevicesMatchingConnectionStates(): BluetoothHealth is deprecated");
return new ArrayList<>();
}
private static class BluetoothHealthCallbackWrapper extends IBluetoothHealthCallback.Stub {
private BluetoothHealthCallback mCallback;
public BluetoothHealthCallbackWrapper(BluetoothHealthCallback callback) {
mCallback = callback;
}
@Override
public void onHealthAppConfigurationStatusChange(BluetoothHealthAppConfiguration config,
int status) {
mCallback.onHealthAppConfigurationStatusChange(config, status);
}
@Override
public void onHealthChannelStateChange(BluetoothHealthAppConfiguration config,
BluetoothDevice device, int prevState, int newState,
ParcelFileDescriptor fd, int channelId) {
mCallback.onHealthChannelStateChange(config, device, prevState, newState, fd,
channelId);
}
}
/** Health Channel Connection State - Disconnected */
/** Health Channel Connection State - Disconnected
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int STATE_CHANNEL_DISCONNECTED = 0;
/** Health Channel Connection State - Connecting */
/** Health Channel Connection State - Connecting
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int STATE_CHANNEL_CONNECTING = 1;
/** Health Channel Connection State - Connected */
/** Health Channel Connection State - Connected
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int STATE_CHANNEL_CONNECTED = 2;
/** Health Channel Connection State - Disconnecting */
/** Health Channel Connection State - Disconnecting
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int STATE_CHANNEL_DISCONNECTING = 3;
/** Health App Configuration registration success */
public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0;
/** Health App Configuration registration failure */
public static final int APP_CONFIG_REGISTRATION_FAILURE = 1;
/** Health App Configuration un-registration success */
public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2;
/** Health App Configuration un-registration failure */
public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3;
private Context mContext;
private ServiceListener mServiceListener;
private volatile IBluetoothHealth mService;
BluetoothAdapter mAdapter;
/**
* Create a BluetoothHealth proxy object.
/** Health App Configuration registration success
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
/*package*/ BluetoothHealth(Context context, ServiceListener l) {
mContext = context;
mServiceListener = l;
mAdapter = BluetoothAdapter.getDefaultAdapter();
IBluetoothManager mgr = mAdapter.getBluetoothManager();
if (mgr != null) {
try {
mgr.registerStateChangeCallback(mBluetoothStateChangeCallback);
} catch (RemoteException e) {
Log.e(TAG, "", e);
}
}
doBind();
}
boolean doBind() {
Intent intent = new Intent(IBluetoothHealth.class.getName());
ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
intent.setComponent(comp);
if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
mContext.getUser())) {
Log.e(TAG, "Could not bind to Bluetooth Health Service with " + intent);
return false;
}
return true;
}
/*package*/ void close() {
if (VDBG) log("close()");
IBluetoothManager mgr = mAdapter.getBluetoothManager();
if (mgr != null) {
try {
mgr.unregisterStateChangeCallback(mBluetoothStateChangeCallback);
} catch (Exception e) {
Log.e(TAG, "", e);
}
}
synchronized (mConnection) {
if (mService != null) {
try {
mService = null;
mContext.unbindService(mConnection);
} catch (Exception re) {
Log.e(TAG, "", re);
}
}
}
mServiceListener = null;
}
private final ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
if (DBG) Log.d(TAG, "Proxy object connected");
mService = IBluetoothHealth.Stub.asInterface(Binder.allowBlocking(service));
if (mServiceListener != null) {
mServiceListener.onServiceConnected(BluetoothProfile.HEALTH, BluetoothHealth.this);
}
}
public void onServiceDisconnected(ComponentName className) {
if (DBG) Log.d(TAG, "Proxy object disconnected");
mService = null;
if (mServiceListener != null) {
mServiceListener.onServiceDisconnected(BluetoothProfile.HEALTH);
}
}
};
private boolean isEnabled() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter != null && adapter.getState() == BluetoothAdapter.STATE_ON) return true;
log("Bluetooth is Not enabled");
return false;
}
private static boolean isValidDevice(BluetoothDevice device) {
return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
}
private boolean checkAppParam(String name, int role, int channelType,
BluetoothHealthCallback callback) {
if (name == null || (role != SOURCE_ROLE && role != SINK_ROLE)
|| (channelType != CHANNEL_TYPE_RELIABLE && channelType != CHANNEL_TYPE_STREAMING
&& channelType != CHANNEL_TYPE_ANY)
|| callback == null) {
return false;
}
if (role == SOURCE_ROLE && channelType == CHANNEL_TYPE_ANY) return false;
return true;
}
private static void log(String msg) {
Log.d(TAG, msg);
}
@Deprecated
public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0;
/** Health App Configuration registration failure
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int APP_CONFIG_REGISTRATION_FAILURE = 1;
/** Health App Configuration un-registration success
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2;
/** Health App Configuration un-registration failure
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3;
}

View File

@@ -25,72 +25,14 @@ import android.os.Parcelable;
* the {@link BluetoothHealth} class. This class represents an application configuration
* that the Bluetooth Health third party application will register to communicate with the
* remote Bluetooth health device.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public final class BluetoothHealthAppConfiguration implements Parcelable {
private final String mName;
private final int mDataType;
private final int mRole;
private final int mChannelType;
/**
* Constructor to register the SINK role
*
* @param name Friendly name associated with the application configuration
* @param dataType Data Type of the remote Bluetooth Health device
* @hide
*/
BluetoothHealthAppConfiguration(String name, int dataType) {
mName = name;
mDataType = dataType;
mRole = BluetoothHealth.SINK_ROLE;
mChannelType = BluetoothHealth.CHANNEL_TYPE_ANY;
}
/**
* Constructor to register the application configuration.
*
* @param name Friendly name associated with the application configuration
* @param dataType Data Type of the remote Bluetooth Health device
* @param role {@link BluetoothHealth#SOURCE_ROLE} or {@link BluetoothHealth#SINK_ROLE}
* @hide
*/
BluetoothHealthAppConfiguration(String name, int dataType, int role, int
channelType) {
mName = name;
mDataType = dataType;
mRole = role;
mChannelType = channelType;
}
@Override
public boolean equals(Object o) {
if (o instanceof BluetoothHealthAppConfiguration) {
BluetoothHealthAppConfiguration config = (BluetoothHealthAppConfiguration) o;
if (mName == null) return false;
return mName.equals(config.getName()) && mDataType == config.getDataType()
&& mRole == config.getRole() && mChannelType == config.getChannelType();
}
return false;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (mName != null ? mName.hashCode() : 0);
result = 31 * result + mDataType;
result = 31 * result + mRole;
result = 31 * result + mChannelType;
return result;
}
@Override
public String toString() {
return "BluetoothHealthAppConfiguration [mName = " + mName + ",mDataType = " + mDataType
+ ", mRole = " + mRole + ",mChannelType = " + mChannelType + "]";
}
@Override
public int describeContents() {
return 0;
@@ -100,50 +42,59 @@ public final class BluetoothHealthAppConfiguration implements Parcelable {
* Return the data type associated with this application configuration.
*
* @return dataType
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public int getDataType() {
return mDataType;
return 0;
}
/**
* Return the name of the application configuration.
*
* @return String name
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public String getName() {
return mName;
return null;
}
/**
* Return the role associated with this application configuration.
*
* @return One of {@link BluetoothHealth#SOURCE_ROLE} or {@link BluetoothHealth#SINK_ROLE}
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public int getRole() {
return mRole;
return 0;
}
/**
* Return the channel type associated with this application configuration.
*
* @return One of {@link BluetoothHealth#CHANNEL_TYPE_RELIABLE} or {@link
* BluetoothHealth#CHANNEL_TYPE_STREAMING} or {@link BluetoothHealth#CHANNEL_TYPE_ANY}.
* @hide
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
public int getChannelType() {
return mChannelType;
}
@Deprecated
public static final Parcelable.Creator<BluetoothHealthAppConfiguration> CREATOR =
new Parcelable.Creator<BluetoothHealthAppConfiguration>() {
@Override
public BluetoothHealthAppConfiguration createFromParcel(Parcel in) {
String name = in.readString();
int type = in.readInt();
int role = in.readInt();
int channelType = in.readInt();
return new BluetoothHealthAppConfiguration(name, type, role,
channelType);
return new BluetoothHealthAppConfiguration();
}
@Override
@@ -153,10 +104,5 @@ public final class BluetoothHealthAppConfiguration implements Parcelable {
};
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mName);
out.writeInt(mDataType);
out.writeInt(mRole);
out.writeInt(mChannelType);
}
public void writeToParcel(Parcel out, int flags) {}
}

View File

@@ -23,7 +23,13 @@ import android.util.Log;
/**
* This abstract class is used to implement {@link BluetoothHealth} callbacks.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
public abstract class BluetoothHealthCallback {
private static final String TAG = "BluetoothHealthCallback";
@@ -38,8 +44,14 @@ public abstract class BluetoothHealthCallback {
* BluetoothHealth#APP_CONFIG_REGISTRATION_FAILURE} or
* {@link BluetoothHealth#APP_CONFIG_UNREGISTRATION_SUCCESS}
* or {@link BluetoothHealth#APP_CONFIG_UNREGISTRATION_FAILURE}
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@BinderThread
@Deprecated
public void onHealthAppConfigurationStatusChange(BluetoothHealthAppConfiguration config,
int status) {
Log.d(TAG, "onHealthAppConfigurationStatusChange: " + config + "Status: " + status);
@@ -58,8 +70,14 @@ public abstract class BluetoothHealthCallback {
* @param fd The Parcel File Descriptor when the channel state is connected.
* @param channelId The id associated with the channel. This id will be used in future calls
* like when disconnecting the channel.
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@BinderThread
@Deprecated
public void onHealthChannelStateChange(BluetoothHealthAppConfiguration config,
BluetoothDevice device, int prevState, int newState, ParcelFileDescriptor fd,
int channelId) {

View File

@@ -72,7 +72,13 @@ public interface BluetoothProfile {
/**
* Health Profile
*
* @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
* apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
* {@link BluetoothAdapter#listenUsingL2capChannel()}, or
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
int HEALTH = 3;
/**
@@ -269,9 +275,8 @@ public interface BluetoothProfile {
* Called to notify the client when the proxy object has been
* connected to the service.
*
* @param profile - One of {@link #HEALTH}, {@link #HEADSET} or {@link #A2DP}
* @param proxy - One of {@link BluetoothHealth}, {@link BluetoothHeadset} or {@link
* BluetoothA2dp}
* @param profile - One of {@link #HEADSET} or {@link #A2DP}
* @param proxy - One of {@link BluetoothHeadset} or {@link BluetoothA2dp}
*/
public void onServiceConnected(int profile, BluetoothProfile proxy);
@@ -279,7 +284,7 @@ public interface BluetoothProfile {
* Called to notify the client that this proxy object has been
* disconnected from the service.
*
* @param profile - One of {@link #HEALTH}, {@link #HEADSET} or {@link #A2DP}
* @param profile - One of {@link #HEADSET} or {@link #A2DP}
*/
public void onServiceDisconnected(int profile);
}