Loading service/src/com/android/server/bluetooth/BluetoothManagerService.java +24 −19 Original line number Original line Diff line number Diff line Loading @@ -955,6 +955,10 @@ class BluetoothManagerService { return appCount; return appCount; } } boolean enableBleFromBinder(String packageName, IBinder token) { return postAndWait(() -> enableBle(packageName, token)); } boolean enableBle(String packageName, IBinder token) { boolean enableBle(String packageName, IBinder token) { Log.i( Log.i( TAG, TAG, Loading Loading @@ -985,7 +989,6 @@ class BluetoothManagerService { return false; return false; } } // TODO(b/262605980): enableBle/disableBle should be on handler thread updateBleAppCount(token, true, packageName); updateBleAppCount(token, true, packageName); if (mState.oneOf( if (mState.oneOf( Loading @@ -998,12 +1001,15 @@ class BluetoothManagerService { return true; return true; } } synchronized (mReceiver) { synchronized (mReceiver) { // waive WRITE_SECURE_SETTINGS permission check sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName, true); sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName, true); } } return true; return true; } } boolean disableBleFromBinder(String packageName, IBinder token) { return postAndWait(() -> disableBle(packageName, token)); } boolean disableBle(String packageName, IBinder token) { boolean disableBle(String packageName, IBinder token) { Log.i( Log.i( TAG, TAG, Loading @@ -1022,7 +1028,6 @@ class BluetoothManagerService { Log.i(TAG, "disableBle: Already disabled"); Log.i(TAG, "disableBle: Already disabled"); return false; return false; } } // TODO(b/262605980): enableBle/disableBle should be on handler thread updateBleAppCount(token, false, packageName); updateBleAppCount(token, false, packageName); if (mState.oneOf(STATE_BLE_ON) && !isBleAppPresent()) { if (mState.oneOf(STATE_BLE_ON) && !isBleAppPresent()) { Loading Loading @@ -1120,6 +1125,10 @@ class BluetoothManagerService { return Unit.INSTANCE; return Unit.INSTANCE; } } boolean enableNoAutoConnectFromBinder(String packageName) { return postAndWait(() -> enableNoAutoConnect(packageName)); } boolean enableNoAutoConnect(String packageName) { boolean enableNoAutoConnect(String packageName) { if (isSatelliteModeOn()) { if (isSatelliteModeOn()) { Log.d(TAG, "enableNoAutoConnect(" + packageName + "): Blocked by satellite mode"); Log.d(TAG, "enableNoAutoConnect(" + packageName + "): Blocked by satellite mode"); Loading @@ -1134,6 +1143,10 @@ class BluetoothManagerService { return true; return true; } } boolean enableFromBinder(String packageName) { return postAndWait(() -> enable(packageName)); } boolean enable(String packageName) { boolean enable(String packageName) { Log.d( Log.d( TAG, TAG, Loading @@ -1150,19 +1163,17 @@ class BluetoothManagerService { synchronized (mReceiver) { synchronized (mReceiver) { mQuietEnableExternal = false; mQuietEnableExternal = false; mEnableExternal = true; mEnableExternal = true; // TODO(b/288450479): Remove clearCallingIdentity when threading is fixed final long callingIdentity = Binder.clearCallingIdentity(); try { AirplaneModeListener.notifyUserToggledBluetooth( AirplaneModeListener.notifyUserToggledBluetooth( mContentResolver, mCurrentUserContext, true); mContentResolver, mCurrentUserContext, true); } finally { Binder.restoreCallingIdentity(callingIdentity); } sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName); sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName); } } return true; return true; } } boolean disableFromBinder(String packageName, boolean persist) { return postAndWait(() -> disable(packageName, persist)); } boolean disable(String packageName, boolean persist) { boolean disable(String packageName, boolean persist) { Log.d( Log.d( TAG, TAG, Loading @@ -1172,14 +1183,8 @@ class BluetoothManagerService { + (" mState=" + mState)); + (" mState=" + mState)); synchronized (mReceiver) { synchronized (mReceiver) { // TODO(b/288450479): Remove clearCallingIdentity when threading is fixed final long callingIdentity = Binder.clearCallingIdentity(); try { AirplaneModeListener.notifyUserToggledBluetooth( AirplaneModeListener.notifyUserToggledBluetooth( mContentResolver, mCurrentUserContext, false); mContentResolver, mCurrentUserContext, false); } finally { Binder.restoreCallingIdentity(callingIdentity); } if (persist) { if (persist) { setBluetoothPersistedState(BLUETOOTH_OFF); setBluetoothPersistedState(BLUETOOTH_OFF); Loading service/src/com/android/server/bluetooth/BluetoothServiceBinder.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -113,7 +113,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.enable(source.getPackageName()); return mBluetoothManagerService.enableFromBinder(source.getPackageName()); } } @Override @Override Loading @@ -138,7 +138,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { throw new SecurityException("No permission to enable Bluetooth quietly"); throw new SecurityException("No permission to enable Bluetooth quietly"); } } return mBluetoothManagerService.enableNoAutoConnect(source.getPackageName()); return mBluetoothManagerService.enableNoAutoConnectFromBinder(source.getPackageName()); } } @Override @Override Loading @@ -163,7 +163,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.disable(source.getPackageName(), persist); return mBluetoothManagerService.disableFromBinder(source.getPackageName(), persist); } } @Override @Override Loading Loading @@ -260,7 +260,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.enableBle(source.getPackageName(), token); return mBluetoothManagerService.enableBleFromBinder(source.getPackageName(), token); } } @Override @Override Loading @@ -283,7 +283,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.disableBle(source.getPackageName(), token); return mBluetoothManagerService.disableBleFromBinder(source.getPackageName(), token); } } @Override @Override Loading service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java +8 −8 Original line number Original line Diff line number Diff line Loading @@ -146,10 +146,10 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.enable(mSource)); checkDisabled(() -> mBinder.enable(mSource)); checkHardDenied(() -> mBinder.enable(mSource), true); checkHardDenied(() -> mBinder.enable(mSource), true); doReturn(true).when(mManagerService).enable(any()); doReturn(true).when(mManagerService).enableFromBinder(any()); checkGranted(() -> mBinder.enable(mSource), true); checkGranted(() -> mBinder.enable(mSource), true); verify(mUserManager).getProfileParent(any()); verify(mUserManager).getProfileParent(any()); verify(mManagerService).enable(eq(TAG)); verify(mManagerService).enableFromBinder(eq(TAG)); verifyMock(); verifyMock(); } } Loading Loading @@ -193,10 +193,10 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.disable(mSource, true)); checkDisabled(() -> mBinder.disable(mSource, true)); checkHardDenied(() -> mBinder.disable(mSource, true), true); checkHardDenied(() -> mBinder.disable(mSource, true), true); doReturn(true).when(mManagerService).disable(any(), anyBoolean()); doReturn(true).when(mManagerService).disableFromBinder(any(), anyBoolean()); checkGranted(() -> mBinder.disable(mSource, true), true); checkGranted(() -> mBinder.disable(mSource, true), true); verify(mUserManager).getProfileParent(any()); verify(mUserManager).getProfileParent(any()); verify(mManagerService).disable(eq(TAG), anyBoolean()); verify(mManagerService).disableFromBinder(eq(TAG), anyBoolean()); verifyMock(); verifyMock(); } } Loading Loading @@ -308,9 +308,9 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.enableBle(mSource, token)); checkDisabled(() -> mBinder.enableBle(mSource, token)); checkHardDenied(() -> mBinder.enableBle(mSource, token), false); checkHardDenied(() -> mBinder.enableBle(mSource, token), false); doReturn(true).when(mManagerService).enableBle(eq(TAG), eq(token)); doReturn(true).when(mManagerService).enableBleFromBinder(eq(TAG), eq(token)); checkGranted(() -> mBinder.enableBle(mSource, token), true); checkGranted(() -> mBinder.enableBle(mSource, token), true); verify(mManagerService).enableBle(eq(TAG), eq(token)); verify(mManagerService).enableBleFromBinder(eq(TAG), eq(token)); verifyMock(); verifyMock(); } } Loading @@ -322,9 +322,9 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.disableBle(mSource, token)); checkDisabled(() -> mBinder.disableBle(mSource, token)); checkHardDenied(() -> mBinder.disableBle(mSource, token), false); checkHardDenied(() -> mBinder.disableBle(mSource, token), false); doReturn(true).when(mManagerService).disableBle(eq(TAG), eq(token)); doReturn(true).when(mManagerService).disableBleFromBinder(eq(TAG), eq(token)); checkGranted(() -> mBinder.disableBle(mSource, token), true); checkGranted(() -> mBinder.disableBle(mSource, token), true); verify(mManagerService).disableBle(eq(TAG), eq(token)); verify(mManagerService).disableBleFromBinder(eq(TAG), eq(token)); verifyMock(); verifyMock(); } } Loading Loading
service/src/com/android/server/bluetooth/BluetoothManagerService.java +24 −19 Original line number Original line Diff line number Diff line Loading @@ -955,6 +955,10 @@ class BluetoothManagerService { return appCount; return appCount; } } boolean enableBleFromBinder(String packageName, IBinder token) { return postAndWait(() -> enableBle(packageName, token)); } boolean enableBle(String packageName, IBinder token) { boolean enableBle(String packageName, IBinder token) { Log.i( Log.i( TAG, TAG, Loading Loading @@ -985,7 +989,6 @@ class BluetoothManagerService { return false; return false; } } // TODO(b/262605980): enableBle/disableBle should be on handler thread updateBleAppCount(token, true, packageName); updateBleAppCount(token, true, packageName); if (mState.oneOf( if (mState.oneOf( Loading @@ -998,12 +1001,15 @@ class BluetoothManagerService { return true; return true; } } synchronized (mReceiver) { synchronized (mReceiver) { // waive WRITE_SECURE_SETTINGS permission check sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName, true); sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName, true); } } return true; return true; } } boolean disableBleFromBinder(String packageName, IBinder token) { return postAndWait(() -> disableBle(packageName, token)); } boolean disableBle(String packageName, IBinder token) { boolean disableBle(String packageName, IBinder token) { Log.i( Log.i( TAG, TAG, Loading @@ -1022,7 +1028,6 @@ class BluetoothManagerService { Log.i(TAG, "disableBle: Already disabled"); Log.i(TAG, "disableBle: Already disabled"); return false; return false; } } // TODO(b/262605980): enableBle/disableBle should be on handler thread updateBleAppCount(token, false, packageName); updateBleAppCount(token, false, packageName); if (mState.oneOf(STATE_BLE_ON) && !isBleAppPresent()) { if (mState.oneOf(STATE_BLE_ON) && !isBleAppPresent()) { Loading Loading @@ -1120,6 +1125,10 @@ class BluetoothManagerService { return Unit.INSTANCE; return Unit.INSTANCE; } } boolean enableNoAutoConnectFromBinder(String packageName) { return postAndWait(() -> enableNoAutoConnect(packageName)); } boolean enableNoAutoConnect(String packageName) { boolean enableNoAutoConnect(String packageName) { if (isSatelliteModeOn()) { if (isSatelliteModeOn()) { Log.d(TAG, "enableNoAutoConnect(" + packageName + "): Blocked by satellite mode"); Log.d(TAG, "enableNoAutoConnect(" + packageName + "): Blocked by satellite mode"); Loading @@ -1134,6 +1143,10 @@ class BluetoothManagerService { return true; return true; } } boolean enableFromBinder(String packageName) { return postAndWait(() -> enable(packageName)); } boolean enable(String packageName) { boolean enable(String packageName) { Log.d( Log.d( TAG, TAG, Loading @@ -1150,19 +1163,17 @@ class BluetoothManagerService { synchronized (mReceiver) { synchronized (mReceiver) { mQuietEnableExternal = false; mQuietEnableExternal = false; mEnableExternal = true; mEnableExternal = true; // TODO(b/288450479): Remove clearCallingIdentity when threading is fixed final long callingIdentity = Binder.clearCallingIdentity(); try { AirplaneModeListener.notifyUserToggledBluetooth( AirplaneModeListener.notifyUserToggledBluetooth( mContentResolver, mCurrentUserContext, true); mContentResolver, mCurrentUserContext, true); } finally { Binder.restoreCallingIdentity(callingIdentity); } sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName); sendEnableMsg(false, ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName); } } return true; return true; } } boolean disableFromBinder(String packageName, boolean persist) { return postAndWait(() -> disable(packageName, persist)); } boolean disable(String packageName, boolean persist) { boolean disable(String packageName, boolean persist) { Log.d( Log.d( TAG, TAG, Loading @@ -1172,14 +1183,8 @@ class BluetoothManagerService { + (" mState=" + mState)); + (" mState=" + mState)); synchronized (mReceiver) { synchronized (mReceiver) { // TODO(b/288450479): Remove clearCallingIdentity when threading is fixed final long callingIdentity = Binder.clearCallingIdentity(); try { AirplaneModeListener.notifyUserToggledBluetooth( AirplaneModeListener.notifyUserToggledBluetooth( mContentResolver, mCurrentUserContext, false); mContentResolver, mCurrentUserContext, false); } finally { Binder.restoreCallingIdentity(callingIdentity); } if (persist) { if (persist) { setBluetoothPersistedState(BLUETOOTH_OFF); setBluetoothPersistedState(BLUETOOTH_OFF); Loading
service/src/com/android/server/bluetooth/BluetoothServiceBinder.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -113,7 +113,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.enable(source.getPackageName()); return mBluetoothManagerService.enableFromBinder(source.getPackageName()); } } @Override @Override Loading @@ -138,7 +138,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { throw new SecurityException("No permission to enable Bluetooth quietly"); throw new SecurityException("No permission to enable Bluetooth quietly"); } } return mBluetoothManagerService.enableNoAutoConnect(source.getPackageName()); return mBluetoothManagerService.enableNoAutoConnectFromBinder(source.getPackageName()); } } @Override @Override Loading @@ -163,7 +163,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.disable(source.getPackageName(), persist); return mBluetoothManagerService.disableFromBinder(source.getPackageName(), persist); } } @Override @Override Loading Loading @@ -260,7 +260,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.enableBle(source.getPackageName(), token); return mBluetoothManagerService.enableBleFromBinder(source.getPackageName(), token); } } @Override @Override Loading @@ -283,7 +283,7 @@ class BluetoothServiceBinder extends IBluetoothManager.Stub { return false; return false; } } return mBluetoothManagerService.disableBle(source.getPackageName(), token); return mBluetoothManagerService.disableBleFromBinder(source.getPackageName(), token); } } @Override @Override Loading
service/tests/src/com/android/server/bluetooth/BluetoothServiceBinderTest.java +8 −8 Original line number Original line Diff line number Diff line Loading @@ -146,10 +146,10 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.enable(mSource)); checkDisabled(() -> mBinder.enable(mSource)); checkHardDenied(() -> mBinder.enable(mSource), true); checkHardDenied(() -> mBinder.enable(mSource), true); doReturn(true).when(mManagerService).enable(any()); doReturn(true).when(mManagerService).enableFromBinder(any()); checkGranted(() -> mBinder.enable(mSource), true); checkGranted(() -> mBinder.enable(mSource), true); verify(mUserManager).getProfileParent(any()); verify(mUserManager).getProfileParent(any()); verify(mManagerService).enable(eq(TAG)); verify(mManagerService).enableFromBinder(eq(TAG)); verifyMock(); verifyMock(); } } Loading Loading @@ -193,10 +193,10 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.disable(mSource, true)); checkDisabled(() -> mBinder.disable(mSource, true)); checkHardDenied(() -> mBinder.disable(mSource, true), true); checkHardDenied(() -> mBinder.disable(mSource, true), true); doReturn(true).when(mManagerService).disable(any(), anyBoolean()); doReturn(true).when(mManagerService).disableFromBinder(any(), anyBoolean()); checkGranted(() -> mBinder.disable(mSource, true), true); checkGranted(() -> mBinder.disable(mSource, true), true); verify(mUserManager).getProfileParent(any()); verify(mUserManager).getProfileParent(any()); verify(mManagerService).disable(eq(TAG), anyBoolean()); verify(mManagerService).disableFromBinder(eq(TAG), anyBoolean()); verifyMock(); verifyMock(); } } Loading Loading @@ -308,9 +308,9 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.enableBle(mSource, token)); checkDisabled(() -> mBinder.enableBle(mSource, token)); checkHardDenied(() -> mBinder.enableBle(mSource, token), false); checkHardDenied(() -> mBinder.enableBle(mSource, token), false); doReturn(true).when(mManagerService).enableBle(eq(TAG), eq(token)); doReturn(true).when(mManagerService).enableBleFromBinder(eq(TAG), eq(token)); checkGranted(() -> mBinder.enableBle(mSource, token), true); checkGranted(() -> mBinder.enableBle(mSource, token), true); verify(mManagerService).enableBle(eq(TAG), eq(token)); verify(mManagerService).enableBleFromBinder(eq(TAG), eq(token)); verifyMock(); verifyMock(); } } Loading @@ -322,9 +322,9 @@ public class BluetoothServiceBinderTest { checkDisabled(() -> mBinder.disableBle(mSource, token)); checkDisabled(() -> mBinder.disableBle(mSource, token)); checkHardDenied(() -> mBinder.disableBle(mSource, token), false); checkHardDenied(() -> mBinder.disableBle(mSource, token), false); doReturn(true).when(mManagerService).disableBle(eq(TAG), eq(token)); doReturn(true).when(mManagerService).disableBleFromBinder(eq(TAG), eq(token)); checkGranted(() -> mBinder.disableBle(mSource, token), true); checkGranted(() -> mBinder.disableBle(mSource, token), true); verify(mManagerService).disableBle(eq(TAG), eq(token)); verify(mManagerService).disableBleFromBinder(eq(TAG), eq(token)); verifyMock(); verifyMock(); } } Loading