Selaa lähdekoodia

[WallPadCall]
1. 거동수상자 감지 후 현관 버튼을 연속으로 눌렀을 WallPadCall 앱에서 현관콜 이벤트가 여러번 수신되는 문제 수정.

jigsjjang 2 vuotta sitten
vanhempi
commit
63103c7549

+ 6 - 0
WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallController.java

@@ -1012,6 +1012,12 @@ public class CallController extends CallManager implements SIPEventListener {
                 }
                 else {
                     LOG("[CallScenarioManager] ========== MULTI CALL ==========");
+                    // 20220717 yjyoon
+                    // call 앱 시작시 실제 이벤트는 500ms 뒤에 생성.
+                    // 거동수상자 감지로 앱이 시작되고 500ms 사이에 현관콜이 발생하면 거동수상자 이벤트 보다 현관콜 이벤트가 먼저 진행.
+                    // 거동수상자 이벤트보다 콜 이벤트의 우선순위가 높기 때문에 거동수상자 이벤트를 폐기한다.
+                    Log.w(TAG, "[CallScenarioManager] ignore DETECT_STRANGER event !! (mCallInfo.getIDLECnt() != mCallInfo.IDLECNT_MAX)");
+                    return;
                 }
 
                 if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) {

+ 37 - 3
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/MainActivity.java

@@ -891,14 +891,22 @@ public class MainActivity extends WpadActivity {
             mCallController.tryMoIPCall(CALLTYPE.GUARD, DataClasses.RemoteIDInfo.strDong, DataClasses.RemoteIDInfo.strHo);
 
         } else if (intent.getAction().equals(Declare.BR.BR_REQUEST_RECORD_STOP)) {
+            // WallPadMain > MainActivity - StrangeRecordBroadcastReceiver - Common.BR_RECORD_STOP
             // yjyoon.
             // 거동수상자 녹화 중지.
             showStrangerNoticeText(false, false);
 
             bRecordingStopAndNewCall = true;
 
-            int nKind = intent.getIntExtra(define.NOTIBR_KIND, 0);
+            // yjyoon.
+            Log.v("yjyoon", "MainActivity > Declare.BR.BR_REQUEST_RECORD_STOP: mediaStopRecord()");
+            mediaStopRecord(true);
+
+            Log.v("yjyoon", "MainActivity > Declare.BR.BR_REQUEST_RECORD_STOP: mFrontCamOpenCheckHandler 2,3 삭제");
+            mFrontCamOpenCheckHandler.removeMessages(2);
+            mFrontCamOpenCheckHandler.removeMessages(3);
 
+            int nKind = intent.getIntExtra(define.NOTIBR_KIND, 0);
             if (nKind == 2) {
                 // 로비/세대/경비로부터 콜인 경우.
                 strCallOwner = null;
@@ -4641,6 +4649,13 @@ public class MainActivity extends WpadActivity {
     public void mediaStartRecord() {
         try {
             Log.d(TAG, "[mediaStartRecord]");
+
+            if (!bRecordingStatus) {
+                Log.d("yjyoon", "[mediaStartRecord] bRecordingStatus == false");
+                Log.d(TAG, "[mediaStartRecord] bRecordingStatus == false");
+                return;
+            }
+
             if (mMediaRecorder != null) {
                 if (bMediaRecorder) {
                     Log.d(TAG, "[mediaStartRecord] mMediaRecorder.stop");
@@ -4649,6 +4664,7 @@ public class MainActivity extends WpadActivity {
                 } else {
                     Log.d(TAG, "[mediaStartRecord] Skip mMediaRecorder.stop");
                 }
+
                 mMediaRecorder.reset();
                 mMediaRecorder.release();
                 mMediaRecorder = null;
@@ -4691,6 +4707,7 @@ public class MainActivity extends WpadActivity {
                 } else {
                     Log.d(TAG, "[mediaStopRecord] Skip mMediaRecorder.stop");
                 }
+
                 mMediaRecorder.reset();
                 mMediaRecorder.release();
                 mMediaRecorder = null;
@@ -5548,6 +5565,11 @@ public class MainActivity extends WpadActivity {
                     int nKind = intent.getIntExtra(define.NOTIBR_KIND, 0);
                     if (nKind == Declare.BR.NOTIFY_ALARM_FIRED) finishWallPadCall();
                 }
+
+                // yjyoon.
+                // 현관 버튼이 눌러졌을 때 driver, 여기서는 SmartKeyRfDoor_Controller 에서 BR을 발생. (Declare.BR.EVENT_DEVICE_CONTROL, 224)
+                // Call 앱이 동작 중일 때 해당 리시버에서 수신. 동작 중인 아니면 iMapServer에서 현관 버튼 이벤트 처리.
+                // (경비 등을 눌러 앱을 띄운 상태) 현관 콜 상태가 idle 이면 현관 콜 시나리오 진행. 아니면 해당 BR 무시.
                 else if (strAction.equals(Declare.BR.EVENT_DEVICE_CONTROL)) {
                     KeyEvent mKeyEvent = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
                     Log.i(this.TAG, "[onReceive] mKeyEvent : " + mKeyEvent + ", mKeyEvent.getKeyCode() : " + mKeyEvent.getKeyCode());
@@ -5559,7 +5581,7 @@ public class MainActivity extends WpadActivity {
 //                        else Log.w(this.TAG, "[onReceive] Front call ignored!!! [" + mCallController.mCallInfo.getFRONT() + "], bBlockFrontCall [" + bBlockFrontCall + "]");
                     }
                     else if (mKeyEvent.getKeyCode() == Declare.BTN.FRONT || mKeyEvent.getKeyCode() == Declare.BTN.FRONT_V40) {
-                        Log.i(this.TAG, "[onReceive] mKeyEvent.getKeyCode() : " + mKeyEvent.getKeyCode());
+                        Log.i(this.TAG, "[onReceive] mKeyEvent.getKeyCode() : " + mKeyEvent.getKeyCode() + " " + (mKeyEvent.getKeyCode() == Declare.BTN.FRONT ? "Declare.BTN.FRONT" : "Declare.BTN.FRONT_V40"));
                         if (!bBlockFrontCall) {
                             if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
                                 if (mCallController.mCallInfo.getIDLECnt() == mCallController.mCallInfo.IDLECNT_MAX) {
@@ -5569,7 +5591,9 @@ public class MainActivity extends WpadActivity {
                                 }
                             }
 
+                            Log.v(this.TAG, "bRecordingStatus[" + bRecordingStatus + "]");
                             if (mCallController.mCallInfo.getFRONT() == CALLSTATUS.IDLE) {
+                                Log.v(this.TAG, "[onReceive] Front call !!! getFRONT() [" + mCallController.mCallInfo.getFRONT() + "]");
                                 setBlockFrontCall();
                                 mCallController.onFrontEvent(CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT);
                             }
@@ -5623,7 +5647,17 @@ public class MainActivity extends WpadActivity {
                         sendHandlerMsgDelayed(HANDLERMSG.SET_TALK_BTN_ENABLE, 0, 0, 200);
                     }
                     else if (kind == 9999) {
-                        Log.v("yjyoon", "MainActivity 거동수상자 녹화 중 현관콜");
+                        Log.v(this.TAG, "Received New call during Recording(9999). bRecodingStatus[" + bRecordingStatus + "]");
+
+                        if (!bRecordingStatus) {
+                            Log.v(this.TAG, "ignore new call!! bRecodingStatus[" + bRecordingStatus + "]");
+                            return;
+                        }
+                        
+                        // yjyoon. 앱 생성 후 500ms 뒤에 생성되는 콜이벤트 메시지와 녹화 관련 mFrontCamOpenCheckHandler 메시지 삭제.
+                        MainHandler.removeMessages(HANDLERMSG.CHECK_RECEIVINGCALL);
+                        mFrontCamOpenCheckHandler.removeMessages(2);
+                        mFrontCamOpenCheckHandler.removeMessages(3);
 
                         strCallOwner = intent.getStringExtra(CALLTRIGGER.CALLOWNER);
                         strCallEvent = intent.getStringExtra(CALLTRIGGER.CALLEVENTTYPE);

+ 1 - 1
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java

@@ -3612,7 +3612,7 @@ public class MainActivity extends WpadActivity {
             // LCD Always ON
             getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 			Intent notiIntent = new Intent();
-			notiIntent.setAction(define.BR_APP_FINISH);						
+			notiIntent.setAction(define.BR_APP_FINISH);
 			getApplicationContext().sendBroadcast(notiIntent);
     	} catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);