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; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.SeekBar; import com.artncore.WallPadDataMgr.WallpadAccessData; import com.artncore.WallPadDataMgr.WallpadStatusData; import com.artncore.commons.define; import com.artncore.wallpadapi.WallPadAPI; import com.util.LogUtil; import java.io.File; import java.util.Timer; import java.util.TimerTask; import kr.co.icontrols.callengine.engine.AutoSaveStrangerPicture.startAutoSaveStrangerPicture; import kr.co.icontrols.callengine.engine.AutoSaveVisitorPicture.startAutoSaveVisitorPicture; import kr.co.icontrols.callengine.engine.CallController.CallEventListener; import kr.co.icontrols.callengine.engine.CallManager.CALLEVENTTYPE; import kr.co.icontrols.callengine.engine.CallManager.CALLOWNER; import kr.co.icontrols.callengine.engine.CallManager.CALLPATH; import kr.co.icontrols.callengine.engine.CallManager.CALLSTATUS; import kr.co.icontrols.callengine.engine.CallManager.CALLTYPE; import kr.co.icontrols.callengine.engine.MissedCallVisitorPicture.startMissedCallVisitorPicture; import kr.co.icontrols.callengine.remotecall.RemoteCallManager; import kr.co.icontrols.wallpadcall.MainActivity; import kr.co.icontrols.wallpadcall.MainActivity.MAINEVENT; import kr.co.icontrols.wallpadcall.MainActivity.MainEventListener; import kr.co.icontrols.wallpadcall.R; import kr.co.icontrols.wallpadcall.declare.Common; import kr.co.icontrols.wallpadcall.declare.DataClasses.AutoPictureInfo; import kr.co.icontrols.wallpadcall.declare.DataClasses.MultiCallInfo; import kr.co.icontrols.wallpadcall.declare.DataClasses.RemoteIDInfo; import kr.co.icontrols.wallpadcall.declare.DataClasses.SmartRFCamLEDMode; import kr.co.icontrols.wallpadcall.declare.DataClasses.SmartRFCamStatusMode; import kr.co.icontrols.wallpadcall.declare.Declare; import kr.co.icontrols.wallpadcall.declare.Declare.IGW300CMD; import kr.co.icontrols.wallpadcall.declare.Global; import kr.co.icontrols.wallpadcall.declare.Global.BOARD_TYPE; 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.Global.FRONTCAMERATYPE; import kr.co.icontrols.wallpadcall.declare.ID; import kr.co.icontrols.wallpadsupport.Version; import kr.co.icontrols.wallpadsupport.WpadImageView; import kr.co.icontrols.wallpadsupport.WpadImageView.TOUCH_KIND; import kr.co.icontrols.wallpadsupport.WpadScale; import kr.co.icontrols.wallpadsupport.WpadScreen; 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 { private final static String TAG = "TalkFront"; boolean bLOG = true; private void LOG(String log) { if (bLOG) Log.v(TAG, log); } boolean bLOG_DEBUG = false; private void LOG_DEBUG(String log) { if (bLOG_DEBUG) Log.d(TAG, log); } boolean bLOG_INFO = true; private void LOG_INFO(String log) { if (bLOG_INFO) Log.i(TAG, log); } boolean bLOG_WARN = true; private void LOG_WARN(String log) { if (bLOG_WARN) Log.w(TAG, log); } WpadImageView SCREEN_BG; WpadImageView IMG_FRONT_BACKGROUND; WpadImageView IMG_VIDEO_MODULE; WpadImageView IMG_BRIGHTNESS; WpadImageView IMG_VOLUME; public static WpadImageView BTN_TALK; WpadImageView BTN_END; WpadImageView BTN_SAVE_PICTURE; WpadImageView BTN_DOOROPEN; WpadImageView BTN_RELIEF_FILTER_01, BTN_RELIEF_FILTER_02; //, BTN_RELIEF_FILTER_03, BTN_RELIEF_FILTER_04; SeekBar SEEKBAR_VOLUME, SEEKBAR_BRIGHT; WpadTextView TXT_VOLUME_LEVEL, TXT_BRIGHT_LEVEL; int nCurrentBrightness = 0; int nCurrentVolume = 0; boolean bBlockSavePicBTN = false; Context mContext; WallPadAPI mWallPadAPI; public TalkFront(Context context, RelativeLayout layout, WallPadAPI wapi) { super(context, layout); try { mContext = context; mWallPadAPI = wapi; Initialize(); SCREEN_BG = new WpadImageView(context, TOUCH_KIND.NONE, 1280, 690, R.drawable.bg_body, R.drawable.bg_body, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.BG); ViewRegistration(layout, SCREEN_BG, 0, 0); IMG_FRONT_BACKGROUND = new WpadImageView(context, TOUCH_KIND.NONE, 722, 544, R.drawable.bg_front, 0, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.BACKGROUND); ViewRegistration(layout, IMG_FRONT_BACKGROUND, Common.ImgPosition.GetX(93), Common.ImgPosition.GetY(110)); IMG_VIDEO_MODULE = new WpadImageView(context, TOUCH_KIND.NONE, 720, 540, R.drawable.image_front, 0, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.VIDEO_MODULE); ViewRegistration(layout, IMG_VIDEO_MODULE, Common.ImgPosition.GetX(95), Common.ImgPosition.GetY(112)); // 스마트현관카메라 if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT) { // 스마트현관카메라일 경우 밝기조절 안하도록 임시 설정 IMG_VOLUME = new WpadImageView(context, TOUCH_KIND.NONE, 40, 40, R.drawable.bar_icon_sound, 0, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.VOLUME); ViewRegistration(layout, IMG_VOLUME, Common.ImgPosition.GetX(454), Common.ImgPosition.GetY(707)); TXT_VOLUME_LEVEL = new WpadTextView(context, false, 40, 40, Gravity.CENTER, Color.WHITE, Common.fontsize._30, false, ID.SCREEN.TALKFRONT.ELEMENT.TEXT.VOLUME_LEVEL); ViewRegistration(layout, TXT_VOLUME_LEVEL, Common.ImgPosition.GetX(785), Common.ImgPosition.GetY(705)); if (WpadScale.getWidthPixels() == WpadScale.DEFAULT_WIDTH_PIXELS) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar_1280, null); LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(507)); int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(707)); volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0); volumeLayout.setLayoutParams(volumeParams); SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar); SEEKBAR_VOLUME.setMax(100); SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener); layout.addView(volumeLayout); } else { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar, null); LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(502)); int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703)); volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0); volumeLayout.setLayoutParams(volumeParams); SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar); SEEKBAR_VOLUME.setMax(100); SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener); layout.addView(volumeLayout); } } else { IMG_VOLUME = new WpadImageView(context, TOUCH_KIND.NONE, 40, 40, R.drawable.bar_icon_sound, 0, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.VOLUME); ViewRegistration(layout, IMG_VOLUME, Common.ImgPosition.GetX(123), Common.ImgPosition.GetY(707)); TXT_VOLUME_LEVEL = new WpadTextView(context, false, 40, 40, Gravity.CENTER, Color.WHITE, Common.fontsize._30, false, ID.SCREEN.TALKFRONT.ELEMENT.TEXT.VOLUME_LEVEL); ViewRegistration(layout, TXT_VOLUME_LEVEL, Common.ImgPosition.GetX(454), Common.ImgPosition.GetY(705)); IMG_BRIGHTNESS = new WpadImageView(context, TOUCH_KIND.NONE, 40, 40, R.drawable.bar_icon_brightness, 0, ID.SCREEN.TALKFRONT.ELEMENT.IMAGE.BRIGHTNESS); ViewRegistration(layout, IMG_BRIGHTNESS, Common.ImgPosition.GetX(785), Common.ImgPosition.GetY(707)); TXT_BRIGHT_LEVEL = new WpadTextView(context, false, 40, 40, Gravity.CENTER, Color.WHITE, Common.fontsize._30, false, ID.SCREEN.TALKFRONT.ELEMENT.TEXT.BRIGHT_LEVEL); ViewRegistration(layout, TXT_BRIGHT_LEVEL, Common.ImgPosition.GetX(1116), Common.ImgPosition.GetY(705)); if (WpadScale.getWidthPixels() == WpadScale.DEFAULT_WIDTH_PIXELS) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar_1280, null); LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(176)); int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(707)); volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0); volumeLayout.setLayoutParams(volumeParams); SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar); SEEKBAR_VOLUME.setMax(100); SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener); layout.addView(volumeLayout); LinearLayout brightLayout = (LinearLayout) inflater.inflate(R.layout.bright_seekbar_1280, null); LayoutParams brightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int briMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(838)); int briMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(707)); brightParams.setMargins(briMarginLeft, briMarginTop, 0, 0); brightLayout.setLayoutParams(brightParams); SEEKBAR_BRIGHT = (SeekBar) brightLayout.findViewById(R.id.brightSeekBar); SEEKBAR_BRIGHT.setMax(100); SEEKBAR_BRIGHT.setOnSeekBarChangeListener(mOnBrightChangeListener); layout.addView(brightLayout); } else { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar, null); LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(171)); int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703)); volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0); volumeLayout.setLayoutParams(volumeParams); SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar); SEEKBAR_VOLUME.setMax(100); SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener); layout.addView(volumeLayout); LinearLayout brightLayout = (LinearLayout) inflater.inflate(R.layout.bright_seekbar, null); LayoutParams brightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int briMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(833)); int briMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703)); brightParams.setMargins(briMarginLeft, briMarginTop, 0, 0); brightLayout.setLayoutParams(brightParams); SEEKBAR_BRIGHT = (SeekBar) brightLayout.findViewById(R.id.brightSeekBar); SEEKBAR_BRIGHT.setMax(100); SEEKBAR_BRIGHT.setOnSeekBarChangeListener(mOnBrightChangeListener); layout.addView(brightLayout); } // // // SeekBar (inflate) // LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar, null); // LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); // int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(171)); // int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703)); // volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0); // volumeLayout.setLayoutParams(volumeParams); // SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar); // SEEKBAR_VOLUME.setMax(100); // SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener); // layout.addView(volumeLayout); // // LinearLayout brightLayout = (LinearLayout) inflater.inflate(R.layout.bright_seekbar, null); // LayoutParams brightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); // int briMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(833)); // int briMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703)); // brightParams.setMargins(briMarginLeft, briMarginTop, 0, 0); // brightLayout.setLayoutParams(brightParams); // SEEKBAR_BRIGHT = (SeekBar) brightLayout.findViewById(R.id.brightSeekBar); // SEEKBAR_BRIGHT.setMax(100); // SEEKBAR_BRIGHT.setOnSeekBarChangeListener(mOnBrightChangeListener); // layout.addView(brightLayout); } // 안심통화 if (ConfigValues.bReliefCall) { BTN_TALK = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_call_normal, R.drawable.btn_call_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.TALK); ViewRegistration(layout, BTN_TALK, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(110)); BTN_END = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_endl_normal, R.drawable.btn_endl_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.END); ViewRegistration(layout, BTN_END, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(320)); BTN_SAVE_PICTURE = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_photo_normal, R.drawable.btn_photo_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.SAVE_PICTURE); ViewRegistration(layout, BTN_SAVE_PICTURE, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(110)); BTN_DOOROPEN = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_open_normal, R.drawable.btn_open_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.DOOROPEN); ViewRegistration(layout, BTN_DOOROPEN, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(320)); if (ConfigValues.eDoorLockType == DOORLOCKTYPE.NOT_USE) BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_open_disabled); // 도어락 사용안함일 경우 문열림 버튼 항상 비활성화 /** * JEFF, 2020.01.02 * 안심통화는 1, 2 단계만 지원한다. */ int[] filterImg_01 = {R.drawable.btn_big_filter_1_normal, R.drawable.btn_big_filter_1_pressed}; int[] filterSelectedImg_01 = {R.drawable.btn_big_filter_1_selected, R.drawable.btn_big_filter_1_selected}; int[] filterImg_02 = {R.drawable.btn_big_filter_2_normal, R.drawable.btn_big_filter_2_pressed}; int[] filterSelectedImg_02 = {R.drawable.btn_big_filter_2_selected, R.drawable.btn_big_filter_2_selected}; // int[] filterImg_03 = {R.drawable.btn_filter_3_normal, R.drawable.btn_filter_3_pressed}; // int[] filterSelectedImg_03 = {R.drawable.btn_filter_3_selected, R.drawable.btn_filter_3_selected}; // int[] filterImg_04 = {R.drawable.btn_filter_4_normal, R.drawable.btn_filter_4_pressed}; // int[] filterSelectedImg_04 = {R.drawable.btn_filter_4_selected, R.drawable.btn_filter_4_selected}; BTN_RELIEF_FILTER_01 = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 124, filterImg_01, filterSelectedImg_01, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_01); ViewRegistration(layout, BTN_RELIEF_FILTER_01, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(530)); BTN_RELIEF_FILTER_02 = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 124, filterImg_02, filterSelectedImg_02, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_02); ViewRegistration(layout, BTN_RELIEF_FILTER_02, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(530)); // BTN_RELIEF_FILTER_03 = new WpadImageView(context, TOUCH_KIND.BUTTON, 93, 124, filterImg_03, filterSelectedImg_03, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_03); // ViewRegistration(layout, BTN_RELIEF_FILTER_03, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(530)); // // BTN_RELIEF_FILTER_04 = new WpadImageView(context, TOUCH_KIND.BUTTON, 94, 124, filterImg_04, filterSelectedImg_04, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_04); // ViewRegistration(layout, BTN_RELIEF_FILTER_04, Common.ImgPosition.GetX(1094), Common.ImgPosition.GetY(530)); } else { BTN_TALK = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_front_call_normal, R.drawable.btn_front_call_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.TALK); ViewRegistration(layout, BTN_TALK, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(110)); BTN_END = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_front_end_normal, R.drawable.btn_front_end_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.END); ViewRegistration(layout, BTN_END, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(382)); BTN_SAVE_PICTURE = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_front_photo_normal, R.drawable.btn_front_photo_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.SAVE_PICTURE); ViewRegistration(layout, BTN_SAVE_PICTURE, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(110)); BTN_DOOROPEN = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_front_open_normal, R.drawable.btn_front_open_pressed, ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.DOOROPEN); ViewRegistration(layout, BTN_DOOROPEN, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(382)); if (ConfigValues.eDoorLockType == DOORLOCKTYPE.NOT_USE) BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_front_open_disabled); // 도어락 시용안함일 경우 문열림 버튼 항상 비활성화 BTN_RELIEF_FILTER_01 = null; BTN_RELIEF_FILTER_02 = null; // BTN_RELIEF_FILTER_03 = null; // BTN_RELIEF_FILTER_04 = null; } applyInitValues(); sendHandlerMsg(HANDLERMSG.PROC_ADDCALL, 0, 0); // yjyoon. 녹화중지 이벤트 추가 addBrActionFilter(Declare.BR.BR_REQUEST_RECORD_STOP); //ctrlAlphaBlending(false); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] ScreenTalkFront(Context context, RelativeLayout layout)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } protected void Initialize() { try { if (MainActivity.mCallController.mCallInfo.getFRONT() != CALLSTATUS.IDLE) ((MainActivity) mContext).setMenuBTNEnable(false); else ((MainActivity) mContext).setMenuBTNEnable(true); int mMarginLeft = ((MainActivity) mContext).TopBackBtn.getVisibility() == View.VISIBLE ? 893 : 1019; ((MainActivity) mContext).setManualBtnVisible(((MainActivity) mContext).getManualUse(), mMarginLeft); ((MainActivity) mContext).setTopHideBtnVisible(true); MainActivity.mCallController.setCallEventListener(this); ((MainActivity) mContext).setMainEventListener(this); nSelectedFilter = 0; super.setFinishTimerCreate(Common.FINISH_TIME_START_SCREEN); getBrightness(); getVolume(); bEnableAutoVisitorPic = 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) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] Initialize()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void applyInitValues() { try { getBrightness(); getVolume(); drawBright(); drawVolume(); if (ConfigValues.bReliefCall) { sendReliefFilterSelectBR(nSelectedFilter); selectReliefCallFilter(nSelectedFilter, false); BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_photo_disabled); } else { BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_front_photo_disabled); } enableDoorOpenBTN(false); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] applyInitValues()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onClose() { super.onClose(); try { LOG_INFO("[onClose]"); stopAudioRecording(); if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.ctrlFrontCamPower(false); if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.ctrlWallPadLED_Call(false); sendReliefFilterSelectBR(0); if (TalkFrontHandler != null) { TalkFrontHandler.removeMessages(HANDLERMSG.MEDIA_RECORD_START); TalkFrontHandler.removeMessages(HANDLERMSG.MEDIA_RECORD_START_REMOTECALL); TalkFrontHandler.removeMessages(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE); TalkFrontHandler.removeMessages(HANDLERMSG.SAVE_VISITORPICTURE); TalkFrontHandler.removeMessages(HANDLERMSG.TAKE_VISITORPICTURE); } if (mCheckHandler != null) { mCheckHandler.removeMessages(0); mCheckHandler.removeMessages(1); } ((MainActivity) mContext).resetRecordTimer(); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); // LED OFF ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); // MODE OFF if (ConfigValues.bReliefCall) selectReliefCallFilter(nSelectedFilter, false); bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.NONE, true); MainActivity.mCallController.releaseCallEventListener(); ((MainActivity) mContext).releaseMainEventListener(); Global.stopMelodyRepeat(); showFrontCam(false, false); MainActivity.bRecordingStatus = false; MainActivity.mCallController.stop1stCallTimer(); MainActivity.mCallController.stop2ndCallTimer(); MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); RemoteIDInfo.InitVariables(); Global.add1stCallHistoryInfoFinal(); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onClose()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onBrReceive(Intent intent) { super.onBrReceive(intent); try { 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) { Log.e(TAG, "[Exception] onBrReceive()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onTouchEvent(View v, MotionEvent event) { super.onTouchEvent(v, event); try { int nEvent = event.getAction(); int nID = v.getId(); if (nEvent == MotionEvent.ACTION_UP) { if (ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.TALK <= nID && nID <= ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_02) { // 통화중에 버튼 터치음을 발생시키면, 통화 상대방에게 터치음이 전달되므로 통화중에는 터치음을 출력하지 않는다.(JEFF, 2019.12.24) if (MainActivity.mCallController.mCallInfo.getFRONT() != CALLSTATUS.TALKING) MainActivity.mSound.Play(SND.effect.TOUCH_LATCHED); if (nID == ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.TALK) { LOG_INFO("[onTouchEvent] [TALK] BUTTON"); doTalk(CALLOWNER.WALLPAD); } else if (nID == ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.END) { LOG_INFO("[onTouchEvent] [END] BUTTON"); bEnableAutoVisitorPic = false; doEnd(); } else if (nID == ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.SAVE_PICTURE) { LOG_INFO("[onTouchEvent] [SAVE_PICTURE] BUTTON [bRemote_FrontCalled] = " + bRemote_FrontCalled); String strVisitorPicResult = MainActivity.mCallController.saveVisitorPicture(CALLTYPE.FRONT, MainActivity.mCallController.mCallInfo.getFRONT(), null, true, false, bRemote_FrontCalled); LOG_INFO("[onTouchEvent] strVisitorPicResult [" + strVisitorPicResult + "]"); if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_photo_disabled); else BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_front_photo_disabled); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, 3000); } else if (nID == ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.DOOROPEN) { LOG_INFO("[onTouchEvent] [OPEN_DOOR] BUTTON"); doDoorOpen(); } else if (ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_01 <= nID && nID <= ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_04) { LOG_INFO("[onTouchEvent] [RELIEF_FILTER] BUTTON"); selectReliefCallFilter(nID, true); doTalk(CALLOWNER.WALLPAD); // 통화시작 전에 필터버튼 클릭하면 변조되어 통화 시작 } } else { Log.w(TAG, "[onTouchEvent] The touch event is not supported!! nID -> nID"); } } else { Log.w(TAG, "[onTouchEvent] The touch event is not supported!! nEvent -> nEvent"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onTouchEvent(View v, MotionEvent event)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onMainTouchEvent(MAINEVENT eEvent) { try { LOG_INFO("[onMainTouchEvent] eEvent [" + eEvent + "]"); if (eEvent == MAINEVENT.BTN_HOME) { if (MainActivity.mCallController.mCallInfo.getFRONT() != CALLSTATUS.TALKING) Sound().Play(SND.effect.TOUCH_LATCHED); ((MainActivity) mContext).showFrontVideo(false); finishWallpadCallApp(); } else if (eEvent == MAINEVENT.BTN_HOME_MOBILE) { finishWallpadCallApp(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onMainTouchEvent(MAINEVENT eEvent)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onKeyDown(int keyCode, KeyEvent event) { if (keyCode == Declare.BTN.TALK || keyCode == Declare.BTN.TALK_V40) { doTalkByBTN(CALLOWNER.WALLPAD); } else if (keyCode == Declare.BTN.DOOR_OPEN || keyCode == Declare.BTN.DOOR_OPEN_V40) { doDoorOpen(); } super.onKeyDown(keyCode, event); } @Override public void onCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage) { try { LOG_INFO("[onCallEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], " + "strRemoteIP [" + strRemoteIP + "], strRemoteSIPID [" + strRemoteSIPID + "], strMessage [" + strMessage + "]"); MainActivity.mCallController.mCallInfo.printCallStatus(); if (eCallType == CALLTYPE.NONE) return; if (eCallType == CALLTYPE.FRONT) { sendHandlerMsg(HANDLERMSG.SET_BTN_STATUS, 0, 0); if (eCallStatus == CALLSTATUS.CALLING) { bBlockSavePicBTN = false; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; if (eCallOwner != CALLOWNER.WALLPAD) { if (eCallOwner == CALLOWNER.MOBILE) { // [방문객원격통화] 모바일에서 현관 모니터링 요청 ((MainActivity) mContext).showRemoteCallNoticeText(true); // 방문객원격통화 팝업 삭제 -> 상단 문구로 대체 // ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_REMOTECALL); ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(6); // camera open check 이후 encoderStartOperation 시작 (방문객 원격통화 사용할 경우) } else { ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_SUBPHONETALK); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(4); // camera open check 이후 TV Out 시작 } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) { if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT) ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(4); // camera open check 이후 TV Out 시작 } else { MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.FRONT, false); } } } showFrontCam(true, false); super.setFinishTimerDestroy(); MainActivity.mCallController.set1stCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLING); Global.make1stCallHistoryInfo(CALLTYPE.FRONT.toString(), "NONE", CALLDIRECTION.OUT, CALLACTION.MISS, CALLRESULT.OUT_MISS); ((MainActivity) mContext).m_bMissCall = false; } else if (eCallStatus == CALLSTATUS.CALLED) { bBlockSavePicBTN = false; if (MainActivity.bRecordingStatus) { // 녹화 중 현관 호출 => 녹화 종료 및 팝업 닫힘 => 현관 호출 지속 LOG_WARN("[onCallEvent] STRANGER RECORDING IS RUNNING!!"); ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_VIDEORECORD); ((MainActivity) (this.getContext())).stopNSaveRecordingFile(false, false); } showFrontCam(true, true); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) Global.playMelodyRepeat(eCallType); super.setFinishTimerDestroy(); ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(4); // camera open check 이후 TV Out 시작 if (ConfigValues.bRemoteCall) { bRemote_FrontCalled = true; // 방문객원격통화 + 현관호출(띵똥)을 통해 진입하는 경우 TRUE // ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(6); // camera open check 이후 encoderStartOperation 시작 (방문객 원격통화 사용할 경우) } MainActivity.mCallController.set1stCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLED - 5); Global.make1stCallHistoryInfo(CALLTYPE.FRONT.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS); if (ConfigValues.bUnoccupiedMode) { // 외출방범 설정중 sendHandlerMsgDelayed(HANDLERMSG.SAVE_VISITORPICTURE, 0, 0, 5000); // 5초 sendHandlerMsgDelayed(HANDLERMSG.SAVE_VISITORPICTURE, 0, 0, 10000); // 10초 } else { // 부재중인 경우를 대비하여 임시저장 sendHandlerMsgDelayed(HANDLERMSG.TAKE_VISITORPICTURE, 0, 0, 5000); // 5초 } } else if (eCallStatus == CALLSTATUS.TALKING) { MainActivity.mIOInterface.ctrlFrontCamBell(false); Global.stopMelodyRepeat(); if (eCallOwner == CALLOWNER.MOBILE) { // 모바일에서 현관 호출 수신!! (방문객 원격통화) RemoteCallManager.bMobileTalk = true; MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner); ((MainActivity) mContext).showRemoteCallNoticeText(true); sendHandlerMsg(HANDLERMSG.SET_PATH_DOOR_REMOTECALL, 0, 0); sendHandlerMsgDelayed(HANDLERMSG.START_AUDIO_RECORD, 0, 0, 1000); } else { if (ConfigValues.bRemoteCall) RemoteCallManager.bMobileTalk = false; if (eCallOwner != CALLOWNER.WALLPAD) { ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_SUBPHONETALK); MainActivity.mCallController.setTalkPath(CALLPATH.SUBPHONE_FRONT); if (eCallOwner == CALLOWNER.SUB_WALLPAD) MainActivity.mCallController.setSubWallPadAudioPath(); } else { if (ConfigValues.bReliefCall) { // 안심통화 LOG("[onCallEvent] nSelectedFilter [" + nSelectedFilter + "]"); if (nSelectedFilter > 0) { sendHandlerMsg(HANDLERMSG.SET_PATH_DOOR_RELIEFCALL, 0, 0); startAudioRecording(false); } else { sendHandlerMsg(HANDLERMSG.SET_PATH_DOOR, 0, 0); stopAudioRecording(); } ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.SET_RELIEFCALL_VOLUME, 0, 0); // 안심통화시 볼륨 11로 설정 sendHandlerMsg(HANDLERMSG.SET_VOLUME_TABLE, 0, 0); } else { MainActivity.mCallController.setTalkPath(CALLPATH.FRONT); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.SET_TEMPSYSTEM_VOLUME, 0, 0); // 통화 중 임의 볼륨값 설정 seulki } } mCheckHandler.sendEmptyMessage(0); } MainActivity.mCallController.set1stCallTimer(eCallType, MainActivity.mCallController.mCTT.RESIDENCEnFRONT); Global.change1stCallLogAction(CALLACTION.TALK); Global.add1stCallHistoryInfoFinal(); } else if (eCallStatus == CALLSTATUS.END) { ((MainActivity) mContext).setBlockFrontCall(); bBlockSavePicBTN = true; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; Global.stopMelodyRepeat(); sendHandlerMsg(HANDLERMSG.SET_PATH_NORMAL, 0, 0); sendHandlerMsg(HANDLERMSG.STOP_AUDIO_RECORD, 0, 0); if (ConfigValues.bRemoteCall) { sendHandlerMsgDelayed(HANDLERMSG.END_CALL_VIDEO, 0, 0, 1000); // 방문객원격통화를 사용하는 경우 인코딩 STOP 과정으로 인하여 통화패스 설정 지연이 발생하여 카메라를 오디오패스 이후 닫음 ((MainActivity) mContext).showFrontVideo(false); } else { sendHandlerMsg(HANDLERMSG.END_CALL_VIDEO, 0, 0); } if (eCallOwner == CALLOWNER.MOBILE) { ((MainActivity) mContext).showRemoteCallNoticeText(false); } else { if (eCallOwner != CALLOWNER.WALLPAD) ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_SUBPHONETALK); } // MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.stop1stCallTimer(); Global.add1stCallHistoryInfoFinal(); ((MainActivity) mContext).setBlockFrontCall(); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.MultiCallScenarioManager(); } else if (eCallStatus == CALLSTATUS.REJECT) { ((MainActivity) mContext).setBlockFrontCall(); bBlockSavePicBTN = true; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; Global.stopMelodyRepeat(); showFrontCam(false, false); // MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.stop1stCallTimer(); Global.change1stCallLogAction(CALLACTION.REJECT); Global.add1stCallHistoryInfoFinal(); ((MainActivity) mContext).setBlockFrontCall(); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.MultiCallScenarioManager(); } else if (eCallStatus == CALLSTATUS.BUSY) { ((MainActivity) mContext).setBlockFrontCall(); bBlockSavePicBTN = true; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; Global.stopMelodyRepeat(); showFrontCam(false, false); // MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.stop1stCallTimer(); Global.change1stCallLogAction(CALLACTION.BUSY); Global.add1stCallHistoryInfoFinal(); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.MultiCallScenarioManager(); } else if (eCallStatus == CALLSTATUS.CANCEL) { ((MainActivity) mContext).setBlockFrontCall(); bBlockSavePicBTN = true; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; Global.stopMelodyRepeat(); showFrontCam(false, false); // MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.stop1stCallTimer(); Global.change1stCallLogAction(CALLACTION.CANCEL); Global.add1stCallHistoryInfoFinal(); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.MultiCallScenarioManager(); } else if (eCallStatus == CALLSTATUS.TIMEOUT_1STCALL) { ((MainActivity) mContext).setBlockFrontCall(); ((MainActivity) mContext).showFrontVideo(false); bBlockSavePicBTN = true; bEnableAutoVisitorPic = false; bRemote_FrontCalled = false; bReliefCallInit = false; ((MainActivity) mContext).m_bMissCall = true; Global.stopMelodyRepeat(); showFrontCam(false, false); ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_ALL); ((MainActivity) mContext).finishManual(ID.MANUAL.MANUAL_ALL); sendHandlerMsg(HANDLERMSG.SET_PATH_NORMAL, 0, 0); // MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.stop1stCallTimer(); MainActivity.mCallController.stop2ndCallTimer(); Global.add1stCallHistoryInfoFinal(); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.IDLE); MainActivity.mCallController.MultiCallScenarioManager(); } else if (eCallStatus == CALLSTATUS.DOOR_OPEN) { sendHandlerMsg(HANDLERMSG.DOOR_OPEN, 0, 0); } else if (eCallStatus == CALLSTATUS.RECORDING) { sendHandlerMsg(HANDLERMSG.SET_BTN_STATUS, 1, 0); // [스마트현관카메라] 거동수상자 녹화 LOG("[onCallEvent] bRecordingStatus [" + MainActivity.bRecordingStatus + "]"); if (!MainActivity.bRecordingStatus) { showFrontCam(true, false); super.setFinishTimerDestroy(); if (ConfigValues.bRemoteCall) { // 방문객원격통화를 사용하는 경우 스트림서버에서 녹화 (거동수상자 영상을 전달하기 위해 인코딩) startStrangerRecord(true); } else { startStrangerRecord(false); // 방문객원격통화를 사용하지 않는 경우 월패드에서 녹화 } } else { LOG_WARN("[onCallEvent] Recording is Already Running!!"); } } else if (eCallStatus == CALLSTATUS.TAKINGPIC) { // [스마트현관카메라] 거동수상자 사진 촬영 ((MainActivity) mContext).showStrangerNoticeText(true, false); showFrontCam(true, false); super.setFinishTimerDestroy(); startStrangerTakePic(); } else { Log.w(TAG, "[onCallEvent] Incorrect eCallStatus!!! eCallStatus = " + eCallStatus); } } else { onMultiCallEvent(eCallOwner, eCallStatus, eCallType, strRemoteIP, strRemoteSIPID, strMessage); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onCallEvent(CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void onMultiCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage) { try { LOG_INFO("[onMultiCallEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], " + "strRemoteIP [" + strRemoteIP + "], strRemoteSIPID [" + strRemoteSIPID + "], strMessage [" + strMessage + "]"); MainActivity.mCallController.mCallInfo.printCallStatus(); MainActivity.mCallController.mCallInfo.printMultiCallStatus(); if(eCallOwner == CALLOWNER.NONE) return; if (eCallStatus == CALLSTATUS.CALLED) { if (eCallType == CALLTYPE.LOBBY || eCallType == CALLTYPE.GUARD || eCallType == CALLTYPE.RESIDENCE) { if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) { // 멀티콜 없음 MultiCallInfo MCInfo = new MultiCallInfo(); MCInfo.setMulticallInfo(CALLTYPE.FRONT, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, Integer.toString(MainActivity.mCallController.getRemoteDong(strRemoteSIPID)), Integer.toString(MainActivity.mCallController.getRemoteID(strRemoteSIPID)), MainActivity.mCallController.getRemoteName(strRemoteSIPID, strRemoteIP), strRemoteIP); MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo); Global.make2ndCallHistoryInfo(strRemoteIP, strRemoteSIPID, CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS); CALLSTATUS eFrontCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); /** * JEFF, 2020.01.02 * 모든통화에서 멀티콜 발생시 알림 팝업만 띄우고 busy처리 하도록 시나리오 수정 */ if (eFrontCallStatus == CALLSTATUS.CALLED || eFrontCallStatus == CALLSTATUS.CALLING || eFrontCallStatus == CALLSTATUS.TALKING || eFrontCallStatus == CALLSTATUS.RECORDING || eFrontCallStatus == CALLSTATUS.TAKINGPIC) { if (eCallOwner == CALLOWNER.WALLPAD || eCallOwner == CALLOWNER.NONE) { ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE); } else { if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화 MainActivity.mCallController.stop2ndCallTimer(); doMultiCallReject(); // CALLPATH eCallPath = MainActivity.mCallController.getTalkPath(); // if (eCallPath == CALLPATH.MOIP_IHND101_LOBBY) MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 로비 통화일 경우 GUI 화면이 아래로(영상이 위로) // else if ((eCallPath == CALLPATH.MOIP_IHND101_GUARD && Global.ConfigValues.bGuardVideoEnable) || (eCallPath == CALLPATH.MOIP_IHN1010_LOBBY_GUARD && Global.ConfigValues.bGuardVideoEnable)) { // MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 경비(영상)통화일 경우 GUI 화면이 아래로(영상이 위로) // } // else if (eCallPath == CALLPATH.MOIP_V40_RESIDENCE && (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT)) { // MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 IHN-1010 이웃통화일 경우 GUI 화면이 아래로(영상이 위로) // } // else { // MainActivity.mIOInterface.ctrlPopupGUI(true); // 멀티콜 거절시 로비 또는 경비(영상)통화가 아닐 경우 GUI 화면이 위로 // } sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, 1000); } } else { LOG_WARN("[onMultiCallEvent] Invalid eFrontCallStatus [" + eFrontCallStatus + "]"); } // if (eFrontCallStatus == CALLSTATUS.CALLED) { // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE); // } // else if (eFrontCallStatus == CALLSTATUS.CALLING || eFrontCallStatus == CALLSTATUS.TALKING) { // if (eCallOwner == CALLOWNER.MOBILE) { // // 방문객원격통화 멀티콜 // MainActivity.mRemoteCallController.sendCmdToRemoteCall(CMD_MULTICALL, strRemoteSIPID, strRemoteIP, eCallType); // doMultiCallReject(); // } else { // MainActivity.mCallController.set2ndCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLED); // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT()); // } // } // else { // LOG_WARN("[onMultiCallEvent] Invalid eFrontCallStatus [" + eFrontCallStatus + "]"); // } } else { // 멀티콜 있음 doMultiCallReject(); } } else if (eCallType == CALLTYPE.PSTN) { TalkPSTN.bPSTNCalled = true; if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) { // 멀티콜 없음 if (eCallOwner == CALLOWNER.MOBILE) { // 방문객원격통화 멀티콜 MainActivity.mRemoteCallController.sendCmdToRemoteCall(CMD_MULTICALL, strRemoteSIPID, strRemoteIP, eCallType); doMultiCallReject(); } else { MultiCallInfo MCInfo = new MultiCallInfo(); MCInfo.setMulticallInfo(CALLTYPE.FRONT, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "NONE", strRemoteIP); MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo); Global.make2ndCallHistoryInfo(eCallType.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS); ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL, MainActivity.mCallController.mCallInfo.getFRONT()); } } else { // 멀티콜 있음 // 기존 멀티콜을 거절하고, 국선을 멀티콜로 설정한다. CALLTYPE eMulticallType = MainActivity.mCallController.mCallInfo.getMultiCallType(); if (eMulticallType == CALLTYPE.LOBBY || eMulticallType == CALLTYPE.GUARD || eMulticallType == CALLTYPE.RESIDENCE) MainActivity.mCallController.rejectBusyMoIPCall(); else LOG_WARN("[onMultiCallEvent] Invalid eMulticallType [" + eMulticallType + "]"); MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); MainActivity.mCallController.stop2ndCallTimer(); Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS); LOG_WARN("[onMultiCallEvent] Another multicall is processing. Change multicall to PSTN multicall!!"); MultiCallInfo MCInfo = new MultiCallInfo(); MCInfo.setMulticallInfo(CALLTYPE.FRONT, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "NONE", strRemoteIP); MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo); Global.make2ndCallHistoryInfo(eCallType.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS); MainActivity.mCallController.mPopupEventListener.onMulticallChange(eCallType, eCallStatus, ""); } } else { LOG_WARN("[onMultiCallEvent] Invalid CallType [" + eCallType + "]"); } } else if (eCallStatus == CALLSTATUS.CALLERID) { MainActivity.mCallController.mCallInfo.updateMultiCallName(strRemoteSIPID); Global.change2ndCallLogSIPID(CALLTYPE.PSTN.toString() + ":" + strRemoteSIPID); } else if (eCallStatus == CALLSTATUS.END) { MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE); if (MainActivity.mCallController.mCallInfo.getMultiCallType() == eCallType) { MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); MainActivity.mCallController.stop2ndCallTimer(); Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS); ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL); } else LOG_WARN("[onMultiCallEvent] Invalid CallType [" + eCallType + "]"); } else if (eCallStatus == CALLSTATUS.CANCEL) { MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE); MainActivity.mCallController.stop2ndCallTimer(); Global.add2ndCallHistoryInfo(CALLRESULT.IN_REJECT); ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL); } else if (eCallStatus == CALLSTATUS.TIMEOUT_2NDCALL) { doMultiCallReject(); Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS); MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE); ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL); } else { LOG_WARN("[onMultiCallEvent] Invalid CallStatus [" + eCallStatus + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onMultiCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onSubPhoneEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strTargetID, String strMessage) { try { LOG_INFO("[onSubPhoneEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], " + "strTargetID [" + strTargetID + "], strMessage [" + strMessage + "]"); if (eCallOwner == CALLOWNER.UNIVERSAL_DEVICE && eCallStatus == CALLSTATUS.DOOR_OPEN) { if (doSubPhoneDoorOpen(eCallOwner, CALLTYPE.FRONT)) MainActivity.mSubPhoneController.sendACKDoorOpen(eCallOwner, CALLTYPE.FRONT); } if (eCallType == CALLTYPE.NONE) return; if (eCallType == CALLTYPE.FRONT) { if (eCallStatus == CALLSTATUS.CALLING || eCallStatus == CALLSTATUS.TALKING) { if (eCallOwner != CALLOWNER.WALLPAD) { doTalk(eCallOwner); } } else if (eCallStatus == CALLSTATUS.END) { if (eCallOwner != CALLOWNER.WALLPAD) { doEnd(); } } else if (eCallStatus == CALLSTATUS.DOOR_OPEN) { if (doSubPhoneDoorOpen(eCallOwner, eCallType)) MainActivity.mSubPhoneController.sendACKDoorOpen(eCallOwner, eCallType); } else { Log.w(TAG, "[onSubPhoneEvent] Incorrect eCallStatus!!! eCallStatus = " + eCallStatus); } } else { Log.w(TAG, "[onSubPhoneEvent] Incorrect eCallType!!! eCallType = " + eCallType); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onSubPhoneEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strMessage)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onVideoSet(boolean bSet, String strRemoteSIPID) { try { LOG_INFO("[onVideoSet] bSet [" + bSet + "], strRemoteSIPID [" + strRemoteSIPID + "]"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onVideoSet(boolean bSet, String strRemoteSIPID)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onShowRemoteVideo(boolean bShow) { try { LOG_INFO("[onShowRemoteVideo] bShow [" + bShow + "]"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onShowRemoteVideo(boolean bShow)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onPopupResult(Intent data) { try { int nScreen = data.getIntExtra("SCREEN", -1); int nID = data.getIntExtra("POPUP_BTN", -1); Log.d(TAG, "[onPopupResult] nScreen [" + nScreen + "], nID [" + nID + "]"); if (nScreen == ID.POPUP.POPUP_MULTICALL) { if (nID == ID.POPUP.MUTICALL.ELEMENT.BUTTON.ACCEPT) { LOG_INFO("[onPopupResult] ID.POPUP.MUTICALL.ELEMENT.BUTTON.ACCEPT"); MainActivity.mCallController.stop2ndCallTimer(); doMultiCallAccept(); } else if (nID == ID.POPUP.MUTICALL.ELEMENT.BUTTON.REJECT) { LOG_INFO("[onPopupResult] ID.POPUP.MUTICALL.ELEMENT.BUTTON.REJECT"); if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화 MainActivity.mCallController.stop2ndCallTimer(); doMultiCallReject(); CALLPATH eCallPath; if(MainActivity.mCallController!=null) { eCallPath = MainActivity.mCallController.getTalkPath(); if (eCallPath == CALLPATH.MOIP_IHND101_LOBBY) { MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 로비 통화일 경우 GUI 화면이 아래로(영상이 위로) } else if ((eCallPath == CALLPATH.MOIP_IHND101_GUARD && Global.ConfigValues.bGuardVideoEnable) || (eCallPath == CALLPATH.MOIP_IHN1010_LOBBY_GUARD && Global.ConfigValues.bGuardVideoEnable)) { MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 경비(영상)통화일 경우 GUI 화면이 아래로(영상이 위로) } else if (eCallPath == CALLPATH.MOIP_V40_RESIDENCE && (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT)) { MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 IHN-1010 이웃통화일 경우 GUI 화면이 아래로(영상이 위로) } else { MainActivity.mIOInterface.ctrlPopupGUI(true); // 멀티콜 거절시 로비 또는 경비(영상)통화가 아닐 경우 GUI 화면이 위로 } } sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, 1000); } } else if (nScreen == ID.POPUP.POPUP_NOTICE_SUBPHONETALK) { if (nID == ID.POPUP.NOTICE_SUBPHONETALK.ELEMENT.BUTTON.END) { LOG_INFO("[onPopupResult] ID.POPUP.NOTICE_SUBPHONETALK.ELEMENT.BUTTON.END"); MainActivity.mCallController.stop2ndCallTimer(); doEnd(); } } else if (nScreen == ID.POPUP.POPUP_NOTICE_REMOTECALL) { if (nID == ID.POPUP.NOTICE_REMOTECALL.ELEMENT.BUTTON.END) { LOG_INFO("[onPopupResult] ID.POPUP.NOTICE_REMOTECALL.ELEMENT.BUTTON.END"); doEnd(); MainActivity.mRemoteCallController.sendCloseRemoteCall(); } } else if (nScreen == ID.POPUP.POPUP_MULTICALL_NOTICE) { if (nID == ID.POPUP.MUTICALL_NOTICE.ELEMENT.BUTTON.CONFIRM) { LOG_INFO("[onPopupResult] ID.POPUP.POPUP_MULTICALL_NOTICE.ELEMENT.BUTTON.CONFIRM"); /** * JEFF, 2020.01.01 * 모든 통화에서 멀티콜을 막음 */ if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화 MainActivity.mCallController.stop2ndCallTimer(); doMultiCallReject(); if(MainActivity.mCallController!=null) { CALLPATH eCallPath = MainActivity.mCallController.getTalkPath(); if (eCallPath == CALLPATH.MOIP_IHND101_LOBBY) MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 로비 통화일 경우 GUI 화면이 아래로(영상이 위로) else if ((eCallPath == CALLPATH.MOIP_IHND101_GUARD && Global.ConfigValues.bGuardVideoEnable) || (eCallPath == CALLPATH.MOIP_IHN1010_LOBBY_GUARD && Global.ConfigValues.bGuardVideoEnable)) { MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 경비(영상)통화일 경우 GUI 화면이 아래로(영상이 위로) } else if (eCallPath == CALLPATH.MOIP_V40_RESIDENCE && (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT)) { MainActivity.mIOInterface.ctrlPopupGUI(false); // 멀티콜 거절시 IHN-1010 이웃통화일 경우 GUI 화면이 아래로(영상이 위로) } else { MainActivity.mIOInterface.ctrlPopupGUI(true); // 멀티콜 거절시 로비 또는 경비(영상)통화가 아닐 경우 GUI 화면이 위로 } } sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, 1000); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onPopupResult(Intent data)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onOutSideTouchExit() { super.onOutSideTouchExit(); } private void doTalk(CALLOWNER eCallOwner) { try { CALLSTATUS eFrontCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); LOG("[doTalk] eFrontCallStatus [" + eFrontCallStatus + "]"); //ctrlAlphaBlending(false); //MainActivity.mIOInterface.ctrlPopupGUI(true); if (eFrontCallStatus == CALLSTATUS.IDLE) { MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.TRYING_CALL); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.RECEIVE_CALL_ACK, CALLTYPE.FRONT); } else if (eFrontCallStatus == CALLSTATUS.CALLED || eFrontCallStatus == CALLSTATUS.CALLING) { MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.CONNECT_CALL, CALLTYPE.FRONT); } else { LOG_INFO("[doTalk] Invalid CALLSTATUS [" + eFrontCallStatus + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doTalk()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void doEnd() { try { bBlockSavePicBTN = true; if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_photo_disabled); else BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_front_photo_disabled); if (MainActivity.mCallController.mCallInfo.getIDLECnt() != MainActivity.mCallController.mCallInfo.IDLECNT_MAX) { CALLSTATUS eCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); LOG("[doEnd] eCallStatus [" + eCallStatus + "]"); if (eCallStatus == CALLSTATUS.CALLED) { Global.stopMelodyRepeat(); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.REJECT_CALL, CALLTYPE.FRONT); Global.change1stCallLogAction(CALLACTION.REJECT); } else if (eCallStatus == CALLSTATUS.TALKING || eCallStatus == CALLSTATUS.CALLING) { if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.MOBILE) MainActivity.mRemoteCallController.sendCloseRemoteCall(); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT); } else if (eCallStatus == CALLSTATUS.RECORDING) { stopStrangerRecord(true, 0); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT); } else { LOG_INFO("[doEnd] Invalid CALLSTATUS [" + eCallStatus + "]"); if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.MOBILE) MainActivity.mRemoteCallController.sendCloseRemoteCall(); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT); } } else { LOG_INFO("[doEnd] IDLE Cnt is not MAX [" + MainActivity.mCallController.mCallInfo.IDLECNT_MAX + "]"); MainActivity.mCallController.mCallInfo.printCallStatus(); MainActivity.mCallController.MultiCallScenarioManager(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doEnd()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void doTalkByBTN(CALLOWNER eCallOwner) { try { Log.d(TAG, "[doTalkByBTN] MainActivity.mCallController.mCallInfo.getFRONT() = " + MainActivity.mCallController.mCallInfo.getFRONT()); if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.IDLE) { MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner); MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.FRONT, CALLSTATUS.TRYING_CALL); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.RECEIVE_CALL_ACK, CALLTYPE.FRONT); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED || MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING) { MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner); MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.CONNECT_CALL, CALLTYPE.FRONT); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT); } else { LOG_INFO("[doTalkByBTN] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doTalkByBTN(CALLOWNER eCallOwner)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void ctrlAlphaBlending(boolean bON) { try { LOG_INFO("[ctrlAlphaBlending] bON [" + bON + "]"); int BOARDTYPE = ConfigValues.DEVICE_BOARDTYPE; if (BOARDTYPE == BOARD_TYPE.V40_IGW300 || BOARDTYPE == BOARD_TYPE.V40 || BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { if (bON) { // IMG_VIDEO_MODULE.setImageResource(R.drawable.video_black_back_test_4); // 다담 Alphablending 적용을 위한 컬러키 수정 편의를 위하여 IMG_VIDEO_MODULE.setImageResource(0); IMG_VIDEO_MODULE.setBackgroundColor(Color.argb(0, 0, 0, 0)); } else { IMG_VIDEO_MODULE.setImageResource(R.drawable.image_lobby); } MainActivity.mIOInterface.ctrlPopupGUI(!bON); } else { Log.w(TAG, "[ctrlAlphaBlending] Not supported BOARDTYPE!! [" + BOARDTYPE + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] ctrlAlphaBlending(boolean bON)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private boolean doDoorOpen() { try { Log.d(TAG, "[doDoorOpen] CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); if (ConfigValues.eDoorLockType == DOORLOCKTYPE.NOT_USE) return false; if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING) { enableDoorOpenBTN(false); enableTalkBTN(false); MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); if (Global.ctrlFrontDoorOpen()) { // 출입 데이터 기록(모니터링 중 문열림) WallpadAccessData WpadAccessData = new WallpadAccessData(getContext()); WpadAccessData.Insert(WallpadAccessData.KIND.WPAD_CALL, null); WpadAccessData.closeDB(); sendHandlerMsgDelayed(HANDLERMSG.PLAYMENT_OPENDOOR, 0, 0, 1000); //if (ConfigValues.eDoorLockType == DOORLOCKTYPE.WIRELESS || ConfigValues.eDoorLockType == DOORLOCKTYPE.FINGERPRINT) { sendHandlerMsgDelayed(HANDLERMSG.RELEASE_OCCUPIEDMODE, 0, 0, 2000); //} sendHandlerMsgDelayed(HANDLERMSG.END_CALL, 0, 0, 3000); Global.change1stCallLogAction(CALLACTION.TALK_DOOR); MainActivity.mCallController.mCallInfo.setCallOwner(CALLOWNER.NONE); return true; } else { MainActivity.mSound.PlayMent(SND.setting.RETRY_ACTION); enableDoorOpenBTN(true); enableTalkBTN(true); return false; } } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED) { enableDoorOpenBTN(false); enableTalkBTN(false); Global.stopMelodyRepeat(); MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); if (Global.ctrlFrontDoorOpen()) { // 출입 데이터 기록(호출 중 문열림) WallpadAccessData WpadAccessData = new WallpadAccessData(getContext()); WpadAccessData.Insert(WallpadAccessData.KIND.WPAD_CALL, null); WpadAccessData.closeDB(); sendHandlerMsgDelayed(HANDLERMSG.PLAYMENT_OPENDOOR, 0, 0, 1000); //if (ConfigValues.eDoorLockType == DOORLOCKTYPE.WIRELESS || ConfigValues.eDoorLockType == DOORLOCKTYPE.FINGERPRINT) { sendHandlerMsgDelayed(HANDLERMSG.RELEASE_OCCUPIEDMODE, 0, 0, 2000); //} sendHandlerMsgDelayed(HANDLERMSG.END_CALL, 0, 0, 3000); Global.change1stCallLogAction(CALLACTION.DOOR); MainActivity.mCallController.mCallInfo.setCallOwner(CALLOWNER.NONE); return true; } else { MainActivity.mSound.PlayMent(SND.setting.RETRY_ACTION); enableDoorOpenBTN(true); enableTalkBTN(true); return false; } } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { enableDoorOpenBTN(false); if (Global.ctrlFrontDoorOpen()) { // 출입 데이터 기록(통화 중 문열림) WallpadAccessData WpadAccessData = new WallpadAccessData(getContext()); WpadAccessData.Insert(WallpadAccessData.KIND.WPAD_CALL, null); WpadAccessData.closeDB(); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) { ((MainActivity) mContext).sendHandlerMsg(IGW300CMD.AUDIO_OFF, 0, 0); // 현관카메라로 음원이 나가는 것을 방지하기 위하여 path off (seulki) // sendHandlerMsgDelayed(HANDLERMSG.SET_PATH_NORMAL, 0, 0, 2000); enableEndBTN(false); // 멘트 출력중일 경우 종료 버튼 이벤트 disable (seulki) //>> 220503.yjyoon // 안심통화 > 문열림버튼 클릭시 멘트가 작게 나오는 문제. // 멘트 재생 전 audio path를 normal 로 변경. sendHandlerMsg(HANDLERMSG.SET_PATH_NORMAL, 0, 0); sendHandlerMsg(HANDLERMSG.STOP_AUDIO_RECORD, 0, 0); //<< sendHandlerMsgDelayed(HANDLERMSG.PLAYMENT_OPENDOOR_TALKING, 0, 0, 1000); } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); sendHandlerMsgDelayed(HANDLERMSG.PLAYMENT_OPENDOOR_TALKING, 0, 0, 1000); } else { MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); MainActivity.mSound.PlayMent(SND.mode.OPENDOOR); } //if (ConfigValues.eDoorLockType == DOORLOCKTYPE.WIRELESS || ConfigValues.eDoorLockType == DOORLOCKTYPE.FINGERPRINT) { sendHandlerMsgDelayed(HANDLERMSG.RELEASE_OCCUPIEDMODE, 0, 0, 2000); //} sendHandlerMsgDelayed(HANDLERMSG.END_CALL, 0, 0, 3000); Global.change1stCallLogAction(CALLACTION.TALK_DOOR); MainActivity.mCallController.mCallInfo.setCallOwner(CALLOWNER.NONE); return true; } else { MainActivity.mSound.PlayMent(SND.setting.RETRY_ACTION); enableDoorOpenBTN(true); // enableTalkBTN(true); return false; } } else { LOG_INFO("[doDoorOpen] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doDoorOpen()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } return false; } private boolean doSubPhoneDoorOpen(CALLOWNER eCallOwner, CALLTYPE eCallType) { try { LOG_WARN("[doSubPhoneDoorOpen] eCallOwner [" + eCallOwner + "], eCallType [" + eCallType + "]"); if (eCallType != CALLTYPE.FRONT) { LOG_WARN("[doSubPhoneDoorOpen] eCallType is wrong eCallType [" + eCallType + "]"); return false; } if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING) { if (Global.getKitchenTVIdx(eCallOwner) >= 0 || Global.getBathTVIdx(eCallOwner) >= 0 || Global.getBathPhoneIdx(eCallOwner) >= 0 || eCallOwner == CALLOWNER.SUB_WALLPAD || eCallOwner == CALLOWNER.UNIVERSAL_DEVICE) { Global.stopMelodyRepeat(); doDoorOpen(); return true; } return false; } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED) { if (Global.getKitchenTVIdx(eCallOwner) >= 0 || Global.getBathTVIdx(eCallOwner) >= 0 || Global.getBathPhoneIdx(eCallOwner) >= 0 || eCallOwner == CALLOWNER.SUB_WALLPAD || eCallOwner == CALLOWNER.UNIVERSAL_DEVICE) { Global.stopMelodyRepeat(); doDoorOpen(); return true; } return false; } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { if (Global.getKitchenTVIdx(eCallOwner) >= 0 || Global.getBathTVIdx(eCallOwner) >= 0 || Global.getBathPhoneIdx(eCallOwner) >= 0 || eCallOwner == CALLOWNER.SUB_WALLPAD || eCallOwner == CALLOWNER.UNIVERSAL_DEVICE) { doDoorOpen(); return true; } return false; } else { LOG_INFO("[doSubPhoneDoorOpen] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); return false; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] doSubPhoneDoorOpen(CALLOWNER eCallOwner, CALLTYPE eCallType)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } private void doMultiCallAccept() { try { MainActivity.mCallController.mCallInfo.setMultiCallAcceptFlag(true); CALLSTATUS eCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); LOG("[doMultiCallAccept] eCallStatus [" + eCallStatus + "]"); if (eCallStatus == CALLSTATUS.RECORDING) { showFrontCam(false, false); if (MainActivity.bRecordingStatus) { MainActivity.bRecordingStatus = false; ((MainActivity) (this.getContext())).mediaStopRecord(true); sendHandlerMsg(HANDLERMSG.SAVE_VISITOR_VIDEO_NOT_FINISH_APP, 0, 0); } MainActivity.mCallController.onFrontEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.FRONT); } else { doEnd(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doMultiCallAccept()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void doMultiCallReject() { try { CALLTYPE eMultiCallType = MainActivity.mCallController.mCallInfo.getMultiCallType(); if (eMultiCallType == CALLTYPE.FRONT) { playFrontCamBell(false); MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE); } else if (eMultiCallType == CALLTYPE.LOBBY || eMultiCallType == CALLTYPE.GUARD || eMultiCallType == CALLTYPE.RESIDENCE) { MainActivity.mCallController.rejectBusyMoIPCall(); MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE); } else if (eMultiCallType == CALLTYPE.PSTN) { if(MainActivity.mPSTNController!=null) MainActivity.mPSTNController.sendReject(); if(MainActivity.mCallController!=null) MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.CANCEL_CALL, null, null); MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE); } else { LOG_WARN("[doMultiCallReject] Invalid eMultiCallType [" + eMultiCallType + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doMultiCallReject()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void doAutoCall() { try { if (RemoteIDInfo.bAutoCall) { RemoteIDInfo.bAutoCall = false; doTalk(CALLOWNER.WALLPAD); } else { LOG("[doAutoCall] AutoCall is not activated!!"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] doAutoCall()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void procAddCall() { try { CALLTYPE eMType = MainActivity.mCallController.mCallInfo.getMultiCallType(); CALLSTATUS eMStatus = MainActivity.mCallController.mCallInfo.getMultiCallStatus(); LOG("[procAddCall] eMType [" + eMType + "], eMStatus [" + eMStatus + "]"); if (eMType == CALLTYPE.FRONT && eMStatus == CALLSTATUS.CALLED) { Global.replace1stBy2ndCallHistory(); if (MainActivity.mCallController.mCallInfo.getMultiCallAccept()) { // 멀티콜 수락 (통화시작) showFrontCam(true, false); super.setFinishTimerDestroy(); MainActivity.mCallController.set1stCallTimer(eMType, MainActivity.mCallController.mCTT.RESIDENCEnFRONT); doTalk(CALLOWNER.WALLPAD); } else { // 멀티콜 수신중 (호출수신중) sendHandlerMsg(HANDLERMSG.SET_BTN_STATUS, 0, 0); showFrontCam(true, true); Global.playMelodyRepeat(eMType); super.setFinishTimerDestroy(); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(4); // camera open check 이후 TV Out 시작 } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) { if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT) ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(4); // camera open check 이후 TV Out 시작 } else { MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.FRONT, false); } LOG("[procAddCall] ======= set1stCallTimer ======="); MainActivity.mCallController.stop2ndCallTimer(); // 멀티콜 호출로 화면 전환될 경우 기존타이머 해제 후 타임아웃 재설정 MainActivity.mCallController.set1stCallTimer(eMType, MainActivity.mCallController.mCTT.CALLED); } MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); } else if (eMType == CALLTYPE.FRONT && eMStatus == CALLSTATUS.RECORDING) { if (MainActivity.mCallController.mCallInfo.getMultiCallAccept()) { // [스마트현관카메라] 거동수상자 녹화 멀티콜 수락 (통화시작) showFrontCam(true, false); super.setFinishTimerDestroy(); startStrangerRecord(false); } // else { // // 멀티콜 수신중 (호출수신중) // showFrontCam(true, false); // super.setFinishTimerDestroy(); // startStrangerTakePic(); // } } else { // LOG("[procAddCall] No MultiCall!! bFrontMonitoring [" + Global.bFrontMonitoring + "]"); LOG("[procAddCall] No MultiCall!!"); // 멀티콜 없음 if (RemoteIDInfo.bAutoCall) { doAutoCall(); // 멀티콜 상황이 아닌경우 자동호출을 수행함 MainActivity.mCallController.mCallInfo.resetMultiCallInfo(); } else { // 자동호출도 없는 경우, (현관 아이콘을 통해 현관통화 화면에 진입한 경우) 현관모니터링을 시작한다. // if (Global.bFrontMonitoring) doTalkByBTN(CALLOWNER.WALLPAD); } } // Global.bFrontMonitoring = false; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] procAddCall()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void showFrontCam(boolean bOn, boolean bBell) { try { LOG("[showFrontCam] bOn [" + bOn + "], bBell [" + bBell + "] " ); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) { if (bOn) { if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT) { sendHandlerMsg(HANDLERMSG.SELECT_CAM_WALLPAD, 0, 0); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.VIDEO_MOIP); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1000); // ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 스마트현관카메라 밝기조절 안됨 } else { sendHandlerMsg(HANDLERMSG.SELECT_CAM_FRONT, 0, 0); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.VIDEO_FRONT); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1500); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 현관카메라 영상 생성 후 밝기 조절 } } else { if (ConfigValues.bRemoteCall) { sendHandlerMsg(HANDLERMSG.STOP_VIDEO_RECORD, 0, 0); // startVideoEncoding(false, false, false); } MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.FRONT_BELL_OFF); ((MainActivity) mContext).removeFrontVideoLayout(); MainActivity.mIOInterface.selectFrontCam(bOn); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); } } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) { if (bOn) { // 현관카메라 On if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMARTIOT) { sendHandlerMsg(HANDLERMSG.SELECT_CAM_WALLPAD, 0, 0); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.VIDEO_MOIP); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1000); // ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 스마트현관카메라 밝기조절 안됨 } else if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS) { sendHandlerMsg(HANDLERMSG.SELECT_CAM_FRONT, 0, 0); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.VIDEO_FRONT); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1000); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 스마트현관카메라 밝기조절 안됨 } else { sendHandlerMsg(HANDLERMSG.SELECT_CAM_FRONT, 0, 0); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.VIDEO_FRONT); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1500); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 현관카메라 영상 생성 후 밝기 조절 } } else { // 현관카메라 Off if (ConfigValues.bRemoteCall) { sendHandlerMsgDelayed(HANDLERMSG.STOP_VIDEO_RECORD, 0, 0, 500); } ((MainActivity) mContext).showFrontVideo(false); if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.interfaceIGW300(IGW300CMD.FRONT_BELL_OFF); // sendHandlerMsgDelayed(HANDLERMSG.REMOVE_FRONTVIDEO, 0, 0, 1000); // sendHandlerMsgDelayed(HANDLERMSG.SELECT_CAM_WALLPAD, 0, 0, 1500); // sendHandlerMsgDelayed(HANDLERMSG.FRONTCAM_OFF, 0, 0, 1500); sendHandlerMsg(HANDLERMSG.REMOVE_FRONTVIDEO, 0, 0); sendHandlerMsg(HANDLERMSG.SELECT_CAM_WALLPAD, 0, 0); sendHandlerMsg(HANDLERMSG.FRONTCAM_OFF, 0, 0); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); } } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40) { if (bOn) { ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) { MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1000); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); } else { MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1500); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); } } else { if (ConfigValues.bRemoteCall) { sendHandlerMsg(HANDLERMSG.STOP_VIDEO_RECORD, 0, 0); // startVideoEncoding(false, false, false); } ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).removeFrontVideoLayout(); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); } } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { if (bOn) { ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); if (ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_HS || ConfigValues.eFrontCameraType == FRONTCAMERATYPE.SMART_DW) { MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1000); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); } else { MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).initFrontVideoLayout(); ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SHOW_FRONTVIDEO, 0, 0, 1500); ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); } } else { if (ConfigValues.bRemoteCall) { sendHandlerMsg(HANDLERMSG.STOP_VIDEO_RECORD, 0, 0); // startVideoEncoding(false, false, false); } ((MainActivity) mContext).showFrontVideo(false); ((MainActivity) mContext).removeFrontVideoLayout(); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); } } else { if (bOn) { MainActivity.mIOInterface.selectFrontCam(bOn); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); Global.ctrlCameraBrightness(nCurrentBrightness); ((MainActivity) mContext).initFrontVideoLayout(); } else { ((MainActivity) mContext).removeFrontVideoLayout(); MainActivity.mIOInterface.selectFrontCam(bOn); MainActivity.mIOInterface.ctrlFrontCamPower(bOn); } } if (bBell && MainActivity.mIOInterface!=null ) MainActivity.mIOInterface.ctrlFrontCamBell(bBell); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG,re); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); if (MainActivity.mIOInterface != null) { MainActivity.mIOInterface.selectFrontCam(false); MainActivity.mIOInterface.ctrlFrontCamPower(false); } } catch (Exception e) { Log.e(TAG, "[Exception] showFrontCam(boolean bOn, boolean bBell)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); // 영상 오류 발생할 경우 카메라 전원 off ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); if (MainActivity.mIOInterface != null) { MainActivity.mIOInterface.selectFrontCam(false); MainActivity.mIOInterface.ctrlFrontCamPower(false); } } } private void playFrontCamBell(boolean bBell) { try { MainActivity.mIOInterface.ctrlFrontCamPower(bBell); MainActivity.mIOInterface.ctrlFrontCamBell(bBell); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) { if (bBell) { ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON); } else { ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] playFrontCamBell(boolean bBell)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setBTNStatus() { try { LOG_INFO("[setBTNStatus] MainActivity.mCallController.mCallInfo.getFRONT() [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING) { ((MainActivity) mContext).setMenuBTNEnable(false); if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.MOBILE) { enableTalkBTN(false); enableDoorOpenBTN(false); enableFilterBTN(false); } else { BTN_TALK.setButtonEventOffDisable(); BTN_END.setButtonEventOffDisable(); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, 3000); if (ConfigValues.eDoorLockType != DOORLOCKTYPE.NOT_USE) BTN_DOOROPEN.setButtonEventOffDisable(); enableFilterBTN(true); } runFlickerCallLED(); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED) { ((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) enableDoorOpenBTN(false); if (ConfigValues.eDoorLockType != DOORLOCKTYPE.NOT_USE) sendHandlerMsgDelayed(HANDLERMSG.ENABLE_OPEN_DOOR, 0, 0, 3000); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, 3000); enableFilterBTN(true); runFlickerCallLED(); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { ((MainActivity) mContext).setMenuBTNEnable(false); enableTalkBTN(false); enableEndBTN(false); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_END_BTN, 0, 0, 3000); // 통화 시작 후 3초 후 종료 버튼 활성화 (다담 김명준선임 요청 19.09.30) enableDoorOpenBTN(false); if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.WALLPAD) { sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, 3000); if (ConfigValues.eDoorLockType != DOORLOCKTYPE.NOT_USE) sendHandlerMsgDelayed(HANDLERMSG.ENABLE_OPEN_DOOR, 0, 0, 3000); // 통화중 문열림 버튼 enable delay (바로 누르면 멘트 묵음 증상 발생 seulki) } else { enableSavePicBTN(false); } setOnCallLED(); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.RECORDING) { ((MainActivity) mContext).setMenuBTNEnable(false); enableTalkBTN(false); enableEndBTN(false); enableDoorOpenBTN(false); enableSavePicBTN(false); enableFilterBTN(false); // 녹화중 안심통화 버튼 비활성화 enableVolumeSeekBar(false); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_END_BTN, 0, 0, 4000); } else { ((MainActivity) mContext).setMenuBTNEnable(true); enableTalkBTN(false); enableEndBTN(false); enableDoorOpenBTN(false); enableSavePicBTN(false); enableFilterBTN(false); setOffCallLED(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setBTNStatus()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setBTNLEDStatus() { try { LOG_INFO("[setBTNLEDStatus] MainActivity.mCallController.mCallInfo.getFRONT() [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING || MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED) { runFlickerCallLED(); } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { setOnCallLED(); } else { setOffCallLED(); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setBTNLEDStatus()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void enableTalkBTN(boolean bEnable) { try { if (bEnable) BTN_TALK.setButtonEventOffDisable(); else { if (ConfigValues.bReliefCall) BTN_TALK.setButtonEventOffEnable(R.drawable.btn_call_disabled); else BTN_TALK.setButtonEventOffEnable(R.drawable.btn_front_call_disabled); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] enableTalkBTN(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // 통화종료 버튼(종료, 홈) 상태 처리 (seulki) private void enableEndBTN(boolean bEnable) { try { LOG("[setEndBtnStatus] bEnable [" + bEnable + "]"); if (bEnable) { // 이벤트 on if (ConfigValues.bReliefCall) BTN_END.setImageResource(R.drawable.btn_endl_normal); else BTN_END.setImageResource(R.drawable.btn_front_end_normal); BTN_END.setButtonEventOffDisable(); ((MainActivity) mContext).TopHomeBtn.setButtonEventOffDisable(); } else { // 이벤트 off if (ConfigValues.bReliefCall) BTN_END.setButtonEventOffEnable(R.drawable.btn_endl_disabled); else BTN_END.setButtonEventOffEnable(R.drawable.btn_front_end_disabled); ((MainActivity) mContext).TopHomeBtn.setButtonEventOffEnable(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setEndBtnStatus(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void enableDoorOpenBTN(boolean bEnable) { try { if (ConfigValues.eDoorLockType != DOORLOCKTYPE.NOT_USE) { // 도어락 문열림 미연동시 문열림 버튼 비활성화 if (bEnable) { if (ConfigValues.bReliefCall) BTN_DOOROPEN.setImageResource(R.drawable.btn_open_normal); else BTN_DOOROPEN.setImageResource(R.drawable.btn_front_open_normal); BTN_DOOROPEN.setButtonEventOffDisable(); } else { if (ConfigValues.bReliefCall) BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_open_disabled); else BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_front_open_disabled); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] enableDoorOpenBTN(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void enableSavePicBTN(boolean bEnable) { try { if (bEnable) { if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setImageResource(R.drawable.btn_photo_normal); else BTN_SAVE_PICTURE.setImageResource(R.drawable.btn_front_photo_normal); BTN_SAVE_PICTURE.setButtonEventOffDisable(); } else { if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_photo_disabled); else BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_front_photo_disabled); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] enableSavePicBTN(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void enableFilterBTN(boolean bEnable) { try { if (ConfigValues.bReliefCall) { if (bEnable) { if (MainActivity.mCallController.mCallInfo != null) { if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.RECORDING) return; // 거동수상자 녹화중인 경우에는 안심통화 필터버튼 비활성화 처리 } BTN_RELIEF_FILTER_01.setButtonEventOffDisable(); BTN_RELIEF_FILTER_02.setButtonEventOffDisable(); // BTN_RELIEF_FILTER_03.setButtonEventOffDisable(); // BTN_RELIEF_FILTER_04.setButtonEventOffDisable(); } else { BTN_RELIEF_FILTER_01.setButtonEventOffEnable(); BTN_RELIEF_FILTER_02.setButtonEventOffEnable(); // BTN_RELIEF_FILTER_03.setButtonEventOffEnable(); // BTN_RELIEF_FILTER_04.setButtonEventOffEnable(); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] enableFilterBTN(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void enableVolumeSeekBar(boolean bEnable) { try { if (bEnable) { if (SEEKBAR_VOLUME != null) SEEKBAR_VOLUME.setEnabled(true); } else { if (SEEKBAR_VOLUME != null) SEEKBAR_VOLUME.setEnabled(false); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] enableVolumeSeekBar(boolean bEnable)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } String MAIN_SCREEN_NOW_UPDATE = "MAIN_SCREEN_NOW_UPDATE"; private void releaseOccupiedMode(int nDelayTime) { LOG_INFO("[releaseOccupiedMode] nDelayTime [" + nDelayTime + "]"); WallpadStatusData DBMGR = new WallpadStatusData(mContext); try { // 재택방범중에 현관문을 열면 마그네틱 센서로 인해 비상이 울린다. // 이때문에 현관문을 열면 재택방범을 자동으로 해제한다. int nAlarmStatus = DBMGR.GetAlarmStatus(); if (nAlarmStatus == WallpadStatusData.GUARD_IN) { try { Thread.sleep(nDelayTime); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } DBMGR.SetAlarmStatus(WallpadStatusData.ALARM_NONE); // MainActivity.mSound.PlayMent(SND.mode.NORMALMODE_COMEBACK); sendHandlerMsgDelayed(HANDLERMSG.PLAYMENT_NORMALMODE_COMEBACK, 0, 0, 100); Intent intent = new Intent(MAIN_SCREEN_NOW_UPDATE, null); mContext.sendBroadcast(intent); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] releaseOccupiedMode(int nDelayTime)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } DBMGR.closeDB(); } // 방문자 사진 자동 저장 boolean bEnableAutoVisitorPic = false; boolean bRemote_FrontCalled = false; // 방문객원격통화 + 현관호출(띵똥)을 통해진입일 경우 TRUE private void startSaveVisitorPicture() { try { AutoPictureInfo mAutoPictureInfo = new AutoPictureInfo(); mAutoPictureInfo.setData(ConfigValues.strDong, ConfigValues.strHo, CALLTYPE.FRONT, MainActivity.mCallController.mCallInfo.getFRONT(), MainActivity.mCallController.makeSIPID(CALLTYPE.RESIDENCE, ConfigValues.strDong, ConfigValues.strHo), "null"); startAutoSaveVisitorPicture mStartAutoSaveVisitorPicture = new startAutoSaveVisitorPicture(mContext, mAutoPictureInfo, bRemote_FrontCalled); if (bEnableAutoVisitorPic) mStartAutoSaveVisitorPicture.start(); else { mAutoPictureInfo = null; mStartAutoSaveVisitorPicture = null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startSaveVisitorPicture()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // 거동수상자 사진 자동 저장 private void startSaveStrangerPicture() { try { Log.d(TAG, "[startSaveStrangerPicture]"); ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_TAKEPICTURE); AutoPictureInfo mAutoPictureInfo = new AutoPictureInfo(); mAutoPictureInfo.setData(ConfigValues.strDong, ConfigValues.strHo, CALLTYPE.FRONT, MainActivity.mCallController.mCallInfo.getFRONT(), MainActivity.mCallController.makeSIPID(CALLTYPE.RESIDENCE, ConfigValues.strDong, ConfigValues.strHo), "null"); startAutoSaveStrangerPicture mStartAutoSaveStrangerPicture = new startAutoSaveStrangerPicture(mContext, mAutoPictureInfo); mStartAutoSaveStrangerPicture.start(); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startSaveStrangerPicture()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void startTakeVisitorPicture() { try { Log.d(TAG, "[startTakeVisitorPicture]"); AutoPictureInfo mAutoPictureInfo = new AutoPictureInfo(); mAutoPictureInfo.setData(ConfigValues.strDong, ConfigValues.strHo, CALLTYPE.FRONT, MainActivity.mCallController.mCallInfo.getFRONT(), MainActivity.mCallController.makeSIPID(CALLTYPE.FRONT, ConfigValues.strDong, ConfigValues.strHo), "null"); startMissedCallVisitorPicture mStartMissedCallVisitorPicture = new startMissedCallVisitorPicture(mContext, mAutoPictureInfo, bRemote_FrontCalled); if (bEnableAutoVisitorPic) mStartMissedCallVisitorPicture.start(); else { mAutoPictureInfo = null; mStartMissedCallVisitorPicture = null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startTakeVisitorPicture()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } boolean bFlickeringCallLED = false; boolean bStatusFlickeringCallLED = false; private void runFlickerCallLED() { try { LOG("[runFlickerCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "]"); if (!bFlickeringCallLED) { bFlickeringCallLED = true; sendHandlerMsg(HANDLERMSG.FLICKER_LED_CALL, 0, 0); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] runFlickerCallLED()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setOnCallLED() { try { if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { bFlickeringCallLED = false; bStatusFlickeringCallLED = true; MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED); } else { Log.w(TAG, "[setOnCallLED] Not supported boardtype!! -> " + ConfigValues.DEVICE_BOARDTYPE); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setOnCallLED()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setOffCallLED() { try { LOG("[setOffCallLED] bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]"); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { bFlickeringCallLED = false; if (bStatusFlickeringCallLED) { bStatusFlickeringCallLED = false; MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED); } } else { Log.w(TAG, "[setOffCallLED] Not supported boardtype!! -> " + ConfigValues.DEVICE_BOARDTYPE); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setOffCallLED()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void ctrlCallLED() { try { LOG_INFO("[ctrlCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "], bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]"); LOG_INFO("[ctrlCallLED] MainActivity.mCallController.mCallInfo.getFRONT() [" + MainActivity.mCallController.mCallInfo.getFRONT() + "]"); if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) { if ((MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLING) || (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.CALLED)) { if (bFlickeringCallLED) { MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED); bStatusFlickeringCallLED = !bStatusFlickeringCallLED; sendHandlerMsgDelayed(HANDLERMSG.FLICKER_LED_CALL, 0, 0, 1000); } } else if (MainActivity.mCallController.mCallInfo.getFRONT() == CALLSTATUS.TALKING) { bStatusFlickeringCallLED = true; MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED); } else { bStatusFlickeringCallLED = false; MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED); LOG_INFO("[ctrlCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "], bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]"); } } else { Log.w(TAG, "[ctrlCallLED] Not supported boardtype!! -> " + ConfigValues.DEVICE_BOARDTYPE); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] ctrlCallLED()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // 음량 SeekBar.OnSeekBarChangeListener mOnVolumeChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int nCtrlLevel = getCtrlLevel(progress); if (nCurrentVolume != nCtrlLevel) { nCurrentVolume = nCtrlLevel; showVolume(nCurrentVolume); // ctrlVolume(false); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { // Log.d(TAG, "[onStopTrackingTouch] nCurrentVolume:" + nCurrentVolume); nCurrentVolume = getCtrlLevel(seekBar.getProgress()); ctrlVolume(true); } }; private void getVolume() { try { nCurrentVolume = Global.getFrontVolume(); // Log.d(TAG, "[getVolume] nCurrentVolume: " + nCurrentVolume); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] getVolume()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setVolume(int nValue) { try { Log.d(TAG, "[setVolume]"); if (!Global.setFrontVolume(nValue)) LOG_WARN("[setVolume] Fail to set Volume!! nValue: " + nValue); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setVolume(nValue)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void ctrlVolume(boolean bSave) { try { if (bSave) setVolume(nCurrentVolume); CALLSTATUS eCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); LOG("[ctrlVolume] eCallStatus: " + eCallStatus); if (eCallStatus == CALLSTATUS.TALKING) { Global.setV40WallPadVolume(nCurrentVolume); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.d(TAG, "[Exception] ctrlVolume()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void showVolume(int nValue) { try { // Log.d(TAG, "[showVolume] nValue [" + nValue + "]"); if (TXT_VOLUME_LEVEL != null) TXT_VOLUME_LEVEL.setText(Integer.toString(nValue)); else Log.w(TAG, "[showVolume] TXT_VOLUME_LEVEL is null!!"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] showVolume(nValue)"); } } private void drawVolume() { try { if (SEEKBAR_VOLUME != null) { SEEKBAR_VOLUME.setProgress(ctrlSeekBarThumb(nCurrentVolume)); showVolume(nCurrentVolume); } else Log.w(TAG, "[drawVolume] SEEKBAR_VOLUME is null!!"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] drawVolume"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // 밝기 SeekBar.OnSeekBarChangeListener mOnBrightChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int nCtrlLevel = getCtrlLevel(progress); if (nCurrentBrightness != nCtrlLevel) { nCurrentBrightness = nCtrlLevel; showBright(nCurrentBrightness); // ctrlBright(false); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { nCurrentBrightness = getCtrlLevel(seekBar.getProgress()); ctrlBright(true); } }; private void getBrightness() { try { nCurrentBrightness = Global.getFrontCamBrightness(); LOG("[getBrightness] nCurrentBrightness: " + nCurrentBrightness); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] getBrightness()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setBrightness(int nValue) { try { if (!Global.setFrontCamBrightness(nValue)) LOG_WARN("[setVolume] Fail to set Brightness!! nValue: " + nValue); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setBrightness(nValue)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void ctrlBright(boolean bSave) { try { if (bSave) setBrightness(nCurrentBrightness); CALLSTATUS eCallStatus = MainActivity.mCallController.mCallInfo.getFRONT(); LOG("[ctrlBright] eCallStatus: " + eCallStatus); if (ConfigValues.eFrontCameraType != FRONTCAMERATYPE.SMARTIOT) { // 스마트현관카메라 밝기조절 안됨 if ((eCallStatus == CALLSTATUS.CALLING) || (eCallStatus == CALLSTATUS.CALLED) || (eCallStatus == CALLSTATUS.TALKING)) { ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.CTRL_FRONTVIDEO_BRIGHTNESS, nCurrentBrightness, 0); // 현관카메라 영상 생성 후 밝기 조절 } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.d(TAG, "[Exception] ctrlBright(boolean bSave)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void showBright(int nValue) { try { // Log.d(TAG, "[showVolume] nValue [" + nValue + "]"); if (TXT_BRIGHT_LEVEL != null) TXT_BRIGHT_LEVEL.setText(Integer.toString(nValue)); else Log.w(TAG, "[showVolume] TXT_BRIGHT_LEVEL is null!!"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] showBright(nValue)"); } } private void drawBright() { try { if (SEEKBAR_BRIGHT != null) { SEEKBAR_BRIGHT.setProgress(ctrlSeekBarThumb(nCurrentBrightness)); showBright(nCurrentBrightness); } else Log.w(TAG, "[drawVolume] SEEKBAR_BRIGHT is null!!"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] drawBright()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private int getCtrlLevel(int nValue) { try { Log.d(TAG, "[getCtrlLevel] nValue: " + nValue); if (nValue == 0) return 1; int result = nValue / 10; if ((nValue % 10) != 0) result++; Log.d(TAG, "[getCtrlLevel] result: " + result); return result; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return 1; } catch (Exception e) { Log.e(TAG, "[Exception] getCtrlLevel(nValue)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return 1; } } private int ctrlSeekBarThumb(int nValue) { try { int progress; if (nValue == 1) progress = 1; else if (nValue == 10) progress = 100; else progress = (nValue - 1) * 11; return progress; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return 1; } catch (Exception e) { Log.e(TAG, "[Exception] ctrlSeekBarThumb()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return 1; } } /* ================================================================================================ * 스마트현관카메라 거동수상자 영상 녹화 / 사진 촬영 ================================================================================================ */ // 녹화 private final String VIDEO_TEMP_PATH = define.BESTIN_LOCATION + "VisitorVideo.mp4"; // 사진 private int TAKINGPIC_PERIOD = 0; private boolean startStrangerRecord(boolean bRemoteCall) { try { Log.d(TAG, "[startStrangerRecord] bRecordingStatus [" + MainActivity.bRecordingStatus + "], bRemoteCall [" + bRemoteCall + "]"); if (!MainActivity.bRecordingStatus) { MainActivity.bRecordingStatus = true; if (((MainActivity) mContext).mRecordTimer != null) { ((MainActivity) mContext).mRecordTimer.cancel(); // ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_VIDEORECORD); if (bRemoteCall) sendHandlerMsgDelayed(HANDLERMSG.MEDIA_RECORD_START_REMOTECALL, 0, 0, 0); else sendHandlerMsgDelayed(HANDLERMSG.MEDIA_RECORD_START, 0, 0, 0); // 녹화 시작 return true; } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startStrangerRecord()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } return false; } private void stopStrangerRecord(boolean bSave, int bCallFront) { try { 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); if (((MainActivity) mContext).mCurRecordTime <= 3 || !bSave) { LOG_WARN("[stopStrangerRecord] Not Save Recording File!!"); File tempFile = new File(VIDEO_TEMP_PATH); if (tempFile.isFile()) { tempFile.delete(); } // yjyoon. 녹화 중 새로운 콜인 경우 앱을 종료하지 않는다. if (bCallFront == 0) { finishWallpadCallApp(); } } else { // yjyoon // 영상 저장 후 앱 종료. 앱 종료를 막기 위해 arg1 = 1 설정 sendHandlerMsg(HANDLERMSG.SAVE_VISITOR_VIDEO_FINISH_APP, bCallFront == 0 ? 0 : 1, 0); } Log.v("yjyoon", "TalkFront > stopStrangerRecord: bReadyToRecord = false"); MainActivity.bReadyToRecord = false; 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); } catch (Exception e) { Log.e(TAG, "[Exception] stopStrangerRecord()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } Timer TAKEPICTimer = null; private void startStrangerTakePic() { try { LOG("[startStrangerTakePic] TAKINGPIC_PERIOD [" + TAKINGPIC_PERIOD + "]"); if (TAKEPICTimer != null) TAKEPICTimer.cancel(); TAKEPICTimer = new Timer(); TAKEPICTimer.scheduleAtFixedRate(new TAKEPICTimerTask(), 3000, 1000); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startStrangerTakePic()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } int takePicCnt = 0; class TAKEPICTimerTask extends TimerTask { public void run() { if (TAKEPICTimer == null) return; takePicCnt++; Log.d(TAG, "[TAKEPICTimerTask] takePicCnt [" + takePicCnt + "]"); if (takePicCnt <= 5) { sendHandlerMsg(HANDLERMSG.SAVE_STRANGERPICTURE, 0, 0); } else { TAKEPICTimer.cancel(); TAKEPICTimer = null; sendHandlerMsgDelayed(HANDLERMSG.FINISH_TAKE_STRANGERPIC, 0, 0, 1000); } } } /* ================================================================================================ * 방문객 원격통화 ================================================================================================ */ // ============================== 음성 ============================== /* [방문객 원격통화] - bRemoteCall TRUE일 경우 1. 현관 음성 녹음 후(Analog -> Digital) 2. 모바일로 전송 (sendMedia Library 사용) [안심통화] - bRemoteCall FALSE일 경우 1. 현관 음성 녹음(Analog -> Digital) 2. AudioTrack play */ private void startAudioRecording(boolean bRemoteCall) { try { LOG("[startAudioRecording] bRemoteCall [" + bRemoteCall + "]"); if (MainActivity.mAudioRecordController == null) LOG_WARN("[startAudioRecording] mAudioRecordController is null!"); if (MainActivity.mAudioRecordController != null) { MainActivity.mAudioRecordController.startAudioRecording(bRemoteCall); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startAudioRecording(boolean bMobile)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void stopAudioRecording() { try { if (MainActivity.mAudioRecordController != null) { MainActivity.mAudioRecordController.stopAudioRecording(); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] stopAudioRecording(boolean bEnd)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // ============================== 영상 ============================== public static void startVideoEncoding(boolean bSet, boolean bEncoding, boolean bDecoding) { try { Log.d(TAG, "[startVideoEncoding] bSet [" + bSet + "], bEncoding [" + bEncoding + "], bDecoding [" + bDecoding + "]"); if (MainActivity.mVideoController == null) Log.w(TAG, "[startVideoEncoding] mVideoController is null!"); if (MainActivity.mVideoController != null) { MainActivity.mVideoController.startVideoEncoding(bSet, bEncoding, bDecoding); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] startVideoEncoding(boolean bSet, boolean bEncoding, boolean bDecoding)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } /* ================================================================================================ * 안심통화 ================================================================================================ */ int nSelectedFilter = 0; // 0: 변조안함 / 1~4: 필터 No boolean bReliefCallInit = false; private void selectReliefCallFilter(int nID, boolean bSelect) { try { Log.d(TAG, "[selectReliefCallFilter] bSelect [" + bSelect + "]"); int nFilter = nID - ID.SCREEN.TALKFRONT.ELEMENT.BUTTON.RELIEF_FILTER_01 + 1; // 현재 선택한 필터 if (nFilter < 0) nFilter = 0; Log.d(TAG, "[selectReliefCallFilter] nID [" + nID + "], nFilter [" + nFilter + "], nSelectedFilter [" + nSelectedFilter + "]"); if (nFilter == nSelectedFilter) { nSelectedFilter = 0; } else { nSelectedFilter = nFilter; // 기존 선택했던 필터 LOG("[selectReliefCallFilter] nSelectedFilter [" + nSelectedFilter + "], bReliefCallInit [" + bReliefCallInit + "]"); // 안심통화 초기화 if (nSelectedFilter > 0) { if (!bReliefCallInit) { if (MainActivity.mReliefCallIF != null) { Log.d(TAG, "[selectReliefCallFilter] VRSoftInit = " + MainActivity.mReliefCallIF.VRSoftInit(Declare.RELIEFCALL.RELIEFCALL_CERTIFYNAME, Declare.RELIEFCALL.RELIEFCALL_BUFFERSIZE_FRONT)); bReliefCallInit = true; } } } } setFilterBTNStatus(nSelectedFilter); sendHandlerMsg(HANDLERMSG.SEND_BROADCAST_FILTER, 0, 0); // BR if (bSelect) { if (nSelectedFilter == 0) { if (MainActivity.mCallController.getTalkPath() != CALLPATH.FRONT) { sendHandlerMsg(HANDLERMSG.SET_PATH_DOOR, 0, 0); stopAudioRecording(); } } else if (1 <= nSelectedFilter && nSelectedFilter <= 4) { if (MainActivity.mCallController.getTalkPath() != CALLPATH.DOOR_RELIEFCALL) { sendHandlerMsg(HANDLERMSG.SET_PATH_DOOR_RELIEFCALL, 0, 0); startAudioRecording(false); // 220415 yjyoon. 모드 전환시 볼륨 재설정. 그러지 않을 경우 월패드에서 현관 음성이 들리지 않음 new Handler().postDelayed(new Runnable() { @Override public void run() { ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.SET_RELIEFCALL_VOLUME, 0, 0); // 안심통화시 볼륨 11로 설정 sendHandlerMsg(HANDLERMSG.SET_VOLUME_TABLE, 0, 0); } }, 300); } } else { LOG_WARN("[selectReliefCallFilter] nSelectedFilter is not correct!! [nSelectedFilter] " + nSelectedFilter); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] selectReliefCallFilter(int nID)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void setFilterBTNStatus(int nFilter) { try { Log.d(TAG, "[setFilterBTNStatus] nFilter [" + nFilter + "]"); switch (nFilter) { case 1: BTN_RELIEF_FILTER_01.setButtonRearImage(); BTN_RELIEF_FILTER_02.setButtonFrontImage(); // BTN_RELIEF_FILTER_03.setButtonFrontImage(); // BTN_RELIEF_FILTER_04.setButtonFrontImage(); break; case 2: BTN_RELIEF_FILTER_01.setButtonFrontImage(); BTN_RELIEF_FILTER_02.setButtonRearImage(); // BTN_RELIEF_FILTER_03.setButtonFrontImage(); // BTN_RELIEF_FILTER_04.setButtonFrontImage(); break; case 3: BTN_RELIEF_FILTER_01.setButtonFrontImage(); BTN_RELIEF_FILTER_02.setButtonFrontImage(); // BTN_RELIEF_FILTER_03.setButtonRearImage(); // BTN_RELIEF_FILTER_04.setButtonFrontImage(); break; case 4: BTN_RELIEF_FILTER_01.setButtonFrontImage(); BTN_RELIEF_FILTER_02.setButtonFrontImage(); // BTN_RELIEF_FILTER_03.setButtonFrontImage(); // BTN_RELIEF_FILTER_04.setButtonRearImage(); break; default: BTN_RELIEF_FILTER_01.setButtonFrontImage(); BTN_RELIEF_FILTER_02.setButtonFrontImage(); // BTN_RELIEF_FILTER_03.setButtonFrontImage(); // BTN_RELIEF_FILTER_04.setButtonFrontImage(); break; } sendHandlerMsg(HANDLERMSG.SET_FILTER_BTN_DISABLE, 0, 0); // 필터버튼 클릭 후 3초간 버튼 Disable sendHandlerMsgDelayed(HANDLERMSG.SET_FILTER_BTN_ENABLE, 0, 0, 3000); // 3초 후 버튼 Enable (통화패스 변경 지연 때문) } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setFilterBTNStatus()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // Handler public final class HANDLERMSG { public final static int PROC_ADDCALL = 100; public final static int DOOR_OPEN = 110; public final static int SHOW_FRONTCAM_CALLED = 120; public final static int SHOW_FRONTCAM_SUBPHONE = 130; public final static int START_CALL_VIDEO = 140; public final static int END_CALL_VIDEO = 145; public final static int END_CALL = 150; public final static int START_VIDEO_RECORD = 151; public final static int STOP_VIDEO_RECORD = 152; public final static int STOP_AUDIO_RECORD = 153; public final static int SET_PATH_NORMAL = 155; public final static int SET_PATH_DOOR = 156; public final static int SET_PATH_DOOR_RELIEFCALL = 157; public final static int SET_PATH_DOOR_REMOTECALL = 158; public final static int START_AUDIO_RECORD = 159; public final static int SAVE_VISITORPICTURE = 160; public final static int SAVE_STRANGERPICTURE = 163; public final static int TAKE_VISITORPICTURE = 165; public final static int ENABLE_SAVE_VISITORPICTURE = 170; public final static int ENABLE_OPEN_DOOR = 175; public final static int ENABLE_END_BTN = 176; public final static int SET_BTN_STATUS = 177; public final static int ENABLE_BTN_TALK = 178; public final static int PLAYMENT_OPENDOOR = 180; public final static int PLAYMENT_OPENDOOR_TALKING = 181; public final static int PLAYMENT_RETRYDOOR = 185; public final static int RELEASE_OCCUPIEDMODE = 186; public final static int PLAYMENT_NORMALMODE_COMEBACK = 187; public final static int FLICKER_LED_CALL = 190; public final static int REFRESH_BTNLED_STATUS = 200; public final static int SELECT_CAM_FRONT = 210; public final static int SELECT_CAM_WALLPAD = 220; public final static int FRONTCAM_OFF = 230; public final static int REMOVE_FRONTVIDEO = 240; public final static int SET_VOLUME_TABLE = 300; public final static int SET_FILTER_BTN_DISABLE = 410; public final static int SET_FILTER_BTN_ENABLE = 420; public final static int SAVE_VISITOR_VIDEO_FINISH_APP = 500; public final static int SAVE_VISITOR_VIDEO_NOT_FINISH_APP = 510; public final static int SEND_BROADCAST_FILTER = 600; public final static int FINISH_TAKE_STRANGERPIC = 700; public final static int MEDIA_RECORD_START = 800; public final static int MEDIA_RECORD_START_REMOTECALL = 810; } public Handler TalkFrontHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { LOG("[TalkFrontHandler] TalkFrontHandler : what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "]"); switch (msg.what) { case HANDLERMSG.PROC_ADDCALL: procAddCall(); break; case HANDLERMSG.DOOR_OPEN: doDoorOpen(); break; case HANDLERMSG.START_CALL_VIDEO: showFrontCam(true, false); break; case HANDLERMSG.END_CALL_VIDEO: showFrontCam(false, false); break; case HANDLERMSG.END_CALL: doEnd(); break; case HANDLERMSG.START_VIDEO_RECORD: ((MainActivity)mContext).startVideoEncoding(true, true, true); break; case HANDLERMSG.STOP_VIDEO_RECORD: ((MainActivity)mContext).startVideoEncoding(false, false, false); break; case HANDLERMSG.STOP_AUDIO_RECORD: stopAudioRecording(); break; case HANDLERMSG.SET_PATH_NORMAL: MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL); break; case HANDLERMSG.SET_PATH_DOOR: MainActivity.mCallController.setTalkPath(CALLPATH.FRONT); break; case HANDLERMSG.SET_PATH_DOOR_RELIEFCALL: MainActivity.mCallController.setTalkPath(CALLPATH.DOOR_RELIEFCALL); break; case HANDLERMSG.SET_PATH_DOOR_REMOTECALL: Log.d(TAG, "[TalkFrontHandler] SET_PATH_DOOR_REMOTECALL"); MainActivity.mCallController.setTalkPath(CALLPATH.DOOR_REMOTECALL); break; case HANDLERMSG.START_AUDIO_RECORD: Log.d(TAG, "[TalkFrontHandler] START_AUDIO_RECORD"); startAudioRecording(true); break; case HANDLERMSG.SAVE_VISITORPICTURE: Log.d(TAG, "[TalkFrontHandler] SAVE_VISITORPICTURE [bEnableAutoVisitorPic] = " + bEnableAutoVisitorPic + ", [bRemote_FrontCalled] = " + bRemote_FrontCalled); if (bEnableAutoVisitorPic) startSaveVisitorPicture(); break; case HANDLERMSG.SAVE_STRANGERPICTURE: Log.d(TAG, "[TalkFrontHandler] SAVE_STRANGERPICTURE"); if (((MainActivity) mContext).getStrangerTakePic()) startSaveStrangerPicture(); break; case HANDLERMSG.TAKE_VISITORPICTURE: Log.d(TAG, "[TalkFrontHandler] TAKE_VISITORPICTURE [bEnableAutoVisitorPic] = " + bEnableAutoVisitorPic + ", [bRemote_FrontCalled] = " + bRemote_FrontCalled); if (bEnableAutoVisitorPic) startTakeVisitorPicture(); break; case HANDLERMSG.ENABLE_SAVE_VISITORPICTURE: Log.d(TAG, "[TalkFrontHandler] ENABLE_SAVE_VISITORPICTURE"); if (!bBlockSavePicBTN) { BTN_SAVE_PICTURE.setButtonEventOffDisable(); } break; case HANDLERMSG.ENABLE_OPEN_DOOR: Log.d(TAG, "[TalkFrontHandler] ENABLE_OPEN_DOOR"); BTN_DOOROPEN.setButtonEventOffDisable(); break; case HANDLERMSG.ENABLE_END_BTN: Log.d(TAG, "[TalkFrontHandler] ENABLE_END_BTN"); enableEndBTN(true); break; case HANDLERMSG.SET_BTN_STATUS: Log.d(TAG, "[TalkFrontHandler] SET_BTN_STATUS"); setBTNStatus(); break; case HANDLERMSG.ENABLE_BTN_TALK: Log.d(TAG, "[TalkFrontHandler] ENABLE_BTN_TALK"); BTN_TALK.setButtonEventOffEnable(); break; case HANDLERMSG.PLAYMENT_OPENDOOR: MainActivity.mSound.PlayMent(SND.mode.OPENDOOR); break; case HANDLERMSG.PLAYMENT_OPENDOOR_TALKING: int time = MainActivity.mSound.PlayMent(SND.mode.OPENDOOR); Log.d(TAG, "[TalkFrontHandler] PLAYMENT_OPENDOOR_TALKING -> time: " + time); sendHandlerMsgDelayed(HANDLERMSG.ENABLE_END_BTN, 0, 0, time + 500); break; case HANDLERMSG.PLAYMENT_RETRYDOOR: MainActivity.mSound.PlayMent(SND.setting.RETRY_ACTION); break; case HANDLERMSG.RELEASE_OCCUPIEDMODE: releaseOccupiedMode(Sound().getPlayMentRemainingTime()); break; case HANDLERMSG.PLAYMENT_NORMALMODE_COMEBACK: MainActivity.mSound.PlayMent(SND.mode.NORMALMODE_COMEBACK); break; case HANDLERMSG.FLICKER_LED_CALL: ctrlCallLED(); break; case HANDLERMSG.REFRESH_BTNLED_STATUS: setBTNLEDStatus(); break; case HANDLERMSG.SELECT_CAM_FRONT: if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.selectFrontCam(true); else Log.w(TAG, "[TalkFrontHandler] MainActivity.mIOInterface is null!! -> SELECT_CAM_FRONT"); break; case HANDLERMSG.SELECT_CAM_WALLPAD: if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.selectFrontCam(false); else Log.w(TAG, "[TalkFrontHandler] MainActivity.mIOInterface is null!! -> SELECT_CAM_WALLPAD"); break; case HANDLERMSG.FRONTCAM_OFF: if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.ctrlFrontCamPower(false); else Log.w(TAG, "[TalkFrontHandler] MainActivity.mIOInterface is null!! -> FRONTCAM_OFF"); break; case HANDLERMSG.REMOVE_FRONTVIDEO: ((MainActivity) mContext).removeFrontVideoLayout(); break; case HANDLERMSG.SET_VOLUME_TABLE: Global.setV40WallPadVolume(nCurrentVolume); break; case HANDLERMSG.SET_FILTER_BTN_DISABLE: enableFilterBTN(false); break; case HANDLERMSG.SET_FILTER_BTN_ENABLE: enableFilterBTN(true); break; case HANDLERMSG.SAVE_VISITOR_VIDEO_FINISH_APP: 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: Log.d(TAG, "[TalkFrontHandler] SAVE_VISITOR_VIDEO_NOT_FINISH_APP"); ((MainActivity) mContext).saveRecordingFile(false); break; case HANDLERMSG.SEND_BROADCAST_FILTER: // 필터선택하면 BR 전송 Log.d(TAG, "[TalkFrontHandler] SEND_BROADCAST_FILTER [nSelectedFilter] " + nSelectedFilter); setFilterBTNStatus(nSelectedFilter); sendReliefFilterSelectBR(nSelectedFilter); break; case HANDLERMSG.FINISH_TAKE_STRANGERPIC: ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_TAKEPICTURE); finishWallpadCallApp(); break; case HANDLERMSG.MEDIA_RECORD_START: Log.d(TAG, "[TalkFrontHandler] MEDIA_RECORD_START"); ((MainActivity) (mContext)).mediaStartRecord(); if (((MainActivity) mContext).mRecordTimer != null) ((MainActivity) mContext).mRecordTimer.start(); break; case HANDLERMSG.MEDIA_RECORD_START_REMOTECALL: Log.d(TAG, "[TalkFrontHandler] MEDIA_RECORD_START_REMOTECALL"); ((MainActivity) mContext).mFrontCamOpenCheckHandler.sendEmptyMessage(6); // camera open check 이후 encoderStartOperation 시작 (방문객 원격통화 사용할 경우) ((MainActivity) mContext).showStrangerNoticeText(true, true); if (((MainActivity) mContext).mRecordTimer != null) ((MainActivity) mContext).mRecordTimer.start(); break; default: break; } } }; public void sendHandlerMsg(int what, int arg1, int arg2) { try { LOG("[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "]"); Message HandleMsg = TalkFrontHandler.obtainMessage(); HandleMsg.what = what; HandleMsg.arg1 = arg1; HandleMsg.arg2 = arg2; TalkFrontHandler.sendMessage(HandleMsg); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] sendHandlerMsg(msg)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void sendHandlerMsgDelayed(int what, int arg1, int arg2, long delay) { try { LOG("[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], delay [" + delay + "]"); Message HandleMsg = TalkFrontHandler.obtainMessage(); HandleMsg.what = what; HandleMsg.arg1 = arg1; HandleMsg.arg2 = arg2; TalkFrontHandler.sendMessageDelayed(HandleMsg, delay); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] sendHandlerMsgDelayed(msg)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void sendReliefFilterSelectBR(int nSelectedFilter) { try { Log.i(TAG, "[sendReliefFilterSelectBR] nSelectedFilter = " + nSelectedFilter); Intent intent = new Intent(); intent.setAction(Declare.BR.NOTIFY_CHANGE_FRONT_FILTER); intent.putExtra(Declare.BR.RELIEFCALL_FILTER, nSelectedFilter); getContext().sendBroadcast(intent); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] sendReliefFilterSelectBR(int nSelectedFilter)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } int nCheckCnt = 0; protected Handler mCheckHandler = new Handler() { @Override public void handleMessage(Message msg) { // Log.d(TAG, "[mCheckHandler.handleMessage]"); if (msg.what == 0) { nCheckCnt++; if (nCheckCnt > 200) { mCheckHandler.removeMessages(0); mCheckHandler.removeMessages(1); } else { if (MainActivity.mCallController.getTalkPath() == CALLPATH.FRONT) mCheckHandler.sendEmptyMessageDelayed(1, 50); else mCheckHandler.sendEmptyMessageDelayed(0, 50); } } else if (msg.what == 1) { Log.d(TAG, "[mCheckHandler.handleMessage] Handler finish!! PATH [FRONT]"); sendHandlerMsg(HANDLERMSG.SET_VOLUME_TABLE, 0, 0); } } }; private void finishWallpadCallApp() { try { Log.d(TAG, "[finishWallpadCallApp]"); doEnd(); if (MainActivity.mCallController.mCallInfo.getPSTNCallHold()) return; ((MainActivity) mContext).finishWallPadCall(); // super.finish(); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] finishWallpadCallApp()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } }