QCamera2: Add support for longshot in non-zsl mode

- Longshot mode is currently supported only during
  zsl mode. This change will enable longhsot for
  the non-zsl case as well.

Change-Id: I8ce5aae1353949abf59a0022c11246e59bee5ce0
CRs-Fixed: 550676
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index b3d2f91..3f41d1a 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -1108,7 +1108,7 @@
     case QCAMERA_SM_EVT_TAKE_PICTURE:
        {
            if ( m_parent->mParameters.getRecordingHintValue() == false) {
-               if (m_parent->isZSLMode()) {
+               if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
                    m_state = QCAMERA_SM_STATE_PREVIEW_PIC_TAKING;
                    rc = m_parent->takePicture();
                    if (rc != NO_ERROR) {
@@ -1569,6 +1569,10 @@
             rc = m_parent->sendCommand(cmd_payload->cmd,
                                        cmd_payload->arg1,
                                        cmd_payload->arg2);
+            if ( CAMERA_CMD_LONGSHOT_OFF == cmd_payload->cmd ) {
+                // move state to previewing state
+                m_state = QCAMERA_SM_STATE_PREVIEWING;
+            }
             result.status = rc;
             result.request_api = evt;
             result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
@@ -1600,8 +1604,22 @@
             m_parent->signalAPIResult(&result);
         }
         break;
-    case QCAMERA_SM_EVT_PREPARE_SNAPSHOT:
     case QCAMERA_SM_EVT_TAKE_PICTURE:
+        {
+           if ( m_parent->isLongshotEnabled() ) {
+               rc = m_parent->longShot();
+            } else {
+                ALOGE("%s: cannot handle evt(%d) in state(%d)", __func__, evt, m_state);
+                rc = INVALID_OPERATION;
+            }
+
+            result.status = rc;
+            result.request_api = evt;
+            result.result_type = QCAMERA_API_RESULT_TYPE_DEF;
+            m_parent->signalAPIResult(&result);
+        }
+        break;
+    case QCAMERA_SM_EVT_PREPARE_SNAPSHOT:
     case QCAMERA_SM_EVT_START_RECORDING:
     case QCAMERA_SM_EVT_STOP_RECORDING:
     case QCAMERA_SM_EVT_RELEASE_RECORIDNG_FRAME:
@@ -2576,7 +2594,7 @@
         break;
     case QCAMERA_SM_EVT_CANCEL_PICTURE:
         {
-            if (m_parent->isZSLMode()) {
+            if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
                 rc = m_parent->cancelPicture();
             } else {
                 rc = m_parent->cancelLiveSnapshot();
@@ -2594,6 +2612,9 @@
                 // cancel picture first
                 rc = m_parent->cancelPicture();
                 m_parent->stopChannel(QCAMERA_CH_TYPE_ZSL);
+            } else if (m_parent->isLongshotEnabled()) {
+                // just cancel picture
+                rc = m_parent->cancelPicture();
             } else {
                 rc = m_parent->cancelLiveSnapshot();
                 m_parent->stopChannel(QCAMERA_CH_TYPE_PREVIEW);
@@ -2613,6 +2634,10 @@
                 ALOGE("%s: cannot handle evt(%d) in state(%d) in ZSL mode",
                       __func__, evt, m_state);
                 rc = INVALID_OPERATION;
+            } else if (m_parent->isLongshotEnabled()) {
+                ALOGE("%s: cannot handle evt(%d) in state(%d) in Longshot mode",
+                      __func__, evt, m_state);
+                rc = INVALID_OPERATION;
             } else {
                 rc = m_parent->startRecording();
                 if (rc == NO_ERROR) {
@@ -2724,7 +2749,7 @@
         break;
     case QCAMERA_SM_EVT_SNAPSHOT_DONE:
         {
-            if (m_parent->isZSLMode()) {
+            if (m_parent->isZSLMode() || m_parent->isLongshotEnabled()) {
                 rc = m_parent->cancelPicture();
             } else {
                 rc = m_parent->cancelLiveSnapshot();