处理了轮拨的逻辑
authorTrillGates <williamtrillgates@gmail.com>
Thu, 21 Oct 2021 13:02:22 +0000 (21:02 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Thu, 21 Oct 2021 13:02:22 +0000 (21:02 +0800)
app/src/main/java/com/ic/sos/SOSPresenter.java

index 525bad7..41e0550 100644 (file)
@@ -7,18 +7,13 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.database.Cursor;
 import android.net.Uri;
-import android.net.wifi.aware.IdentityChangedListener;
-import android.nfc.cardemulation.HostApduService;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.telephony.PhoneNumberUtils;
-import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.util.Log;
 
-import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 
 import com.android.internal.telephony.ITelephony;
@@ -27,8 +22,6 @@ import com.ic.iclooger.ICLogger;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
 import static android.telephony.TelephonyManager.CALL_STATE_IDLE;
 
@@ -70,7 +63,7 @@ public class SOSPresenter {
 
 
     //是否有接听
-    private boolean isActive = false;
+    private boolean hasRemoteAnswer = false;
 
     //通话结束
     public static final int STATE_END = 9;
@@ -96,12 +89,14 @@ public class SOSPresenter {
             switch (state) {
                 case STATE_END:
                     ICLogger.d("通话结束");
+                    checkNextCall();
                     break;
                 case STATE_HAND_UP_ING:
                     ICLogger.d("正在挂断");
                     break;
                 case STATE_TALKING:
                     ICLogger.d("正在通话中...");
+                    hasRemoteAnswer = true;
                     break;
                 case STATE_CALLING:
                     ICLogger.d("正在呼叫");
@@ -118,7 +113,40 @@ public class SOSPresenter {
      * 根据条件进行下一轮拨号
      */
     private void checkNextCall() {
-
+        boolean doCallNext;
+        //是否进行下一个拨号,结合策略和是否有接听
+
+        //已经接听了
+        //stop,continue,loop
+        if ("continue".equals(callWay)) {
+            //播完此轮就好
+            doCallNext = currentCallIndex != phoneNumList.size() - 1;
+        } else if ("loop".equals(callWay)) {
+            //连续拨打完目标轮询组的次数
+            doCallNext = currentLoopGroupTime != loopTime;
+        } else {
+            //stop的case已经接听了,就不再往下拨号了
+            doCallNext = !hasRemoteAnswer;
+        }
+        //当前组是否有循环完毕,如果循环完毕,把下标移到第0个位置
+        if (currentCallIndex == phoneNumList.size() - 1) {
+            currentCallIndex = -1;
+        }
+        ICLogger.d("doCallNext ==> " + doCallNext);
+        //计数叠加
+        currentCallIndex++;
+        ICLogger.d("************************************************");
+        ICLogger.d("|currentCallIndex ==> " + currentCallIndex);
+        ICLogger.d("|currentLoopGroupTime ==> " + currentLoopGroupTime);
+        ICLogger.d("|loopTime ==> " + loopTime);
+        ICLogger.d("|hasRemoteAnswer ==> " + hasRemoteAnswer);
+        ICLogger.d("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
+        //组的叠加会在拨号位置到了列表尾部时增加
+        if (doCallNext) {
+            handler.postDelayed(this::doSosCall, 10000);
+        } else {
+            ICLogger.d("结束界面...");
+        }
     }
 
 
@@ -127,9 +155,11 @@ public class SOSPresenter {
      */
     private void sosTask() {
         boolean hasSim = this.checkHasSim();
+        ICLogger.d("hasSim ==> " + hasSim);
         if (hasSim) {
             listSosContacts();
         }
+        ICLogger.d("phoneNumList.size() ==>  " + phoneNumList.size());
         if (phoneNumList.size() > 0) {
             //可以拨号
             doSosCall();
@@ -191,6 +221,12 @@ public class SOSPresenter {
      * 根据策略去拨号
      */
     private void doSosCall() {
+        ICLogger.d("===========================================");
+        ICLogger.d("currentCallIndex ==> " + currentCallIndex);
+        ICLogger.d("phoneNumList.size() ==> " + phoneNumList.size());
+        ICLogger.d("callDuration ==> " + callDuration);
+        ICLogger.d("currentLoopGroupTime ==> " + currentLoopGroupTime);
+        ICLogger.d("-----------------------------------------------");
         //策略因素有:
         //轮询组的次数(判断在此次通话结束以后)
         //拨号策略(判断在此次通话结束以后,不管是挂断还是超时)