Loading android/app/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ cc_library_shared { "server_configurable_flags", ], shared_libs: [ "libPlatformProperties", "libaaudio", "libbinder_ndk", "libcrypto", Loading android/app/src/com/android/bluetooth/a2dp/A2dpService.java +7 −6 Original line number Diff line number Diff line Loading @@ -141,10 +141,13 @@ public class A2dpService extends ProfileService { return BluetoothProperties.isProfileA2dpSourceEnabled().orElse(false); } ActiveDeviceManager getActiveDeviceManager() { return mAdapterService.getActiveDeviceManager(); } @Override protected IProfileServiceBinder initBinder() { return new BluetoothA2dpBinder( this, AdapterService.getAdapterService().getActiveDeviceManager()); return new BluetoothA2dpBinder(this); } @Override Loading Loading @@ -1372,7 +1375,6 @@ public class A2dpService extends ProfileService { static class BluetoothA2dpBinder extends IBluetoothA2dp.Stub implements IProfileServiceBinder { private A2dpService mService; private ActiveDeviceManager mActiveDeviceManager; @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) private A2dpService getService(AttributionSource source) { Loading @@ -1387,9 +1389,8 @@ public class A2dpService extends ProfileService { return mService; } BluetoothA2dpBinder(A2dpService svc, ActiveDeviceManager activeDeviceManager) { BluetoothA2dpBinder(A2dpService svc) { mService = svc; mActiveDeviceManager = activeDeviceManager; } @Override Loading Loading @@ -1479,7 +1480,7 @@ public class A2dpService extends ProfileService { A2dpService service = getService(source); if (service != null) { if (Flags.audioRoutingCentralization()) { ((AudioRoutingManager) mActiveDeviceManager) ((AudioRoutingManager) service.getActiveDeviceManager()) .activateDeviceProfile(device, BluetoothProfile.A2DP, receiver); } else { boolean result; Loading android/app/src/com/android/bluetooth/btservice/ActiveDeviceManager.java +6 −8 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.hearingaid.HearingAidService; import com.android.bluetooth.hfp.HeadsetService; import com.android.bluetooth.le_audio.LeAudioService; Loading Loading @@ -100,7 +100,7 @@ import java.util.Set; * active Bluetooth device. */ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallback { private static final String TAG = "ActiveDeviceManager"; private static final String TAG = ActiveDeviceManager.class.getSimpleName(); private static final boolean DBG = true; @VisibleForTesting static final int A2DP_HFP_SYNC_CONNECTION_TIMEOUT_MS = 5_000; Loading @@ -112,7 +112,6 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac private Handler mHandler = null; private final AudioManager mAudioManager; private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback; private final FeatureFlags mFeatureFlags; private final Object mLock = new Object(); @GuardedBy("mLock") Loading Loading @@ -811,10 +810,9 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac } } ActiveDeviceManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) { ActiveDeviceManager(AdapterService service, ServiceFactory factory) { mAdapterService = service; mDbManager = mAdapterService.getDatabase(); mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null"); mFactory = factory; mAudioManager = service.getSystemService(AudioManager.class); mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback(); Loading Loading @@ -987,7 +985,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac if (device == null) { success = leAudioService.removeActiveDevice(hasFallbackDevice); } else { if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) { if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) { if ((mLeAudioActiveDevice != null) && (Objects.equals( mLeAudioActiveDevice, leAudioService.getLeadDevice(device)))) { Loading @@ -1004,7 +1002,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac return false; } if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) { if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) { mLeAudioActiveDevice = leAudioService.getLeadDevice(device); } else { mLeAudioActiveDevice = device; Loading Loading @@ -1260,7 +1258,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac * @return {@code true} if is broadcasting audio, {@code false} otherwise */ private boolean isBroadcastingAudio() { if (!mFeatureFlags.leaudioBroadcastAudioHandoverPolicies()) { if (!Flags.leaudioBroadcastAudioHandoverPolicies()) { // disable this if feature flag is false return false; } Loading android/app/src/com/android/bluetooth/btservice/AdapterService.java +6 −12 Original line number Diff line number Diff line Loading @@ -125,7 +125,6 @@ import com.android.bluetooth.btservice.bluetoothkeystore.BluetoothKeystoreServic import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.btservice.storage.MetadataDatabase; import com.android.bluetooth.csip.CsipSetCoordinatorService; import com.android.bluetooth.flags.FeatureFlagsImpl; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.gatt.GattService; import com.android.bluetooth.hap.HapClientService; Loading Loading @@ -402,7 +401,6 @@ public class AdapterService extends Service { private volatile boolean mTestModeEnabled = false; private MetricsLogger mMetricsLogger; private FeatureFlagsImpl mFeatureFlags; /** * Register a {@link ProfileService} with AdapterService. Loading Loading @@ -686,9 +684,7 @@ public class AdapterService extends Service { mSdpManager = SdpManager.init(this); mFeatureFlags = new FeatureFlagsImpl(); mDatabaseManager = new DatabaseManager(this, mFeatureFlags); mDatabaseManager = new DatabaseManager(this); mDatabaseManager.start(MetadataDatabase.createDatabase(this)); boolean isAutomotiveDevice = Loading @@ -704,18 +700,16 @@ 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(), mFeatureFlags); mPhonePolicy = new PhonePolicy(this, new ServiceFactory()); mPhonePolicy.start(); } else { Log.i(TAG, "Phone policy disabled"); } if (mFeatureFlags.audioRoutingCentralization()) { mActiveDeviceManager = new AudioRoutingManager(this, new ServiceFactory(), mFeatureFlags); if (Flags.audioRoutingCentralization()) { mActiveDeviceManager = new AudioRoutingManager(this, new ServiceFactory()); } else { mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory(), mFeatureFlags); mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory()); } mActiveDeviceManager.start(); Loading Loading @@ -6192,7 +6186,7 @@ public class AdapterService extends Service { } int getConnectionState(BluetoothDevice device) { if (mFeatureFlags.apiGetConnectionStateUsingIdentityAddress()) { if (Flags.apiGetConnectionStateUsingIdentityAddress()) { final String identityAddress = device.getIdentityAddress(); return (identityAddress == null) ? mNativeInterface.getConnectionState(getBytesFromAddress(device.getAddress())) Loading android/app/src/com/android/bluetooth/btservice/AudioRoutingManager.java +2 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.hearingaid.HearingAidService; import com.android.bluetooth.hfp.HeadsetService; import com.android.bluetooth.le_audio.LeAudioService; Loading Loading @@ -146,8 +145,8 @@ public class AudioRoutingManager extends ActiveDeviceManager { } } AudioRoutingManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) { super(service, factory, featureFlags); AudioRoutingManager(AdapterService service, ServiceFactory factory) { super(service, factory); mAdapterService = service; mDbManager = mAdapterService.getDatabase(); mFactory = factory; Loading Loading
android/app/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ cc_library_shared { "server_configurable_flags", ], shared_libs: [ "libPlatformProperties", "libaaudio", "libbinder_ndk", "libcrypto", Loading
android/app/src/com/android/bluetooth/a2dp/A2dpService.java +7 −6 Original line number Diff line number Diff line Loading @@ -141,10 +141,13 @@ public class A2dpService extends ProfileService { return BluetoothProperties.isProfileA2dpSourceEnabled().orElse(false); } ActiveDeviceManager getActiveDeviceManager() { return mAdapterService.getActiveDeviceManager(); } @Override protected IProfileServiceBinder initBinder() { return new BluetoothA2dpBinder( this, AdapterService.getAdapterService().getActiveDeviceManager()); return new BluetoothA2dpBinder(this); } @Override Loading Loading @@ -1372,7 +1375,6 @@ public class A2dpService extends ProfileService { static class BluetoothA2dpBinder extends IBluetoothA2dp.Stub implements IProfileServiceBinder { private A2dpService mService; private ActiveDeviceManager mActiveDeviceManager; @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) private A2dpService getService(AttributionSource source) { Loading @@ -1387,9 +1389,8 @@ public class A2dpService extends ProfileService { return mService; } BluetoothA2dpBinder(A2dpService svc, ActiveDeviceManager activeDeviceManager) { BluetoothA2dpBinder(A2dpService svc) { mService = svc; mActiveDeviceManager = activeDeviceManager; } @Override Loading Loading @@ -1479,7 +1480,7 @@ public class A2dpService extends ProfileService { A2dpService service = getService(source); if (service != null) { if (Flags.audioRoutingCentralization()) { ((AudioRoutingManager) mActiveDeviceManager) ((AudioRoutingManager) service.getActiveDeviceManager()) .activateDeviceProfile(device, BluetoothProfile.A2DP, receiver); } else { boolean result; Loading
android/app/src/com/android/bluetooth/btservice/ActiveDeviceManager.java +6 −8 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.hearingaid.HearingAidService; import com.android.bluetooth.hfp.HeadsetService; import com.android.bluetooth.le_audio.LeAudioService; Loading Loading @@ -100,7 +100,7 @@ import java.util.Set; * active Bluetooth device. */ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallback { private static final String TAG = "ActiveDeviceManager"; private static final String TAG = ActiveDeviceManager.class.getSimpleName(); private static final boolean DBG = true; @VisibleForTesting static final int A2DP_HFP_SYNC_CONNECTION_TIMEOUT_MS = 5_000; Loading @@ -112,7 +112,6 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac private Handler mHandler = null; private final AudioManager mAudioManager; private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback; private final FeatureFlags mFeatureFlags; private final Object mLock = new Object(); @GuardedBy("mLock") Loading Loading @@ -811,10 +810,9 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac } } ActiveDeviceManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) { ActiveDeviceManager(AdapterService service, ServiceFactory factory) { mAdapterService = service; mDbManager = mAdapterService.getDatabase(); mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null"); mFactory = factory; mAudioManager = service.getSystemService(AudioManager.class); mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback(); Loading Loading @@ -987,7 +985,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac if (device == null) { success = leAudioService.removeActiveDevice(hasFallbackDevice); } else { if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) { if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) { if ((mLeAudioActiveDevice != null) && (Objects.equals( mLeAudioActiveDevice, leAudioService.getLeadDevice(device)))) { Loading @@ -1004,7 +1002,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac return false; } if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) { if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) { mLeAudioActiveDevice = leAudioService.getLeadDevice(device); } else { mLeAudioActiveDevice = device; Loading Loading @@ -1260,7 +1258,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac * @return {@code true} if is broadcasting audio, {@code false} otherwise */ private boolean isBroadcastingAudio() { if (!mFeatureFlags.leaudioBroadcastAudioHandoverPolicies()) { if (!Flags.leaudioBroadcastAudioHandoverPolicies()) { // disable this if feature flag is false return false; } Loading
android/app/src/com/android/bluetooth/btservice/AdapterService.java +6 −12 Original line number Diff line number Diff line Loading @@ -125,7 +125,6 @@ import com.android.bluetooth.btservice.bluetoothkeystore.BluetoothKeystoreServic import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.btservice.storage.MetadataDatabase; import com.android.bluetooth.csip.CsipSetCoordinatorService; import com.android.bluetooth.flags.FeatureFlagsImpl; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.gatt.GattService; import com.android.bluetooth.hap.HapClientService; Loading Loading @@ -402,7 +401,6 @@ public class AdapterService extends Service { private volatile boolean mTestModeEnabled = false; private MetricsLogger mMetricsLogger; private FeatureFlagsImpl mFeatureFlags; /** * Register a {@link ProfileService} with AdapterService. Loading Loading @@ -686,9 +684,7 @@ public class AdapterService extends Service { mSdpManager = SdpManager.init(this); mFeatureFlags = new FeatureFlagsImpl(); mDatabaseManager = new DatabaseManager(this, mFeatureFlags); mDatabaseManager = new DatabaseManager(this); mDatabaseManager.start(MetadataDatabase.createDatabase(this)); boolean isAutomotiveDevice = Loading @@ -704,18 +700,16 @@ 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(), mFeatureFlags); mPhonePolicy = new PhonePolicy(this, new ServiceFactory()); mPhonePolicy.start(); } else { Log.i(TAG, "Phone policy disabled"); } if (mFeatureFlags.audioRoutingCentralization()) { mActiveDeviceManager = new AudioRoutingManager(this, new ServiceFactory(), mFeatureFlags); if (Flags.audioRoutingCentralization()) { mActiveDeviceManager = new AudioRoutingManager(this, new ServiceFactory()); } else { mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory(), mFeatureFlags); mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory()); } mActiveDeviceManager.start(); Loading Loading @@ -6192,7 +6186,7 @@ public class AdapterService extends Service { } int getConnectionState(BluetoothDevice device) { if (mFeatureFlags.apiGetConnectionStateUsingIdentityAddress()) { if (Flags.apiGetConnectionStateUsingIdentityAddress()) { final String identityAddress = device.getIdentityAddress(); return (identityAddress == null) ? mNativeInterface.getConnectionState(getBytesFromAddress(device.getAddress())) Loading
android/app/src/com/android/bluetooth/btservice/AudioRoutingManager.java +2 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.Utils; import com.android.bluetooth.a2dp.A2dpService; import com.android.bluetooth.btservice.storage.DatabaseManager; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.hearingaid.HearingAidService; import com.android.bluetooth.hfp.HeadsetService; import com.android.bluetooth.le_audio.LeAudioService; Loading Loading @@ -146,8 +145,8 @@ public class AudioRoutingManager extends ActiveDeviceManager { } } AudioRoutingManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) { super(service, factory, featureFlags); AudioRoutingManager(AdapterService service, ServiceFactory factory) { super(service, factory); mAdapterService = service; mDbManager = mAdapterService.getDatabase(); mFactory = factory; Loading