Bladeren bron

[WallPadCall]
1. 거동수상자 녹화 중 로비 호출시 WallPadCall 앱이 죽는 문제와 관련하여 방어코드 추가.
2. 월패드 경비 화면일 때 로비 호출시 로비 영상이 보이지 않는 문제 수정.
3. 불필요한 소스코드 삭제
4. APK 버전업 - 2022.08.30.01

jigsjjang 2 jaren geleden
bovenliggende
commit
d4693aae82

BIN
10_Release/WallPadCall.apk


+ 1 - 1
WallPadCall/src/main/AndroidManifest.xml

@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="kr.co.icontrols.wallpadcall"
     android:versionCode="17"
-    android:versionName="2022.08.22.01">
+    android:versionName="2022.08.30.01">
 
     <!--android:sharedUserId="android.uid.system"-->
     <!--<uses-sdk-->

+ 12 - 2
WallPadCall/src/main/java/kr/co/icontrols/callengine/engine/CallController.java

@@ -13,6 +13,7 @@ import android.util.Log;
 
 import com.artncore.WallPadDataMgr.WallpadDeviceSet;
 import com.artncore.WallPadDataMgr.wallpaddbmgr;
+import com.artncore.commons.define;
 import com.artncore.wallpadapi.Sdb_LivingRoomLightAPI;
 import com.artncore.wallpadapi.WallPadAPI;
 import com.artncore.wallpadimap.RetProci;
@@ -668,12 +669,21 @@ public class CallController extends CallManager implements SIPEventListener {
 
                 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);
+
+                        // 녹화가 중지되지 않았다면 다시 한번 중지 br 전송.
+                        LOG("[CallScenarioManager] CALLEVENTTYPE.RECEIVE_CALL - bRecordingStatus[" + Global.getRecordingStatus() + "]");
+                        if (Global.getRecordingStatus()) {
+                            Intent iIntent = new Intent();
+                            iIntent.setAction(Declare.BR.BR_REQUEST_RECORD_STOP);
+                            iIntent.putExtra(define.NOTIBR_KIND, 1);
+                            mContext.sendBroadcast(iIntent);
+                        }
                     }
-                    
+
                     LOG("[CallScenarioManager] ===== SINGLE CALL =====");
                     if (eCallType == CALLTYPE.FRONT) {
                         LOG("[CallScenarioManager] ===== SINGLE CALL 1 =====");

+ 22 - 14
WallPadCall/src/main/java/kr/co/icontrols/callengine/sip/SIPStun.java

@@ -4988,24 +4988,32 @@ public class SIPStun extends Service {
                 startActivity(mIntent);
                 Thread.sleep(500);   // Call app이 실행되는 시간을 기다려준다. (빨리 띄우면 이벤트를 수신 못함)
             } else {
-                LOG_WARN("[runCallMainActivity] WallPadCall is already running!! bRecordingStatus[" + Global.getRecordingStatus() + "]");
+                LOG_WARN("[runCallMainActivity] WallPadCall is already running!! bRecordingStatus[" + Global.getRecordingStatus() + "] FrontStatus[" + MainActivity.mCallController.mCallInfo.getFRONT() + "]");
 
-                // yjyoon.
-                // 거동수상자 녹화 중 세대/로비/경비에서 콜이 왔을 때,
-                // 새로운 콜을 생성하기 전 녹화를 중지시킨다.
-                if (Global.getRecordingStatus()) {
-                    Intent iIntent = new Intent();
+                Intent iIntent = new Intent();
+                if (Global.getRecordingStatus() || (!Global.getRecordingStatus() && MainActivity.mCallController.mCallInfo.getFRONT() == CallManager.CALLSTATUS.RECORDING)) {
+                    // yjyoon.
+                    // 거동수상자 녹화 중 세대/로비/경비에서 콜이 왔을 때, 새로운 콜을 생성하기 전 녹화를 중지시킨다.
+                    // TalkFront > startStrangerRecord 에서 bRecordingStatus = true 로 설정.
+                    // bRecordingStatus = false 이면 아직 녹화 시작 전.
+
+                    LOG_INFO("[runCallMainActivity] Send Br - Declare.BR.BR_REQUEST_RECORD_STOP");
                     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);
+                } else {
+                    // 새로운 콜 정보 전달.
+
+                    LOG_INFO("[runCallMainActivity] Send Br - Declare.BR.BR_REQUEST_NEW_CALL");
+                    iIntent.setAction(Declare.BR.BR_REQUEST_NEW_CALL);
+                }
+                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);

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

@@ -341,10 +341,7 @@ public class MainActivity extends WpadActivity {
 
     public boolean bBlockHomeBTN = false;
     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;
 
     // 앱 실행시 전달받은 이벤트 상태 여부. false 이면 새로운 이벤트가 있음을 의미.
@@ -655,6 +652,8 @@ public class MainActivity extends WpadActivity {
             getCallTimeoutEnable();
             addBrActionFilter("CERES_CALL");
             addBrActionFilter("CERES_CALL_MULTI");
+            addBrActionFilter(Declare.BR.BR_REQUEST_RECORD_STOP);
+            addBrActionFilter(Declare.BR.BR_REQUEST_NEW_CALL);
 
             sendHandlerMsgDelayed(HANDLERMSG.CHECK_RECEIVINGCALL, 0, 0, 500);
 
@@ -742,9 +741,6 @@ public class MainActivity extends WpadActivity {
             MainHandler.removeMessages(HANDLERMSG.RECEIVE_NEW_FRONT_CALL);
         }
 
-        // yjyoon
-        bRecordingStopAndNewCall = false;
-
         super.setFinishTimerDestroy();
         notifyAppFinish();
 //        setCallAppRunning(false);
@@ -903,17 +899,12 @@ public class MainActivity extends WpadActivity {
 
         } else if (intent.getAction().equals(Declare.BR.BR_REQUEST_RECORD_STOP)) {
             // WallPadMain > MainActivity - StrangeRecordBroadcastReceiver - Common.BR_RECORD_STOP
-            // yjyoon.
             // 거동수상자 녹화 중지.
-            showStrangerNoticeText(false, false);
 
-            bRecordingStopAndNewCall = true;
+            showStrangerNoticeText(false, false);
 
-            // 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);
 
@@ -925,9 +916,20 @@ public class MainActivity extends WpadActivity {
                 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));
             }
+        } else if (intent.getAction().equals(Declare.BR.BR_REQUEST_NEW_CALL)) {
+            // SIPStun > receiveNewCall > runCallMainActivity
+            // 앱이 동작 중일 때 새로운 콜의 정보를 저장.
+
+            // 월패드에서 경비아이콘을 선택하여 앱을 동작시킨 상태(IDLE)에서 로비로부터 호출이 왔을 때 월패드 화면에 로비 영상이 보이지 않는 문제
+            // 로비는 ctrlPopupGUI(false) 에서 화면이 보여지는데, 경비 화면은 ctrlPopupGUI(false)를 실행하지 않아 로비 영상이 보이지 않음.
+            // 이웃의 경우 화면 초기화시 ctrlPopupGUI_Resi(false) 을 실행하여 로비 영상이 보임.
+
+            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 에서 사용.
         }
     }
     public String makeSIPID(String strIPAddress) {
@@ -1519,23 +1521,6 @@ public class MainActivity extends WpadActivity {
             return true;
         }
 
-        if((mCurrentScreenId == API_Menu.SubMenuCall.Lobby) && (nScreenId == API_Menu.SubMenuCall.Door))
-        {
-            //startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT());
-            finish();
-            return true;
-        }
-        else if((mCurrentScreenId == API_Menu.SubMenuCall.Door) && (nScreenId == API_Menu.SubMenuCall.Lobby))
-        {
-            if (bRecordingStopAndNewCall) {                
-                setFinishTimerCreate(Common.FINISH_TIME_START_SCREEN);
-            } else {
-                //startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT());
-                finish();
-                return true;
-            }
-        }
-
         // 1. 현재 Layout 삭제
         if (mCurrentScreenId > 0) {
             ScreenLayout.removeAllViews();
@@ -3902,11 +3887,14 @@ public class MainActivity extends WpadActivity {
                             public void run() {
                                 if (mMediaRecorder != null) {
                                     Log.d(TAG, "[mFrontCamOpenCheckHandler] m_mediaRecorder.start");
-                                    if(mFrontCamera != null)
-                                    {
+                                    if(mFrontCamera != null) {
                                         mMediaRecorder.start();
                                         bMediaRecorder = true;
+                                    } else {
+                                        Log.v(TAG, "[mFrontCamOpenCheckHandler] mFrontCamera is null.");
                                     }
+                                } else {
+                                    Log.v(TAG, "[mFrontCamOpenCheckHandler] mMediaRecorder is null.");
                                 }
                             }
                         }, iPlayTime);
@@ -4738,7 +4726,7 @@ public class MainActivity extends WpadActivity {
             if (bDel) ScreenLayout.removeView(FrontVideoSurface);
 
             // yjyoon. WallPadMain으로 녹화 종료 이벤트 발생. Common.bWallPadRecoder 값 변경.
-            Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.STOP_RECORDING");
+            Log.d(TAG, "Send Br - 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);
@@ -5646,7 +5634,6 @@ public class MainActivity extends WpadActivity {
 
                             if (!bIsGeneratedFirstCallEvent && strCallEvent.equals("DETECT_STRANGER")) {
                                 // yjyoon. 첫번째 이벤트가 생성되기 전이고 그 타입이 거동수상자이면 거동수상자 이벤트를 폐기하고 현관콜 이벤트를 진행한다.
-                                Log.v("yjyoon", "###### 1");
                                 bIsFirstCallEvent = false;
                                 
                                 // 첫번째 이벤트 생성전까지 bBlockFrontCall = false 인 상태에서 현관버튼을 연속으로 눌렀을 때 간혹 1개 이상의 현관콜 이벤트가 수신되는 현상이 있어 이전 메지시를 삭제함.
@@ -5655,7 +5642,6 @@ public class MainActivity extends WpadActivity {
                                 // 이벤트 메시지 생성
                                 sendHandlerMsgDelayed(HANDLERMSG.RECEIVE_NEW_FRONT_CALL, 0, 0, 100);
                             } else {
-                                Log.v("yjyoon", "###### 2");
                                 if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
                                     if (mCallController.mCallInfo.getIDLECnt() == mCallController.mCallInfo.IDLECNT_MAX) {
                                         sendHandlerMsg(HANDLERMSG.SET_DINGDONG_VOLUME, 0, 0); // 현관띵똥 볼륨 고정(시스템 볼륨 따라가지 않도록)

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

@@ -33,6 +33,7 @@ public class Declare {
 
         // yjyoon
         public static final String BR_REQUEST_RECORD_STOP       = "kr.co.icontrols.wallpad.BR_RECORDSTOP";
+        public static final String BR_REQUEST_NEW_CALL          = "kr.co.icontrols.wallpad.BR_NEWCALL";
 
         /**
          * Jeff, 2019.12.25

+ 2 - 9
WallPadCall/src/main/java/kr/co/icontrols/wallpadcall/screen/TalkFront.java

@@ -321,9 +321,6 @@ 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);
@@ -447,8 +444,6 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
             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[" + Global.getRecordingStatus() + "]");
                 boolean bSave = true;
                 try {
@@ -461,8 +456,6 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
                     //e.printStackTrace();
                     LogUtil.errorLogInfo("", TAG, e);
                 }
-
-                Log.v("yjyoon", "TalkFront > onBrReceive : BR_RECORDSTOP   END");
             }
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
@@ -2436,8 +2429,8 @@ public class TalkFront extends WpadScreen implements CallEventListener, MainEven
 
     private boolean startStrangerRecord(boolean bRemoteCall) {
         try {
-            Log.d(TAG, "[startStrangerRecord] bRecordingStatus [" + Global.getRecordingStatus() + "], bRemoteCall [" + bRemoteCall + "]");
-            if (! Global.getRecordingStatus()) {
+            Log.d(TAG, "[startStrangerRecord] bRecordingStatus [" + Global.getRecordingStatus() + "], bRemoteCall [" + bRemoteCall + "] FrontStatus[" + MainActivity.mCallController.mCallInfo.getFRONT() + "]");
+            if ((MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.RECORDING) && (Global.getRecordingStatus() == false)) {
                 Global.setRecordingStatus(true);
 
                 if (((MainActivity) mContext).mRecordTimer != null) {