Merge "FM: Fix the issue FM recording timer does not start"
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index dc054e6..de566ae 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -175,6 +175,7 @@
    private BroadcastReceiver mFmRecordingStatus  = null;
    static final int RECORD_START = 1;
    static final int RECORD_STOP = 0;
+   private Thread mRecordServiceCheckThread = null;
 
    public FMRadioService() {
    }
@@ -304,6 +305,7 @@
                                       Log.d(LOGTAG, "start recording thread");
                                       mCallbacks.onRecordingStarted();
                                   }
+                                  startRecordServiceStatusCheck();
                              } catch (RemoteException e) {
                                   e.printStackTrace();
                              }
@@ -318,6 +320,7 @@
                                   e.printStackTrace();
                              }
                              mSampleStart = 0;
+                             stopRecordServiceStatusCheck();
                         }
                      }
                  }
@@ -810,9 +813,81 @@
        mPlaybackInProgress = false;
    }
 
-   public void startRecording() {
+   private boolean getRecordServiceStatus() {
+       boolean status = false;
+       ActivityManager actvityManager =
+                (ActivityManager)this.getSystemService(this.ACTIVITY_SERVICE);
+       List<RunningAppProcessInfo> procInfos =
+                                    actvityManager.getRunningAppProcesses();
+       for(RunningAppProcessInfo procInfo : procInfos) {
+           if (procInfo.processName.equals("com.codeaurora.fmrecording")) {
+               status = true;
+               break;
+           }
+       }
+       procInfos.clear();
+       return status;
+   }
 
+   private Runnable recordStatusCheckThread = new Runnable() {
+       @Override
+       public void run() {
+          while(!Thread.currentThread().isInterrupted()) {
+               try {
+                     if(!getRecordServiceStatus()) {
+                        Log.d(LOGTAG, "FM Recording Service stopped");
+                        mFmRecordingOn = false;
+                        try {
+                            if ((mServiceInUse) && (mCallbacks != null) ) {
+                                Log.d(LOGTAG, "Callback for stop recording");
+                                mCallbacks.onRecordingStopped();
+                            }
+                        } catch (RemoteException e) {
+                            e.printStackTrace();
+                        }
+                        mSampleStart = 0;
+                        break;
+                     };
+                     Thread.sleep(500);
+                }catch(Exception e) {
+                     Log.d(LOGTAG, "RecordService status check thread interrupted");
+                     break;
+                }
+          }
+       }
+   };
+
+   private void startRecordServiceStatusCheck() {
+       if((mRecordServiceCheckThread == null) ||
+          (mRecordServiceCheckThread.getState() == Thread.State.TERMINATED)) {
+           mRecordServiceCheckThread = new Thread(null,
+                                           recordStatusCheckThread,
+                                           "getRecordServiceStatus");
+       }
+       if((mRecordServiceCheckThread != null) &&
+          (mRecordServiceCheckThread.getState() == Thread.State.NEW)) {
+           mRecordServiceCheckThread.start();
+       }
+   }
+
+   private void stopRecordServiceStatusCheck() {
+       if(mRecordServiceCheckThread != null) {
+          mRecordServiceCheckThread.interrupt();
+       }
+   }
+
+   public void startRecording() {
        Log.d(LOGTAG, "In startRecording of Recorder");
+       if (!getRecordServiceStatus()) {
+           Log.d(LOGTAG, "Recording Service is not in running state");
+           sendRecordServiceIntent(RECORD_START);
+           try {
+               Thread.sleep(200);
+           } catch (Exception ex) {
+               Log.d( LOGTAG, "RunningThread InterruptedException");
+               return;
+           }
+       }
        if ((true == mSingleRecordingInstanceSupported) &&
                                (true == mOverA2DP )) {
             Toast.makeText( this,