|
@@ -347,6 +347,11 @@ public class MainActivity extends WpadActivity {
|
|
|
|
|
|
public static boolean bFrontCallUse, bLobbyCallUse, bGuardCallUse, bResiCallUse, bPSTNCallUse, bCallHistoryUse, bVisitorPicUse;
|
|
|
|
|
|
+ // 앱 실행시 전달받은 이벤트 상태 여부. false 이면 새로운 이벤트가 있음을 의미.
|
|
|
+ public boolean bIsFirstCallEvent = true;
|
|
|
+ // 앱 실행 후 첫번째 이벤트 생성 여부. false 이면 아직 첫번째 이벤트를 생성하지 않음을 의미.
|
|
|
+ public boolean bIsGeneratedFirstCallEvent = false;
|
|
|
+
|
|
|
/* =================================================================================================
|
|
|
* [ Activity Life Cycle ] region
|
|
|
================================================================================================ */
|
|
@@ -731,6 +736,10 @@ public class MainActivity extends WpadActivity {
|
|
|
mCallPathCheckHandler.removeMessages(3);
|
|
|
}
|
|
|
|
|
|
+ if (MainHandler != null) {
|
|
|
+ MainHandler.removeMessages(HANDLERMSG.RECEIVE_NEW_FRONT_CALL);
|
|
|
+ }
|
|
|
+
|
|
|
// yjyoon
|
|
|
bRecordingStopAndNewCall = false;
|
|
|
|
|
@@ -3985,6 +3994,11 @@ public class MainActivity extends WpadActivity {
|
|
|
Log.d(TAG, "[mWallPadApiCheckHandler.handleMessage] Handler finish!! mTempCurrentScreenId [" + mTempCurrentScreenId + "]");
|
|
|
if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTKEY_EXTERNAL || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) {
|
|
|
smartKeyRfDoorAPI = mWallPadAPI.Get_SmartKeyRfDoorController();
|
|
|
+ if (smartKeyRfDoorAPI != null) {
|
|
|
+ Log.d(TAG, "[mWallPadApiCheckHandler] get smartKeyRfDoorAPI.");
|
|
|
+ } else {
|
|
|
+ Log.w(TAG, "[mWallPadApiCheckHandler] smartKeyRfDoorAPI is null !!");
|
|
|
+ }
|
|
|
}
|
|
|
boolean result = setChangeScreen(mTempCurrentScreenId, false);
|
|
|
if (!result) {
|
|
@@ -5119,6 +5133,7 @@ public class MainActivity extends WpadActivity {
|
|
|
public final static int REFRESH_HOMEICON = 997;
|
|
|
public final static int FINISH_WALLPADCALL = 998;
|
|
|
public final static int FINISH_ACTIVITY = 999;
|
|
|
+ public final static int RECEIVE_NEW_FRONT_CALL = 1000;
|
|
|
}
|
|
|
|
|
|
int nBrightness = 0;
|
|
@@ -5131,7 +5146,16 @@ public class MainActivity extends WpadActivity {
|
|
|
break;
|
|
|
|
|
|
case HANDLERMSG.CHECK_RECEIVINGCALL:
|
|
|
- generateCallEvent();
|
|
|
+ LOG("[MainHandler] HANDLERMSG.CHECK_RECEIVINGCALL");
|
|
|
+ if (bIsFirstCallEvent) {
|
|
|
+ // 앱 시작시 전달받은 첫번재 이벤트를 생성.
|
|
|
+ LOG("[MainHandler] HANDLERMSG.CHECK_RECEIVINGCALL(aftter 500ms): Create the first call event.");
|
|
|
+ generateCallEvent();
|
|
|
+ } else {
|
|
|
+ LOG("[MainHandler] HANDLERMSG.CHECK_RECEIVINGCALL(aftter 500ms): Drop the first call event.");
|
|
|
+ }
|
|
|
+ bIsFirstCallEvent = false;
|
|
|
+ bIsGeneratedFirstCallEvent = true;
|
|
|
break;
|
|
|
|
|
|
case HANDLERMSG.REMOVE_VIDEO_COVER:
|
|
@@ -5383,6 +5407,32 @@ public class MainActivity extends WpadActivity {
|
|
|
else Log.d(TAG, "[MainHandler] mIOInterface is null!! -> IGW300API.TEL_PATH.OFF");
|
|
|
break;
|
|
|
|
|
|
+ // yjyoon. MainExtraEventReceiver 에서 수신된 새로운 현관콜 처리
|
|
|
+ case HANDLERMSG.RECEIVE_NEW_FRONT_CALL:
|
|
|
+ if (bIsGeneratedFirstCallEvent) {
|
|
|
+ if (mCallController == null) return;
|
|
|
+
|
|
|
+ Log.v(TAG, "HANDLERMSG.RECEIVE_NEW_FRONT_CALL");
|
|
|
+ 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); // 현관띵똥 볼륨 고정(시스템 볼륨 따라가지 않도록)
|
|
|
+ sendHandlerMsg(HANDLERMSG.SETTALKPATH_DOORMUSIC, 0, 0);
|
|
|
+ mCallPathCheckHandler.sendEmptyMessage(0); // 통화앱이 실행되어 있으나 통화상태가 아닌 경우에도 띵똥 소리 나야함 (메인앱에서 현관 호출 BR 수신이 불가하므로 통화앱에서 처리)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mCallController.mCallInfo.getFRONT() == CALLSTATUS.IDLE) {
|
|
|
+ setBlockFrontCall();
|
|
|
+ mCallController.onFrontEvent(CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Log.w(TAG, "[onReceive] Front call ignored!!! getFRONT() [" + mCallController.mCallInfo.getFRONT() + "]");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sendHandlerMsgDelayed(HANDLERMSG.RECEIVE_NEW_FRONT_CALL, 0, 0, 100);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
LOG("MainHandler : " + msg.what);
|
|
|
break;
|
|
@@ -5450,6 +5500,7 @@ public class MainActivity extends WpadActivity {
|
|
|
|
|
|
public void setBlockFrontCall() {
|
|
|
try {
|
|
|
+ Log.v(TAG, "setBlockFrontCall()");
|
|
|
bBlockFrontCall = true;
|
|
|
MainHandler.removeMessages(HANDLERMSG.RELEASE_BLOCK_FRONTCALL);
|
|
|
((MainActivity) mContext).sendHandlerMsgDelayed(HANDLERMSG.RELEASE_BLOCK_FRONTCALL, 0, 0, 3000);
|
|
@@ -5580,25 +5631,41 @@ public class MainActivity extends WpadActivity {
|
|
|
// }
|
|
|
// else Log.w(this.TAG, "[onReceive] Front call ignored!!! [" + mCallController.mCallInfo.getFRONT() + "], bBlockFrontCall [" + bBlockFrontCall + "]");
|
|
|
}
|
|
|
+ // yjyoon. 앱 실행 중 현관콜 BR 수신
|
|
|
else if (mKeyEvent.getKeyCode() == Declare.BTN.FRONT || mKeyEvent.getKeyCode() == Declare.BTN.FRONT_V40) {
|
|
|
Log.i(this.TAG, "[onReceive] mKeyEvent.getKeyCode() : " + mKeyEvent.getKeyCode() + " " + (mKeyEvent.getKeyCode() == Declare.BTN.FRONT ? "Declare.BTN.FRONT" : "Declare.BTN.FRONT_V40"));
|
|
|
+ Log.v("yjyoon", "bBlockFrontCall[" + bBlockFrontCall + "] bIsGeneratedFirstCallEvent[" + bIsGeneratedFirstCallEvent + "] strCallEvent[" + strCallEvent + "]");
|
|
|
if (!bBlockFrontCall) {
|
|
|
- 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); // 현관띵똥 볼륨 고정(시스템 볼륨 따라가지 않도록)
|
|
|
- sendHandlerMsg(HANDLERMSG.SETTALKPATH_DOORMUSIC, 0, 0);
|
|
|
- mCallPathCheckHandler.sendEmptyMessage(0); // 통화앱이 실행되어 있으나 통화상태가 아닌 경우에도 띵똥 소리 나야함 (메인앱에서 현관 호출 BR 수신이 불가하므로 통화앱에서 처리)
|
|
|
+ // yjyoon. 앱 구동하고 500ms 뒤 첫번째 이벤트 생성 전까지 bBlockFrontCall 값은 false. 이로 인해 첫번째 이벤트 생성 전 해당 br이 수신되는 경우가 발생.
|
|
|
+ //if (bIsGeneratedFirstCallEvent || (!bIsGeneratedFirstCallEvent && strCallType != "DETECT_STRANGER")) {
|
|
|
+
|
|
|
+ if (!bIsGeneratedFirstCallEvent && strCallEvent.equals("DETECT_STRANGER")) {
|
|
|
+ // yjyoon. 첫번째 이벤트가 생성되기 전이고 그 타입이 거동수상자이면 거동수상자 이벤트를 폐기하고 현관콜 이벤트를 진행한다.
|
|
|
+ Log.v("yjyoon", "###### 1");
|
|
|
+ bIsFirstCallEvent = false;
|
|
|
+
|
|
|
+ // 첫번째 이벤트 생성전까지 bBlockFrontCall = false 인 상태에서 현관버튼을 연속으로 눌렀을 때 간혹 1개 이상의 현관콜 이벤트가 수신되는 현상이 있어 이전 메지시를 삭제함.
|
|
|
+ MainHandler.removeMessages(HANDLERMSG.RECEIVE_NEW_FRONT_CALL);
|
|
|
+
|
|
|
+ // 이벤트 메시지 생성
|
|
|
+ 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); // 현관띵똥 볼륨 고정(시스템 볼륨 따라가지 않도록)
|
|
|
+ sendHandlerMsg(HANDLERMSG.SETTALKPATH_DOORMUSIC, 0, 0);
|
|
|
+ mCallPathCheckHandler.sendEmptyMessage(0); // 통화앱이 실행되어 있으나 통화상태가 아닌 경우에도 띵똥 소리 나야함 (메인앱에서 현관 호출 BR 수신이 불가하므로 통화앱에서 처리)
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- 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);
|
|
|
- }
|
|
|
- else {
|
|
|
- Log.w(this.TAG, "[onReceive] Front call ignored!!! getFRONT() [" + mCallController.mCallInfo.getFRONT() + "]");
|
|
|
+ if (mCallController.mCallInfo.getFRONT() == CALLSTATUS.IDLE) {
|
|
|
+ setBlockFrontCall();
|
|
|
+ mCallController.onFrontEvent(CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Log.w(this.TAG, "[onReceive] Front call ignored!!! getFRONT() [" + mCallController.mCallInfo.getFRONT() + "]");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
@@ -5630,33 +5697,59 @@ public class MainActivity extends WpadActivity {
|
|
|
}
|
|
|
else if (strAction.equals(define.NOTIFY_ACNAME)) {
|
|
|
int kind = intent.getIntExtra(define.NOTIBR_KIND,0);
|
|
|
- //jglee - 통화중에 거동 수상자는 받지 않기로 하
|
|
|
-// if (kind == define.NOTIFY_SMART_DCAM_DETECT) {
|
|
|
-// // [스마트현관카메라] 통화 앱 실행중 거동수상자 발생한 경우
|
|
|
-// Log.i(this.TAG, "[onReceive] DETECT_STRANGER!!");
|
|
|
-// if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) {
|
|
|
-// if (getStrangerRecordingManagerSetting()) {
|
|
|
-// if (getStrangerRecording()) {
|
|
|
-// mCallController.onFrontEvent(CALLEVENTTYPE.DETECT_STRANGER, CALLTYPE.FRONT);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
- if (kind == define.NOTIFY_FINISH_FRONT_DINGDONG) {
|
|
|
+
|
|
|
+ if (kind == define.NOTIFY_SMART_DCAM_DETECT) {
|
|
|
+ // [스마트현관카메라] 통화 앱 실행중 거동수상자 발생한 경우
|
|
|
+ Log.i(this.TAG, "[onReceive] DETECT_STRANGER!!");
|
|
|
+ if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) {
|
|
|
+ if (getStrangerRecordingManagerSetting()) {
|
|
|
+ if (getStrangerRecording()) {
|
|
|
+
|
|
|
+ // '통화 시, 모든 거동 수상자 신호를 버림' 시나리오 적용.
|
|
|
+ // 통화 기능 시작 또는 종료 시 3초 bBlockFrontCall = true.
|
|
|
+ // 통화 기능 동작 중 mCallController.mCallInfo.getIDLECnt()는 mCallController.mCallInfo.IDLECNT_MAX 보다 작음.
|
|
|
+ // 단순 앱 실행 및 종료시 bBlockFrontCall = false.
|
|
|
+ if (bIsGeneratedFirstCallEvent && !bBlockFrontCall && mCallController.mCallInfo.getIDLECnt() == mCallController.mCallInfo.IDLECNT_MAX) {
|
|
|
+ // 단순 앱 실행한 경우에만 이벤트 생성.
|
|
|
+ Log.v(this.TAG, "[onReceive] DETECT_STRANGER > mCallController.onFrontEvent(CALLEVENTTYPE.DETECT_STRANGER, CALLTYPE.FRONT)");
|
|
|
+ mCallController.onFrontEvent(CALLEVENTTYPE.DETECT_STRANGER, CALLTYPE.FRONT);
|
|
|
+ } else {
|
|
|
+ Log.i(this.TAG, "[onReceive] ignored DETECT_STRANGER BR");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ if (bIsGeneratedFirstCallEvent && !bBlockFrontCall) {
|
|
|
+ // yjyoon. 첫번째 이벤트가 생성되고 bBlockFrontCall = false 이면, 거동수상자 이벤트 생성
|
|
|
+ // 동작없이 앱만 실행 및 종료시 bBlockFrontCall = false, 통화 기능 동작 및 종료시 bBlockFrontCall = true 로 설정.
|
|
|
+ Log.v("yjyoon", "###### 3");
|
|
|
+ mCallController.onFrontEvent(CALLEVENTTYPE.DETECT_STRANGER, CALLTYPE.FRONT);
|
|
|
+ } else {
|
|
|
+ Log.v("yjyoon", "###### 4");
|
|
|
+ // yjyoon. 첫번째 이벤트 생성 전 또는 종료모드인 경우 수신된 거동수상자 감지 br은 무시.
|
|
|
+ Log.i(this.TAG, "[onReceive] ignored DETECT_STRANGER BR.");
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (kind == define.NOTIFY_FINISH_FRONT_DINGDONG) {
|
|
|
// 메인 App으로 부터 띵똥 종료 BR 수신 받을 경우 현관 호출음 재생
|
|
|
sendHandlerMsgDelayed(HANDLERMSG.PLAY_FRONT_BELL, 0, 0, 200);
|
|
|
sendHandlerMsgDelayed(HANDLERMSG.SET_TALK_BTN_ENABLE, 0, 0, 200);
|
|
|
}
|
|
|
else if (kind == 9999) {
|
|
|
+ // yjyoon. 거동수상자 녹화 중 새로운 콜 이벤트 수신.
|
|
|
+
|
|
|
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);
|
|
|
+ //MainHandler.removeMessages(HANDLERMSG.CHECK_RECEIVINGCALL);
|
|
|
mFrontCamOpenCheckHandler.removeMessages(2);
|
|
|
mFrontCamOpenCheckHandler.removeMessages(3);
|
|
|
|