diff options
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()` |