Make soundtrigger onResourcesAvailable async

This callback is a synchronous call from the STHAL. To prevent a triple
deadlock between the audioserver, system_server, and the hal, this
call should be async instead of sync.

Going async doesn't impact correctness, since this call is informative
rather than state-mutating, and the HAL is not sequencing on this call.
Receiving this callback delayed will be dropped in cases where it is
not relevant, since the response to the callback is to retry falliable
operations.

Fixes: 360057457
Test: Hotword
Flag: EXEMPT safe
Change-Id: I417effd9abe396429b80941d944e07289986996d
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHw3Compat.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHw3Compat.java
index b1165bb..dfd80a0 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHw3Compat.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerHw3Compat.java
@@ -36,6 +36,8 @@
 import android.os.ServiceSpecificException;
 import android.os.SystemClock;
 
+import com.android.server.FgThread;
+
 public class SoundTriggerHw3Compat implements ISoundTriggerHal {
     private final @NonNull ISoundTriggerHw mDriver;
     private final @NonNull Runnable mRebootRunnable;
@@ -217,7 +219,12 @@
 
         @Override
         public void onResourcesAvailable() {
-            mDelegate.onResourcesAvailable();
+            // This call does not need to be sequenced relative to sessions on the upper levels.
+            // That is, if a new session gets this callback or if a already detached session gets
+            // this callback, because it is delayed, it doesn't matter, since this callback is
+            // purely informative and does not mutate any state -- it merely causes an already legal
+            // operation to be possibly re-attempted.
+            FgThread.getExecutor().execute(mDelegate::onResourcesAvailable);
         }
 
         @Override