summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/app/aidl/android/bluetooth/IBluetooth.aidl4
-rw-r--r--android/app/src/com/android/bluetooth/btservice/AdapterService.java16
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java4
-rw-r--r--apex/hiddenapi/hiddenapi-max-target-r-low-priority.txt1
-rw-r--r--service/src/AdapterBinder.kt4
-rw-r--r--service/src/com/android/server/bluetooth/BluetoothManagerService.java25
-rw-r--r--service/tests/src/com/android/server/bluetooth/BluetoothManagerServiceTest.java2
7 files changed, 30 insertions, 26 deletions
diff --git a/android/app/aidl/android/bluetooth/IBluetooth.aidl b/android/app/aidl/android/bluetooth/IBluetooth.aidl
index aaccb15c95..d057989bfa 100644
--- a/android/app/aidl/android/bluetooth/IBluetooth.aidl
+++ b/android/app/aidl/android/bluetooth/IBluetooth.aidl
@@ -49,8 +49,8 @@ interface IBluetooth
@JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
int getState();
- @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
- oneway void enable(boolean quietMode, in AttributionSource attributionSource);
+ @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED)")
+ oneway void offToBleOn(boolean quietMode, in AttributionSource attributionSource);
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
oneway void disable(in AttributionSource attributionSource);
diff --git a/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
index 83f196184c..b1e0b833c6 100644
--- a/android/app/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -2294,16 +2294,16 @@ public class AdapterService extends Service {
}
@Override
- public void enable(boolean quietMode, AttributionSource source) {
+ public void offToBleOn(boolean quietMode, AttributionSource source) {
AdapterService service = getService();
if (service == null
- || !callerIsSystemOrActiveOrManagedUser(service, TAG, "enable")
- || !Utils.checkConnectPermissionForDataDelivery(
- service, source, "AdapterService enable")) {
+ || !callerIsSystemOrActiveOrManagedUser(service, TAG, "offToBleOn")) {
return;
}
- service.enable(quietMode);
+ service.enforceCallingOrSelfPermission(BLUETOOTH_PRIVILEGED, null);
+
+ service.offToBleOn(quietMode);
}
@Override
@@ -4583,11 +4583,11 @@ public class AdapterService extends Service {
return BluetoothAdapter.STATE_OFF;
}
- public synchronized void enable(boolean quietMode) {
+ public synchronized void offToBleOn(boolean quietMode) {
// Enforce the user restriction for disallowing Bluetooth if it was set.
if (mUserManager.hasUserRestrictionForUser(
UserManager.DISALLOW_BLUETOOTH, UserHandle.SYSTEM)) {
- Log.d(TAG, "enable() called when Bluetooth was disallowed");
+ Log.d(TAG, "offToBleOn() called when Bluetooth was disallowed");
return;
}
if (Flags.fastBindToApp()) {
@@ -4595,7 +4595,7 @@ public class AdapterService extends Service {
mHandler.post(() -> init());
}
- Log.i(TAG, "enable() - Enable called with quiet mode status = " + quietMode);
+ Log.i(TAG, "offToBleOn() - Enable called with quiet mode status = " + quietMode);
mQuietmode = quietMode;
mAdapterStateMachine.sendMessage(AdapterState.BLE_TURN_ON);
}
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
index 9e96712a48..0151cfbe2c 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/AdapterServiceTest.java
@@ -409,7 +409,7 @@ public class AdapterServiceTest {
Context ctx,
IBluetoothCallback callback,
AdapterNativeInterface nativeInterface) {
- adapter.enable(false);
+ adapter.offToBleOn(false);
if (Flags.fastBindToApp()) {
TestUtils.syncHandler(looper, 0); // when fastBindToApp is enable init need to be run
}
@@ -620,7 +620,7 @@ public class AdapterServiceTest {
public void testGattStartTimeout() {
assertThat(mAdapterService.getState()).isEqualTo(STATE_OFF);
- mAdapterService.enable(false);
+ mAdapterService.offToBleOn(false);
if (Flags.fastBindToApp()) {
syncHandler(0); // when fastBindToApp is enable init need to be run
}
diff --git a/apex/hiddenapi/hiddenapi-max-target-r-low-priority.txt b/apex/hiddenapi/hiddenapi-max-target-r-low-priority.txt
index 1350980e5e..faf67d8425 100644
--- a/apex/hiddenapi/hiddenapi-max-target-r-low-priority.txt
+++ b/apex/hiddenapi/hiddenapi-max-target-r-low-priority.txt
@@ -1,2 +1 @@
-Landroid/bluetooth/IBluetooth$Stub;->TRANSACTION_enable:I
Landroid/bluetooth/IBluetoothManager$Stub;->TRANSACTION_enable:I
diff --git a/service/src/AdapterBinder.kt b/service/src/AdapterBinder.kt
index 3bc160eebd..048de83027 100644
--- a/service/src/AdapterBinder.kt
+++ b/service/src/AdapterBinder.kt
@@ -39,8 +39,8 @@ class AdapterBinder(rawBinder: IBinder) {
}
@Throws(RemoteException::class)
- fun enable(quietMode: Boolean, source: AttributionSource) {
- adapterBinder.enable(quietMode, source)
+ fun offToBleOn(quietMode: Boolean, source: AttributionSource) {
+ adapterBinder.offToBleOn(quietMode, source)
}
@Throws(RemoteException::class)
diff --git a/service/src/com/android/server/bluetooth/BluetoothManagerService.java b/service/src/com/android/server/bluetooth/BluetoothManagerService.java
index a1b32b68f7..d11b61b56d 100644
--- a/service/src/com/android/server/bluetooth/BluetoothManagerService.java
+++ b/service/src/com/android/server/bluetooth/BluetoothManagerService.java
@@ -1629,11 +1629,7 @@ class BluetoothManagerService {
}
// Do enable request
- try {
- mAdapter.enable(mQuietEnable, mContext.getAttributionSource());
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to call enable()", e);
- }
+ offToBleOn();
if (Flags.fastBindToApp()) {
sendBluetoothServiceUpCallback();
}
@@ -1985,17 +1981,26 @@ class BluetoothManagerService {
bindToAdapter();
} else if (!Flags.fastBindToApp() && mAdapter != null) {
// Enable bluetooth
- try {
- mAdapter.enable(mQuietEnable, mContext.getAttributionSource());
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to call enable()", e);
- }
+ offToBleOn();
}
} finally {
mAdapterLock.writeLock().unlock();
}
}
+ private void offToBleOn() {
+ if (!mState.oneOf(STATE_OFF)) {
+ Log.d(TAG, "offToBleOn: Impossible transition from " + mState);
+ return;
+ }
+ Log.d(TAG, "offToBleOn: Sending request");
+ try {
+ mAdapter.offToBleOn(mQuietEnable, mContext.getAttributionSource());
+ } catch (RemoteException e) {
+ Log.e(TAG, "Unable to call offToBleOn()", e);
+ }
+ }
+
private void handleDisable() {
mAdapterLock.readLock().lock();
try {
diff --git a/service/tests/src/com/android/server/bluetooth/BluetoothManagerServiceTest.java b/service/tests/src/com/android/server/bluetooth/BluetoothManagerServiceTest.java
index c9e53673c8..2e6510aef9 100644
--- a/service/tests/src/com/android/server/bluetooth/BluetoothManagerServiceTest.java
+++ b/service/tests/src/com/android/server/bluetooth/BluetoothManagerServiceTest.java
@@ -275,7 +275,7 @@ public class BluetoothManagerServiceTest {
verify(mManagerCallback).onBluetoothServiceUp(any());
IBluetoothCallback btCallback = captureBluetoothCallback(mAdapterBinder);
- verify(mAdapterBinder).enable(anyBoolean(), any());
+ verify(mAdapterBinder).offToBleOn(anyBoolean(), any());
// AdapterService is sending AdapterState.BLE_TURN_ON that will trigger this callback
// and in parallel it call its `bringUpBle()`