TalkResidence.java 131 KB

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