Merge "Remove MR2 BLE Advertising hidden API from L codebase (1/2)." into lmp-dev
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 97e3fc5..faf8645 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -219,22 +219,6 @@
"android.bluetooth.adapter.action.SCAN_MODE_CHANGED";
/**
- * Broadcast Action: Indicate BLE Advertising is started.
- * @hide
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String ACTION_BLUETOOTH_ADVERTISING_STARTED =
- "android.bluetooth.adapter.action.ADVERTISING_STARTED";
-
- /**
- * Broadcast Action: Indicated BLE Advertising is stopped.
- * @hide
- */
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String ACTION_BLUETOOTH_ADVERTISING_STOPPED =
- "android.bluetooth.adapter.action.ADVERTISING_STOPPED";
-
- /**
* Used as an int extra field in {@link #ACTION_SCAN_MODE_CHANGED}
* intents to request the current scan mode. Possible values are:
* {@link #SCAN_MODE_NONE},
@@ -403,8 +387,6 @@
private IBluetooth mService;
private final Map<LeScanCallback, GattCallbackWrapper> mLeScanClients;
- private BluetoothAdvScanData mBluetoothAdvScanData = null;
- private GattCallbackWrapper mAdvertisingGattCallback;
private final Handler mHandler; // Handler to post the advertise callback to run on main thread.
private final Object mLock = new Object();
@@ -481,29 +463,6 @@
}
/**
- * Returns a {@link BluetoothAdvScanData} object representing advertising data.
- * Data will be reset when bluetooth service is turned off.
- * @hide
- */
- public BluetoothAdvScanData getAdvScanData() {
- try {
- IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
- if (iGatt == null) {
- // BLE is not supported
- Log.e(TAG, "failed to start, iGatt null");
- return null;
- }
- if (mBluetoothAdvScanData == null) {
- mBluetoothAdvScanData = new BluetoothAdvScanData(iGatt, BluetoothAdvScanData.AD);
- }
- return mBluetoothAdvScanData;
- } catch (RemoteException e) {
- Log.e(TAG, "failed to get advScanData, error: " + e);
- return null;
- }
- }
-
- /**
* Returns a {@link BluetoothLeAdvertiser} object for Bluetooth LE Advertising operations.
*/
public BluetoothLeAdvertiser getBluetoothLeAdvertiser() {
@@ -520,106 +479,6 @@
}
/**
- * Interface for BLE advertising callback.
- *
- * @hide
- */
- public interface AdvertiseCallback {
- /**
- * Callback when advertise starts.
- * @param status - {@link #ADVERTISE_CALLBACK_SUCCESS} for success, others for failure.
- */
- void onAdvertiseStart(int status);
- /**
- * Callback when advertise stops.
- * @param status - {@link #ADVERTISE_CALLBACK_SUCCESS} for success, others for failure.
- */
- void onAdvertiseStop(int status);
- }
-
- /**
- * Start BLE advertising using current {@link BluetoothAdvScanData}.
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_PRIVILEGED}
- *
- * @param callback - {@link AdvertiseCallback}
- * @return true if BLE advertising succeeds, false otherwise.
- * @hide
- */
- public boolean startAdvertising(final AdvertiseCallback callback) {
- if (getState() != STATE_ON) return false;
- try {
- IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
- if (iGatt == null) {
- // BLE is not supported.
- return false;
- }
- // Restart/reset advertising packets if advertising is in progress.
- if (isAdvertising()) {
- // Invalid advertising callback.
- if (mAdvertisingGattCallback == null || mAdvertisingGattCallback.mLeHandle == -1) {
- Log.e(TAG, "failed to restart advertising, invalid callback");
- return false;
- }
- iGatt.startAdvertising(mAdvertisingGattCallback.mLeHandle);
- // Run the callback from main thread.
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- // callback with status success.
- callback.onAdvertiseStart(ADVERTISE_CALLBACK_SUCCESS);
- }
- });
- return true;
- }
- UUID uuid = UUID.randomUUID();
- GattCallbackWrapper wrapper =
- new GattCallbackWrapper(this, null, null, callback);
- iGatt.registerClient(new ParcelUuid(uuid), wrapper);
- if (!wrapper.advertiseStarted()) {
- return false;
- }
- synchronized (mLock) {
- mAdvertisingGattCallback = wrapper;
- }
- return true;
- } catch (RemoteException e) {
- Log.e(TAG, "", e);
- return false;
- }
- }
-
- /**
- * Stop BLE advertising. The callback has to be the same one used for start advertising.
- *
- * @param callback - {@link AdvertiseCallback}
- * @return true if BLE advertising stops, false otherwise.
- * @hide
- */
- public boolean stopAdvertising(AdvertiseCallback callback) {
- try {
- IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
- if (iGatt == null) {
- // BLE is not supported
- return false;
- }
- if (mAdvertisingGattCallback == null) {
- // no callback.
- return false;
- }
- // Make sure same callback is used for start and stop advertising.
- if (callback != mAdvertisingGattCallback.mAdvertiseCallback) {
- Log.e(TAG, "must use the same callback for star/stop advertising");
- return false;
- }
- mAdvertisingGattCallback.stopAdvertising();
- return true;
- } catch (RemoteException e) {
- Log.e(TAG, "", e);
- return false;
- }
- }
-
- /**
* Return true if Bluetooth is currently enabled and ready for use.
* <p>Equivalent to:
* <code>getBluetoothState() == STATE_ON</code>
@@ -1076,23 +935,6 @@
}
/**
- * Returns whether BLE is currently advertising.
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_PRIVILEGED}.
- *
- * @hide
- */
- public boolean isAdvertising() {
- if (getState() != STATE_ON) return false;
- try {
- IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
- return iGatt.isAdvertising();
- } catch (RemoteException e) {
- Log.e(TAG, "", e);
- }
- return false;
- }
-
- /**
* Return the set of {@link BluetoothDevice} objects that are bonded
* (paired) to the local adapter.
* <p>If Bluetooth state is not {@link #STATE_ON}, this API
@@ -1537,8 +1379,6 @@
if (VDBG) Log.d(TAG, "onBluetoothServiceDown: " + mService);
synchronized (mManagerCallback) {
mService = null;
- // Reset bluetooth adv scan data when Gatt service is down.
- mBluetoothAdvScanData = null;
for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){
try {
if (cb != null) {
@@ -1822,7 +1662,6 @@
private static final int LE_CALLBACK_REG_TIMEOUT = 2000;
private static final int LE_CALLBACK_REG_WAIT_COUNT = 5;
- private final AdvertiseCallback mAdvertiseCallback;
private final LeScanCallback mLeScanCb;
// mLeHandle 0: not registered
@@ -1838,27 +1677,12 @@
mLeScanCb = leScanCb;
mScanFilter = uuid;
mLeHandle = 0;
- mAdvertiseCallback = null;
- }
-
- public GattCallbackWrapper(BluetoothAdapter bluetoothAdapter, LeScanCallback leScanCb,
- UUID[] uuid, AdvertiseCallback callback) {
- mBluetoothAdapter = new WeakReference<BluetoothAdapter>(bluetoothAdapter);
- mLeScanCb = leScanCb;
- mScanFilter = uuid;
- mLeHandle = 0;
- mAdvertiseCallback = callback;
}
public boolean scanStarted() {
return waitForRegisteration(LE_CALLBACK_REG_WAIT_COUNT);
}
- public boolean advertiseStarted() {
- // Wait for registeration callback.
- return waitForRegisteration(1);
- }
-
private boolean waitForRegisteration(int maxWaitCount) {
boolean started = false;
synchronized(this) {
@@ -1878,27 +1702,6 @@
return started;
}
- public void stopAdvertising() {
- synchronized (this) {
- if (mLeHandle <= 0) {
- Log.e(TAG, "Error state, mLeHandle: " + mLeHandle);
- return;
- }
- BluetoothAdapter adapter = mBluetoothAdapter.get();
- if (adapter != null) {
- try {
- IBluetoothGatt iGatt = adapter.getBluetoothManager().getBluetoothGatt();
- iGatt.stopAdvertising();
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to stop advertising" + e);
- }
- } else {
- Log.e(TAG, "stopAdvertising, BluetoothAdapter is null");
- }
- notifyAll();
- }
- }
-
public void stopLeScan() {
synchronized(this) {
if (mLeHandle <= 0) {
@@ -1940,18 +1743,14 @@
BluetoothAdapter adapter = mBluetoothAdapter.get();
if (adapter != null) {
iGatt = adapter.getBluetoothManager().getBluetoothGatt();
- if (mAdvertiseCallback != null) {
- iGatt.startAdvertising(mLeHandle);
+ if (mScanFilter == null) {
+ iGatt.startScan(mLeHandle, false);
} else {
- if (mScanFilter == null) {
- iGatt.startScan(mLeHandle, false);
- } else {
- ParcelUuid[] uuids = new ParcelUuid[mScanFilter.length];
- for(int i = 0; i != uuids.length; ++i) {
- uuids[i] = new ParcelUuid(mScanFilter[i]);
- }
- iGatt.startScanWithUuids(mLeHandle, false, uuids);
- }
+ ParcelUuid[] uuids = new ParcelUuid[mScanFilter.length];
+ for(int i = 0; i != uuids.length; ++i) {
+ uuids[i] = new ParcelUuid(mScanFilter[i]);
+ }
+ iGatt.startScanWithUuids(mLeHandle, false, uuids);
}
} else {
Log.e(TAG, "onClientRegistered, BluetoothAdapter null");
@@ -2080,44 +1879,6 @@
}
public void onAdvertiseStateChange(int advertiseState, int status) {
- Log.d(TAG, "on advertise call back, state: " + advertiseState + " status: " + status);
- if (advertiseState == STATE_ADVERTISE_STARTED) {
- if (status == ADVERTISE_CALLBACK_SUCCESS) {
- mAdvertiseCallback.onAdvertiseStart(status);
- } else {
- // If status is unsuccessful and advertise state is started, it means stop
- // advertising fails.
- mAdvertiseCallback.onAdvertiseStop(status);
- }
- } else {
- synchronized (this) {
- if (status == ADVERTISE_CALLBACK_SUCCESS) {
- BluetoothAdapter adapter = mBluetoothAdapter.get();
- if (adapter != null) {
- try {
- IBluetoothGatt iGatt =
- adapter.getBluetoothManager().getBluetoothGatt();
- Log.d(TAG, "unregistering client " + mLeHandle);
- iGatt.unregisterClient(mLeHandle);
- // Reset advertise app handle.
- mLeHandle = -1;
- adapter.mAdvertisingGattCallback = null;
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to unregister client" + e);
- }
- } else {
- Log.e(TAG, "cannot unregister client, BluetoothAdapter is null");
- }
- }
- }
- if (status == ADVERTISE_CALLBACK_SUCCESS) {
- mAdvertiseCallback.onAdvertiseStop(status);
- } else{
- // If status is unsuccesful and advertise state is stopped, it means start
- // advertising fails.
- mAdvertiseCallback.onAdvertiseStart(status);
- }
- }
}
@Override
diff --git a/core/java/android/bluetooth/BluetoothAdvScanData.java b/core/java/android/bluetooth/BluetoothAdvScanData.java
deleted file mode 100644
index df2c256..0000000
--- a/core/java/android/bluetooth/BluetoothAdvScanData.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2013 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.ParcelUuid;
-import android.os.RemoteException;
-import android.util.Log;
-
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * This class provides the public APIs to set advertising and scan response data when BLE device
- * operates in peripheral mode. <br>
- * The exact format is defined in Bluetooth 4.0 specification, Volume 3, Part C, Section 11
- * @hide
- */
-public final class BluetoothAdvScanData {
-
- /**
- * Available data types of {@link BluetoothAdvScanData}.
- */
- public static final int AD = 0; // Advertising Data
- public static final int SCAN_RESPONSE = 1; // Scan Response
- public static final int EIR = 2; // Extended Inquiry Response
-
- private static final String TAG = "BluetoothAdvScanData";
-
- /**
- * Data type of BluetoothAdvScanData.
- */
- private final int mDataType;
- /**
- * Bluetooth Gatt Service.
- */
- private IBluetoothGatt mBluetoothGatt;
-
- /**
- * @param mBluetoothGatt
- * @param dataType
- */
- public BluetoothAdvScanData(IBluetoothGatt mBluetoothGatt, int dataType) {
- this.mBluetoothGatt = mBluetoothGatt;
- this.mDataType = dataType;
- }
-
- /**
- * @return advertising data type.
- */
- public int getDataType() {
- return mDataType;
- }
-
- /**
- * Set manufactureCode and manufactureData.
- * Returns true if manufacturer data is set, false if there is no enough room to set
- * manufacturer data or the data is already set.
- * @param manufacturerCode - unique identifier for the manufacturer
- * @param manufacturerData - data associated with the specific manufacturer.
- */
- public boolean setManufacturerData(int manufacturerCode, byte[] manufacturerData) {
- if (mDataType != AD) return false;
- try {
- return mBluetoothGatt.setAdvManufacturerCodeAndData(manufacturerCode, manufacturerData);
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to set manufacturer id and data.", e);
- return false;
- }
- }
-
- /**
- * Set service data. Note the service data can only be set when the data type is {@code AD};
- * @param serviceData
- */
- public boolean setServiceData(byte[] serviceData) {
-
- if (mDataType != AD) return false;
- if (serviceData == null) return false;
- try {
- return mBluetoothGatt.setAdvServiceData(serviceData);
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to set service data.", e);
- return false;
- }
- }
-
- /**
- * Returns an immutable list of service uuids that will be advertised.
- */
- public List<ParcelUuid> getServiceUuids() {
- try {
- return Collections.unmodifiableList(mBluetoothGatt.getAdvServiceUuids());
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to get service uuids.", e);
- return null;
- }
- }
-
- /**
- * Returns manufacturer data.
- */
- public byte[] getManufacturerData() {
- if (mBluetoothGatt == null) return null;
- try {
- return mBluetoothGatt.getAdvManufacturerData();
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to get manufacturer data.", e);
- return null;
- }
- }
-
- /**
- * Returns service data.
- */
- public byte[] getServiceData() {
- if (mBluetoothGatt == null) return null;
- try {
- return mBluetoothGatt.getAdvServiceData();
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to get service data.", e);
- return null;
- }
- }
-
- /**
- * Remove manufacturer data based on given manufacturer code.
- * @param manufacturerCode
- */
- public void removeManufacturerCodeAndData(int manufacturerCode) {
- if (mBluetoothGatt != null) {
- try {
- mBluetoothGatt.removeAdvManufacturerCodeAndData(manufacturerCode);
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to remove manufacturer : " + manufacturerCode, e);
- }
- }
- }
-}
diff --git a/core/java/android/bluetooth/IBluetoothGatt.aidl b/core/java/android/bluetooth/IBluetoothGatt.aidl
index 0f0eee6..6d4b9cd 100644
--- a/core/java/android/bluetooth/IBluetoothGatt.aidl
+++ b/core/java/android/bluetooth/IBluetoothGatt.aidl
@@ -48,15 +48,6 @@
void unregisterClient(in int clientIf);
void clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport);
void clientDisconnect(in int clientIf, in String address);
- void startAdvertising(in int appIf);
- void stopAdvertising();
- boolean setAdvServiceData(in byte[] serviceData);
- byte[] getAdvServiceData();
- boolean setAdvManufacturerCodeAndData(int manufactureCode, in byte[] manufacturerData);
- byte[] getAdvManufacturerData();
- List<ParcelUuid> getAdvServiceUuids();
- void removeAdvManufacturerCodeAndData(int manufacturerCode);
- boolean isAdvertising();
void refreshDevice(in int clientIf, in String address);
void discoverServices(in int clientIf, in String address);
void readCharacteristic(in int clientIf, in String address, in int srvcType,
diff --git a/core/java/android/bluetooth/IBluetoothGattCallback.aidl b/core/java/android/bluetooth/IBluetoothGattCallback.aidl
index af218eb..18e3f54 100644
--- a/core/java/android/bluetooth/IBluetoothGattCallback.aidl
+++ b/core/java/android/bluetooth/IBluetoothGattCallback.aidl
@@ -64,7 +64,6 @@
in int charInstId, in ParcelUuid charUuid,
in byte[] value);
void onReadRemoteRssi(in String address, in int rssi, in int status);
- void onAdvertiseStateChange(in int advertiseState, in int status);
void onMultiAdvertiseCallback(in int status);
void onConfigureMTU(in String address, in int mtu, in int status);
void onConnectionCongested(in String address, in boolean congested);
diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index e232512..af79fcc 100644
--- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -332,11 +332,6 @@
}
@Override
- public void onAdvertiseStateChange(int advertiseState, int status) {
- // no op
- }
-
- @Override
public void onMultiAdvertiseCallback(int status) {
// TODO: This logic needs to be re-visited to account
// for whether the scan has actually been started
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index 7e87edc..220aa77 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -409,11 +409,6 @@
}
@Override
- public void onAdvertiseStateChange(int advertiseState, int status) {
- // no op
- }
-
- @Override
public void onMultiAdvertiseCallback(int status) {
// no op
}