Merge changes I097335ff,I68ff7bbf,I4515a566 into main * changes: SilenceDeviceManager: Consolidate start DatabaseManager: handler post message cleanup PhonePolicy: nit cleanup
diff --git a/android/app/src/com/android/bluetooth/btservice/AdapterService.java b/android/app/src/com/android/bluetooth/btservice/AdapterService.java index 04a32f1..5813f5c 100644 --- a/android/app/src/com/android/bluetooth/btservice/AdapterService.java +++ b/android/app/src/com/android/bluetooth/btservice/AdapterService.java
@@ -727,8 +727,6 @@ mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory()); mActiveDeviceManager.start(); - mSilenceDeviceManager.start(); - mBtCompanionManager = new CompanionManager(this, new ServiceFactory()); mBluetoothSocketManagerBinder = new BluetoothSocketManagerBinder(this);
diff --git a/android/app/src/com/android/bluetooth/btservice/PhonePolicy.java b/android/app/src/com/android/bluetooth/btservice/PhonePolicy.java index 0486023..0999690 100644 --- a/android/app/src/com/android/bluetooth/btservice/PhonePolicy.java +++ b/android/app/src/com/android/bluetooth/btservice/PhonePolicy.java
@@ -64,6 +64,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Set; // Describes the phone policy // @@ -96,13 +97,25 @@ private final AdapterService mAdapterService; private final ServiceFactory mFactory; private final Handler mHandler; - private final HashSet<BluetoothDevice> mHeadsetRetrySet = new HashSet<>(); - private final HashSet<BluetoothDevice> mA2dpRetrySet = new HashSet<>(); - private final HashSet<BluetoothDevice> mConnectOtherProfilesDeviceSet = new HashSet<>(); + private final Set<BluetoothDevice> mHeadsetRetrySet = new HashSet<>(); + private final Set<BluetoothDevice> mA2dpRetrySet = new HashSet<>(); + private final Set<BluetoothDevice> mConnectOtherProfilesDeviceSet = new HashSet<>(); @VisibleForTesting boolean mAutoConnectProfilesSupported; @VisibleForTesting boolean mLeAudioEnabledByDefault; + PhonePolicy(AdapterService service, Looper looper, ServiceFactory factory) { + mAdapterService = service; + mDatabaseManager = requireNonNull(service.getDatabase()); + mFactory = factory; + mHandler = new Handler(looper); + mAutoConnectProfilesSupported = + SystemProperties.getBoolean(AUTO_CONNECT_PROFILES_PROPERTY, false); + mLeAudioEnabledByDefault = + SystemProperties.getBoolean(LE_AUDIO_CONNECTION_BY_DEFAULT_PROPERTY, true); + mAdapterService.registerBluetoothStateCallback(mHandler::post, this); + } + @Override public void onBluetoothStateChange(int prevState, int newState) { // Only act if the adapter has actually changed state from non-ON to ON. @@ -144,18 +157,6 @@ resetStates(); } - PhonePolicy(AdapterService service, Looper looper, ServiceFactory factory) { - mAdapterService = service; - mDatabaseManager = requireNonNull(service.getDatabase()); - mFactory = factory; - mHandler = new Handler(looper); - mAutoConnectProfilesSupported = - SystemProperties.getBoolean(AUTO_CONNECT_PROFILES_PROPERTY, false); - mLeAudioEnabledByDefault = - SystemProperties.getBoolean(LE_AUDIO_CONNECTION_BY_DEFAULT_PROPERTY, true); - mAdapterService.registerBluetoothStateCallback(mHandler::post, this); - } - boolean isLeAudioOnlyGroup(BluetoothDevice device) { String log = "isLeAudioOnlyGroup(" + device + "): "; if (!Flags.leaudioAllowLeaudioOnlyDevices()) {
diff --git a/android/app/src/com/android/bluetooth/btservice/SilenceDeviceManager.java b/android/app/src/com/android/bluetooth/btservice/SilenceDeviceManager.java index 3e12b5f..b250e2f 100644 --- a/android/app/src/com/android/bluetooth/btservice/SilenceDeviceManager.java +++ b/android/app/src/com/android/bluetooth/btservice/SilenceDeviceManager.java
@@ -54,8 +54,7 @@ private final AdapterService mAdapterService; private final ServiceFactory mFactory; - private Handler mHandler = null; - private Looper mLooper = null; + private final Handler mHandler; private final Map<BluetoothDevice, Boolean> mSilenceDevices = new HashMap<>(); private final List<BluetoothDevice> mA2dpConnectedDevices = new ArrayList<>(); @@ -113,6 +112,7 @@ } class SilenceDeviceManagerHandler extends Handler { + SilenceDeviceManagerHandler(Looper looper) { super(looper); } @@ -197,12 +197,7 @@ SilenceDeviceManager(AdapterService service, ServiceFactory factory, Looper looper) { mAdapterService = service; mFactory = factory; - mLooper = looper; - } - - void start() { - Log.v(TAG, "start()"); - mHandler = new SilenceDeviceManagerHandler(mLooper); + mHandler = new SilenceDeviceManagerHandler(looper); } void cleanup() { @@ -212,18 +207,13 @@ @VisibleForTesting boolean setSilenceMode(BluetoothDevice device, boolean silence) { - if (mHandler == null) { - Log.e(TAG, "setSilenceMode() mHandler is null!"); - return false; - } Log.d(TAG, "setSilenceMode: " + device + ", " + silence); - Message message = - mHandler.obtainMessage( + mHandler.obtainMessage( MSG_SILENCE_DEVICE_STATE_CHANGED, silence ? ENABLE_SILENCE : DISABLE_SILENCE, 0, - device); - mHandler.sendMessage(message); + device) + .sendToTarget(); return true; } @@ -252,10 +242,10 @@ headsetService.setSilenceMode(device, state); } Log.i(TAG, "Silence mode change " + device + ": " + oldState + " -> " + state); - broadcastSilenceStateChange(device, state); + broadcastSilenceStateChange(device); } - void broadcastSilenceStateChange(BluetoothDevice device, boolean state) { + private void broadcastSilenceStateChange(BluetoothDevice device) { Intent intent = new Intent(BluetoothDevice.ACTION_SILENCE_MODE_CHANGED); intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); mAdapterService.sendBroadcastAsUser( @@ -265,7 +255,6 @@ Utils.getTempBroadcastOptions().toBundle()); } - @VisibleForTesting boolean getSilenceMode(BluetoothDevice device) { boolean state = false; if (mSilenceDevices.containsKey(device)) { @@ -274,7 +263,7 @@ return state; } - void addConnectedDevice(BluetoothDevice device, int profile) { + private void addConnectedDevice(BluetoothDevice device, int profile) { Log.d( TAG, "addConnectedDevice: " @@ -295,7 +284,7 @@ } } - void removeConnectedDevice(BluetoothDevice device, int profile) { + private void removeConnectedDevice(BluetoothDevice device, int profile) { Log.d( TAG, "removeConnectedDevice: " @@ -316,7 +305,7 @@ } } - boolean isBluetoothAudioConnected(BluetoothDevice device) { + private boolean isBluetoothAudioConnected(BluetoothDevice device) { return (mA2dpConnectedDevices.contains(device) || mHfpConnectedDevices.contains(device)); }
diff --git a/android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java b/android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java index ad52d2e..ca0d8ac 100644 --- a/android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java +++ b/android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java
@@ -1183,8 +1183,7 @@ /** Clear all persistence data in database */ public void factoryReset() { Log.w(TAG, "factoryReset"); - Message message = mHandler.obtainMessage(MSG_CLEAR_DATABASE); - mHandler.sendMessage(message); + mHandler.sendEmptyMessage(MSG_CLEAR_DATABASE); } /** Close and de-init the DatabaseManager */ @@ -1459,8 +1458,7 @@ private void loadDatabase() { Log.d(TAG, "Load Database"); - Message message = mHandler.obtainMessage(MSG_LOAD_DATABASE); - mHandler.sendMessage(message); + mHandler.sendEmptyMessage(MSG_LOAD_DATABASE); try { // Lock the thread until handler thread finish loading database. mSemaphore.tryAcquire(LOAD_DATABASE_TIMEOUT_MS, TimeUnit.MILLISECONDS); @@ -1475,9 +1473,7 @@ return; } Log.d(TAG, "updateDatabase " + data.getAnonymizedAddress()); - Message message = mHandler.obtainMessage(MSG_UPDATE_DATABASE); - message.obj = data; - mHandler.sendMessage(message); + mHandler.obtainMessage(MSG_UPDATE_DATABASE, data).sendToTarget(); } @VisibleForTesting @@ -1488,9 +1484,7 @@ return; } logMetadataChange(data, "Metadata deleted"); - Message message = mHandler.obtainMessage(MSG_DELETE_DATABASE); - message.obj = data.getAddress(); - mHandler.sendMessage(message); + mHandler.obtainMessage(MSG_DELETE_DATABASE, data.getAddress()).sendToTarget(); } private void logManufacturerInfo(BluetoothDevice device, int key, byte[] bytesValue) {
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java index 906436c..2818862 100644 --- a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java +++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
@@ -119,8 +119,6 @@ doReturn(BluetoothAdapter.STATE_ON).when(mAdapterService).getState(); doReturn(MAX_CONNECTED_AUDIO_DEVICES).when(mAdapterService).getMaxConnectedAudioDevices(); doReturn(mDatabaseManager).when(mAdapterService).getDatabase(); - doReturn(mLooper.getLooper()).when(mAdapterService).getMainLooper(); - // Setup the mocked factory to return mocked services doReturn(mHeadsetService).when(mServiceFactory).getHeadsetService(); doReturn(mA2dpService).when(mServiceFactory).getA2dpService();
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java index 2a49540..75e3eac 100644 --- a/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java +++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/SilenceDeviceManagerTest.java
@@ -76,7 +76,6 @@ mHandlerThread.start(); mLooper = mHandlerThread.getLooper(); mSilenceDeviceManager = new SilenceDeviceManager(mAdapterService, mServiceFactory, mLooper); - mSilenceDeviceManager.start(); } @After