TalkFront.java 130 KB

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