content: /*
   * Copyright (C) 2011 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;
  
  import android.os.ParcelFileDescriptor;
  import android.util.Log;
  
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Public API for Bluetooth Health Profile.
   *
   * <p>BluetoothHealth is a proxy object for controlling the Bluetooth
   * Service via IPC.
   *
   * <p> How to connect to a health device which is acting in the source role.
   * <li> Use {@link BluetoothAdapter#getProfileProxy} to get
   * the BluetoothHealth proxy object. </li>
   * <li> Create an {@link BluetoothHealth} callback and call
   * {@link #registerSinkAppConfiguration} to register an application
   * configuration </li>
   * <li> Pair with the remote device. This currently needs to be done manually
   * from Bluetooth Settings </li>
   * <li> Connect to a health device using {@link #connectChannelToSource}. Some
   * devices will connect the channel automatically. The {@link BluetoothHealth}
   * callback will inform the application of channel state change. </li>
   * <li> Use the file descriptor provided with a connected channel to read and
   * write data to the health channel. </li>
   * <li> The received data needs to be interpreted using a health manager which
   * implements the IEEE 11073-xxxxx specifications.
   * <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";
      /**
       * 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 auto-created default constructor
       * @hide
       */
      BluetoothHealth() {}
  
      /**
       * Register an application configuration that acts as a Health SINK.
       * This is the configuration that will be used to communicate with health devices
       * which will act as the {@link #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 to which the sink wants to
       * connect to.
       * @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) {
          Log.e(TAG, "registerSinkAppConfiguration(): BluetoothHealth is deprecated");
          return false;
      }
  
      /**
       * Unregister an application configuration that has been registered using
       * {@link #registerSinkAppConfiguration}
       *
       * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
       *
       * @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) {
          Log.e(TAG, "unregisterAppConfiguration(): BluetoothHealth is deprecated");
          return false;
      }
  
      /**
       * Connect to a health device which has the {@link #SOURCE_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.
       *
       * @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) {
          Log.e(TAG, "connectChannelToSource(): BluetoothHealth is deprecated");
          return false;
      }
  
      /**
       * Disconnect a connected health channel.
       * 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) }
       * @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) {
          Log.e(TAG, "disconnectChannel(): BluetoothHealth is deprecated");
          return false;
      }
  
      /**
       * Get the file descriptor of the main channel associated with the remote device
       * and application configuration.
       *
       * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
       *
       * <p> Its the responsibility of the caller to close the ParcelFileDescriptor
       * when done.
       *
       * @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) {
          Log.e(TAG, "getMainChannelFd(): BluetoothHealth is deprecated");
          return null;
      }
  
      /**
       * Get the current connection state of the profile.
       *
       * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
       *
       * This is not specific to any application configuration but represents the connection
       * state of the local Bluetooth adapter with the remote device. This can be used
       * by applications like status bar which would just like to know the state of the
       * local adapter.
       *
       * @param device Remote bluetooth device.
       * @return State of the profile connection. One of {@link #STATE_CONNECTED}, {@link
       * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING}
       */
      @Override
      public int getConnectionState(BluetoothDevice device) {
          Log.e(TAG, "getConnectionState(): BluetoothHealth is deprecated");
          return STATE_DISCONNECTED;
      }
  
      /**
       * Get connected devices for the health profile.
       *
       * <p> Return the set of devices which are in state {@link #STATE_CONNECTED}
       *
       * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
       *
       * This is not specific to any application configuration but represents the connection
       * state of the local Bluetooth adapter for this profile. This can be used
       * by applications like status bar which would just like to know the state of the
       * local adapter.
       *
       * @return List of devices. The list will be empty on error.
       */
      @Override
      public List<BluetoothDevice> getConnectedDevices() {
          Log.e(TAG, "getConnectedDevices(): BluetoothHealth is deprecated");
          return new ArrayList<>();
      }
  
      /**
       * Get a list of devices that match any of the given connection
       * states.
       *
       * <p> If none of the devices match any of the given states,
       * an empty list will be returned.
       *
       * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
       * This is not specific to any application configuration but represents the connection
       * state of the local Bluetooth adapter for this profile. This can be used
       * by applications like status bar which would just like to know the state of the
       * local adapter.
       *
       * @param states Array of states. States can be one of {@link #STATE_CONNECTED}, {@link
       * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING},
       * @return List of devices. The list will be empty on error.
       */
      @Override
      public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
          Log.e(TAG, "getDevicesMatchingConnectionStates(): BluetoothHealth is deprecated");
          return new ArrayList<>();
      }
  
      /** 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
       *
       * @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
       *
       * @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
       *
       * @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
       *
       * @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_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;
  }
  