FM: Disable speaker option when A2DP connected

As the audio framework not supported to set the speaker option,
disabling the device switch option when A2DP is connected.

Change-Id: I0e3d61aefa400b8df3338af81b1417338880a786
CRs-Fixed: 892109
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 12693cf..20270e3 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -1858,6 +1858,19 @@
       return(mRtPlusSupported);
    }
 
+   private boolean isA2DPConnected() {
+      boolean A2DPConnected = false;
+      if (mService != null) {
+          try {
+             A2DPConnected = mService.isA2DPConnected();
+          } catch (RemoteException e) {
+             e.printStackTrace();
+         }
+      }
+      Log.d(LOGTAG, "A2DPConnected: " + A2DPConnected);
+      return(A2DPConnected);
+   }
+
    private boolean isSpeakerEnabled() {
       boolean speakerEnabled = false;
       if (mService != null) {
@@ -2047,6 +2060,10 @@
         }else{
             mSpeakerButton.setImageResource(R.drawable.btn_earphone);
         }
+        if (isA2DPConnected())
+            mSpeakerButton.setClickable(false);
+        else
+            mSpeakerButton.setClickable(true);
       }
    }
 
@@ -2225,6 +2242,16 @@
       updateSearchProgress();
    }
 
+   private void A2DPConnectionState(boolean state) {
+      Log.d(LOGTAG, "A2DPConnectionState with:" +state);
+      if (state) {
+          Log.d(LOGTAG, "make speaker button disable");
+          mSpeakerButton.setClickable(false);
+      } else {
+          Log.d(LOGTAG, "make speaker button enable");
+          mSpeakerButton.setClickable(true);
+      }
+   }
    /** Scan related */
    private void initiateSearch(int pty) {
       synchronized (this) {
@@ -3144,6 +3171,10 @@
           Log.d(LOGTAG, "mServiceCallbacks.onSeekNextStation:");
           SeekNextStation();
       }
+      public void onA2DPConnectionstateChanged(boolean state){
+          Log.d(LOGTAG, "mServiceCallbacks.onA2DPConnectionstateChanged :");
+          A2DPConnectionState(state);
+      }
    };
 
     private void registerFMSettingListner() {
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 4918680..6cebdb3 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -557,6 +557,12 @@
                         boolean  bA2dpConnected =
                         mA2dpDeviceState.isConnected(intent);
                         Log.d(LOGTAG, "bA2dpConnected:" +bA2dpConnected);
+                        try {
+                             if ((mServiceInUse) && (mCallbacks != null))
+                                 mCallbacks.onA2DPConnectionstateChanged(bA2dpConnected);
+                        } catch (RemoteException e) {
+                             e.printStackTrace();
+                        }
                         if (!bA2dpConnected) {
                             Log.d(LOGTAG, "A2DP device is dis-connected!");
                             mA2dpDisconnected = true;
@@ -1982,6 +1988,11 @@
       {
          return(mService.get().isSSRInProgress());
       }
+
+      public boolean isA2DPConnected()
+      {
+         return(mService.get().isA2DPConnected());
+      }
    }
    private final IBinder mBinder = new ServiceStub(this);
 
@@ -2220,6 +2231,9 @@
       return mIsSSRInProgress;
    }
 
+   public boolean isA2DPConnected() {
+       return (mA2dpConnected);
+   }
    /* Returns whether FM hardware is ON.
     *
     * @return true if FM was tuned, searching. (at the end of
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index ddefd89..961f04b 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -2716,6 +2716,9 @@
           public void onSeekNextStation() {
              Log.d(LOGTAG, "mServiceCallbacks.onSeekNextStation:");
           }
+          public void onA2DPConnectionstateChanged(boolean state){
+             Log.d(LOGTAG, "mServiceCallbacks.onA2DPConnectionstateChanged :");
+          }
       };
       /* Radio Vars */
      private Handler mHandler = new Handler();
diff --git a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
index 6140f0d..a02c593 100644
--- a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
+++ b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
@@ -74,5 +74,6 @@
     boolean isSleepTimerActive();
     boolean isSSRInProgress();
     boolean isRtPlusSupported();
+    boolean isA2DPConnected();
 }
 
diff --git a/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl b/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
index 6a8deb5..e6fded7 100644
--- a/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
+++ b/fmapp2/src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl
@@ -47,4 +47,5 @@
   void onExtenRadioTextChanged();
   void onRecordingStarted();
   void onSeekNextStation();
+  void onA2DPConnectionstateChanged(boolean state);
 }