TalkLobby.java 116 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161
  1. package kr.co.icontrols.wallpadcall.screen;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.graphics.Color;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.os.Message;
  8. import android.util.Log;
  9. import android.view.Gravity;
  10. import android.view.KeyEvent;
  11. import android.view.LayoutInflater;
  12. import android.view.MotionEvent;
  13. import android.view.View;
  14. import android.widget.LinearLayout;
  15. import android.widget.RelativeLayout;
  16. import android.widget.RelativeLayout.LayoutParams;
  17. import android.widget.SeekBar;
  18. import com.artncore.wallpadimap.RetProci;
  19. import kr.co.icontrols.callengine.engine.AutoSaveVisitorPicture.startAutoSaveVisitorPicture;
  20. import kr.co.icontrols.callengine.engine.CallController.CallEventListener;
  21. import kr.co.icontrols.callengine.engine.CallManager.CALLEVENTTYPE;
  22. import kr.co.icontrols.callengine.engine.CallManager.CALLOWNER;
  23. import kr.co.icontrols.callengine.engine.CallManager.CALLPATH;
  24. import kr.co.icontrols.callengine.engine.CallManager.CALLSTATUS;
  25. import kr.co.icontrols.callengine.engine.CallManager.CALLTYPE;
  26. import kr.co.icontrols.callengine.engine.MissedCallVisitorPicture.startMissedCallVisitorPicture;
  27. import kr.co.icontrols.callengine.remotecall.RemoteCallManager;
  28. import kr.co.icontrols.wallpadcall.MainActivity;
  29. import kr.co.icontrols.wallpadcall.MainActivity.MAINEVENT;
  30. import kr.co.icontrols.wallpadcall.MainActivity.MainEventListener;
  31. import kr.co.icontrols.wallpadcall.R;
  32. import kr.co.icontrols.wallpadcall.declare.Common;
  33. import kr.co.icontrols.wallpadcall.declare.DataClasses.AutoPictureInfo;
  34. import kr.co.icontrols.wallpadcall.declare.DataClasses.MultiCallInfo;
  35. import kr.co.icontrols.wallpadcall.declare.DataClasses.RemoteIDInfo;
  36. import kr.co.icontrols.wallpadcall.declare.DataClasses.SmartRFCamLEDMode;
  37. import kr.co.icontrols.wallpadcall.declare.DataClasses.SmartRFCamStatusMode;
  38. import kr.co.icontrols.wallpadcall.declare.Declare;
  39. import kr.co.icontrols.wallpadcall.declare.Declare.DEVICENAME;
  40. import kr.co.icontrols.wallpadcall.declare.Global;
  41. import kr.co.icontrols.wallpadcall.declare.Global.BOARD_TYPE;
  42. import kr.co.icontrols.wallpadcall.declare.Global.CALLACTION;
  43. import kr.co.icontrols.wallpadcall.declare.Global.CALLDIRECTION;
  44. import kr.co.icontrols.wallpadcall.declare.Global.CALLRESULT;
  45. import kr.co.icontrols.wallpadcall.declare.Global.ConfigValues;
  46. import kr.co.icontrols.wallpadcall.declare.ID;
  47. import kr.co.icontrols.wallpadcall.imap.Request_lobby_open;
  48. import kr.co.icontrols.wallpadsupport.WpadImageView;
  49. import kr.co.icontrols.wallpadsupport.WpadImageView.TOUCH_KIND;
  50. import kr.co.icontrols.wallpadsupport.WpadScale;
  51. import kr.co.icontrols.wallpadsupport.WpadScreen;
  52. import kr.co.icontrols.wallpadsupport.WpadSound.SND;
  53. import kr.co.icontrols.wallpadsupport.WpadTextView;
  54. import static kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CMD.CMD_MULTICALL;
  55. public class TalkLobby extends WpadScreen implements CallEventListener, MainEventListener {
  56. private final String TAG = "TalkLobby";
  57. boolean bLOG = true;
  58. private void LOG(String log) {
  59. if (bLOG) Log.v(TAG, log);
  60. }
  61. boolean bLOG_DEBUG = false;
  62. private void LOG_DEBUG(String log) {
  63. if (bLOG_DEBUG) Log.d(TAG, log);
  64. }
  65. boolean bLOG_INFO = true;
  66. private void LOG_INFO(String log) {
  67. if (bLOG_INFO) Log.i(TAG, log);
  68. }
  69. boolean bLOG_WARN = true;
  70. private void LOG_WARN(String log) {
  71. if (bLOG_WARN) Log.i(TAG, log);
  72. }
  73. WpadImageView SCREEN_BG;
  74. WpadImageView IMG_LOBBY_BACKGROUND;
  75. WpadImageView IMG_VIDEO_MODULE;
  76. WpadImageView IMG_VOLUME;
  77. WpadImageView BTN_TALK;
  78. WpadImageView BTN_END;
  79. WpadImageView BTN_SAVE_PICTURE;
  80. WpadImageView BTN_DOOROPEN;
  81. WpadImageView BTN_RELIEF_FILTER_01, BTN_RELIEF_FILTER_02; //, BTN_RELIEF_FILTER_03, BTN_RELIEF_FILTER_04;
  82. SeekBar SEEKBAR_VOLUME;
  83. WpadTextView TXT_VOLUME_LEVEL;
  84. int nCurrentVolume = 0;
  85. Context mContext;
  86. public TalkLobby(Context context, RelativeLayout layout) {
  87. super(context, layout);
  88. try {
  89. mContext = context;
  90. Initialize();
  91. SCREEN_BG = new WpadImageView(context, TOUCH_KIND.NONE, 1280, 690, R.drawable.bg_body, R.drawable.bg_body, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.BG);
  92. ViewRegistration(layout, SCREEN_BG, 0, 0);
  93. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
  94. IMG_LOBBY_BACKGROUND = new WpadImageView(context, TOUCH_KIND.NONE, 722, 544, R.drawable.bg_lobby, 0, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.BACKGROUND);
  95. ViewRegistration(layout, IMG_LOBBY_BACKGROUND, Common.ImgPosition.GetX(93), Common.ImgPosition.GetY(110));
  96. IMG_VIDEO_MODULE = new WpadImageView(context, TOUCH_KIND.NONE, 720, 540, R.drawable.image_lobby, 0, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.VIDEO_MODULE);
  97. ViewRegistration(layout, IMG_VIDEO_MODULE, Common.ImgPosition.GetX(95), Common.ImgPosition.GetY(112));
  98. }
  99. else {
  100. IMG_LOBBY_BACKGROUND = new WpadImageView(context, TOUCH_KIND.NONE, 722, 544, R.drawable.bg_lobby, 0, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.BACKGROUND);
  101. ViewRegistration(layout, IMG_LOBBY_BACKGROUND, Common.ImgPosition.GetX(93), Common.ImgPosition.GetY(110));
  102. IMG_VIDEO_MODULE = new WpadImageView(context, TOUCH_KIND.NONE, 720, 540, R.drawable.image_lobby, 0, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.VIDEO_MODULE);
  103. ViewRegistration(layout, IMG_VIDEO_MODULE, Common.ImgPosition.GetX(95), Common.ImgPosition.GetY(112));
  104. }
  105. IMG_VOLUME = new WpadImageView(context, TOUCH_KIND.NONE, 40, 40, R.drawable.bar_icon_sound, 0, ID.SCREEN.TALKLOBBY.ELEMENT.IMAGE.VOLUME);
  106. ViewRegistration(layout, IMG_VOLUME, Common.ImgPosition.GetX(454), Common.ImgPosition.GetY(707));
  107. TXT_VOLUME_LEVEL = new WpadTextView(context, false, 40, 40, Gravity.CENTER, Color.WHITE, Common.fontsize._30, false, ID.SCREEN.TALKLOBBY.ELEMENT.TEXT.VOLUME_LEVEL);
  108. ViewRegistration(layout, TXT_VOLUME_LEVEL, Common.ImgPosition.GetX(785), Common.ImgPosition.GetY(705));
  109. if (WpadScale.getWidthPixels() == WpadScale.DEFAULT_WIDTH_PIXELS) {
  110. LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  111. LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar_1280, null);
  112. LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  113. int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(507));
  114. int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(707));
  115. volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0);
  116. volumeLayout.setLayoutParams(volumeParams);
  117. SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar);
  118. SEEKBAR_VOLUME.setMax(100);
  119. SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener);
  120. layout.addView(volumeLayout);
  121. }
  122. else {
  123. LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  124. LinearLayout volumeLayout = (LinearLayout) inflater.inflate(R.layout.volume_seekbar, null);
  125. LayoutParams volumeParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  126. int volMarginLeft = WpadScale.getWidth(Common.ImgPosition.GetX(502));
  127. int volMarginTop = WpadScale.getHeight(Common.ImgPosition.GetY(703));
  128. volumeParams.setMargins(volMarginLeft, volMarginTop, 0, 0);
  129. volumeLayout.setLayoutParams(volumeParams);
  130. SEEKBAR_VOLUME = (SeekBar) volumeLayout.findViewById(R.id.volumeSeekBar);
  131. SEEKBAR_VOLUME.setMax(100);
  132. SEEKBAR_VOLUME.setOnSeekBarChangeListener(mOnVolumeChangeListener);
  133. layout.addView(volumeLayout);
  134. }
  135. // 안심통화
  136. if (ConfigValues.bReliefCall) {
  137. BTN_TALK = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_call_normal, R.drawable.btn_call_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.TALK);
  138. ViewRegistration(layout, BTN_TALK, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(110));
  139. BTN_TALK.setButtonEventOffEnable(R.drawable.btn_call_disabled);
  140. BTN_END = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_endl_normal, R.drawable.btn_endl_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.END);
  141. ViewRegistration(layout, BTN_END, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(320));
  142. BTN_END.setButtonEventOffEnable(R.drawable.btn_endl_disabled);
  143. BTN_SAVE_PICTURE = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_photo_normal, R.drawable.btn_photo_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.SAVE_PICTURE);
  144. ViewRegistration(layout, BTN_SAVE_PICTURE, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(110));
  145. BTN_DOOROPEN = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 210, R.drawable.btn_open_normal, R.drawable.btn_open_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.DOOROPEN);
  146. ViewRegistration(layout, BTN_DOOROPEN, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(320));
  147. BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_open_disabled);
  148. /**
  149. * JEFF, 2020.01.02
  150. * 안심통화는 1, 2 단계만 지원한다.
  151. */
  152. int[] filterImg_01 = {R.drawable.btn_big_filter_1_normal, R.drawable.btn_big_filter_1_pressed};
  153. int[] filterSelectedImg_01 = {R.drawable.btn_big_filter_1_selected, R.drawable.btn_big_filter_1_selected};
  154. int[] filterImg_02 = {R.drawable.btn_big_filter_2_normal, R.drawable.btn_big_filter_2_pressed};
  155. int[] filterSelectedImg_02 = {R.drawable.btn_big_filter_2_selected, R.drawable.btn_big_filter_2_selected};
  156. // int[] filterImg_03 = {R.drawable.btn_filter_3_normal, R.drawable.btn_filter_3_pressed};
  157. // int[] filterSelectedImg_03 = {R.drawable.btn_filter_3_selected, R.drawable.btn_filter_3_selected};
  158. // int[] filterImg_04 = {R.drawable.btn_filter_4_normal, R.drawable.btn_filter_4_pressed};
  159. // int[] filterSelectedImg_04 = {R.drawable.btn_filter_4_selected, R.drawable.btn_filter_4_selected};
  160. BTN_RELIEF_FILTER_01 = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 124, filterImg_01, filterSelectedImg_01, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_01);
  161. ViewRegistration(layout, BTN_RELIEF_FILTER_01, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(530));
  162. BTN_RELIEF_FILTER_02 = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 124, filterImg_02, filterSelectedImg_02, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_02);
  163. ViewRegistration(layout, BTN_RELIEF_FILTER_02, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(530));
  164. // BTN_RELIEF_FILTER_03 = new WpadImageView(context, TOUCH_KIND.BUTTON, 93, 124, filterImg_03, filterSelectedImg_03, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_03);
  165. // ViewRegistration(layout, BTN_RELIEF_FILTER_03, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(530));
  166. //
  167. // BTN_RELIEF_FILTER_04 = new WpadImageView(context, TOUCH_KIND.BUTTON, 94, 124, filterImg_04, filterSelectedImg_04, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_04);
  168. // ViewRegistration(layout, BTN_RELIEF_FILTER_04, Common.ImgPosition.GetX(1094), Common.ImgPosition.GetY(530));
  169. }
  170. else {
  171. BTN_TALK = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_lobby_call_normal, R.drawable.btn_lobby_call_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.TALK);
  172. ViewRegistration(layout, BTN_TALK, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(110));
  173. BTN_TALK.setButtonEventOffEnable(R.drawable.btn_lobby_call_disabled);
  174. BTN_END = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_lobby_end_normal, R.drawable.btn_lobby_end_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.END);
  175. ViewRegistration(layout, BTN_END, Common.ImgPosition.GetX(815), Common.ImgPosition.GetY(382));
  176. BTN_END.setButtonEventOffEnable(R.drawable.btn_lobby_end_disabled);
  177. BTN_SAVE_PICTURE = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_lobby_photo_normal, R.drawable.btn_lobby_photo_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.SAVE_PICTURE);
  178. ViewRegistration(layout, BTN_SAVE_PICTURE, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(110));
  179. BTN_DOOROPEN = new WpadImageView(context, TOUCH_KIND.BUTTON, 186, 272, R.drawable.btn_lobby_open_normal, R.drawable.btn_lobby_open_pressed, ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.DOOROPEN);
  180. ViewRegistration(layout, BTN_DOOROPEN, Common.ImgPosition.GetX(1001), Common.ImgPosition.GetY(382));
  181. BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_lobby_open_disabled);
  182. BTN_RELIEF_FILTER_01 = null;
  183. BTN_RELIEF_FILTER_02 = null;
  184. // BTN_RELIEF_FILTER_03 = null;
  185. // BTN_RELIEF_FILTER_04 = null;
  186. }
  187. sendReliefFilterSelectBR(nSelectedFilter);
  188. displayScreenValues();
  189. sendHandlerMsg(HANDLERMSG.PROC_ADDCALL, 0, 0, null);
  190. } catch (Exception e) {
  191. Log.e(TAG, "[Exception] ScreenTalkLobby(Context context, RelativeLayout layout)");
  192. e.printStackTrace();
  193. }
  194. }
  195. protected void Initialize() {
  196. try {
  197. LOG_INFO("[Initialize]");
  198. if (MainActivity.mCallController.mCallInfo.getLOBBY() != CALLSTATUS.IDLE) ((MainActivity) mContext).setMenuBTNEnable(false);
  199. else ((MainActivity) mContext).setMenuBTNEnable(true);
  200. MainActivity.mCallController.setCallEventListener(this);
  201. ((MainActivity) mContext).setMainEventListener(this);
  202. int mMarginLeft = ((MainActivity) mContext).TopBackBtn.getVisibility() == View.VISIBLE ? 893 : 1019;
  203. ((MainActivity) mContext).setManualBtnVisible(((MainActivity) mContext).getManualUse(), mMarginLeft);
  204. ((MainActivity) mContext).setTopHideBtnVisible(true);
  205. super.setFinishTimerCreate(Common.FINISH_TIME_START_SCREEN);
  206. getVolume();
  207. if (MainActivity.bFFMPEGEnable) ((MainActivity)mContext).showRemoteVideo(false, false);
  208. MainActivity.mCallController.mVideoJNI.setDecoderInfo_V40(76, 85, 576, 405); // 영상 좌표 재설정 (세대 통화 멀티콜 이후 상황 대비)
  209. bEnableVisitorPic = true;
  210. nSelectedFilter = 0;
  211. // bEnableVisitorPic = false; // 부재중 방문객 사진 저장은 임시로 삭제한다.
  212. } catch (Exception e) {
  213. Log.e(TAG, "[Exception] Initialize()");
  214. e.printStackTrace();
  215. }
  216. }
  217. private void initCallVariables() {
  218. try {
  219. nSelectedFilter = 0;
  220. RemoteIDInfo.InitVariables();
  221. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  222. } catch (Exception e) {
  223. Log.e(TAG, "[Exception] initCallVariables()");
  224. e.printStackTrace();
  225. }
  226. }
  227. @Override
  228. protected void onClose() {
  229. super.onClose();
  230. try {
  231. LOG_INFO("[onClose]");
  232. if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.ctrlWallPadLED_Call(false);
  233. nSelectedFilter = 0;
  234. sendReliefFilterSelectBR(nSelectedFilter);
  235. if (TalkLobbyHandler != null) {
  236. TalkLobbyHandler.removeMessages(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE);
  237. TalkLobbyHandler.removeMessages(HANDLERMSG.SAVE_VISITORPICTURE);
  238. TalkLobbyHandler.removeMessages(HANDLERMSG.TAKE_VISITORPICTURE);
  239. }
  240. if (mPathCheckHandler != null) {
  241. mPathCheckHandler.removeMessages(0);
  242. mPathCheckHandler.removeMessages(1);
  243. }
  244. bEnableVisitorPic = false;
  245. bReliefCallInit = false;
  246. MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.NONE, true);
  247. initCallVariables();
  248. if (ConfigValues.bReliefCall) selectReliefCallFilter(nSelectedFilter);
  249. MainActivity.mCallController.releaseCallEventListener();
  250. ((MainActivity) mContext).releaseMainEventListener();
  251. //MainActivity.mCallController.mSIPInterface.videoSet(false, false, false);
  252. Global.add1stCallHistoryInfoFinal();
  253. } catch (Exception e) {
  254. Log.e(TAG, "[Exception] onClose()");
  255. e.printStackTrace();
  256. }
  257. }
  258. @Override
  259. protected void onBrReceive(Intent intent) {
  260. super.onBrReceive(intent);
  261. try {
  262. LOG_INFO("[onBrReceive] intent : " + intent);
  263. } catch (Exception e) {
  264. Log.e(TAG, "[Exception] onBrReceive()");
  265. e.printStackTrace();
  266. }
  267. }
  268. @Override
  269. protected void onTouchEvent(View v, MotionEvent event) {
  270. try {
  271. int nEvent = event.getAction();
  272. int nID = v.getId();
  273. if (nEvent == MotionEvent.ACTION_UP) {
  274. LOG("[onTouchEvent] nID [" + nID + "], nEvent [" + nEvent + "]");
  275. if (ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.TALK <= nID && nID <= ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_02) {
  276. // 통화중에 버튼 터치음을 발생시키면, 통화 상대방에게 터치음이 전달되므로 통화중에는 터치음을 출력하지 않는다.(JEFF, 2019.12.24)
  277. if (MainActivity.mCallController.mCallInfo.getLOBBY() != CALLSTATUS.TALKING) MainActivity.mSound.Play(SND.effect.TOUCH_LATCHED);
  278. if (nID == ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.TALK) {
  279. doTalk(CALLOWNER.WALLPAD);
  280. } else if (nID == ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.END) {
  281. bEnableVisitorPic = false;
  282. doEnd();
  283. } else if (nID == ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.SAVE_PICTURE) {
  284. String strVisitorPicResult = MainActivity.mCallController.saveVisitorPicture(CALLTYPE.LOBBY, MainActivity.mCallController.mCallInfo.getLOBBY(), RemoteIDInfo.strSIPID, true, false, false);
  285. LOG_INFO("[onTouchEvent] strVisitorPicResult [" + strVisitorPicResult + "]");
  286. enableSavePicBTN(false);
  287. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, null, 3000);
  288. } else if (nID == ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.DOOROPEN) {
  289. if (!bSentiMAP) {
  290. sendHandlerMsg(HANDLERMSG.HIDE_LOBBYVIDEO, 0, 0, null); // 문열림으로 통화 종료시 로비 영상 노이즈가 생기므로 영상을 GUI 아래로 내림
  291. doDoorOpen();
  292. //3초후에 종료 코드를 전송하기로 함(현재는 문열림 전송 후, 종료를 보내지 않고 있음)
  293. DelayedSendHanlderMsg(HANDLERMSG.CALL_END, 0, 0, null, 1000);
  294. }
  295. } else if (ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_01 <= nID && nID <= ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_04) {
  296. LOG_INFO("[onTouchEvent] [RELIEF_FILTER] BUTTON");
  297. selectReliefCallFilter(nID);
  298. doTalk(CALLOWNER.WALLPAD); // 통화시작 전에 필터버튼 클릭하면 변조되어 통화 시작
  299. }
  300. }
  301. else {
  302. Log.w(TAG, "[onTouchEvent] The touch event is not supported!! nID -> nID");
  303. }
  304. }
  305. else {
  306. Log.w(TAG, "[onTouchEvent] The touch event is not supported!! nEvent -> nEvent");
  307. }
  308. } catch (Exception e) {
  309. Log.e(TAG, "[Exception] onTouchEvent(View v, MotionEvent event)");
  310. e.printStackTrace();
  311. }
  312. }
  313. @Override
  314. public void onMainTouchEvent(MAINEVENT eEvent) {
  315. try {
  316. LOG_INFO("[onMainTouchEvent] eEvent [" + eEvent + "]");
  317. if (eEvent == MAINEVENT.BTN_HOME) {
  318. if (MainActivity.mCallController.mCallInfo.getLOBBY() != CALLSTATUS.TALKING) Sound().Play(SND.effect.TOUCH_LATCHED);
  319. finishWallpadCallApp();
  320. } else if (eEvent == MAINEVENT.BTN_HOME_MOBILE) {
  321. finishWallpadCallApp();
  322. }
  323. } catch (Exception e) {
  324. Log.e(TAG, "[Exception] onMainTouchEvent(MAINEVENT eEvent)");
  325. e.printStackTrace();
  326. }
  327. }
  328. @Override
  329. protected void onKeyDown(int keyCode, KeyEvent event) {
  330. LOG_INFO("[onKeyDown] keyCode [" + keyCode + "], event.getAction() [" + event.getAction() + "]");
  331. if (keyCode == Declare.BTN.TALK || keyCode == Declare.BTN.TALK_V40) {
  332. //doTalk(CALLOWNER.WALLPAD);
  333. doTalkByBTN(CALLOWNER.WALLPAD);
  334. } else if (keyCode == Declare.BTN.DOOR_OPEN || keyCode == Declare.BTN.DOOR_OPEN_V40) {
  335. if (!bSentiMAP) doDoorOpen();
  336. } else if (keyCode == Declare.BTN.PLAY_DECODED_VIDEO || keyCode == Declare.BTN.PLAY_DECODED_VIDEO_V40) {
  337. ctrlAlphaBlending(true);
  338. }
  339. super.onKeyDown(keyCode, event);
  340. }
  341. @Override
  342. public void onCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage) {
  343. try {
  344. LOG_INFO("[onCallEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], strRemoteIP [" + strRemoteIP + "], strRemoteSIPID [" + strRemoteSIPID + "], strMessage [" + strMessage + "]");
  345. if (eCallType == CALLTYPE.NONE) return;
  346. if (eCallType == CALLTYPE.LOBBY) {
  347. MainActivity.mCallController.setRemoteInfo(strRemoteSIPID, strRemoteIP);
  348. sendHandlerMsg(HANDLERMSG.SET_BTN_STATUS, 0, 0, null);
  349. if (eCallStatus == CALLSTATUS.CALLED) {
  350. MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.LOBBY, false);
  351. if (MainActivity.bRecordingStatus) {
  352. // 거동수상자 녹화 중 호출 => 녹화 종료 및 팝업 닫힘 => 호출 지속
  353. LOG_WARN("[onCallEvent] STRANGER RECORDING IS RUNNING!!");
  354. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_VIDEORECORD);
  355. ((MainActivity) (this.getContext())).stopNSaveRecordingFile(true, false);
  356. }
  357. Global.playMelodyRepeat(eCallType);
  358. super.setFinishTimerDestroy();
  359. MainActivity.mCallController.set1stCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLED);
  360. ((MainActivity) mContext).displayRemoteID(RemoteIDInfo.strName);
  361. Global.make1stCallHistoryInfo(strRemoteIP, strRemoteSIPID, CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS);
  362. if (ConfigValues.bUnoccupiedMode) {
  363. sendHandlerMsgDelayed(HANDLERMSG.SAVE_VISITORPICTURE, 0, 0, null, 5000); // 5초
  364. sendHandlerMsgDelayed(HANDLERMSG.SAVE_VISITORPICTURE, 0, 0, null, 10000); // 10초
  365. sendHandlerMsgDelayed(HANDLERMSG.CALL_FORWARD, 0, 0, null, 15000); // 15초
  366. } else {
  367. // 부재중인 경우를 대비하여 임시저장한다.
  368. sendHandlerMsgDelayed(HANDLERMSG.TAKE_VISITORPICTURE, 0, 0, strRemoteSIPID, 5000); // 5초
  369. //MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  370. }
  371. ((MainActivity) mContext).initFrontVideoLayout();
  372. ((MainActivity) mContext).setCameraLobby();
  373. ((MainActivity) mContext).showFrontVideo(false);
  374. sendHandlerMsgDelayed(HANDLERMSG.SHOW_ANALOG_LOBBYVIDEO, 0, 0, 0, 1000); // 1초
  375. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, null, 3000); // 3초
  376. }
  377. else if (eCallStatus == CALLSTATUS.TALKING) {
  378. Global.stopMelodyRepeat();
  379. if (eCallOwner == CALLOWNER.MOBILE) {
  380. // 모바일에서 로비 호출 수신!! (방문객 원격통화)
  381. RemoteCallManager.bMobileTalk = true;
  382. ((MainActivity) mContext).showRemoteCallNoticeText(true); // 방문객원격통화 팝업 삭제 -> 상단 문구로 대체
  383. // ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_REMOTECALL);
  384. MainActivity.mCallController.acceptMoIPCall(true);
  385. MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner);
  386. }
  387. else {
  388. if (ConfigValues.bRemoteCall) RemoteCallManager.bMobileTalk = false;
  389. if (eCallOwner != CALLOWNER.WALLPAD) {
  390. ((MainActivity) mContext).StartPopup(ID.POPUP.POPUP_NOTICE_SUBPHONETALK);
  391. MainActivity.mCallController.setTalkPath(CALLPATH.SUBPHONE_MOIP);
  392. if (eCallOwner == CALLOWNER.SUB_WALLPAD) MainActivity.mCallController.setSubWallPadAudioPath();
  393. }
  394. else {
  395. ((MainActivity) mContext).sendHandlerMsg(MainActivity.HANDLERMSG.SET_TEMPSYSTEM_VOLUME, 0, 0);// 통화 중 임의 볼륨값 설정 seulki
  396. MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.NONE, false);
  397. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
  398. MainActivity.mCallController.setTalkPath(CALLPATH.MOIP_IHND101_LOBBY);
  399. }
  400. else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  401. MainActivity.mCallController.setTalkPath(CALLPATH.MOIP_IHN1000_LOBBY);
  402. }
  403. else {
  404. MainActivity.mCallController.setTalkPath(CALLPATH.MOIP);
  405. }
  406. }
  407. mPathCheckHandler.sendEmptyMessage(0);
  408. }
  409. MainActivity.mCallController.set1stCallTimer(eCallType, MainActivity.mCallController.mCTT.RESIDENCEnLOBBY);
  410. Global.change1stCallLogAction(CALLACTION.TALK);
  411. Global.add1stCallHistoryInfoFinal();
  412. }
  413. else if (eCallStatus == CALLSTATUS.END) {
  414. bEnableVisitorPic = false;
  415. bReliefCallInit = false;
  416. Global.stopMelodyRepeat();
  417. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  418. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_ALL);
  419. ((MainActivity) mContext).finishManual(ID.MANUAL.MANUAL_ALL);
  420. ((MainActivity) mContext).displayRemoteID(null);
  421. if (eCallOwner == CALLOWNER.MOBILE) {
  422. MainActivity.mCallController.quitMoIPCall();
  423. // ((MainActivity) mContext).showRemoteCallNoticeText(false);
  424. }
  425. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  426. MainActivity.mCallController.stop1stCallTimer();
  427. MainActivity.mCallController.stop2ndCallTimer();
  428. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  429. nSelectedFilter = 0;
  430. sendReliefFilterSelectBR(nSelectedFilter);
  431. MainActivity.mCallController.MultiCallScenarioManager();
  432. ((MainActivity) mContext).removeFrontVideoLayout();
  433. } else if (eCallStatus == CALLSTATUS.REJECT) {
  434. bEnableVisitorPic = false;
  435. bReliefCallInit = false;
  436. Global.stopMelodyRepeat();
  437. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  438. ((MainActivity) mContext).displayRemoteID(null);
  439. MainActivity.mSound.PlayMent(SND.setting.RETRY_ACTION);
  440. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  441. MainActivity.mCallController.stop1stCallTimer();
  442. MainActivity.mCallController.stop2ndCallTimer();
  443. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_SUBPHONETALK);
  444. Global.change1stCallLogAction(CALLACTION.REJECT);
  445. Global.add1stCallHistoryInfoFinal();
  446. nSelectedFilter = 0;
  447. sendReliefFilterSelectBR(nSelectedFilter);
  448. MainActivity.mCallController.MultiCallScenarioManager();
  449. } else if (eCallStatus == CALLSTATUS.BUSY) {
  450. bEnableVisitorPic = false;
  451. bReliefCallInit = false;
  452. Global.stopMelodyRepeat();
  453. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  454. ((MainActivity) mContext).displayRemoteID(null);
  455. MainActivity.mSound.PlayMent(SND.call.BUSY_TRY_LATER);
  456. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  457. MainActivity.mCallController.stop1stCallTimer();
  458. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_SUBPHONETALK);
  459. Global.change1stCallLogAction(CALLACTION.BUSY);
  460. nSelectedFilter = 0;
  461. sendReliefFilterSelectBR(nSelectedFilter);
  462. MainActivity.mCallController.MultiCallScenarioManager();
  463. } else if (eCallStatus == CALLSTATUS.CANCEL) {
  464. bEnableVisitorPic = false;
  465. bReliefCallInit = false;
  466. Global.stopMelodyRepeat();
  467. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  468. ((MainActivity) mContext).displayRemoteID(null);
  469. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  470. MainActivity.mCallController.stop1stCallTimer();
  471. MainActivity.mCallController.stop2ndCallTimer();
  472. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_SUBPHONETALK);
  473. Global.change1stCallLogAction(CALLACTION.CANCEL);
  474. nSelectedFilter = 0;
  475. sendReliefFilterSelectBR(nSelectedFilter);
  476. MainActivity.mCallController.MultiCallScenarioManager();
  477. ((MainActivity) mContext).removeFrontVideoLayout();
  478. } else if (eCallStatus == CALLSTATUS.TIMEOUT_1STCALL) {
  479. bEnableVisitorPic = false;
  480. bReliefCallInit = false;
  481. Global.stopMelodyRepeat();
  482. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  483. if (eCallOwner != CALLOWNER.WALLPAD) {
  484. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_NOTICE_SUBPHONETALK);
  485. }
  486. MainActivity.mCallController.quitMoIPCall();
  487. MainActivity.mCallController.mCallInfo.setCallStatus(CALLTYPE.LOBBY, CALLSTATUS.IDLE);
  488. MainActivity.mCallController.stop1stCallTimer();
  489. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_ALL);
  490. ((MainActivity) mContext).finishManual(ID.MANUAL.MANUAL_ALL);
  491. initCallVariables();
  492. ((MainActivity) mContext).displayRemoteID(null);
  493. Global.change1stCallLogAction(CALLACTION.CANCEL);
  494. Global.add1stCallHistoryInfoFinal();
  495. nSelectedFilter = 0;
  496. sendReliefFilterSelectBR(nSelectedFilter);
  497. MainActivity.mCallController.MultiCallScenarioManager();
  498. ((MainActivity) mContext).removeFrontVideoLayout();
  499. } else if (eCallStatus == CALLSTATUS.DOOR_OPEN) {
  500. //sendHandlerMsg(HANDLERMSG.DOOR_OPEN, 0, 0, null); // 방문객 원격통화 모바일에서 문열림
  501. ((MainActivity) mContext).removeFrontVideoLayout();
  502. sendHandlerMsgDelayed(HANDLERMSG.CALL_END, 0, 0,null, 1000); // 2초
  503. } else {
  504. Log.w(TAG, "[onCallEvent] Incorrect eCallStatus!!! eCallStatus = " + eCallStatus);
  505. }
  506. } else {
  507. onMultiCallEvent(eCallOwner, eCallStatus, eCallType, strRemoteIP, strRemoteSIPID, strMessage);
  508. }
  509. } catch (Exception e) {
  510. Log.e(TAG, "[Exception] onCallEvent(CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage)");
  511. e.printStackTrace();
  512. }
  513. }
  514. public void onMultiCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage) {
  515. try {
  516. LOG_INFO("[onMultiCallEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], strRemoteIP [" + strRemoteIP + "], strRemoteSIPID [" + strRemoteSIPID + "], strMessage [" + strMessage + "]");
  517. MainActivity.mCallController.mCallInfo.printCallStatus();
  518. MainActivity.mCallController.mCallInfo.printMultiCallStatus();
  519. if (eCallStatus == CALLSTATUS.CALLED) {
  520. if (eCallType == CALLTYPE.FRONT) {
  521. playFrontCamBell(true);
  522. if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) {
  523. // 멀티콜 없음
  524. MultiCallInfo MCInfo = new MultiCallInfo();
  525. MCInfo.setMulticallInfo(CALLTYPE.LOBBY, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "세대현관", strRemoteIP);
  526. MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo);
  527. Global.make2ndCallHistoryInfo(eCallType.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS);
  528. CALLSTATUS eLobbyCallStatus = MainActivity.mCallController.mCallInfo.getLOBBY();
  529. /**
  530. * JEFF, 2020.01.02
  531. * 모든통화에서 멀티콜 발생시 알림 팝업만 띄우고 busy처리 하도록 시나리오 수정
  532. */
  533. if (eLobbyCallStatus == CALLSTATUS.CALLING || eLobbyCallStatus == CALLSTATUS.CALLED || eLobbyCallStatus == CALLSTATUS.TALKING) {
  534. if (eCallOwner == CALLOWNER.WALLPAD || eCallOwner == CALLOWNER.NONE) {
  535. ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE);
  536. }
  537. else {
  538. if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화
  539. MainActivity.mCallController.stop2ndCallTimer();
  540. MainActivity.mCallController.mCallInfo.setCallStatus(MainActivity.mCallController.mCallInfo.getMultiCallType(), CALLSTATUS.IDLE);
  541. doMultiCallReject();
  542. sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, null, 1000);
  543. }
  544. }
  545. else {
  546. LOG_WARN("[onMultiCallEvent] Invalid eLobbyCallStatus [" + eLobbyCallStatus + "]");
  547. }
  548. // if (eLobbyCallStatus == CALLSTATUS.CALLING || eLobbyCallStatus == CALLSTATUS.CALLED) {
  549. // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE);
  550. // } else if (eLobbyCallStatus == CALLSTATUS.TALKING) {
  551. // if (eCallOwner == CALLOWNER.MOBILE) {
  552. // // 방문객원격통화 멀티콜
  553. // MainActivity.mRemoteCallController.sendCmdToRemoteCall(CMD_MULTICALL, strRemoteSIPID, strRemoteIP, eCallType);
  554. // doMultiCallReject();
  555. // } else {
  556. // MainActivity.mCallController.set2ndCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLED);
  557. // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL);
  558. // }
  559. // }
  560. // else {
  561. // LOG_WARN("[onMultiCallEvent] Invalid eLobbyCallStatus [" + eLobbyCallStatus + "]");
  562. // }
  563. } else {
  564. // 멀티콜 있음
  565. sendHandlerMsgDelayed(HANDLERMSG.OFF_FRONT, 0, 0, null, 2000);
  566. MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  567. return;
  568. }
  569. } else if (eCallType == CALLTYPE.LOBBY || eCallType == CALLTYPE.GUARD || eCallType == CALLTYPE.RESIDENCE) {
  570. if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) {
  571. // 멀티콜 없음
  572. MultiCallInfo MCInfo = new MultiCallInfo();
  573. MCInfo.setMulticallInfo(CALLTYPE.LOBBY, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, Integer.toString(MainActivity.mCallController.getRemoteDong(strRemoteSIPID)),
  574. Integer.toString(MainActivity.mCallController.getRemoteID(strRemoteSIPID)), MainActivity.mCallController.getRemoteName(strRemoteSIPID, strRemoteIP), strRemoteIP);
  575. MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo);
  576. Global.make2ndCallHistoryInfo(strRemoteIP, strRemoteSIPID, CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS);
  577. CALLSTATUS eLobbyCallStatus = MainActivity.mCallController.mCallInfo.getLOBBY();
  578. /**
  579. * JEFF, 2020.01.02
  580. * 모든통화에서 멀티콜 발생시 알림 팝업만 띄우고 busy처리 하도록 시나리오 수정
  581. */
  582. if (eLobbyCallStatus == CALLSTATUS.CALLING || eLobbyCallStatus == CALLSTATUS.CALLED || eLobbyCallStatus == CALLSTATUS.TALKING) {
  583. if (eCallOwner == CALLOWNER.WALLPAD || eCallOwner == CALLOWNER.NONE) {
  584. ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE);
  585. }
  586. else {
  587. if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화
  588. MainActivity.mCallController.stop2ndCallTimer();
  589. MainActivity.mCallController.mCallInfo.setCallStatus(MainActivity.mCallController.mCallInfo.getMultiCallType(), CALLSTATUS.IDLE);
  590. doMultiCallReject();
  591. sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, null, 1000);
  592. }
  593. }
  594. else {
  595. LOG_WARN("[onMultiCallEvent] Invalid eLobbyCallStatus [" + eLobbyCallStatus + "]");
  596. }
  597. // if (eLobbyCallStatus == CALLSTATUS.CALLING || eLobbyCallStatus == CALLSTATUS.CALLED) {
  598. // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE);
  599. // } else if (eLobbyCallStatus == CALLSTATUS.TALKING) {
  600. // if (eCallOwner == CALLOWNER.MOBILE) {
  601. // // 방문객원격통화 멀티콜
  602. // MainActivity.mRemoteCallController.sendCmdToRemoteCall(CMD_MULTICALL, strRemoteSIPID, strRemoteIP, eCallType);
  603. // doMultiCallReject();
  604. // } else {
  605. // MainActivity.mCallController.set2ndCallTimer(eCallType, MainActivity.mCallController.mCTT.CALLED);
  606. // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL);
  607. // }
  608. // } else {
  609. // LOG_WARN("[onMultiCallEvent] Invalid eLobbyCallStatus [" + eLobbyCallStatus + "]");
  610. // }
  611. } else {
  612. // 멀티콜 있음
  613. MainActivity.mCallController.rejectMoIPMultiCall();
  614. MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  615. }
  616. } else if (eCallType == CALLTYPE.PSTN) {
  617. TalkPSTN.bPSTNCalled = true;
  618. if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) {
  619. // 멀티콜 없음
  620. if (eCallOwner == CALLOWNER.MOBILE) {
  621. // 방문객원격통화 멀티콜
  622. MainActivity.mRemoteCallController.sendCmdToRemoteCall(CMD_MULTICALL, strRemoteSIPID, strRemoteIP, eCallType);
  623. doMultiCallReject();
  624. } else {
  625. MultiCallInfo MCInfo = new MultiCallInfo();
  626. MCInfo.setMulticallInfo(CALLTYPE.FRONT, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "NONE", strRemoteIP);
  627. MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo);
  628. Global.make2ndCallHistoryInfo(eCallType.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS);
  629. ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL);
  630. }
  631. } else {
  632. // 멀티콜 있음
  633. // 기존 멀티콜을 거절하고, 국선을 멀티콜로 설정한다.
  634. CALLTYPE eMulticallType = MainActivity.mCallController.mCallInfo.getMultiCallType();
  635. if (eMulticallType == CALLTYPE.FRONT) playFrontCamBell(false);
  636. else if (eMulticallType == CALLTYPE.LOBBY || eMulticallType == CALLTYPE.GUARD || eMulticallType == CALLTYPE.RESIDENCE) MainActivity.mCallController.rejectMoIPMultiCall();
  637. else LOG_WARN("[onMultiCallEvent] Invalid eMultiCallType [" + eMulticallType + "]");
  638. MainActivity.mCallController.mCallInfo.setCallStatus(eMulticallType, CALLSTATUS.IDLE);
  639. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  640. MainActivity.mCallController.stop2ndCallTimer();
  641. Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS);
  642. LOG_WARN("[onMultiCallEvent] Another multicall is processing. Change multicall to PSTN multicall!!");
  643. MultiCallInfo MCInfo = new MultiCallInfo();
  644. MCInfo.setMulticallInfo(CALLTYPE.LOBBY, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "NONE", strRemoteIP);
  645. MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo);
  646. Global.make2ndCallHistoryInfo(eCallType.toString(), "NONE", CALLDIRECTION.IN, CALLACTION.MISS, CALLRESULT.IN_MISS);
  647. MainActivity.mCallController.mPopupEventListener.onMulticallChange(eCallType, eCallStatus, "");
  648. }
  649. } else {
  650. LOG_WARN("[onMultiCallEvent] Invalid CallType [" + eCallType + "]");
  651. }
  652. } else if (eCallStatus == CALLSTATUS.CALLERID) {
  653. MainActivity.mCallController.mCallInfo.updateMultiCallName(strRemoteSIPID);
  654. Global.change2ndCallLogSIPID(CALLTYPE.PSTN.toString() + ":" + strRemoteSIPID);
  655. } else if (eCallStatus == CALLSTATUS.END) {
  656. MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  657. if (MainActivity.mCallController.mCallInfo.getMultiCallType() == eCallType) {
  658. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  659. MainActivity.mCallController.stop2ndCallTimer();
  660. Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS);
  661. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL);
  662. } else LOG_WARN("[onMultiCallEvent] Invalid CallType [" + eCallType + "]");
  663. } else if (eCallStatus == CALLSTATUS.CANCEL) {
  664. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  665. MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  666. MainActivity.mCallController.stop2ndCallTimer();
  667. Global.add2ndCallHistoryInfo(CALLRESULT.IN_REJECT);
  668. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL);
  669. } else if (eCallStatus == CALLSTATUS.TIMEOUT_2NDCALL) {
  670. // 거동수상자 녹화기능 수정중 (추후 동작상태보고 수정)
  671. // if (eCallType == CALLTYPE.FRONT_RECORD) {
  672. // // [스마트현관카메라] 거동수상자 녹화 팝업 미선택시 녹화 시작
  673. // ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL_RECORD);
  674. // MainActivity.mCallController.stop2ndCallTimer();
  675. // MainActivity.mCallController.mSIPInterface.videoSet(false, false, false);
  676. // doMultiCallAccept();
  677. // }
  678. // else {
  679. // doMultiCallReject();
  680. // Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS);
  681. // MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  682. // MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  683. // ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL);
  684. // }
  685. doMultiCallReject();
  686. Global.add2ndCallHistoryInfo(CALLRESULT.IN_MISS);
  687. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  688. MainActivity.mCallController.mCallInfo.setCallStatus(eCallType, CALLSTATUS.IDLE);
  689. ((MainActivity) mContext).finishPopUp(ID.POPUP.POPUP_MULTICALL);
  690. } else if (eCallStatus == CALLSTATUS.RECORDING) {
  691. // [스마트현관카메라] 로비 통화상태중(호출수신 또는 통화중) 거동수상자 감지 이벤트 발생하는 경우
  692. LOG("[onMultiCallEvent] MainActivity.mCallController.mCallInfo.getMultiCallStatus() = " + MainActivity.mCallController.mCallInfo.getMultiCallStatus());
  693. if (MainActivity.mCallController.mCallInfo.getMultiCallStatus() == CALLSTATUS.IDLE) {
  694. MultiCallInfo MCInfo = new MultiCallInfo();
  695. MCInfo.setMulticallInfo(CALLTYPE.LOBBY, eCallType, eCallStatus, CALLOWNER.NONE, strRemoteSIPID, "", "", "세대현관", strRemoteIP);
  696. MainActivity.mCallController.mCallInfo.setMultiCallInfo(MCInfo);
  697. CALLSTATUS eLobbyCallStatus = MainActivity.mCallController.mCallInfo.getLOBBY();
  698. LOG("[onMultiCallEvent] eLobbyCallStatus [" + eLobbyCallStatus + "]");
  699. if (eLobbyCallStatus == CALLSTATUS.CALLED || eLobbyCallStatus == CALLSTATUS.TALKING) {
  700. MainActivity.mCallController.set2ndCallTimer(eCallType, MainActivity.mCallController.mCTT.WAIT_RECORD);
  701. // ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_RECORD);
  702. ((MainActivity) (getContext())).startMultiCallPopup(ID.POPUP.POPUP_MULTICALL_NOTICE); // 멀티콜 시나리오가 변경됨에 따라 팝업 수정
  703. } else {
  704. LOG_WARN("[onMultiCallEvent] Invalid eLobbyCallStatus [" + eLobbyCallStatus + "]");
  705. }
  706. } else {
  707. // 멀티콜 있음
  708. }
  709. } else {
  710. LOG_WARN("[onMultiCallEvent] Invalid CallStatus [" + eCallStatus + "]");
  711. }
  712. } catch (Exception e) {
  713. Log.e(TAG, "[Exception] onMultiCallEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strRemoteIP, String strRemoteSIPID, String strMessage)");
  714. e.printStackTrace();
  715. }
  716. }
  717. @Override
  718. public void onSubPhoneEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strTargetID, String strMessage) {
  719. try {
  720. LOG_INFO("[onSubPhoneEvent] eCallOwner [" + eCallOwner + "], eCallStatus [" + eCallStatus + "], eCallType [" + eCallType + "], strTargetID [" + strTargetID + "], strMessage [" + strMessage + "]");
  721. if (eCallOwner == CALLOWNER.UNIVERSAL_DEVICE && eCallStatus == CALLSTATUS.DOOR_OPEN) {
  722. if (doSubPhoneDoorOpen(eCallOwner, CALLTYPE.LOBBY))
  723. MainActivity.mSubPhoneController.sendACKDoorOpen(eCallOwner, CALLTYPE.LOBBY);
  724. }
  725. if (eCallType == CALLTYPE.NONE) return;
  726. if (eCallType == CALLTYPE.LOBBY) {
  727. if (eCallStatus == CALLSTATUS.TALKING) {
  728. if (eCallOwner != CALLOWNER.WALLPAD) {
  729. doTalk(eCallOwner);
  730. } else {
  731. MainActivity.mCallController.setTalkPath(CALLPATH.SUBPHONE_MOIP);
  732. }
  733. } else if (eCallStatus == CALLSTATUS.END) {
  734. if (eCallOwner != CALLOWNER.WALLPAD) {
  735. doEnd();
  736. }
  737. } else if (eCallStatus == CALLSTATUS.DOOR_OPEN) {
  738. if (!bSentiMAP) {
  739. if (doSubPhoneDoorOpen(eCallOwner, eCallType))
  740. MainActivity.mSubPhoneController.sendACKDoorOpen(eCallOwner, eCallType);
  741. }
  742. } else {
  743. Log.w(TAG, "[onSubPhoneEvent] Incorrect eCallStatus!!! eCallStatus = " + eCallStatus);
  744. }
  745. } else {
  746. Log.w(TAG, "[onSubPhoneEvent] Incorrect eCallType!!! eCallType = " + eCallType);
  747. }
  748. } catch (Exception e) {
  749. Log.e(TAG, "[Exception] onSubPhoneEvent(CALLOWNER eCallOwner, CALLSTATUS eCallStatus, CALLTYPE eCallType, String strMessage)");
  750. e.printStackTrace();
  751. }
  752. }
  753. @Override
  754. public void onVideoSet(boolean bSet, String strRemoteSIPID) {
  755. try {
  756. LOG_INFO("[onVideoSet] bSet [" + bSet + "], strRemoteSIPID [" + strRemoteSIPID + "]");
  757. if (bSet) {
  758. if (!strRemoteSIPID.contains(DEVICENAME.strType_Lobby)) {
  759. Log.e(TAG, "[onVideoSet] Device name is not matched!!!");
  760. return;
  761. }
  762. }
  763. if (!bSet) ctrlAlphaBlending(bSet);
  764. //MainActivity.mCallController.mSIPInterface.videoSet(bSet, false, bSet);
  765. } catch (Exception e) {
  766. Log.e(TAG, "[Exception] onVideoSet(boolean bSet, String strRemoteSIPID)");
  767. e.printStackTrace();
  768. }
  769. }
  770. @Override
  771. public void onShowRemoteVideo(boolean bShow) {
  772. try {
  773. LOG_INFO("[onShowRemoteVideo] bShow [" + bShow + "]");
  774. if (MainActivity.bFFMPEGEnable) ((MainActivity)mContext).showRemoteVideo(bShow, false);
  775. if (bShow) {
  776. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_SAVE_VISITORPICTURE, 0, 0, null, 3000);
  777. }
  778. else {
  779. enableSavePicBTN(false);
  780. }
  781. } catch (Exception e) {
  782. Log.e(TAG, "[Exception] onShowRemoteVideo(boolean bShow)");
  783. e.printStackTrace();
  784. }
  785. }
  786. @Override
  787. protected void onPopupResult(Intent data) {
  788. try {
  789. int nScreen = data.getIntExtra("SCREEN", -1);
  790. int nID = data.getIntExtra("POPUP_BTN", -1);
  791. boolean bFinish = data.getBooleanExtra("FINISH_FLAG", false);
  792. Log.d(TAG, "[onPopupResult] nScreen: " + nScreen + ", nID: " + nID + ", bFinish: " + bFinish);
  793. if (nScreen == ID.POPUP.POPUP_MULTICALL) {
  794. if (nID == ID.POPUP.MUTICALL.ELEMENT.BUTTON.ACCEPT) {
  795. LOG_INFO("[onPopupResult] ID.POPUP.MUTICALL.ELEMENT.BUTTON.ACCEPT");
  796. MainActivity.mCallController.stop2ndCallTimer();
  797. //MainActivity.mCallController.mSIPInterface.videoSet(false, false, false);
  798. doMultiCallAccept();
  799. } else if (nID == ID.POPUP.MUTICALL.ELEMENT.BUTTON.REJECT) {
  800. LOG_INFO("[onPopupResult] ID.POPUP.MUTICALL.ELEMENT.BUTTON.REJECT");
  801. if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화
  802. MainActivity.mCallController.stop2ndCallTimer();
  803. MainActivity.mCallController.mCallInfo.setCallStatus(MainActivity.mCallController.mCallInfo.getMultiCallType(), CALLSTATUS.IDLE);
  804. doMultiCallReject();
  805. MainActivity.mIOInterface.ctrlPopupGUI(false); // 현재 통화패스가 로비통화일 경우 멀티콜 거절시 GUI 화면이 아래로(영상이 위로)
  806. sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, null, 1000);
  807. }
  808. if (bFinish) MainActivity.mIOInterface.ctrlPopupGUI(false); // 현재 통화패스가 로비통화일 경우 멀티콜 팝업 닫히면 GUI 화면이 아래로(영상이 위로)
  809. } else if (nScreen == ID.POPUP.POPUP_NOTICE_SUBPHONETALK) {
  810. if (nID == ID.POPUP.NOTICE_SUBPHONETALK.ELEMENT.BUTTON.END) {
  811. LOG_INFO("[onPopupResult] ID.POPUP.NOTICE_SUBPHONETALK.ELEMENT.BUTTON.END");
  812. MainActivity.mCallController.stop2ndCallTimer();
  813. doEnd();
  814. }
  815. }
  816. else if (nScreen == ID.POPUP.POPUP_MULTICALL_NOTICE) {
  817. if (nID == ID.POPUP.MUTICALL_NOTICE.ELEMENT.BUTTON.CONFIRM) {
  818. LOG_INFO("[onPopupResult] ID.POPUP.POPUP_MULTICALL_NOTICE.ELEMENT.BUTTON.CONFIRM");
  819. MainActivity.mIOInterface.ctrlPopupGUI(false); // 현재 화면이 로비통화일 경우 멀티콜 알림 팝업 닫힐시 GUI 화면이 아래로(영상이 위로)
  820. /**
  821. * JEFF, 2020.01.01
  822. * 모든 통화에서 멀티콜을 막음
  823. */
  824. if (MainActivity.mPSTNController != null) MainActivity.mPSTNController.stopPSTNRingCntThread(); // PSTN 멀티콜 거절시 ring cnt 초기화
  825. MainActivity.mCallController.stop2ndCallTimer();
  826. MainActivity.mCallController.mCallInfo.setCallStatus(MainActivity.mCallController.mCallInfo.getMultiCallType(), CALLSTATUS.IDLE);
  827. doMultiCallReject();
  828. sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, null, 1000);
  829. }
  830. }
  831. else if (nScreen == ID.POPUP.POPUP_MULTICALL_RECORD) {
  832. if (nID == ID.POPUP.MULTICALL_RECORD.ELEMENT.BUTTON.OK) {
  833. LOG_INFO("[onPopupResult] ID.POPUP.MULTICALL_RECORD.ELEMENT.BUTTON.OK");
  834. // [스마트현관카메라] 현재통화 종료 및 영상 녹화 시작
  835. MainActivity.mCallController.stop2ndCallTimer();
  836. //MainActivity.mCallController.mSIPInterface.videoSet(false, false, false);
  837. doMultiCallAccept();
  838. } else if (nID == ID.POPUP.MULTICALL_RECORD.ELEMENT.BUTTON.CANCEL) {
  839. LOG_INFO("[onPopupResult] ID.POPUP.MULTICALL_RECORD.ELEMENT.BUTTON.CANCEL");
  840. // [스마트현관카메라] 거동수상자 녹화 취소 및 현재 통화상태 유지
  841. MainActivity.mCallController.stop2ndCallTimer();
  842. doMultiCallReject();
  843. MainActivity.mIOInterface.ctrlPopupGUI(false); // 현재 통화패스가 로비통화일 경우 멀티콜 거절시 GUI 화면이 아래로(영상이 위로)
  844. sendHandlerMsgDelayed(HANDLERMSG.REFRESH_BTNLED_STATUS, 0, 0, null, 1000);
  845. ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF); // LED OFF
  846. ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF); // MODE OFF
  847. }
  848. } else if (nScreen == ID.POPUP.POPUP_NOTICE_REMOTECALL) {
  849. if (nID == ID.POPUP.NOTICE_REMOTECALL.ELEMENT.BUTTON.END) {
  850. LOG_INFO("[onPopupResult] ID.POPUP.NOTICE_REMOTECALL.ELEMENT.BUTTON.END");
  851. MainActivity.mRemoteCallController.sendCloseRemoteCall();
  852. MainActivity.mCallController.quitMoIPCall();
  853. }
  854. }
  855. } catch (Exception e) {
  856. Log.e(TAG, "[Exception] onPopupResult(Intent data)");
  857. e.printStackTrace();
  858. }
  859. }
  860. private void doTalk(CALLOWNER eCallOwner) {
  861. try {
  862. LOG_INFO("[doTalk] doTalk ConfigValues.strDong " + ConfigValues.strDong + " " + ConfigValues.strHo);
  863. LOG_INFO("[doTalk] doTalk ConfigValues.strDong1 " + RemoteIDInfo.strDong + " " + RemoteIDInfo.strHo);
  864. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  865. MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner);
  866. MainActivity.mCallController.onLobbyEvent(CALLEVENTTYPE.CONNECT_CALL, CALLTYPE.LOBBY);
  867. // 월패드 통화패스 연결시 팝업노이즈로 인해 로비폰 통화시작시 로비폰에서 '삑'하는 노이즈가 출력되는 증상 개선 (Jeff, 2021.12.07)
  868. // - 무인경비쪽으로 통화시작 메시지를 1초 지연 전송하여, 로비폰 통화패스 연결을 지연시켜 증상을 해결
  869. sendHandlerMsgDelayed(HANDLERMSG.SEND_TALK_START, 0, 0, null, 1000);
  870. // MainActivity.mCallController.sendCallStart(CALLTYPE.LOBBY, RemoteIDInfo.nDong, RemoteIDInfo.nHo);
  871. enableSavePicBTN(true);
  872. }
  873. else {
  874. LOG_INFO("[doTalk] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  875. }
  876. } catch (Exception e) {
  877. Log.e(TAG, "[Exception] doTalk(CALLOWNER eCallOwner)");
  878. e.printStackTrace();
  879. }
  880. /*try {
  881. LOG_INFO("[doTalk] eCallOwner [" + eCallOwner + "], nSelectedFilter [" + nSelectedFilter + "]");
  882. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  883. MainActivity.mCallController.acceptMoIPCall(false);
  884. MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner);
  885. } else {
  886. LOG_INFO("[doTalk] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  887. }
  888. } catch (Exception e) {
  889. Log.e(TAG, "[Exception] doTalk(CALLOWNER eCallOwner)");
  890. e.printStackTrace();
  891. }*/
  892. }
  893. private void doEnd() {
  894. try
  895. {
  896. if (MainActivity.mCallController.mCallInfo.getIDLECnt() != MainActivity.mCallController.mCallInfo.IDLECNT_MAX) {
  897. LOG_INFO("[doEnd] CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  898. // MainActivity.mCallController.sendCallEnd(CALLTYPE.LOBBY, RemoteIDInfo.nDong, RemoteIDInfo.nHo);
  899. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  900. Global.stopMelodyRepeat();
  901. MainActivity.mCallController.sendCallEnd(CALLTYPE.LOBBY, Integer.parseInt(ConfigValues.strDong), RemoteIDInfo.nHo);
  902. MainActivity.mCallController.onLobbyEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.LOBBY);
  903. // MainActivity.mCallController.sendCallEnd(CALLTYPE.LOBBY, Integer.parseInt(RemoteIDInfo.strDong), Integer.parseInt(RemoteIDInfo.strHo));
  904. }
  905. else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  906. MainActivity.mCallController.onLobbyEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.LOBBY);
  907. MainActivity.mCallController.sendCallEnd(CALLTYPE.LOBBY, Integer.parseInt(ConfigValues.strDong), RemoteIDInfo.nHo);
  908. }
  909. else {
  910. LOG_INFO("[doEnd] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  911. MainActivity.mCallController.onLobbyEvent(CALLEVENTTYPE.TERMINATE_CALL, CALLTYPE.LOBBY);
  912. MainActivity.mCallController.sendCallEnd(CALLTYPE.LOBBY, Integer.parseInt(ConfigValues.strDong), RemoteIDInfo.nHo);
  913. }
  914. }
  915. else {
  916. LOG_INFO("[doEnd] IDLE Cnt is not MAX [" + MainActivity.mCallController.mCallInfo.IDLECNT_MAX + "]");
  917. MainActivity.mCallController.mCallInfo.printCallStatus();
  918. MainActivity.mCallController.MultiCallScenarioManager();
  919. }
  920. } catch (Exception e) {
  921. Log.e(TAG, "[Exception] doEnd()");
  922. e.printStackTrace();
  923. }
  924. /*try {
  925. if (MainActivity.mCallController.mCallInfo.getIDLECnt() != MainActivity.mCallController.mCallInfo.IDLECNT_MAX) {
  926. LOG_INFO("[doEnd] CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  927. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  928. Global.change1stCallLogAction(CALLACTION.REJECT);
  929. Global.stopMelodyRepeat();
  930. //MainActivity.mCallController.rejectMoIPCall();
  931. }
  932. else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  933. if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.MOBILE)
  934. MainActivity.mRemoteCallController.sendCloseRemoteCall();
  935. MainActivity.mCallController.quitMoIPCall();
  936. }
  937. else {
  938. LOG_INFO("[doEnd] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  939. MainActivity.mCallController.quitMoIPCall();
  940. }
  941. } else {
  942. LOG_INFO("[doEnd] IDLE Cnt is not MAX [" + MainActivity.mCallController.mCallInfo.IDLECNT_MAX + "]");
  943. MainActivity.mCallController.mCallInfo.printCallStatus();
  944. MainActivity.mCallController.MultiCallScenarioManager();
  945. }
  946. } catch (Exception e) {
  947. Log.e(TAG, "[Exception] doEnd()");
  948. e.printStackTrace();
  949. }*/
  950. }
  951. private void doTalkByBTN(CALLOWNER eCallOwner) {
  952. try {
  953. LOG_INFO("[doTalkByBTN] CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  954. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  955. // MainActivity.mCallController.acceptMoIPCall(false);
  956. //MainActivity.mCallController.mCallInfo.setCallOwner(eCallOwner);
  957. doTalk(CALLOWNER.WALLPAD);
  958. } else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  959. doEnd();
  960. //MainActivity.mCallController.quitMoIPCall();
  961. } else {
  962. LOG_INFO("[doTalkByBTN] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  963. }
  964. } catch (Exception e) {
  965. Log.e(TAG, "[Exception] doTalkByBTN(CALLOWNER eCallOwner)");
  966. e.printStackTrace();
  967. }
  968. }
  969. private void doDoorOpen() {
  970. try {
  971. LOG_INFO("[doDoorOpen] ");
  972. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  973. Global.stopMelodyRepeat();
  974. // Global.changeVolumeMoIPMode(CALLTYPE.NONE);
  975. bSentiMAP = true;
  976. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  977. // MainActivity.mSound.Play(SND.mode.OPENDOOR);
  978. mPathCheckHandler.sendEmptyMessage(2); // 통화패스 Normal로 변경 확인 후 멘트 출력 seulki
  979. enableTalkBTN(false);
  980. enableEndBTN(false);
  981. enableOpenDoorBTN(false);
  982. enableSavePicBTN(false);
  983. if (ConfigValues.bReliefCall) {
  984. BTN_RELIEF_FILTER_01.setButtonEventOffEnable(R.drawable.btn_big_filter_1_normal);
  985. BTN_RELIEF_FILTER_02.setButtonEventOffEnable(R.drawable.btn_big_filter_2_normal);
  986. }
  987. MainActivity.mCallController.sendDoorOpen(CALLTYPE.LOBBY, RemoteIDInfo.nDong, RemoteIDInfo.nHo);
  988. Global.change1stCallLogAction(CALLACTION.DOOR);
  989. //sendHandlerMsgDelayed(HANDLERMSG.CHECK_DOOROPEN_REPLY, 0, 0, null,3000); // 3초
  990. } else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  991. // Global.changeVolumeMoIPMode(CALLTYPE.NONE);
  992. //if (!send_lobby_open_request(RemoteIDInfo.strIP)) {
  993. // MainActivity.mSound.Play(SND.setting.RETRY_ACTION);
  994. //}
  995. bSentiMAP = true;
  996. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  997. // MainActivity.mSound.Play(SND.mode.OPENDOOR);
  998. mPathCheckHandler.sendEmptyMessage(2); // 통화패스 Normal로 변경 확인 후 멘트 출력 seulki
  999. enableTalkBTN(false);
  1000. enableEndBTN(false);
  1001. enableOpenDoorBTN(false);
  1002. enableSavePicBTN(false);
  1003. if (ConfigValues.bReliefCall) {
  1004. BTN_RELIEF_FILTER_01.setButtonEventOffEnable(R.drawable.btn_big_filter_1_normal);
  1005. BTN_RELIEF_FILTER_02.setButtonEventOffEnable(R.drawable.btn_big_filter_2_normal);
  1006. }
  1007. MainActivity.mCallController.sendDoorOpen(CALLTYPE.LOBBY, RemoteIDInfo.nDong, RemoteIDInfo.nHo);
  1008. Global.change1stCallLogAction(CALLACTION.TALK_DOOR);
  1009. sendHandlerMsgDelayed(HANDLERMSG.CHECK_DOOROPEN_REPLY, 0, 0, null,3000); // 3초
  1010. } else {
  1011. LOG_INFO("[doDoorOpen] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  1012. }
  1013. } catch (Exception e) {
  1014. Log.e(TAG, "[Exception] doDoorOpen() : " + e);
  1015. e.printStackTrace();
  1016. }
  1017. }
  1018. private boolean doSubPhoneDoorOpen(CALLOWNER eCallOwner, CALLTYPE eCallType) {
  1019. try {
  1020. LOG_WARN("[doSubPhoneDoorOpen] eCallOwner [" + eCallOwner + "], eCallType [" + eCallType + "]");
  1021. if (eCallType != CALLTYPE.LOBBY) {
  1022. LOG_WARN("[doSubPhoneDoorOpen] eCallType is wrong eCallType [" + eCallType + "]");
  1023. return false;
  1024. }
  1025. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  1026. if (Global.getKitchenTVIdx(eCallOwner) >= 0 || Global.getBathTVIdx(eCallOwner) >= 0 || Global.getBathPhoneIdx(eCallOwner) >= 0 || eCallOwner == CALLOWNER.SUB_WALLPAD || eCallOwner == CALLOWNER.UNIVERSAL_DEVICE) {
  1027. Global.stopMelodyRepeat();
  1028. doDoorOpen();
  1029. // if (!send_lobby_open_request(RemoteIDInfo.strIP)) {
  1030. // MainActivity.mSound.Play(SND.setting.RETRY_ACTION);
  1031. // return false;
  1032. // }
  1033. return true;
  1034. }
  1035. return false;
  1036. } else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  1037. if (Global.getKitchenTVIdx(eCallOwner) >= 0 || Global.getBathTVIdx(eCallOwner) >= 0 || Global.getBathPhoneIdx(eCallOwner) >= 0 || eCallOwner == CALLOWNER.SUB_WALLPAD || eCallOwner == CALLOWNER.UNIVERSAL_DEVICE) {
  1038. // if (!send_lobby_open_request(RemoteIDInfo.strIP)) {
  1039. // MainActivity.mSound.Play(SND.setting.RETRY_ACTION);
  1040. // return false;
  1041. // }
  1042. doDoorOpen();
  1043. return true;
  1044. }
  1045. return false;
  1046. } else {
  1047. LOG_INFO("[doDoorOpen] Invalid CALLSTATUS [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  1048. return false;
  1049. }
  1050. } catch (Exception e) {
  1051. Log.e(TAG, "[Exception] doSubPhoneDoorOpen(CALLOWNER eCallOwner, CALLTYPE eCallType)");
  1052. e.printStackTrace();
  1053. return false;
  1054. }
  1055. }
  1056. private void doMultiCallAccept() {
  1057. try {
  1058. LOG("[doMultiCallAccept]");
  1059. MainActivity.mCallController.mCallInfo.setMultiCallAcceptFlag(true);
  1060. doEnd();
  1061. } catch (Exception e) {
  1062. Log.e(TAG, "[Exception] doMultiCallAccept()");
  1063. e.printStackTrace();
  1064. }
  1065. }
  1066. private void doMultiCallReject() {
  1067. try {
  1068. CALLTYPE eMultiCallType = MainActivity.mCallController.mCallInfo.getMultiCallType();
  1069. Log.d(TAG, "[doMultiCallReject] eMultiCallType [" + eMultiCallType + "]");
  1070. if (eMultiCallType == CALLTYPE.FRONT) {
  1071. playFrontCamBell(false);
  1072. MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE);
  1073. } else if (eMultiCallType == CALLTYPE.LOBBY || eMultiCallType == CALLTYPE.GUARD || eMultiCallType == CALLTYPE.RESIDENCE) {
  1074. MainActivity.mCallController.rejectMoIPMultiCall();
  1075. MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE);
  1076. } else if (eMultiCallType == CALLTYPE.PSTN) {
  1077. MainActivity.mPSTNController.sendReject();
  1078. MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.CANCEL_CALL, null, null);
  1079. MainActivity.mCallController.mCallInfo.setCallStatus(eMultiCallType, CALLSTATUS.IDLE);
  1080. } else {
  1081. LOG_WARN("[doMultiCallReject] Invalid eMultiCallType [" + eMultiCallType + "]");
  1082. }
  1083. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  1084. } catch (Exception e) {
  1085. Log.e(TAG, "[Exception] doMultiCallReject()");
  1086. e.printStackTrace();
  1087. }
  1088. }
  1089. boolean bMultiCallAccept = false; // 통화 버튼 활성화 여부를 판단하기 위한 플래그 (멀티콜 수락시 통화버튼 활성화 하면 안됨)
  1090. private void procAddCall() {
  1091. try {
  1092. LOG("[procAddCall]");
  1093. CALLTYPE eMType = MainActivity.mCallController.mCallInfo.getMultiCallType();
  1094. CALLSTATUS eMStatus = MainActivity.mCallController.mCallInfo.getMultiCallStatus();
  1095. CALLOWNER eCallOwner = MainActivity.mCallController.mCallInfo.getMultiCallOwner();
  1096. LOG("[procAddCall] eMType [" + eMType + "], eMStatus [" + eMStatus + "], CallOwner [" + eCallOwner + "]");
  1097. if (eMType == CALLTYPE.LOBBY && eMStatus == CALLSTATUS.CALLED) {
  1098. RemoteIDInfo.strIP = MainActivity.mCallController.mCallInfo.getMultiCall_IP();
  1099. Global.replace1stBy2ndCallHistory();
  1100. if (MainActivity.mCallController.mCallInfo.getMultiCallAccept()) {
  1101. // 멀티콜 수락 (통화시작)
  1102. bMultiCallAccept = true;
  1103. LOG("[procAddCall] bMultiCallAccept [" + bMultiCallAccept + "]");
  1104. if (MainActivity.mCallController.mCallInfo.getCallOwner() != CALLOWNER.WALLPAD) {
  1105. MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.LOBBY, false);
  1106. }
  1107. super.setFinishTimerDestroy();
  1108. MainActivity.mCallController.set1stCallTimer(eMType, MainActivity.mCallController.mCTT.RESIDENCEnLOBBY);
  1109. doTalk(eCallOwner);
  1110. } else {
  1111. // 멀티콜 수신중 (호출수신중)
  1112. if (MainActivity.mCallController.mCallInfo.getCallOwner() != CALLOWNER.WALLPAD) {
  1113. MainActivity.mCallController.selectVideoSourceToSubPhone(CALLTYPE.LOBBY, false);
  1114. }
  1115. //MainActivity.mCallController.mSIPInterface.videoSet(true, false, true);
  1116. if (eCallOwner == CALLOWNER.WALLPAD) ctrlAlphaBlending(true); // seulki
  1117. Global.playMelodyRepeat(eMType);
  1118. super.setFinishTimerDestroy();
  1119. MainActivity.mCallController.set1stCallTimer(eMType, MainActivity.mCallController.mCTT.CALLED);
  1120. }
  1121. sendHandlerMsg(HANDLERMSG.SET_BTN_STATUS, 0, 0, null);
  1122. ((MainActivity) mContext).displayRemoteID(MainActivity.mCallController.mCallInfo.getMultiCall_Name());
  1123. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  1124. } else {
  1125. LOG("[procAddCall] No MultiCall!!");
  1126. // 멀티콜 없음
  1127. MainActivity.mCallController.mCallInfo.resetMultiCallInfo();
  1128. }
  1129. } catch (Exception e) {
  1130. Log.e(TAG, "[Exception] procAddCall()");
  1131. e.printStackTrace();
  1132. }
  1133. }
  1134. private void playFrontCamBell(boolean bBell) {
  1135. try {
  1136. MainActivity.mIOInterface.ctrlFrontCamPower(bBell);
  1137. MainActivity.mIOInterface.ctrlFrontCamBell(bBell);
  1138. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
  1139. if (bBell) {
  1140. ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_ON);
  1141. ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_ON);
  1142. } else {
  1143. ((MainActivity) mContext).ctrlSmartIOTCamStatusMode(SmartRFCamStatusMode.STATUS_OFF);
  1144. ((MainActivity) mContext).ctrlSmartIOTCamLEDMode(SmartRFCamLEDMode.LED_OFF);
  1145. }
  1146. }
  1147. } catch (Exception e) {
  1148. Log.e(TAG, "[Exception] playFrontCamBell(boolean bBell)");
  1149. e.printStackTrace();
  1150. }
  1151. }
  1152. private void ctrlAlphaBlending(boolean bON) {
  1153. try {
  1154. LOG_INFO("[ctrlAlphaBlending] bON [" + bON + "]");
  1155. int BOARDTYPE = ConfigValues.DEVICE_BOARDTYPE;
  1156. if (BOARDTYPE == BOARD_TYPE.V40_IGW300 || BOARDTYPE == BOARD_TYPE.V40 || BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  1157. if (bON) {
  1158. // IMG_VIDEO_MODULE.setImageResource(R.drawable.video_black_back_test_4);
  1159. // 다담 Alphablending 적용을 위한 컬러키 수정 편의를 위하여
  1160. IMG_VIDEO_MODULE.setImageResource(0);
  1161. IMG_VIDEO_MODULE.setBackgroundColor(Color.argb(0, 0, 0, 0));
  1162. }
  1163. else {
  1164. IMG_VIDEO_MODULE.setImageResource(R.drawable.image_lobby);
  1165. }
  1166. MainActivity.mIOInterface.ctrlPopupGUI(!bON);
  1167. }
  1168. else {
  1169. Log.w(TAG, "[ctrlAlphaBlending] Not supported BOARDTYPE!! [" + BOARDTYPE + "]");
  1170. }
  1171. } catch (Exception e) {
  1172. Log.e(TAG, "[Exception] ctrlAlphaBlending(boolean bON)");
  1173. e.printStackTrace();
  1174. }
  1175. }
  1176. private void displayScreenValues() {
  1177. try {
  1178. getVolume();
  1179. drawVolume();
  1180. if (ConfigValues.bReliefCall) {
  1181. selectReliefCallFilter(nSelectedFilter);
  1182. }
  1183. enableSavePicBTN(false);
  1184. } catch (Exception e) {
  1185. Log.e(TAG, "[Exception] displayScreenValues()");
  1186. e.printStackTrace();
  1187. }
  1188. }
  1189. private void setBTNStatus() {
  1190. try {
  1191. // LOG("[setBTNStatus] MainActivity.mCallController.mCallInfo.getLOBBY [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  1192. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  1193. ((MainActivity) mContext).setMenuBTNEnable(false);
  1194. // 로비 통화 호출 수신 3초 후 통화시작/통화종료/문열림 가능하도록 버튼 처리
  1195. enableTalkBTN(false);
  1196. enableEndBTN(false);
  1197. enableOpenDoorBTN(false);
  1198. LOG("[setBTNStatus] bMultiCallAccept [" + bMultiCallAccept + "]");
  1199. if (!bMultiCallAccept) {
  1200. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_TALK_BTN, 0, 0, null, 2000); // 멀티콜 수락시 통화버튼 활성화 안함
  1201. }
  1202. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_END_BTN, 0, 0, null, 2000);
  1203. sendHandlerMsgDelayed(HANDLERMSG.ENABLE_OPENDOOR_BTN, 0, 0, null, 2000);
  1204. if (ConfigValues.bReliefCall) {
  1205. BTN_RELIEF_FILTER_01.setButtonEventOffDisable();
  1206. BTN_RELIEF_FILTER_02.setButtonEventOffDisable();
  1207. // BTN_RELIEF_FILTER_03.setButtonEventOffDisable();
  1208. // BTN_RELIEF_FILTER_04.setButtonEventOffDisable();
  1209. }
  1210. bSentiMAP = false;
  1211. runFlickerCallLED();
  1212. } else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  1213. ((MainActivity) mContext).setMenuBTNEnable(false);
  1214. enableTalkBTN(false);
  1215. if (MainActivity.mCallController.mCallInfo.getCallOwner() == CALLOWNER.MOBILE) {
  1216. enableSavePicBTN(false);
  1217. enableOpenDoorBTN(false);
  1218. }
  1219. setOnCallLED();
  1220. } else {
  1221. ((MainActivity) mContext).setMenuBTNEnable(true);
  1222. enableTalkBTN(false);
  1223. enableEndBTN(false);
  1224. enableOpenDoorBTN(false);
  1225. enableSavePicBTN(false);
  1226. if (ConfigValues.bReliefCall) {
  1227. BTN_RELIEF_FILTER_01.setButtonEventOffEnable(R.drawable.btn_big_filter_1_normal);
  1228. BTN_RELIEF_FILTER_02.setButtonEventOffEnable(R.drawable.btn_big_filter_2_normal);
  1229. // BTN_RELIEF_FILTER_03.setButtonEventOffEnable(R.drawable.btn_filter_3_normal);
  1230. // BTN_RELIEF_FILTER_04.setButtonEventOffEnable(R.drawable.btn_filter_4_normal);
  1231. }
  1232. setOffCallLED();
  1233. }
  1234. } catch (Exception e) {
  1235. Log.e(TAG, "[Exception] setBTNStatus()");
  1236. e.printStackTrace();
  1237. }
  1238. }
  1239. private void setBTNLEDStatus() {
  1240. try {
  1241. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED) {
  1242. runFlickerCallLED();
  1243. } else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  1244. setOnCallLED();
  1245. } else {
  1246. setOffCallLED();
  1247. }
  1248. } catch (Exception e) {
  1249. Log.e(TAG, "[Exception] setBTNLEDStatus()");
  1250. e.printStackTrace();
  1251. }
  1252. }
  1253. private void enableTalkBTN(boolean bEnable) {
  1254. try {
  1255. LOG("[enableTalkBTN] bEnable [" + bEnable + "]");
  1256. if (bEnable) {
  1257. // 이벤트 on
  1258. if (ConfigValues.bReliefCall)
  1259. BTN_TALK.setImageResource(R.drawable.btn_call_normal);
  1260. else BTN_TALK.setImageResource(R.drawable.btn_lobby_call_normal);
  1261. BTN_TALK.setButtonEventOffDisable();
  1262. } else {
  1263. // 이벤트 off
  1264. if (ConfigValues.bReliefCall)
  1265. BTN_TALK.setButtonEventOffEnable(R.drawable.btn_call_disabled);
  1266. else BTN_TALK.setButtonEventOffEnable(R.drawable.btn_lobby_call_disabled);
  1267. }
  1268. } catch (Exception e) {
  1269. Log.e(TAG, "[Exception] enableTalkBTN(boolean bEnable)");
  1270. e.printStackTrace();
  1271. }
  1272. }
  1273. private void enableEndBTN(boolean bEnable) {
  1274. try {
  1275. LOG("[enableEndBTN] bEnable [" + bEnable + "]");
  1276. if (bEnable) {
  1277. // 이벤트 on
  1278. if (ConfigValues.bReliefCall)
  1279. BTN_END.setImageResource(R.drawable.btn_endl_normal);
  1280. else BTN_END.setImageResource(R.drawable.btn_lobby_end_normal);
  1281. BTN_END.setButtonEventOffDisable();
  1282. ((MainActivity) mContext).TopHomeBtn.setButtonEventOffDisable();
  1283. } else {
  1284. // 이벤트 off
  1285. if (ConfigValues.bReliefCall)
  1286. BTN_END.setButtonEventOffEnable(R.drawable.btn_endl_disabled);
  1287. else BTN_END.setButtonEventOffEnable(R.drawable.btn_lobby_end_disabled);
  1288. ((MainActivity) mContext).TopHomeBtn.setButtonEventOffEnable();
  1289. }
  1290. } catch (Exception e) {
  1291. Log.e(TAG, "[Exception] setEndBtnStatus(boolean bEnable)");
  1292. e.printStackTrace();
  1293. }
  1294. }
  1295. private void enableOpenDoorBTN(boolean bEnable) {
  1296. try {
  1297. LOG("[enableOpenDoorBTN] bEnable [" + bEnable + "]");
  1298. if (bEnable) {
  1299. // 이벤트 on
  1300. if (ConfigValues.bReliefCall)
  1301. BTN_DOOROPEN.setImageResource(R.drawable.btn_open_normal);
  1302. else BTN_DOOROPEN.setImageResource(R.drawable.btn_lobby_open_normal);
  1303. BTN_DOOROPEN.setButtonEventOffDisable();
  1304. } else {
  1305. // 이벤트 off
  1306. if (ConfigValues.bReliefCall)
  1307. BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_open_disabled);
  1308. else BTN_DOOROPEN.setButtonEventOffEnable(R.drawable.btn_lobby_open_disabled);
  1309. }
  1310. } catch (Exception e) {
  1311. Log.e(TAG, "[Exception] enableOpenDoorBTN(boolean bEnable)");
  1312. e.printStackTrace();
  1313. }
  1314. }
  1315. private void enableSavePicBTN(boolean bEnable) {
  1316. try {
  1317. if (bEnable) {
  1318. if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setImageResource(R.drawable.btn_photo_normal);
  1319. else BTN_SAVE_PICTURE.setImageResource(R.drawable.btn_lobby_photo_normal);
  1320. BTN_SAVE_PICTURE.setButtonEventOffDisable();
  1321. } else {
  1322. if (ConfigValues.bReliefCall) BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_photo_disabled);
  1323. else BTN_SAVE_PICTURE.setButtonEventOffEnable(R.drawable.btn_lobby_photo_disabled);
  1324. }
  1325. } catch (Exception e) {
  1326. Log.e(TAG, "[Exception] enableSavePicBTN(boolean bEnable)");
  1327. e.printStackTrace();
  1328. }
  1329. }
  1330. boolean bSentiMAP = false;
  1331. int nCurrentMicGain = 0;
  1332. private boolean send_lobby_open_request(String strTargetIP) {
  1333. LOG_INFO("[send_lobby_open_request] strTargetIP [" + strTargetIP + "]");
  1334. nCurrentMicGain = MainActivity.mIOInterface.getMICGain();
  1335. try {
  1336. bSentiMAP = true;
  1337. Request_lobby_open lobby_open = new Request_lobby_open(mContext);
  1338. if (lobby_open.send_lobby_open(strTargetIP, null)) {
  1339. lobby_open.setResultCtrl(new RetProci() {
  1340. @Override
  1341. public void ProcSuccess() {
  1342. LOG_INFO("[send_lobby_open_request] ProcSuccess()");
  1343. // hideLobbyVideo();
  1344. // if (MainActivity.mCallController.getTalkPath() == CALLPATH.NORMAL) {
  1345. // MainActivity.mIOInterface.setMICGain(0); // 월패드에 출력되는 문열림 멘트가 월패드 마이크를 통해 로비폰에 전달되므로, 멘트 출력전에 Micgain을 0으로 설정한다.
  1346. // }
  1347. MainActivity.mCallController.setTalkPath(CALLPATH.NORMAL);
  1348. // MainActivity.mSound.Play(SND.mode.OPENDOOR);
  1349. mPathCheckHandler.sendEmptyMessage(2); // 통화패스 Normal로 변경 확인 후 멘트 출력 seulki
  1350. // 출입 데이터 기록(로비 문열림)
  1351. // WallpadAccessData WpadAccessData = new WallpadAccessData(getContext());
  1352. // WpadAccessData.Insert(WallpadAccessData.KIND.WPAD_CALL, null);
  1353. // WpadAccessData.closeDB();
  1354. enableTalkBTN(false);
  1355. enableEndBTN(false);
  1356. enableOpenDoorBTN(false);
  1357. enableSavePicBTN(false);
  1358. if (ConfigValues.bReliefCall) {
  1359. BTN_RELIEF_FILTER_01.setButtonEventOffEnable(R.drawable.btn_big_filter_1_normal);
  1360. BTN_RELIEF_FILTER_02.setButtonEventOffEnable(R.drawable.btn_big_filter_2_normal);
  1361. // BTN_RELIEF_FILTER_03.setButtonEventOffEnable(R.drawable.btn_filter_3_normal);
  1362. // BTN_RELIEF_FILTER_04.setButtonEventOffEnable(R.drawable.btn_filter_4_normal);
  1363. }
  1364. }
  1365. @Override
  1366. public void ProcError() {
  1367. LOG_INFO("[send_check_sip_activation_request] ProcError()");
  1368. bSentiMAP = false;
  1369. MainActivity.mSound.Play(SND.setting.RETRY_ACTION);
  1370. // mPathCheckHandler.sendEmptyMessage(2); // 통화패스 Normal로 변경 확인 후 멘트 출력 seulki
  1371. }
  1372. @Override
  1373. public void ProcDoing() {
  1374. LOG_INFO("[send_check_sip_activation_request] ProcDoing()");
  1375. bSentiMAP = false;
  1376. }
  1377. });
  1378. return true;
  1379. }
  1380. } catch (Exception e) {
  1381. Log.e(TAG, "[Exception] send_check_sip_activation_request(String strTargetIP, String strMessage)");
  1382. e.printStackTrace();
  1383. }
  1384. return false;
  1385. }
  1386. // 방문자 사진 자동 저장
  1387. boolean bEnableVisitorPic = false;
  1388. private void startSaveVisitorPicture(CALLTYPE eCallType, CALLSTATUS eCallStatus) {
  1389. try {
  1390. Log.d(TAG, "[startSaveVisitorPicture] eCallType: " + eCallType);
  1391. AutoPictureInfo mAutoPictureInfo = new AutoPictureInfo();
  1392. mAutoPictureInfo.setData(ConfigValues.strDong, ConfigValues.strHo, eCallType,eCallStatus, RemoteIDInfo.strSIPID, "null");
  1393. startAutoSaveVisitorPicture mstartAutoSaveVisitorPicture = new startAutoSaveVisitorPicture(mContext, mAutoPictureInfo, false);
  1394. mstartAutoSaveVisitorPicture.start();
  1395. } catch (Exception e) {
  1396. Log.e(TAG, "[Exception] startSaveVisitorPicture()");
  1397. e.printStackTrace();
  1398. }
  1399. }
  1400. private void startTakeVisitorPicture(String strSIPID) {
  1401. try {
  1402. AutoPictureInfo mAutoPictureInfo = new AutoPictureInfo();
  1403. mAutoPictureInfo.setData(ConfigValues.strDong, ConfigValues.strHo, CALLTYPE.LOBBY, MainActivity.mCallController.mCallInfo.getLOBBY(), strSIPID, "null");
  1404. startMissedCallVisitorPicture mstartMIssedCallVisitorPicture = new startMissedCallVisitorPicture(mContext, mAutoPictureInfo, false);
  1405. mstartMIssedCallVisitorPicture.start();
  1406. } catch (Exception e) {
  1407. Log.e(TAG, "[Exception] startTakeVisitorPicture()");
  1408. e.printStackTrace();
  1409. }
  1410. }
  1411. String strForwardingIP = "ERROR";
  1412. private void runCallForward() {
  1413. /*try {
  1414. LOG("[checkCallForward] ConfigValues.bOccupiedMode [" + ConfigValues.bUnoccupiedMode + "]");
  1415. if (ConfigValues.bUnoccupiedMode) {
  1416. for (int i = 0; i < ConfigValues.mGuardListTable.getCnt(); i++) {
  1417. if (ConfigValues.mGuardListTable.getGuardInfo(i).NAME().equals(("경비실"))) {
  1418. strForwardingIP = ConfigValues.mGuardListTable.getGuardInfo(i).IP();
  1419. if (!strForwardingIP.equals("ERROR")) {
  1420. if (!send_check_sip_activation_request(strForwardingIP))
  1421. MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1422. else return;
  1423. } else {
  1424. MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1425. }
  1426. } else {
  1427. MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1428. }
  1429. }
  1430. } else {
  1431. MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1432. }
  1433. } catch (Exception e) {
  1434. Log.e(TAG, "[Exception] runCallForward()");
  1435. e.printStackTrace();
  1436. }*/
  1437. }
  1438. /*
  1439. private boolean send_check_sip_activation_request(final String strTargetIP) {
  1440. try {
  1441. Request_check_sip_activation check_sip_activation = new Request_check_sip_activation(mContext);
  1442. if (check_sip_activation.send_check_sip_activation(strTargetIP, null)) {
  1443. check_sip_activation.setResultCtrl(new RetProci() {
  1444. @Override
  1445. public void ProcSuccess() {
  1446. LOG_INFO("[send_check_sip_activation_request] ProcSuccess()");
  1447. MainActivity.mCallController.mSIPInterface.requestCallForwardToStun(MainActivity.mCallController.makeCallForwarInfo(strTargetIP));
  1448. }
  1449. @Override
  1450. public void ProcError() {
  1451. LOG_INFO("[send_check_sip_activation_request] ProcError()");
  1452. MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1453. }
  1454. @Override
  1455. public void ProcDoing() {
  1456. LOG_INFO("[send_check_sip_activation_request] ProcDoing()");
  1457. }
  1458. });
  1459. return true;
  1460. }
  1461. } catch (Exception e) {
  1462. Log.e(TAG, "[Exception] send_check_sip_activation_request(String strTargetIP, String strMessage)");
  1463. e.printStackTrace();
  1464. //MainActivity.mCallController.mSIPInterface.cancelCallForwardToStun();
  1465. }
  1466. return false;
  1467. }
  1468. */
  1469. // 안심통화 관련
  1470. int nSelectedFilter = 0; // 0: 변조안함 / 1~4: 필터 No
  1471. boolean bReliefCallInit = false;
  1472. private void selectReliefCallFilter(int nID) {
  1473. try {
  1474. int nFilter = nID - ID.SCREEN.TALKLOBBY.ELEMENT.BUTTON.RELIEF_FILTER_01 + 1; // 현재 선택한 필터
  1475. if (nFilter < 0) nFilter = 0;
  1476. Log.d(TAG, "[selectReliefCallFilter] nID [" + nID + "], nFilter [" + nFilter + "], nSelectedFilter [" + nSelectedFilter + "]");
  1477. if (nFilter == nSelectedFilter) {
  1478. nSelectedFilter = 0;
  1479. } else {
  1480. nSelectedFilter = nFilter; // 기존 선택했던 필터
  1481. LOG("[selectReliefCallFilter] nSelectedFilter [" + nSelectedFilter + "], bReliefCallInit [" + bReliefCallInit + "]");
  1482. // 안심통화 초기화
  1483. if (nSelectedFilter > 0) {
  1484. if (!bReliefCallInit) {
  1485. if (MainActivity.mReliefCallIF != null) {
  1486. Log.d(TAG, "[selectReliefCallFilter] VRSoftInit = " + MainActivity.mReliefCallIF.VRSoftInit(Declare.RELIEFCALL.RELIEFCALL_CERTIFYNAME, Declare.RELIEFCALL.RELIEFCALL_BUFFERSIZE_LOBBY));
  1487. bReliefCallInit = true;
  1488. }
  1489. }
  1490. }
  1491. }
  1492. sendHandlerMsg(HANDLERMSG.SEND_BROADCAST_FILTER, 0, 0, null); // BR
  1493. } catch (Exception e) {
  1494. Log.e(TAG, "[Exception] selectReliefCallFilter(int nID)");
  1495. e.printStackTrace();
  1496. }
  1497. }
  1498. private void setFilterBTNStatus(int nFilter) {
  1499. try {
  1500. Log.d(TAG, "[setFilterBTNStatus] nFilter [" + nFilter + "]");
  1501. switch (nFilter) {
  1502. case 1:
  1503. BTN_RELIEF_FILTER_01.setButtonRearImage();
  1504. BTN_RELIEF_FILTER_02.setButtonFrontImage();
  1505. // BTN_RELIEF_FILTER_03.setButtonFrontImage();
  1506. // BTN_RELIEF_FILTER_04.setButtonFrontImage();
  1507. break;
  1508. case 2:
  1509. BTN_RELIEF_FILTER_01.setButtonFrontImage();
  1510. BTN_RELIEF_FILTER_02.setButtonRearImage();
  1511. // BTN_RELIEF_FILTER_03.setButtonFrontImage();
  1512. // BTN_RELIEF_FILTER_04.setButtonFrontImage();
  1513. break;
  1514. case 3:
  1515. BTN_RELIEF_FILTER_01.setButtonFrontImage();
  1516. BTN_RELIEF_FILTER_02.setButtonFrontImage();
  1517. // BTN_RELIEF_FILTER_03.setButtonRearImage();
  1518. // BTN_RELIEF_FILTER_04.setButtonFrontImage();
  1519. break;
  1520. case 4:
  1521. BTN_RELIEF_FILTER_01.setButtonFrontImage();
  1522. BTN_RELIEF_FILTER_02.setButtonFrontImage();
  1523. // BTN_RELIEF_FILTER_03.setButtonFrontImage();
  1524. // BTN_RELIEF_FILTER_04.setButtonRearImage();
  1525. break;
  1526. default:
  1527. BTN_RELIEF_FILTER_01.setButtonFrontImage();
  1528. BTN_RELIEF_FILTER_02.setButtonFrontImage();
  1529. // BTN_RELIEF_FILTER_03.setButtonFrontImage();
  1530. // BTN_RELIEF_FILTER_04.setButtonFrontImage();
  1531. break;
  1532. }
  1533. } catch (Exception e) {
  1534. Log.e(TAG, "[Exception] setFilterBTNStatus()");
  1535. e.printStackTrace();
  1536. }
  1537. }
  1538. // 음량
  1539. SeekBar.OnSeekBarChangeListener mOnVolumeChangeListener = new SeekBar.OnSeekBarChangeListener() {
  1540. @Override
  1541. public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  1542. int nCtrlLevel = getCtrlLevel(progress);
  1543. if (nCurrentVolume != nCtrlLevel) {
  1544. nCurrentVolume = nCtrlLevel;
  1545. showVolume(nCurrentVolume);
  1546. // ctrlVolume(false);
  1547. }
  1548. }
  1549. @Override
  1550. public void onStartTrackingTouch(SeekBar seekBar) {
  1551. }
  1552. @Override
  1553. public void onStopTrackingTouch(SeekBar seekBar) {
  1554. // Log.d(TAG, "[onStopTrackingTouch] nCurrentVolume:" + nCurrentVolume);
  1555. nCurrentVolume = getCtrlLevel(seekBar.getProgress());
  1556. ctrlVolume(true);
  1557. }
  1558. };
  1559. private void getVolume() {
  1560. try {
  1561. nCurrentVolume = Global.getLobbyVolume();
  1562. } catch (Exception e) {
  1563. Log.e(TAG, "[Exception] getVolume()");
  1564. e.printStackTrace();
  1565. }
  1566. }
  1567. private void setVolume(int nValue) {
  1568. try {
  1569. if (!Global.setLobbyVolume(nValue)) {
  1570. LOG_WARN("[setVolume] Fail to set volume!! nValue [" + nValue + "]");
  1571. }
  1572. } catch (Exception e) {
  1573. Log.e(TAG, "[Exception] setVolume()");
  1574. e.printStackTrace();
  1575. }
  1576. }
  1577. private void ctrlVolume(boolean bSave) {
  1578. try {
  1579. if (bSave) setVolume(nCurrentVolume);
  1580. CALLSTATUS eCallStatus = MainActivity.mCallController.mCallInfo.getLOBBY();
  1581. LOG("[ctrlVolume] eCallStatus [" + eCallStatus + "]");
  1582. if (eCallStatus == CALLSTATUS.TALKING) {
  1583. Global.setV40WallPadVolume_LOBBY(nCurrentVolume);
  1584. }
  1585. } catch (Exception e) {
  1586. Log.e(TAG, "[Exception] ctrlVolume()");
  1587. e.printStackTrace();
  1588. }
  1589. }
  1590. private void showVolume(int nValue) {
  1591. try {
  1592. // Log.d(TAG, "[showVolume] nValue [" + nValue + "]");
  1593. if (TXT_VOLUME_LEVEL != null) TXT_VOLUME_LEVEL.setText(Integer.toString(nValue));
  1594. else Log.w(TAG, "[showVolume] TXT_VOLUME_LEVEL is null!!");
  1595. } catch (Exception e) {
  1596. Log.e(TAG, "[Exception] showVolume(nValue)");
  1597. }
  1598. }
  1599. private void drawVolume() {
  1600. try {
  1601. if (SEEKBAR_VOLUME != null) {
  1602. SEEKBAR_VOLUME.setProgress(ctrlSeekBarThumb(nCurrentVolume));
  1603. showVolume(nCurrentVolume);
  1604. }
  1605. else Log.w(TAG, "[drawVolume] SEEKBAR_VOLUME is null!!");
  1606. } catch (Exception e) {
  1607. Log.e(TAG, "[Exception] drawVolume()");
  1608. e.printStackTrace();
  1609. }
  1610. }
  1611. private int getCtrlLevel(int nValue) {
  1612. try {
  1613. // Log.d(TAG, "[getCtrlLevel] nValue: " + nValue);
  1614. if (nValue == 0) return 1;
  1615. int result = nValue / 10;
  1616. if ((nValue % 10) != 0) result++;
  1617. // Log.d(TAG, "[getCtrlLevel] result: " + result);
  1618. return result;
  1619. } catch (Exception e) {
  1620. Log.e(TAG, "[Exception] getCtrlLevel(nValue)");
  1621. e.printStackTrace();
  1622. return 1;
  1623. }
  1624. }
  1625. private int ctrlSeekBarThumb(int nValue) {
  1626. try {
  1627. int progress;
  1628. if (nValue == 1) progress = 1;
  1629. else if (nValue == 10) progress = 100;
  1630. else progress = (nValue - 1) * 11;
  1631. return progress;
  1632. } catch (Exception e) {
  1633. Log.e(TAG, "[Exception] ctrlSeekBarThumb()");
  1634. e.printStackTrace();
  1635. return 1;
  1636. }
  1637. }
  1638. // LED
  1639. boolean bFlickeringCallLED = false;
  1640. boolean bStatusFlickeringCallLED = false;
  1641. private void runFlickerCallLED() {
  1642. try {
  1643. LOG("[runFlickerCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "]");
  1644. if (!bFlickeringCallLED) {
  1645. bFlickeringCallLED = true;
  1646. sendHandlerMsg(HANDLERMSG.FLICKER_LED_CALL, 0, 0, null);
  1647. }
  1648. } catch (Exception e) {
  1649. Log.e(TAG, "[Exception] runFlickerCallLED()");
  1650. e.printStackTrace();
  1651. }
  1652. }
  1653. private void setOnCallLED() {
  1654. try {
  1655. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  1656. bFlickeringCallLED = false;
  1657. bStatusFlickeringCallLED = true;
  1658. MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED);
  1659. }
  1660. } catch (Exception e) {
  1661. Log.e(TAG, "[Exception] setOnCallLED()");
  1662. e.printStackTrace();
  1663. }
  1664. }
  1665. private void setOffCallLED() {
  1666. try {
  1667. LOG("[setOffCallLED] bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]");
  1668. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  1669. bFlickeringCallLED = false;
  1670. if (bStatusFlickeringCallLED) {
  1671. bStatusFlickeringCallLED = false;
  1672. MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED);
  1673. }
  1674. }
  1675. } catch (Exception e) {
  1676. Log.e(TAG, "[Exception] setOffCallLED()");
  1677. e.printStackTrace();
  1678. }
  1679. }
  1680. private void ctrlCallLED() {
  1681. try {
  1682. LOG_INFO("[ctrlCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "], bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]");
  1683. LOG_INFO("[ctrlCallLED] MainActivity.mCallController.mCallInfo.getLOBBY() [" + MainActivity.mCallController.mCallInfo.getLOBBY() + "]");
  1684. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  1685. if ((MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLING) || (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED)) {
  1686. if (bFlickeringCallLED) {
  1687. MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED);
  1688. bStatusFlickeringCallLED = !bStatusFlickeringCallLED;
  1689. sendHandlerMsgDelayed(HANDLERMSG.FLICKER_LED_CALL, 0, 0, null, 1000);
  1690. }
  1691. }
  1692. else if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  1693. bStatusFlickeringCallLED = true;
  1694. MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED);
  1695. }
  1696. else {
  1697. bStatusFlickeringCallLED = false;
  1698. MainActivity.mIOInterface.ctrlWallPadLED_Call(bStatusFlickeringCallLED);
  1699. LOG_INFO("[ctrlCallLED] bFlickeringCallLED [" + bFlickeringCallLED + "], bStatusFlickeringCallLED [" + bStatusFlickeringCallLED + "]");
  1700. }
  1701. }
  1702. } catch (Exception e) {
  1703. Log.e(TAG, "[Exception] ctrlCallLED()");
  1704. e.printStackTrace();
  1705. }
  1706. }
  1707. // Handlersend
  1708. public final class HANDLERMSG {
  1709. public final static int PROC_ADDCALL = 100;
  1710. public final static int DOOR_OPEN = 110;
  1711. public final static int SAVE_VISITORPICTURE = 120;
  1712. public final static int TAKE_VISITORPICTURE = 125;
  1713. public final static int CALL_FORWARD = 130;
  1714. public final static int ENABLE_SAVE_VISITORPICTURE = 140;
  1715. public final static int FLICKER_LED_CALL = 160;
  1716. public final static int REFRESH_BTNLED_STATUS = 170;
  1717. public final static int SET_BTN_STATUS = 175;
  1718. public final static int ENABLE_TALK_BTN = 176;
  1719. public final static int ENABLE_END_BTN = 177;
  1720. public final static int ENABLE_OPENDOOR_BTN = 178;
  1721. public final static int DO_TALK = 180;
  1722. public final static int OFF_FRONT = 200;
  1723. public final static int SET_VOLUME_TABLE = 300;
  1724. public final static int SEND_BROADCAST_FILTER = 400;
  1725. public final static int HIDE_LOBBYVIDEO = 500;
  1726. public final static int HIDE_ANALOG_LOBBYVIDEO = 510;
  1727. public final static int SHOW_ANALOG_LOBBYVIDEO = 520;
  1728. public final static int CHECK_DOOROPEN_REPLY = 600;
  1729. public final static int CALL_END = 610;
  1730. public final static int SEND_TALK_START = 620;
  1731. }
  1732. public Handler TalkLobbyHandler = new Handler(Looper.getMainLooper()) {
  1733. public void handleMessage(Message msg) {
  1734. LOG("[TalkLobbyHandler] TalkLobbyHandler : what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "], obj [" + msg.obj + "]");
  1735. switch (msg.what) {
  1736. case HANDLERMSG.PROC_ADDCALL:
  1737. procAddCall();
  1738. break;
  1739. case HANDLERMSG.DOOR_OPEN:
  1740. doDoorOpen();
  1741. break;
  1742. case HANDLERMSG.SAVE_VISITORPICTURE:
  1743. if (bEnableVisitorPic) startSaveVisitorPicture(CALLTYPE.LOBBY, MainActivity.mCallController.mCallInfo.getLOBBY());
  1744. break;
  1745. case HANDLERMSG.CALL_FORWARD:
  1746. if (bEnableVisitorPic) runCallForward();
  1747. break;
  1748. case HANDLERMSG.ENABLE_SAVE_VISITORPICTURE:
  1749. if (MainActivity.mCallController == null) return;
  1750. if (MainActivity.mCallController.mCallInfo == null) return;
  1751. if (MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.CALLED || MainActivity.mCallController.mCallInfo.getLOBBY() == CALLSTATUS.TALKING) {
  1752. BTN_SAVE_PICTURE.setButtonEventOffDisable();
  1753. }
  1754. break;
  1755. case HANDLERMSG.TAKE_VISITORPICTURE:
  1756. if (bEnableVisitorPic) startTakeVisitorPicture((String) msg.obj);
  1757. break;
  1758. case HANDLERMSG.FLICKER_LED_CALL:
  1759. ctrlCallLED();
  1760. break;
  1761. case HANDLERMSG.DO_TALK:
  1762. doTalk((CALLOWNER) msg.obj);
  1763. break;
  1764. case HANDLERMSG.REFRESH_BTNLED_STATUS:
  1765. setBTNLEDStatus();
  1766. break;
  1767. case HANDLERMSG.SET_BTN_STATUS:
  1768. setBTNStatus();
  1769. break;
  1770. case HANDLERMSG.ENABLE_TALK_BTN:
  1771. enableTalkBTN(true);
  1772. break;
  1773. case HANDLERMSG.ENABLE_END_BTN:
  1774. enableEndBTN(true);
  1775. break;
  1776. case HANDLERMSG.ENABLE_OPENDOOR_BTN:
  1777. enableOpenDoorBTN(true);
  1778. break;
  1779. case HANDLERMSG.OFF_FRONT:
  1780. playFrontCamBell(false);
  1781. break;
  1782. case HANDLERMSG.SET_VOLUME_TABLE:
  1783. Global.setV40WallPadVolume_LOBBY(nCurrentVolume);
  1784. break;
  1785. case HANDLERMSG.SEND_BROADCAST_FILTER:
  1786. // 필터선택하면 BR 전송
  1787. Log.d(TAG, "[TalkLobbyHandler] SEND_BROADCAST_FILTER -> nSelectedFilter [" + nSelectedFilter + "]");
  1788. setFilterBTNStatus(nSelectedFilter);
  1789. sendReliefFilterSelectBR(nSelectedFilter);
  1790. break;
  1791. case HANDLERMSG.HIDE_LOBBYVIDEO:
  1792. if (IMG_VIDEO_MODULE != null) IMG_VIDEO_MODULE.setImageResource(R.drawable.image_lobby);
  1793. if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.ctrlPopupGUI(true);
  1794. break;
  1795. case HANDLERMSG.CHECK_DOOROPEN_REPLY:
  1796. checkDoorCtrlACK();
  1797. break;
  1798. case HANDLERMSG.CALL_END:
  1799. doEnd();
  1800. break;
  1801. case HANDLERMSG.HIDE_ANALOG_LOBBYVIDEO:
  1802. ((MainActivity) mContext).showFrontVideo(false);
  1803. break;
  1804. case HANDLERMSG.SHOW_ANALOG_LOBBYVIDEO:
  1805. ((MainActivity) mContext).showFrontVideo(true);
  1806. break;
  1807. case HANDLERMSG.SEND_TALK_START:
  1808. // 무인경비에 통화시작 메시지 전송을 위해 무인경비 드라이버쪽에 BR을 전송한다.
  1809. MainActivity.mCallController.sendCallStart(CALLTYPE.LOBBY, RemoteIDInfo.nDong, RemoteIDInfo.nHo);
  1810. break;
  1811. default:
  1812. break;
  1813. }
  1814. }
  1815. };
  1816. private void checkDoorCtrlACK() {
  1817. try {
  1818. if (bSentiMAP) {
  1819. BTN_TALK.setButtonEventOffDisable();
  1820. BTN_END.setButtonEventOffDisable();
  1821. BTN_SAVE_PICTURE.setButtonEventOffDisable();
  1822. BTN_DOOROPEN.setButtonEventOffDisable();
  1823. MainActivity.mSound.Play(SND.setting.RETRY_ACTION);
  1824. bSentiMAP = false;
  1825. }
  1826. } catch (Exception e) {
  1827. Log.e(TAG, "[Exception] checkDoorCtrlACK()");
  1828. e.printStackTrace();
  1829. }
  1830. }
  1831. public void sendHandlerMsg(int what, int arg1, int arg2, Object obj) {
  1832. try {
  1833. LOG("[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], obj [" + obj + "]");
  1834. Message HandleMsg = TalkLobbyHandler.obtainMessage();
  1835. HandleMsg.what = what;
  1836. HandleMsg.arg1 = arg1;
  1837. HandleMsg.arg2 = arg2;
  1838. HandleMsg.obj = obj;
  1839. TalkLobbyHandler.sendMessage(HandleMsg);
  1840. } catch (Exception e) {
  1841. Log.e(TAG, "[Exception] sendHandlerMsg(msg)");
  1842. e.printStackTrace();
  1843. }
  1844. }
  1845. public void DelayedSendHanlderMsg(int what, int arg1, int arg2, Object obj, int delayTime) {
  1846. try {
  1847. LOG("[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], obj [" + obj + "], DelayTime [" + delayTime + "]");
  1848. Message HandleMsg = TalkLobbyHandler.obtainMessage();
  1849. HandleMsg.what = what;
  1850. HandleMsg.arg1 = arg1;
  1851. HandleMsg.arg2 = arg2;
  1852. HandleMsg.obj = obj;
  1853. TalkLobbyHandler.sendMessageDelayed(HandleMsg, delayTime);
  1854. } catch (Exception e) {
  1855. Log.e(TAG, "[Exception] sendHandlerMsg(msg)");
  1856. e.printStackTrace();
  1857. }
  1858. }
  1859. public void sendHandlerMsgDelayed(int what, int arg1, int arg2, Object obj, long delay) {
  1860. try {
  1861. LOG("[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], obj [" + obj + "], delay [" + delay + "]");
  1862. Message HandleMsg = TalkLobbyHandler.obtainMessage();
  1863. HandleMsg.what = what;
  1864. HandleMsg.arg1 = arg1;
  1865. HandleMsg.arg2 = arg2;
  1866. HandleMsg.obj = obj;
  1867. TalkLobbyHandler.sendMessageDelayed(HandleMsg, delay);
  1868. } catch (Exception e) {
  1869. Log.e(TAG, "[Exception] sendHandlerMsgDelayed(msg)");
  1870. e.printStackTrace();
  1871. }
  1872. }
  1873. private void sendReliefFilterSelectBR(int nSelectedFilter) {
  1874. try {
  1875. Log.i(TAG, "[sendReliefFilterSelectBR] nSelectedFilter = " + nSelectedFilter);
  1876. Intent intent = new Intent();
  1877. intent.setAction(Declare.BR.NOTIFY_CHANGE_LOBBY_FILTER);
  1878. intent.putExtra(Declare.BR.RELIEFCALL_FILTER, nSelectedFilter);
  1879. getContext().sendBroadcast(intent);
  1880. } catch (Exception e) {
  1881. Log.e(TAG, "[Exception] sendReliefFilterSelectBR(int nSelectedFilter)");
  1882. e.printStackTrace();
  1883. }
  1884. }
  1885. int nCheckCnt1 = 0, nCheckCnt2 = 0;
  1886. protected Handler mPathCheckHandler = new Handler() {
  1887. @Override
  1888. public void handleMessage(Message msg) {
  1889. // Log.d(TAG, "[mPathCheckHandler.handleMessage]");
  1890. if (msg.what == 0) {
  1891. nCheckCnt1++;
  1892. if (nCheckCnt1 > 200) {
  1893. mPathCheckHandler.removeMessages(0);
  1894. mPathCheckHandler.removeMessages(1);
  1895. } else {
  1896. if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
  1897. if (MainActivity.mCallController.getTalkPath() == CALLPATH.MOIP_IHND101_LOBBY) mPathCheckHandler.sendEmptyMessageDelayed(1, 50);
  1898. else mPathCheckHandler.sendEmptyMessageDelayed(0, 50);
  1899. } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
  1900. if (MainActivity.mCallController.getTalkPath() == CALLPATH.MOIP_IHN1000_LOBBY) mPathCheckHandler.sendEmptyMessageDelayed(1, 50);
  1901. else mPathCheckHandler.sendEmptyMessageDelayed(0, 50);
  1902. }
  1903. }
  1904. } else if (msg.what == 1) {
  1905. Log.d(TAG, "[mPathCheckHandler.handleMessage] Handler finish!!");
  1906. sendHandlerMsg(HANDLERMSG.SET_VOLUME_TABLE, 0, 0, null);
  1907. } else if (msg.what == 2) {
  1908. nCheckCnt2++;
  1909. if (nCheckCnt2 > 200) {
  1910. mPathCheckHandler.removeMessages(2);
  1911. mPathCheckHandler.removeMessages(3);
  1912. }
  1913. else {
  1914. if (MainActivity.mCallController.getTalkPath() == CALLPATH.NORMAL) mPathCheckHandler.sendEmptyMessageDelayed(3, 100);
  1915. else mPathCheckHandler.sendEmptyMessageDelayed(2, 50);
  1916. }
  1917. }
  1918. else if (msg.what == 3) {
  1919. Log.d(TAG, "[mPathCheckHandler.handleMessage] Handler finish!! PATH [NORMAL] -> play dooropen ment!");
  1920. bSentiMAP = false;
  1921. int nMentDuration = MainActivity.mSound.PlayMent(SND.mode.OPENDOOR);
  1922. try {
  1923. Log.d(TAG, "[mPathCheckHandler.handleMessage] nMentDuration -> " + nMentDuration);
  1924. Thread.sleep(nMentDuration + 1500);
  1925. } catch (InterruptedException e) {
  1926. e.printStackTrace();
  1927. }
  1928. MainActivity.mIOInterface.setMICGain(nCurrentMicGain);
  1929. }
  1930. }
  1931. };
  1932. private void finishWallpadCallApp() {
  1933. try {
  1934. doEnd();
  1935. if (MainActivity.mCallController.mCallInfo.getPSTNCallHold()) return;
  1936. ((MainActivity) mContext).finishWallPadCall();
  1937. } catch (Exception e) {
  1938. Log.e(TAG, "[Exception] finishWallpadCallApp()");
  1939. e.printStackTrace();
  1940. }
  1941. }
  1942. private void hideLobbyVideo() {
  1943. try {
  1944. Log.i(TAG, "[hideLobbyVideo]");
  1945. class hideLobbyVideo extends Thread {
  1946. @Override
  1947. public void run() {
  1948. super.run();
  1949. try {
  1950. Thread.sleep(2000);
  1951. } catch (InterruptedException e) {
  1952. e.printStackTrace();
  1953. }
  1954. sendHandlerMsg(HANDLERMSG.HIDE_LOBBYVIDEO, 0, 0, null);
  1955. }
  1956. }
  1957. hideLobbyVideo th_hideLobbyVideo = new hideLobbyVideo();
  1958. th_hideLobbyVideo.start();
  1959. } catch (Exception e) {
  1960. Log.e(TAG, "[Exception] hideLobbyVideo");
  1961. e.printStackTrace();
  1962. }
  1963. }
  1964. }