Merge "[FM] There is no sound in speaker while playing FM in speaker mode" into lmp-mr1-dev
diff --git a/src/com/android/fmradio/FmService.java b/src/com/android/fmradio/FmService.java
index 6c39d66..e84ad99 100644
--- a/src/com/android/fmradio/FmService.java
+++ b/src/com/android/fmradio/FmService.java
@@ -384,7 +384,21 @@
     }
 
     private synchronized void startRender() {
-        Log.d(TAG, "startRender");
+        Log.d(TAG, "startRender " + AudioSystem.getForceUse(FOR_PROPRIETARY));
+        // Stop old AudioRecord and create a new AudioRecord
+        // when plugging out and then plugging in wired headset.
+        // Otherwise, reading data from old AudioRecord will be blocked.
+        if (AudioSystem.getForceUse(FOR_PROPRIETARY) ==
+                AudioSystem.FORCE_SPEAKER && mIsSpeakerUsed) {
+            if (mAudioRecord != null) {
+                mAudioRecord.stop();
+            }
+            if (mAudioTrack != null) {
+                mAudioTrack.stop();
+            }
+            initAudioRecordSink();
+        }
+
         mIsRender = true;
         synchronized (mRenderLock) {
             mRenderLock.notify();
@@ -467,6 +481,11 @@
                             Log.d(TAG, "EYES ignore " + mCurrentFrame);
                             continue ;
                         }
+                        if (size <= 0) {
+                            Log.e(TAG, "RenderThread read data from AudioRecord "
+                                    + "error size: " + size);
+                            continue;
+                        }
                         byte[] tmpBuf = new byte[size];
                         System.arraycopy(buffer, 0, tmpBuf, 0, size);
                         // write to audio track
@@ -1640,6 +1659,7 @@
             AudioPortConfig sinkConfig = sinks[0];
             AudioPort sourcePort = sourceConfig.port();
             AudioPort sinkPort = sinkConfig.port();
+            Log.d(TAG, "isPatchMixerToEarphone " + sourcePort + " ====> " + sinkPort);
             if (sourcePort instanceof AudioMixPort && sinkPort instanceof AudioDevicePort) {
                 deviceCount++;
                 int type = ((AudioDevicePort) sinkPort).type();