Audio routing part 2

- Added WIRED_HEADSET and SPEAKER to AudioModes
- Added WiredHeadsetManager class
- AudioRouter now listens to WiredHeadsetManager and PhoneUtils for
  speakerphone
- AudioRouter maintains state across earpiece,headset,bluetooth,speaker
   - Most code copied from InCallScreen for speaker logic
- CallHandlerService listens to audioRouter for audio states
- Moved Wired headset logic from phoneglobals to wiredheadsetmanager
- Better toString for logging Call objects

Change-Id: Iebc8c83934ce5eff6f1918b0610804fadb163b43
diff --git a/src/com/android/phone/CallHandlerServiceProxy.java b/src/com/android/phone/CallHandlerServiceProxy.java
index 165e693..ad69d80 100644
--- a/src/com/android/phone/CallHandlerServiceProxy.java
+++ b/src/com/android/phone/CallHandlerServiceProxy.java
@@ -48,19 +48,22 @@
             (PhoneGlobals.DBG_LEVEL >= 1) && (SystemProperties.getInt("ro.debuggable", 0) == 1);
 
 
-    private Context mContext;
-    private CallModeler mCallModeler;
-    private ServiceConnection mConnection;
-    private ICallHandlerService mCallHandlerService;
+    private AudioRouter mAudioRouter;
     private CallCommandService mCallCommandService;
+    private CallModeler mCallModeler;
+    private Context mContext;
+    private ICallHandlerService mCallHandlerService;
+    private ServiceConnection mConnection;
 
     public CallHandlerServiceProxy(Context context, CallModeler callModeler,
-            CallCommandService callCommandService) {
+            CallCommandService callCommandService, AudioRouter audioRouter) {
         mContext = context;
         mCallCommandService = callCommandService;
         mCallModeler = callModeler;
+        mAudioRouter = audioRouter;
 
         setupServiceConnection();
+        mAudioRouter.addAudioModeListener(this);
         mCallModeler.addListener(this);
 
         // start the whole process
@@ -108,6 +111,8 @@
 
         if (mCallHandlerService != null) {
             try {
+                if (DBG) Log.d(TAG, "onSupportAudioModeChange");
+
                 mCallHandlerService.onAudioModeChange(newMode);
             } catch (RemoteException e) {
                 Log.e(TAG, "Remote exception handling onAudioModeChange", e);
@@ -115,6 +120,19 @@
         }
     }
 
+    @Override
+    public void onSupportedAudioModeChange(int modeMask) {
+        if (mCallHandlerService != null) {
+            try {
+                if (DBG) Log.d(TAG, "onSupportAudioModeChange: " + AudioMode.toString(modeMask));
+
+                mCallHandlerService.onSupportedAudioModeChange(modeMask);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Remote exception handling onAudioModeChange", e);
+            }
+        }
+    }
+
     /**
      * Sets up the connection with ICallHandlerService
      */