TalkLobby.java 116 KB

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