Revert "Register with AudioManager only once for AudioServer state"

This reverts commit ee14de06c4522c4284331c178522ee4d64b278f8

Change-Id: I84f39ace276541df7b5158d5952ebd73824e19c4
diff --git a/src/com/android/bluetooth/hfp/HeadsetService.java b/src/com/android/bluetooth/hfp/HeadsetService.java
index 4488dc8..421ec73 100755
--- a/src/com/android/bluetooth/hfp/HeadsetService.java
+++ b/src/com/android/bluetooth/hfp/HeadsetService.java
@@ -129,6 +129,8 @@
     private boolean mIsTwsPlusEnabled = false;
     private boolean mIsTwsPlusShoEnabled = false;
     private vendorhfservice  mVendorHf;
+    private Context mContext = null;
+    private AudioServerStateCallback mServerStateCallback = new AudioServerStateCallback();
 
     @Override
     public IProfileServiceBinder initBinder() {
@@ -227,6 +229,11 @@
             mVendorHf.enableSwb(isSwbEnabled());
         }
 
+        Log.d(TAG, "registering audio server state callback");
+        mContext = getApplicationContext();
+        Executor exec = mContext.getMainExecutor();
+        mSystemInterface.getAudioManager().setAudioServerStateCallback(exec, mServerStateCallback);
+
         Log.i(TAG, " HeadsetService Started ");
         return true;
     }
@@ -425,6 +432,30 @@
         }
     }
 
+    private class AudioServerStateCallback extends AudioManager.AudioServerStateCallback {
+        @Override
+        public void onAudioServerDown() {
+            Log.d(TAG, "notifying onAudioServerDown");
+        }
+
+        @Override
+        public void onAudioServerUp() {
+            Log.d(TAG, "notifying onAudioServerUp");
+            if (isAudioOn()) {
+                Log.d(TAG, "onAudioServerUp: Audio is On, Notify HeadsetStateMachine");
+                synchronized (mStateMachines) {
+                    for (HeadsetStateMachine stateMachine : mStateMachines.values()) {
+                        if (stateMachine.getAudioState()
+                                == BluetoothHeadset.STATE_AUDIO_CONNECTED) {
+                            stateMachine.onAudioServerUp();
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     private final BroadcastReceiver mHeadsetReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
index ceef453..9c0e9db 100644
--- a/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
+++ b/src/com/android/bluetooth/hfp/HeadsetStateMachine.java
@@ -1592,16 +1592,13 @@
     class MyAudioServerStateCallback extends AudioManager.AudioServerStateCallback {
         @Override
         public void onAudioServerDown() {
-            Log.i(TAG, "onAudioServerDown");
+            logi("onAudioServerDown");
         }
 
         @Override
         public void onAudioServerUp() {
-            Log.i(TAG, "onAudioSeverUp: restoring audio parameters");
-            mSystemInterface.getAudioManager().setBluetoothScoOn(false);
-            mSystemInterface.getAudioManager().setParameters("A2dpSuspended=true");
+            logi("onAudioServerUp restoring audio parameters");
             setAudioParameters();
-            mSystemInterface.getAudioManager().setBluetoothScoOn(true);
         }
     }
 
@@ -1922,6 +1919,14 @@
         return true;
     }
 
+    public void onAudioServerUp() {
+        Log.i(TAG, "onAudioSeverUp: restore audio parameters");
+        mSystemInterface.getAudioManager().setBluetoothScoOn(false);
+        mSystemInterface.getAudioManager().setParameters("A2dpSuspended=true");
+        setAudioParameters();
+        mSystemInterface.getAudioManager().setBluetoothScoOn(true);
+    }
+
     /*
      * Put the AT command, company ID, arguments, and device in an Intent and broadcast it.
      */