Move audio device callback behind dynamic routing
Also moved the (un)register behind the car audio dynamic devices
flags since previous code does not actually need it.
Bug: 317393143
Bug: 333948642
Test: atest com.android.car.audio
Test: Manual start car target without dynamic routing
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:305f63ca40f2471115854261b04f7d042da41e6f)
Merged-In: Ic1c41b3f82d63e0b1d236016bb1f9b3ab791fd8b
Change-Id: Ic1c41b3f82d63e0b1d236016bb1f9b3ab791fd8b
diff --git a/service/src/com/android/car/audio/CarAudioService.java b/service/src/com/android/car/audio/CarAudioService.java
index b0e132f..bbd5948 100644
--- a/service/src/com/android/car/audio/CarAudioService.java
+++ b/service/src/com/android/car/audio/CarAudioService.java
@@ -65,6 +65,7 @@
import android.car.builtin.os.UserManagerHelper;
import android.car.builtin.util.Slogf;
import android.car.builtin.util.TimingsTraceLog;
+import android.car.feature.Flags;
import android.car.media.AudioZonesMirrorStatusCallback;
import android.car.media.CarAudioManager;
import android.car.media.CarAudioPatchHandle;
@@ -421,6 +422,7 @@
setupPowerPolicyListener();
mCarInputService.registerKeyEventListener(mCarKeyEventListener,
KEYCODES_OF_INTEREST);
+ setupAudioDeviceInfoCallback();
} else {
Slogf.i(TAG, "Audio dynamic routing not enabled, run in legacy mode");
setupLegacyVolumeChangedListener();
@@ -429,12 +431,25 @@
mAudioManager.setSupportedSystemUsages(CarAudioContext.getSystemUsages());
mAudioManager.setAudioServerStateCallback(mContext.getMainExecutor(),
mAudioServerStateCallback);
- mAudioManager.registerAudioDeviceCallback(mAudioDeviceInfoCallback, mHandler);
}
restoreMasterMuteState();
}
+ private void setupAudioDeviceInfoCallback() {
+ if (!Flags.carAudioDynamicDevices()) {
+ return;
+ }
+ mAudioManager.registerAudioDeviceCallback(mAudioDeviceInfoCallback, mHandler);
+ }
+
+ private void releaseAudioDeviceInfoCallback() {
+ if (!Flags.carAudioDynamicDevices()) {
+ return;
+ }
+ mAudioManager.unregisterAudioDeviceCallback(mAudioDeviceInfoCallback);
+ }
+
private void setupPowerPolicyListener() {
mCarAudioPowerListener = CarAudioPowerListener.newCarAudioPowerListener(this);
mCarAudioPowerListener.startListeningForPolicyChanges();
@@ -456,6 +471,7 @@
synchronized (mImplLock) {
if (!runInLegacyMode()) {
releaseAudioPoliciesLocked();
+ releaseAudioDeviceInfoCallback();
} else {
AudioManagerHelper.unregisterVolumeAndMuteReceiver(mContext,
mLegacyVolumeChangedHelper);
@@ -486,7 +502,6 @@
}
mAudioManager.clearAudioServerStateCallback();
mCarInputService.unregisterKeyEventListener(mCarKeyEventListener);
- mAudioManager.unregisterAudioDeviceCallback(mAudioDeviceInfoCallback);
}
}
diff --git a/tests/carservice_unit_test/src/com/android/car/audio/CarAudioServiceUnitTest.java b/tests/carservice_unit_test/src/com/android/car/audio/CarAudioServiceUnitTest.java
index 749bf50..cb937e2 100644
--- a/tests/carservice_unit_test/src/com/android/car/audio/CarAudioServiceUnitTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/audio/CarAudioServiceUnitTest.java
@@ -819,6 +819,16 @@
service.init();
verify(mAudioManager).setAudioServerStateCallback(any(), any());
+ verify(mAudioManager, never()).registerAudioDeviceCallback(any(), any());
+ }
+
+ @Test
+ public void init_initializesAudioServiceCallbacks_withDynamicDevices() throws Exception {
+ CarAudioService service = setUpAudioServiceWithDynamicDevices();
+
+ service.init();
+
+ verify(mAudioManager).setAudioServerStateCallback(any(), any());
verify(mAudioManager).registerAudioDeviceCallback(any(), any());
}
@@ -842,11 +852,22 @@
}
@Test
- public void release_initializesAudioServiceCallbacks() throws Exception {
+ public void release_releasesAudioServiceCallbacks() throws Exception {
CarAudioService service = setUpAudioService();
service.release();
+ verify(mAudioManager, never()).unregisterAudioDeviceCallback(any());
+ verify(mAudioManager).clearAudioServerStateCallback();
+ }
+
+ @Test
+ public void release_releasesAudioServiceCallbacks_withDynamicDevices() throws Exception {
+ CarAudioService service = setUpAudioServiceWithDynamicDevices();
+ service.init();
+
+ service.release();
+
verify(mAudioManager).unregisterAudioDeviceCallback(any());
verify(mAudioManager).clearAudioServerStateCallback();
}