TalkFront.java 127 KB

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