[bugfix][API-1525][call] answer call  sometimes fail

       Affected branch: unknown
       Affected module: unknown
       Is it affected on both ZXIC and MTK: MTK
       Self-test: Yes
       Doc Update: No

Change-Id: I149fdd9cbbff204c6257252889f53850b55758e0
diff --git a/common_src/lib/liblynq-call/lynq_call.cpp b/common_src/lib/liblynq-call/lynq_call.cpp
index 8e80462..8e6943d 100755
--- a/common_src/lib/liblynq-call/lynq_call.cpp
+++ b/common_src/lib/liblynq-call/lynq_call.cpp
@@ -31,6 +31,8 @@
 #define LIBMODEM_AFE "/tmp/libmodem-afe-ctrl"

 #define TELE_DEMO_LOCK "/tmp/tel_demo_single_proc.lock"

 

+#define MAX_RING_INCOMING_INTERVAL 10

+

 using ::android::Parcel;

 

 /**

@@ -85,6 +87,8 @@
 

 static int s_module_call_state =CALL_OFF;

 static int s_call_auto_answer = 0;

+static time_t s_rev_ring_time=0;

+

 

 typedef enum{

     LYNQ_E_VOLUMN_SET_DTMF,

@@ -422,6 +426,10 @@
 #ifdef ECALL_SUPPORT

     int handupIncomingMT=0;

 #endif

+    unsigned long interval;

+    time_t now;

+

+

     pthread_mutex_lock(&s_notice_get_call_list_mutex);

     pthread_cleanup_push(cleanup_call_list_mutex, NULL); // thread cleanup handler

     int tmp_call_id;

@@ -513,6 +521,17 @@
                 n = find_call_id_with_addr(call_list[i].addr);

                 if(n ==INVALID_ID)

                 {

+                    if(s_call_auto_answer==false && call_list[i].call_state==LYNQ_CALL_INCOMING)

+                    {

+                        time(&now);

+                        interval = difftime(now,s_rev_ring_time);   

+                        if(interval>MAX_RING_INCOMING_INTERVAL)

+                        {

+                            LYINFLOG("recv incoming, %d second no ril ring",interval);

+                            continue;

+                        }                        

+                    }                    

+                    

                     n = addAddr(call_list[i].addr,call_list[i].call_id);

                     updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);

                     send_call_state_change(call_list[i].call_id);

@@ -1539,6 +1558,7 @@
         }

         case RIL_UNSOL_CALL_RING: //1018

         {

+            time(&s_rev_ring_time);

             if(s_call_auto_answer==1)

             {

                 lynq_call_answer();