Browse Source

[WallPadMain]
[WallPadCall]
1. 거동수상자 녹화 중 콜 수신 관련 수정

jigsjjang 2 years ago
parent
commit
52bdf17444

+ 8 - 1
WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallController.java

@@ -666,7 +666,14 @@ public class CallController extends CallManager implements SIPEventListener {
                     if (mSIPInterface != null) mSIPInterface.cancelCallForwardToStun();
                 }
 
-                if (mCallInfo.getIDLECnt() == mCallInfo.IDLECNT_MAX) {
+                if (mCallInfo.getIDLECnt() == mCallInfo.IDLECNT_MAX
+                        || /**yjyoon 거동수상자 녹화중 콜 수신*/(mCallInfo.getIDLECnt() == mCallInfo.IDLECNT_MAX - 1 && mCallInfo.getFRONT() == CALLSTATUS.RECORDING)) {
+                    
+                    //yjyoon. 녹화중 로비/세대/경비로부터의 새로운 콜이면 Front 상태를 IDLE로 변경.
+                    if (eCallType != CALLTYPE.FRONT && mCallInfo.getFRONT() == CALLSTATUS.RECORDING) {
+                        mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE);
+                    }
+                    
                     LOG("[CallScenarioManager] ===== SINGLE CALL =====");
                     if (eCallType == CALLTYPE.FRONT) {
                         LOG("[CallScenarioManager] ===== SINGLE CALL 1 =====");

+ 3 - 0
WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallManager.java

@@ -951,6 +951,7 @@ public class CallManager {
         PSTN_DTMF,   // PSTN DTMF 수신
         DETECT_STRANGER, // 거동수상자 발생
         INITIALIZE_ALLCALL, // 초기화 (서브월패드인 경우에만 사용함)
+        RECORD_STOP,
         NONE;
 
         public static CALLEVENTTYPE getCALLEVENTTYPE(String value) {
@@ -997,6 +998,8 @@ public class CallManager {
                     return DETECT_STRANGER;
                 } else if (value.equals(INITIALIZE_ALLCALL.toString())) {
                     return INITIALIZE_ALLCALL;
+                } else if (value.equals(RECORD_STOP.toString())) {
+                    return RECORD_STOP;
                 } else if (value.equals(NONE.toString())) {
                     return NONE;
                 } else {

+ 18 - 1
WallPadCall/src/main/java/kr/co/icontrols/callengine/sip/SIPStun.java

@@ -4987,7 +4987,24 @@ public class SIPStun extends Service {
                 startActivity(mIntent);
                 Thread.sleep(500);   // Call app이 실행되는 시간을 기다려준다. (빨리 띄우면 이벤트를 수신 못함)
             } else {
-                LOG_WARN("[runCallMainActivity] WallPadCall is already running!!");
+                LOG_WARN("[runCallMainActivity] WallPadCall is already running!! bRecordingStatus[" + MainActivity.bRecordingStatus + "]");
+
+                // yjyoon.
+                // 거동수상자 녹화 중 세대/로비/경비에서 콜이 왔을 때,
+                // 새로운 콜을 생성하기 전 녹화를 중지시킨다.
+                if (MainActivity.bRecordingStatus) {
+                    Intent iIntent = new Intent();
+                    iIntent.setAction(Declare.BR.BR_REQUEST_RECORD_STOP);
+                    iIntent.putExtra(define.NOTIBR_KIND, 2);
+                    iIntent.putExtra(CALLTRIGGER.CALLEVENTTYPE, eEventType.toString());
+                    iIntent.putExtra(CALLTRIGGER.CALLTYPE, eCallType.toString());
+                    if (bCallPopup) {
+                        iIntent.putExtra("CALLPOPUP", "yes");
+                    } else {
+                        iIntent.putExtra("CALLPOPUP", "no");
+                    }
+                    getApplicationContext().sendBroadcast(iIntent);
+                }
             }
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);

+ 68 - 4
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/MainActivity.java

@@ -337,6 +337,7 @@ public class MainActivity extends WpadActivity {
     public boolean bLCDReverse = false;
 
     public static boolean bRecordingStatus = false; // 거동수상자 녹화중 판별 플래그
+    public static boolean bRecordingStopAndNewCall = false; // yjyoon
 
     public static boolean bFrontCallUse, bLobbyCallUse, bGuardCallUse, bResiCallUse, bPSTNCallUse, bCallHistoryUse, bVisitorPicUse;
 
@@ -724,7 +725,8 @@ public class MainActivity extends WpadActivity {
             mCallPathCheckHandler.removeMessages(3);
         }
 
-
+        // yjyoon
+        bRecordingStopAndNewCall = false;
 
         super.setFinishTimerDestroy();
         notifyAppFinish();
@@ -882,6 +884,25 @@ 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)) {
+            // yjyoon.
+            // 거동수상자 녹화 중지.
+            showStrangerNoticeText(false, false);
+
+            bRecordingStopAndNewCall = true;
+
+            int nKind = intent.getIntExtra(define.NOTIBR_KIND, 0);
+
+            if (nKind == 2) {
+                // 로비/세대/경비로부터 콜인 경우.
+                strCallOwner = null;
+                strCallEvent = intent.getStringExtra(CALLTRIGGER.CALLEVENTTYPE);
+                strCallType = intent.getStringExtra(CALLTRIGGER.CALLTYPE);
+                strRemoteInfo = intent.getStringExtra(CALLTRIGGER.REMOTEINFO);
+                strCallPopupInfo = intent.getStringExtra("CALLPOPUP"); // 각 스크린 ctrlAlphaBlending > ctrlPopupGUI_Resi or ctrlPopupGUI 에서 사용.
+
+                Log.v("yjyoon", String.format("strCallEvent[%s] strCallType[%s] strRemoteInfo[%s] strCallPopupInfo[%s]", strCallEvent, strCallType, strRemoteInfo, strCallPopupInfo));
+            }
         }
     }
     public String makeSIPID(String strIPAddress) {
@@ -1481,9 +1502,13 @@ public class MainActivity extends WpadActivity {
         }
         else if((mCurrentScreenId == API_Menu.SubMenuCall.Door) && (nScreenId == API_Menu.SubMenuCall.Lobby))
         {
-            //startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT());
-            finish();
-            return true;
+            if (bRecordingStopAndNewCall) {                
+                setFinishTimerCreate(Common.FINISH_TIME_START_SCREEN);
+            } else {
+                //startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT());
+                finish();
+                return true;
+            }
         }
 
         // 1. 현재 Layout 삭제
@@ -1500,6 +1525,11 @@ public class MainActivity extends WpadActivity {
         try {
             switch (nScreenId) {
                 case API_Menu.SubMenuCall.Door:
+                    if (mRecordTimer == null) {
+                        // yjyoon.
+                        Log.v("yjyoon", "setChangeScreen > API_Menu.SubMenuCall.Door");
+                        checkRecordTimer();
+                    }
                     setTitleText(API_Menu.SubMenuCall.Name_Door);
                     ScreenTalkFront = new TalkFront(this, ScreenLayout, mWallPadAPI);
                     super.setCurrentScreen(ScreenTalkFront);
@@ -4611,6 +4641,17 @@ public class MainActivity extends WpadActivity {
             }
 
             mFrontCamOpenCheckHandler.sendEmptyMessage(2); // camera open check 이후 녹화 시작
+
+            // yjyoon.
+            // 거동수상자 녹화 -> 콜 수신. 녹화 중지 (Common.bWallPadRecoder = false)
+            // -> 통화완료 후 앱 종료 대기 중 거동수상자 감지. 녹화 시작. (이 때 Common.bWallPadRecoder 값이 변경되지 않음) -> 현관 버튼 클릭(동작하지 않음)
+            Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.STOP_RECORDING");
+            Intent newIntent = new Intent(); // 녹화 종료 BR 전송
+            newIntent.setAction(ACNAME_MAIN_NOTI);
+            newIntent.putExtra("KIND", /**Common.BR_MAIN_NOTI.ACCEPT_RECORDING*/1023);
+            newIntent.putExtra("FROMCALL", true);
+            getContext().sendBroadcast(newIntent);
+
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG,re);
             bRecordingStatus = false;
@@ -4633,10 +4674,19 @@ public class MainActivity extends WpadActivity {
                 mMediaRecorder.release();
                 mMediaRecorder = null;
             }
+
 //            finishPopUp(ID.POPUP.POPUP_NOTICE_VIDEORECORD);
             showStrangerNoticeText(false, false);
             showFrontVideo(false);
             if (bDel) ScreenLayout.removeView(FrontVideoSurface);
+
+            // yjyoon. WallPadMain으로 녹화 종료 이벤트 발생. Common.bWallPadRecoder 값 변경.
+            Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.STOP_RECORDING");
+            Intent newIntent = new Intent(); // 녹화 종료 BR 전송
+            newIntent.setAction(ACNAME_MAIN_NOTI);
+            newIntent.putExtra("KIND", /**Common.BR_MAIN_NOTI.STOP_RECORDING*/1027);
+            getContext().sendBroadcast(newIntent);
+
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
         } catch (Exception e) {
@@ -5549,6 +5599,20 @@ public class MainActivity extends WpadActivity {
                         sendHandlerMsgDelayed(HANDLERMSG.PLAY_FRONT_BELL, 0, 0, 200);
                         sendHandlerMsgDelayed(HANDLERMSG.SET_TALK_BTN_ENABLE, 0, 0, 200);
                     }
+                    else if (kind == 9999) {
+                        Log.v("yjyoon", "MainActivity 거동수상자 녹화 중 현관콜");
+
+                        strCallOwner = intent.getStringExtra(CALLTRIGGER.CALLOWNER);
+                        strCallEvent = intent.getStringExtra(CALLTRIGGER.CALLEVENTTYPE);
+                        strCallType = intent.getStringExtra(CALLTRIGGER.CALLTYPE);
+                        strRemoteInfo = intent.getStringExtra(CALLTRIGGER.REMOTEINFO);
+                        strCallPopupInfo = intent.getStringExtra("CALLPOPUP");
+
+                        // yjyoon. FrontStatus 변경 RECORDING -> IDLE
+                        MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE);
+
+                        generateCallEvent();
+                    }
                 }
                 else if (strAction.equals(Declare.BR.BR_SHOW_REMOTEVIEW_TRUE)) {
                     mCallController.onShowRemoteVideo(true);

+ 3 - 0
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/declare/Declare.java

@@ -31,6 +31,9 @@ public class Declare {
         public final static String BR_SHOW_REMOTEVIEW_TRUE = "BR_SHOW_REMOTEVIEW_TRUE";
         public final static String BR_SHOW_REMOTEVIEW_FALSE = "BR_SHOW_REMOTEVIEW_FALSE";
 
+        // yjyoon
+        public static final String BR_REQUEST_RECORD_STOP       = "kr.co.icontrols.wallpad.BR_RECORDSTOP";
+
         /**
          * Jeff, 2019.12.25
          * WallPadMain에서 WallPadCall의 Live 상태를 파악하기 위한 BR

+ 67 - 11
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/screen/TalkFront.java

@@ -2,6 +2,7 @@ package kr.co.icontrols.wallpadcall.screen;
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.graphics.Color;
 import android.os.Handler;
 import android.os.Looper;
@@ -67,6 +68,7 @@ import kr.co.icontrols.wallpadsupport.WpadSound.SND;
 import kr.co.icontrols.wallpadsupport.WpadTextView;
 
 import static kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CMD.CMD_MULTICALL;
+import static kr.co.icontrols.wallpadcall.declare.Declare.BR.ACNAME_MAIN_NOTI;
 
 public class TalkFront extends WpadScreen implements CallEventListener, MainEventListener {
 
@@ -319,6 +321,9 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
             applyInitValues();
             sendHandlerMsg(HANDLERMSG.PROC_ADDCALL, 0, 0);
 
+            // yjyoon. 녹화중지 이벤트 추가
+            addBrActionFilter(Declare.BR.BR_REQUEST_RECORD_STOP);
+
             //ctrlAlphaBlending(false);
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
@@ -344,7 +349,11 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
             getBrightness();
             getVolume();
             bEnableAutoVisitorPic = true;
-            MainActivity.mIOInterface.ctrlPopupGUI(true);
+
+            //yjyoon
+            MainActivity.mIOInterface.ctrlPopupGUI(true); // 원소스
+            //MainActivity.mIOInterface.ctrlPopupGUI(false); // 테스트. 이걸로 하면 로비 영상이 나옴
+
             //MainActivity.mCallController.mVideoJNI.setPreviewInfo_V40(0, 0, 0, 0);
             //MainActivity.mIOInterface.ctrlPopupGUI_Resi(false, false);
         } catch (RuntimeException re) {
@@ -402,7 +411,6 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                 mCheckHandler.removeMessages(1);
             }
 
-
             ((MainActivity) mContext).resetRecordTimer();
             ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); // LED OFF
             ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); // MODE OFF
@@ -436,7 +444,26 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
     protected void onBrReceive(Intent intent) {
         super.onBrReceive(intent);
         try {
-            LOG_INFO("[onBrReceive] intent : " + intent);
+            String strAction = intent.getAction();
+            if (strAction.equals(Declare.BR.BR_REQUEST_RECORD_STOP)) {
+
+                Log.v("yjyoon", "TalkFront > onBrReceive : BR_RECORDSTOP   START");
+
+                LOG_INFO("[onBrReceive] strAction[" + strAction + "] bRecordingStatus[" + MainActivity.bRecordingStatus + "]");
+                boolean bSave = true;
+                try {
+                    int nKind = intent.getIntExtra(define.NOTIBR_KIND, 0);
+                    stopStrangerRecord(false, nKind); // 1: 현관콜 2:로비/세대/경비콜
+                } catch (RuntimeException re) {
+                    LogUtil.errorLogInfo("", TAG, re);
+                } catch (Exception e) {
+                    Log.e(TAG, "[Exception] stopStrangerRecord()");
+                    //e.printStackTrace();
+                    LogUtil.errorLogInfo("", TAG, e);
+                }
+
+                Log.v("yjyoon", "TalkFront > onBrReceive : BR_RECORDSTOP   END");
+            }
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
         } catch (Exception e) {
@@ -1136,7 +1163,7 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                     MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT);
                 }
                 else if (eCallStatus == CALLSTATUS.RECORDING) {
-                    stopStrangerRecord(true);
+                    stopStrangerRecord(true, 0);
                     MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT);
                 }
                 else {
@@ -1753,6 +1780,9 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                 ((MainActivity) mContext).setMenuBTNEnable(false);
                 if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
                     enableTalkBTN(false); // IHN-1010에서 현관 단일콜일 경우 띵똥 소리 출력 중인 경우에는 통화버튼 disable
+                } else {
+                    // yjyoon. 녹화 중 현관콜 처리. 2443 boardtype은 V40_IGW300_NOUGAT.
+                    enableTalkBTN(true);
                 }
                 enableEndBTN(false);
                 sendHandlerMsgDelayed(HANDLERMSG.ENABLE_END_BTN, 0, 0, 3000); // 통화 시작 후 3초 후 종료 버튼 활성화 (다담 김명준선임 요청 19.09.30)
@@ -2410,10 +2440,17 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
         return false;
     }
 
-    private void stopStrangerRecord(boolean bSave) {
+    private void stopStrangerRecord(boolean bSave, int bCallFront) {
         try {
-            LOG("[stopStrangerRecord] bSave [" + bSave + "]");
-            showFrontCam(false, false);
+            LOG("[stopStrangerRecord] bSave [" + bSave + "] bCallFront[" + bCallFront + "]");
+
+            if (bCallFront == 1) {
+                // 현관콜. FrontCam 유지
+                showFrontCam(true, false);
+            } else {
+                showFrontCam(false, false);
+            }
+
             if (MainActivity.bRecordingStatus) {
                 MainActivity.bRecordingStatus = false;
                 ((MainActivity) (this.getContext())).mediaStopRecord(true);
@@ -2424,11 +2461,24 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                     if (tempFile.isFile()) {
                         tempFile.delete();
                     }
-                    finishWallpadCallApp();
+
+                    // yjyoon. 녹화 중 새로운 콜인 경우 앱을 종료하지 않는다.
+                    if (bCallFront == 0) {
+                        finishWallpadCallApp();
+                    }
                 }
                 else {
-                    sendHandlerMsg(HANDLERMSG.SAVE_VISITOR_VIDEO_FINISH_APP, 0, 0);
+                    // yjyoon
+                    // 영상 저장 후 앱 종료. 앱 종료를 막기 위해 arg1 = 1 설정
+                    sendHandlerMsg(HANDLERMSG.SAVE_VISITOR_VIDEO_FINISH_APP, bCallFront == 0 ? 0 : 1, 0);
                 }
+
+                Log.v("yjyoon", "Call TalkFront ###Common.BR_MAIN_NOTI.STOP_RECORDING");
+                // yjyoon. WallPadMain으로 녹화 종료 이벤트 발생. Common.bWallPadRecoder 값 변경.
+                Intent newIntent = new Intent(); // 녹화 종료 BR 전송
+                newIntent.setAction(ACNAME_MAIN_NOTI);
+                newIntent.putExtra("KIND", /**Common.BR_MAIN_NOTI.STOP_RECORDING*/1027);
+                getContext().sendBroadcast(newIntent);
             }
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
@@ -2863,8 +2913,14 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                     break;
 
                 case HANDLERMSG.SAVE_VISITOR_VIDEO_FINISH_APP:
-                    Log.d(TAG, "[TalkFrontHandler] SAVE_VISITOR_VIDEO_FINISH_APP");
-                    ((MainActivity) mContext).saveRecordingFile(true);
+                    Log.d(TAG, "[TalkFrontHandler] SAVE_VISITOR_VIDEO_FINISH_APP arg1[" + msg.arg1 + "]");
+                    if (msg.arg1 == 1) {
+                        // yjyoon. 거동수상자 녹화 중 현관콜이 들어왔을 때 앱 종료하지 않음.
+                        Log.v("yjyoon", "SAVE_VISITOR_VIDEO_FINISH_APP[false]");
+                        ((MainActivity) mContext).saveRecordingFile(false);
+                    } else {
+                        ((MainActivity) mContext).saveRecordingFile(true);
+                    }
                     break;
 
                 case HANDLERMSG.SAVE_VISITOR_VIDEO_NOT_FINISH_APP:

+ 2 - 7
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/screen/TalkLobby.java

@@ -1,6 +1,5 @@
 package kr.co.icontrols.wallpadcall.screen;
 
-import android.app.ActivityManager;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
@@ -17,13 +16,10 @@ import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout.LayoutParams;
 import android.widget.SeekBar;
-import android.widget.Toast;
 
 import com.artncore.wallpadimap.RetProci;
 import com.util.LogUtil;
 
-import java.util.List;
-
 import kr.co.icontrols.callengine.engine.AutoSaveVisitorPicture.startAutoSaveVisitorPicture;
 import kr.co.icontrols.callengine.engine.CallController.CallEventListener;
 import kr.co.icontrols.callengine.engine.CallManager.CALLEVENTTYPE;
@@ -51,7 +47,6 @@ import kr.co.icontrols.wallpadcall.declare.Global.CALLACTION;
 import kr.co.icontrols.wallpadcall.declare.Global.CALLDIRECTION;
 import kr.co.icontrols.wallpadcall.declare.Global.CALLRESULT;
 import kr.co.icontrols.wallpadcall.declare.Global.ConfigValues;
-import kr.co.icontrols.wallpadcall.declare.Global.DOORLOCKTYPE;
 import kr.co.icontrols.wallpadcall.declare.ID;
 import kr.co.icontrols.wallpadcall.imap.Request_check_sip_activation;
 import kr.co.icontrols.wallpadcall.imap.Request_lobby_open;
@@ -64,7 +59,6 @@ import kr.co.icontrols.wallpadsupport.WpadSound.SND;
 import kr.co.icontrols.wallpadsupport.WpadTextView;
 
 import static kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CMD.CMD_MULTICALL;
-import static kr.co.icontrols.wallpadcall.MainActivity.bFFMPEGEnable;
 
 public class TalkLobby extends WpadScreen implements CallEventListener, MainEventListener {
 
@@ -490,8 +484,9 @@ public class TalkLobby extends WpadScreen implements CallEventListener, MainEven
                     }
                 }, 3000);
             }
-            else
+            else {
                 ctrlAlphaBlending(true);
+            }
         }
 
         super.onKeyDown(keyCode, event);

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

@@ -2723,7 +2723,19 @@ public class MainActivity extends WpadActivity {
                             int nEmerState = intent.getIntExtra("EMERGENCY_STATE", -1);
                             //여기서 거동 수상자 녹화 시작 여부 확인
                             Common.bWallPadRecoder = true;
-                            m_CallSubMenuScreen.callStartCallAPK(ID.LINKEDSCREEN.SubCall.Door_Record, nEmerState);
+
+                            boolean bFromCall = intent.getBooleanExtra("FROMCALL", false);
+
+                            if (!bFromCall) {
+                                // yjyoon. 2443에서는 Call 앱에서 녹화 수행
+                                m_CallSubMenuScreen.callStartCallAPK(ID.LINKEDSCREEN.SubCall.Door_Record, nEmerState);
+                            }
+                            break;
+
+                        case Common.BR_MAIN_NOTI.STOP_RECORDING:
+                            // yjyoon. 거동수상자 녹화중지 시 상태값 변경.
+                            Log.v("yjyoon", "Common.BR_MAIN_NOTI.STOP_RECORDING     Common.bWallPadRecoder = false");
+                            Common.bWallPadRecoder = false;
                             break;
 
                         default:

+ 6 - 4
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/declare/Common.java

@@ -255,9 +255,10 @@ public final class Common {
      * WallPadMain에서 WallPadCall의 Live 상태를 파악하기 위한 BR
      * WallPadMain에서 BR_REQUEST_WALLPADCALL_LIVE을 보내면 WallPadCall은 BR_ACK_WALLPADCALL_LIVE로 응답한다.
      */
-    public static final String BR_REQUEST_WALLPADCALL_LIVE       = "kr.co.icontrols.wallpad.BR_REQUEST_WALLPADCALL_LIVE";
-    public static final String BR_ACK_WALLPADCALL_LIVE       = "kr.co.icontrols.wallpad.BR_ACK_WALLPADCALL_LIVE";
-    public static final String PID_WALLPADCALL = "PID_WALLPADCALL";
+    public static final String BR_REQUEST_WALLPADCALL_LIVE  = "kr.co.icontrols.wallpad.BR_REQUEST_WALLPADCALL_LIVE";
+    public static final String BR_ACK_WALLPADCALL_LIVE      = "kr.co.icontrols.wallpad.BR_ACK_WALLPADCALL_LIVE";
+    public static final String PID_WALLPADCALL              = "PID_WALLPADCALL";
+	public static final String BR_REQUEST_RECORD_STOP       = "kr.co.icontrols.wallpad.BR_RECORDSTOP"; // yjyoon. 20220705 거동수상자 녹화 중지
 
     // 거실에너지미터 연동
     public static byte LIVINGEM_CTRL_NORMAL = (byte) 0x00;
@@ -319,7 +320,8 @@ public final class Common {
         public static final int NOTICE_DETECT_STRANGER              = 1022;
         public static final int ACCEPT_RECORDING                    = 1023;
         public static final int ACCEPT_TAKEPIC                      = 1024;
-        public static final int NOTICE_PSTN_RING_END                      = 1025;
+        public static final int NOTICE_PSTN_RING_END                = 1025;
+        public static final int STOP_RECORDING                      = 1027; // yjyoon. 20220705 거동수상자 녹화 중지
 
         public static final String CARD_NUM = "CARD_NUM";
     }

+ 27 - 5
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -2383,15 +2383,18 @@ public class iMapServer extends Service {
                             //녹화 여부 확인 후, 거동 수상자 녹화 중지 BR을 전송
                             // 거동수상자 녹화 중 현관 띵똥 눌리는 경우 BR 전송 (녹화 여부 판별 위해)
                             Log.d(TAG, "[WallPadInterface.BTN_DOOR] Now Stranger Recording!!! bRecordStatus [" + Common.bWallPadRecoder + "]");
-                            Intent iIntent = new Intent();
-                            iIntent.setAction("kr.co.icontrols.wallpad.BR_RECORDSTOP");
-                            getApplicationContext().sendBroadcast(iIntent);
 
                             bBlockFrontCall = true;
                             handlerCallCtrl.removeMessages(CALLCTRLHANDLERMSG.RELEASE_BLOCK_FRONTCALL);
                             handlerCallCtrl.sendEmptyMessageDelayed(CALLCTRLHANDLERMSG.RELEASE_BLOCK_FRONTCALL, 3000);
                             mWallPadAPI.SetDevService_DoorCamUseOnOff(true);
 
+                            // yjyoon. 녹화 중지 브로드캐스트
+                            Intent iIntent = new Intent();
+                            iIntent.setAction(Common.BR_REQUEST_RECORD_STOP);
+                            iIntent.putExtra(define.NOTIBR_KIND, 1);
+                            getApplicationContext().sendBroadcast(iIntent);
+
                             try {
                                 if (ModelType == MODEL_TYPE.IHN_1020GL) {
                                     mIGW200.ctrlDeviceIO(IGW200dAPI.OUTPUT.DOOR_POWER, true);
@@ -2410,8 +2413,27 @@ public class iMapServer extends Service {
                                     mDingDongHandler.sendEmptyMessage(0); // 띵똥
                                 }
 
-                                Log.w(TAG, "[WallPadInterface.BTN_DOOR] New Call App!!!");
-                                runCallMainActivity(CALLOWNER.NONE, CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT, AlarmStatus);
+                                // yjyoon. 현재 Call 앱이 켜진 상태.
+                                // WallPadCall > MainActivity > onCreate() 에서  generateCallEvent()를 통해 콜 이벤트를 생성.
+                                if (false) {
+                                    // yjyoon. 기존 소스코드. 주석처리
+                                    Log.w(TAG, "[WallPadInterface.BTN_DOOR] New Call App!!!");
+                                    runCallMainActivity(CALLOWNER.NONE, CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT, AlarmStatus);
+                                } else {
+                                    // yjyoon. 
+                                    // 현관 콜 이벤트 생성 및 전송. runCallMainActivity(CALLOWNER.NONE, CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT, AlarmStatus) 참조
+                                    sendLCDBacklightStatus(true);
+
+                                    Intent mIntent = new Intent();
+                                    mIntent.setAction(define.NOTIFY_ACNAME);
+                                    mIntent.putExtra(define.NOTIBR_KIND, 9999); // yjyoon. 임시로 9999로 설정.
+                                    mIntent.putExtra(CALLTRIGGER.CALLOWNER, CALLOWNER.NONE.toString());
+                                    mIntent.putExtra(CALLTRIGGER.CALLEVENTTYPE, CALLEVENTTYPE.RECEIVE_CALL.toString());
+                                    mIntent.putExtra(CALLTRIGGER.CALLTYPE, CALLTYPE.FRONT.toString());
+
+                                    getApplicationContext().sendBroadcast(mIntent);
+                                    playFrontBell(CALLOWNER.NONE, CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT);
+                                }
                             } catch (RuntimeException re) {
                                 LogUtil.errorLogInfo("", TAG, re);
                             }