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();
     }