Loading .gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,4 @@ compile_commands.json .vscode/ *.profraw *.iml **/.idea android/app/Android.bp +6 −4 Original line number Diff line number Diff line Loading @@ -55,7 +55,12 @@ java_library { cc_library_shared { name: "libbluetooth_jni", defaults: ["fluoride_defaults"], defaults: [ "fluoride_defaults", "latest_android_hardware_audio_common_ndk_static", "latest_android_hardware_bluetooth_audio_ndk_static", "latest_android_media_audio_common_types_ndk_static", ], srcs: ["jni/**/*.cpp"], version_script: "libbluetooth_jni.map", header_libs: [ Loading @@ -77,16 +82,13 @@ cc_library_shared { // is required to maintain FIPS compliance. stl: "libc++_static", static_libs: [ "android.hardware.audio.common-V2-ndk", "android.hardware.audio.common@5.0", "android.hardware.bluetooth.audio-V3-ndk", "android.hardware.bluetooth.audio@2.0", "android.hardware.bluetooth.audio@2.1", "android.hardware.bluetooth@1.0", "android.hardware.bluetooth@1.1", "android.hardware.common-V2-ndk", "android.hardware.common.fmq-V1-ndk", "android.media.audio.common.types-V2-ndk", "android.system.suspend-V1-ndk", "android.system.suspend.control-V1-ndk", "avrcp-target-service", Loading android/app/src/com/android/bluetooth/btservice/AdapterService.java +4 −2 Original line number Diff line number Diff line Loading @@ -671,7 +671,9 @@ public class AdapterService extends Service { mSdpManager = SdpManager.init(this); mDatabaseManager = new DatabaseManager(this); FeatureFlagsImpl featureFlags = new FeatureFlagsImpl(); mDatabaseManager = new DatabaseManager(this, featureFlags); mDatabaseManager.start(MetadataDatabase.createDatabase(this)); boolean isAutomotiveDevice = Loading @@ -687,7 +689,7 @@ public class AdapterService extends Service { */ if (!isAutomotiveDevice && getResources().getBoolean(R.bool.enable_phone_policy)) { Log.i(TAG, "Phone policy enabled"); mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), new FeatureFlagsImpl()); mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), featureFlags); mPhonePolicy.start(); } else { Log.i(TAG, "Phone policy disabled"); Loading android/app/src/com/android/bluetooth/btservice/PhonePolicy.java +1 −8 Original line number Diff line number Diff line Loading @@ -81,13 +81,6 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback { static final String BYPASS_LE_AUDIO_ALLOWLIST_PROPERTY = "persist.bluetooth.leaudio.bypass_allow_list"; /** flag for multi auto connect */ public static boolean sIsHfpMultiAutoConnectEnabled = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_BLUETOOTH, "com.android.bluetooth.hfp_multi_auto_connect", false); // Timeouts @VisibleForTesting static int sConnectOtherProfilesTimeoutMillis = 6000; // 6s Loading Loading @@ -645,7 +638,7 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback { return; } if (sIsHfpMultiAutoConnectEnabled) { if (mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) { final List<BluetoothDevice> mostRecentlyConnectedHfpDevices = mDatabaseManager.getMostRecentlyActiveHfpDevices(); for (BluetoothDevice hfpDevice : mostRecentlyConnectedHfpDevices) { Loading android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java +8 −12 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ import android.util.Log; import com.android.bluetooth.BluetoothStatsLog; import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.PhonePolicy; import com.android.bluetooth.flags.FeatureFlags; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading @@ -67,7 +67,8 @@ import java.util.stream.Collectors; public class DatabaseManager { private static final String TAG = "BluetoothDatabase"; private AdapterService mAdapterService = null; private final AdapterService mAdapterService; private final FeatureFlags mFeatureFlags; private HandlerThread mHandlerThread = null; private Handler mHandler = null; private final Object mDatabaseLock = new Object(); Loading Loading @@ -112,11 +113,10 @@ public class DatabaseManager { private static final String LEGACY_HEARING_AID_PRIORITY_PREFIX = "bluetooth_hearing_aid_priority_"; /** * Constructor of the DatabaseManager */ public DatabaseManager(AdapterService service) { mAdapterService = service; /** Constructor of the DatabaseManager */ public DatabaseManager(AdapterService service, FeatureFlags featureFlags) { mAdapterService = Objects.requireNonNull(service, "Adapter service cannot be null"); mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null"); mMetadataChangedLog = EvictingQueue.create(METADATA_CHANGED_LOG_MAX_SIZE); } Loading Loading @@ -648,7 +648,7 @@ public class DatabaseManager { if (isA2dpDevice) { resetActiveA2dpDevice(); } if (isHfpDevice && !PhonePolicy.sIsHfpMultiAutoConnectEnabled) { if (isHfpDevice && !mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) { resetActiveHfpDevice(); } Loading Loading @@ -1034,10 +1034,6 @@ public class DatabaseManager { */ public void start(MetadataDatabase database) { Log.d(TAG, "start()"); if (mAdapterService == null) { Log.e(TAG, "stat failed, mAdapterService is null."); return; } if (database == null) { Log.e(TAG, "stat failed, database is null."); Loading Loading
.gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,4 @@ compile_commands.json .vscode/ *.profraw *.iml **/.idea
android/app/Android.bp +6 −4 Original line number Diff line number Diff line Loading @@ -55,7 +55,12 @@ java_library { cc_library_shared { name: "libbluetooth_jni", defaults: ["fluoride_defaults"], defaults: [ "fluoride_defaults", "latest_android_hardware_audio_common_ndk_static", "latest_android_hardware_bluetooth_audio_ndk_static", "latest_android_media_audio_common_types_ndk_static", ], srcs: ["jni/**/*.cpp"], version_script: "libbluetooth_jni.map", header_libs: [ Loading @@ -77,16 +82,13 @@ cc_library_shared { // is required to maintain FIPS compliance. stl: "libc++_static", static_libs: [ "android.hardware.audio.common-V2-ndk", "android.hardware.audio.common@5.0", "android.hardware.bluetooth.audio-V3-ndk", "android.hardware.bluetooth.audio@2.0", "android.hardware.bluetooth.audio@2.1", "android.hardware.bluetooth@1.0", "android.hardware.bluetooth@1.1", "android.hardware.common-V2-ndk", "android.hardware.common.fmq-V1-ndk", "android.media.audio.common.types-V2-ndk", "android.system.suspend-V1-ndk", "android.system.suspend.control-V1-ndk", "avrcp-target-service", Loading
android/app/src/com/android/bluetooth/btservice/AdapterService.java +4 −2 Original line number Diff line number Diff line Loading @@ -671,7 +671,9 @@ public class AdapterService extends Service { mSdpManager = SdpManager.init(this); mDatabaseManager = new DatabaseManager(this); FeatureFlagsImpl featureFlags = new FeatureFlagsImpl(); mDatabaseManager = new DatabaseManager(this, featureFlags); mDatabaseManager.start(MetadataDatabase.createDatabase(this)); boolean isAutomotiveDevice = Loading @@ -687,7 +689,7 @@ public class AdapterService extends Service { */ if (!isAutomotiveDevice && getResources().getBoolean(R.bool.enable_phone_policy)) { Log.i(TAG, "Phone policy enabled"); mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), new FeatureFlagsImpl()); mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), featureFlags); mPhonePolicy.start(); } else { Log.i(TAG, "Phone policy disabled"); Loading
android/app/src/com/android/bluetooth/btservice/PhonePolicy.java +1 −8 Original line number Diff line number Diff line Loading @@ -81,13 +81,6 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback { static final String BYPASS_LE_AUDIO_ALLOWLIST_PROPERTY = "persist.bluetooth.leaudio.bypass_allow_list"; /** flag for multi auto connect */ public static boolean sIsHfpMultiAutoConnectEnabled = DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_BLUETOOTH, "com.android.bluetooth.hfp_multi_auto_connect", false); // Timeouts @VisibleForTesting static int sConnectOtherProfilesTimeoutMillis = 6000; // 6s Loading Loading @@ -645,7 +638,7 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback { return; } if (sIsHfpMultiAutoConnectEnabled) { if (mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) { final List<BluetoothDevice> mostRecentlyConnectedHfpDevices = mDatabaseManager.getMostRecentlyActiveHfpDevices(); for (BluetoothDevice hfpDevice : mostRecentlyConnectedHfpDevices) { Loading
android/app/src/com/android/bluetooth/btservice/storage/DatabaseManager.java +8 −12 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ import android.util.Log; import com.android.bluetooth.BluetoothStatsLog; import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.PhonePolicy; import com.android.bluetooth.flags.FeatureFlags; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading @@ -67,7 +67,8 @@ import java.util.stream.Collectors; public class DatabaseManager { private static final String TAG = "BluetoothDatabase"; private AdapterService mAdapterService = null; private final AdapterService mAdapterService; private final FeatureFlags mFeatureFlags; private HandlerThread mHandlerThread = null; private Handler mHandler = null; private final Object mDatabaseLock = new Object(); Loading Loading @@ -112,11 +113,10 @@ public class DatabaseManager { private static final String LEGACY_HEARING_AID_PRIORITY_PREFIX = "bluetooth_hearing_aid_priority_"; /** * Constructor of the DatabaseManager */ public DatabaseManager(AdapterService service) { mAdapterService = service; /** Constructor of the DatabaseManager */ public DatabaseManager(AdapterService service, FeatureFlags featureFlags) { mAdapterService = Objects.requireNonNull(service, "Adapter service cannot be null"); mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null"); mMetadataChangedLog = EvictingQueue.create(METADATA_CHANGED_LOG_MAX_SIZE); } Loading Loading @@ -648,7 +648,7 @@ public class DatabaseManager { if (isA2dpDevice) { resetActiveA2dpDevice(); } if (isHfpDevice && !PhonePolicy.sIsHfpMultiAutoConnectEnabled) { if (isHfpDevice && !mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) { resetActiveHfpDevice(); } Loading Loading @@ -1034,10 +1034,6 @@ public class DatabaseManager { */ public void start(MetadataDatabase database) { Log.d(TAG, "start()"); if (mAdapterService == null) { Log.e(TAG, "stat failed, mAdapterService is null."); return; } if (database == null) { Log.e(TAG, "stat failed, database is null."); Loading