From 3e8712f0099cb7200a8d3c5fa64473cd9157b672 Mon Sep 17 00:00:00 2001 From: Alex Dadukin Date: Mon, 6 Mar 2023 13:38:30 +0000 Subject: [PATCH] Add audio policies classes to SystemMediaRoute2Provider To rollout the changes in controllable and safe way new classes are hidden using a feature flag. Bug: b/255495104 Test: manually Change-Id: Iebe3a61cd5a033266225e46e6bcc31cb3b53bb74 --- .../media/BluetoothRouteController.java | 11 +++++++++- .../server/media/DeviceRouteController.java | 20 +++++++++++++++---- .../server/media/MediaFeatureFlagManager.java | 6 +++--- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/media/BluetoothRouteController.java b/services/core/java/com/android/server/media/BluetoothRouteController.java index d4a1184589526..66985e0b25334 100644 --- a/services/core/java/com/android/server/media/BluetoothRouteController.java +++ b/services/core/java/com/android/server/media/BluetoothRouteController.java @@ -53,7 +53,16 @@ import java.util.Objects; return new NoOpBluetoothRouteController(); } - return new LegacyBluetoothRouteController(context, btAdapter, listener); + MediaFeatureFlagManager flagManager = MediaFeatureFlagManager.getInstance(); + boolean isUsingLegacyController = flagManager.getBoolean( + MediaFeatureFlagManager.FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER, + true); + + if (isUsingLegacyController) { + return new LegacyBluetoothRouteController(context, btAdapter, listener); + } else { + return new AudioPoliciesBluetoothRouteController(context, btAdapter, listener); + } } /** diff --git a/services/core/java/com/android/server/media/DeviceRouteController.java b/services/core/java/com/android/server/media/DeviceRouteController.java index d7893eed800b7..3875c84e618b1 100644 --- a/services/core/java/com/android/server/media/DeviceRouteController.java +++ b/services/core/java/com/android/server/media/DeviceRouteController.java @@ -44,10 +44,22 @@ import android.os.ServiceManager; IAudioService audioService = IAudioService.Stub.asInterface( ServiceManager.getService(Context.AUDIO_SERVICE)); - return new LegacyDeviceRouteController(context, - audioManager, - audioService, - onDeviceRouteChangedListener); + MediaFeatureFlagManager flagManager = MediaFeatureFlagManager.getInstance(); + boolean isUsingLegacyController = flagManager.getBoolean( + MediaFeatureFlagManager.FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER, + true); + + if (isUsingLegacyController) { + return new LegacyDeviceRouteController(context, + audioManager, + audioService, + onDeviceRouteChangedListener); + } else { + return new AudioPoliciesDeviceRouteController(context, + audioManager, + audioService, + onDeviceRouteChangedListener); + } } /** diff --git a/services/core/java/com/android/server/media/MediaFeatureFlagManager.java b/services/core/java/com/android/server/media/MediaFeatureFlagManager.java index 723cda0566947..70ee38f8f7b0f 100644 --- a/services/core/java/com/android/server/media/MediaFeatureFlagManager.java +++ b/services/core/java/com/android/server/media/MediaFeatureFlagManager.java @@ -32,7 +32,7 @@ import java.lang.annotation.Target; private static final String NAMESPACE_MEDIA_BETTER_TOGETHER = "media_better_together"; @StringDef(prefix = "FEATURE_", value = { - FEATURE_IS_USING_LEGACY_BLUETOOTH_CONTROLLER + FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER }) @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER }) @Retention(RetentionPolicy.SOURCE) @@ -43,7 +43,7 @@ import java.lang.annotation.Target; * 'Audio Strategies'-aware controller. */ /* package */ static final @MediaFeatureFlag String - FEATURE_IS_USING_LEGACY_BLUETOOTH_CONTROLLER = + FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER = "BluetoothRouteController__enable_legacy_bluetooth_routes_controller"; private static final MediaFeatureFlagManager sInstance = new MediaFeatureFlagManager(); @@ -52,7 +52,7 @@ import java.lang.annotation.Target; // Empty to prevent instantiation. } - /* package */ MediaFeatureFlagManager getInstance() { + /* package */ static MediaFeatureFlagManager getInstance() { return sInstance; }