Add working bluetooth support

This commit introduces basic bluetooth support.
If a headset is paired to the phone, audio will be correctly rerouted.
This is still experimental, due to the lack of testing devices.

Refs #41293
diff --git a/src/org/sflphone/utils/MediaManager.java b/src/org/sflphone/utils/MediaManager.java
index 30e2662..25ddef5 100644
--- a/src/org/sflphone/utils/MediaManager.java
+++ b/src/org/sflphone/utils/MediaManager.java
@@ -38,14 +38,17 @@
 import android.media.AudioManager.OnAudioFocusChangeListener;
 import android.os.Handler;
 import android.util.Log;
+import org.sflphone.utils.bluetooth.BluetoothWrapper;
 
-public class MediaManager implements OnAudioFocusChangeListener {
+public class MediaManager implements OnAudioFocusChangeListener, BluetoothWrapper.BluetoothChangeListener {
 
     private static final String TAG = MediaManager.class.getSimpleName();
     private SipService mService;
     private SettingsContentObserver mSettingsContentObserver;
     AudioManager mAudioManager;
     private Ringer ringer;
+    //Bluetooth related
+    private BluetoothWrapper bluetoothWrapper;
 
     public MediaManager(SipService aService) {
         mService = aService;
@@ -56,6 +59,11 @@
     }
 
     public void startService() {
+        if(bluetoothWrapper == null) {
+            bluetoothWrapper = BluetoothWrapper.getInstance(mService);
+            bluetoothWrapper.setBluetoothChangeListener(this);
+            bluetoothWrapper.register();
+        }
         mService.getApplicationContext().getContentResolver()
                 .registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver);
     }
@@ -63,6 +71,11 @@
     public void stopService() {
         Log.i(TAG, "Remove media manager....");
         mService.getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver);
+        if(bluetoothWrapper != null) {
+            bluetoothWrapper.unregister();
+            bluetoothWrapper.setBluetoothChangeListener(null);
+            bluetoothWrapper = null;
+        }
     }
 
     public AudioManager getAudioManager() {
@@ -72,7 +85,10 @@
     public void obtainAudioFocus(boolean requestSpeakerOn) {
         mAudioManager.requestAudioFocus(this, Compatibility.getInCallStream(false), AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
         mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
-        if(requestSpeakerOn && !mAudioManager.isWiredHeadsetOn()){
+        if(bluetoothWrapper != null && bluetoothWrapper.canBluetooth()) {
+            Log.d(TAG, "Try to enable bluetooth");
+            bluetoothWrapper.setBluetoothOn(true);
+        } else if (requestSpeakerOn && !mAudioManager.isWiredHeadsetOn()){
             RouteToSpeaker();
         }
     }
@@ -123,4 +139,11 @@
             ringer.stopRing();
         }
     }
+
+    @Override
+    public void onBluetoothStateChanged(int status) {
+        //setSoftwareVolume();
+        //broadcastMediaChanged();
+    }
+
 }