RemoteCallManager.java 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356
  1. package kr.co.icontrols.callengine.remotecall;
  2. import android.app.Service;
  3. import android.content.BroadcastReceiver;
  4. import android.content.ComponentName;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.os.IBinder;
  11. import android.os.Looper;
  12. import android.os.Message;
  13. import android.os.Messenger;
  14. import android.util.Log;
  15. import com.artncore.WallPadDataMgr.WallPadRemoteCallUserData;
  16. import com.artncore.WallPadDataMgr.WallPadRemoteCallUserData.RemoteCallUserClass;
  17. import com.artncore.WallPadDataMgr.WallpadDeviceSet;
  18. import com.artncore.WallPadDataMgr.WallpadStatusData;
  19. import com.artncore.WallPadDataMgr.wallpaddbmgr;
  20. import com.artncore.commons.define;
  21. import com.artncore.wallpadimap.RetProci;
  22. import com.hdc.visitorcall.VisitorCallLib;
  23. import com.util.LogUtil;
  24. import org.w3c.dom.Document;
  25. import org.w3c.dom.Element;
  26. import org.w3c.dom.Node;
  27. import org.w3c.dom.NodeList;
  28. import org.xml.sax.InputSource;
  29. import java.io.StringReader;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import javax.xml.parsers.DocumentBuilder;
  33. import javax.xml.parsers.DocumentBuilderFactory;
  34. import kr.co.icontrols.callengine.engine.CallManager.CALLEVENTTYPE;
  35. import kr.co.icontrols.callengine.engine.CallManager.CALLOWNER;
  36. import kr.co.icontrols.callengine.engine.CallManager.CALLSTATUS;
  37. import kr.co.icontrols.callengine.engine.CallManager.CALLTYPE;
  38. import kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALLHANDELKEY;
  39. import kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALLMSG;
  40. import kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CALLER;
  41. import kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CALLOWNER;
  42. import kr.co.icontrols.callengine.remotecall.RemoteCallMSG.REMOTECALL_CALLTYPE;
  43. import kr.co.icontrols.callengine.sip.SIPStun;
  44. import kr.co.icontrols.wallpadcall.declare.DataClasses.GuardListTable;
  45. import kr.co.icontrols.wallpadcall.declare.DataClasses.RemoteIDInfo;
  46. import kr.co.icontrols.wallpadcall.declare.Declare;
  47. import kr.co.icontrols.wallpadcall.declare.Declare.CALLTRIGGER;
  48. import kr.co.icontrols.wallpadcall.declare.Declare.VISITORREMOTECALL;
  49. import kr.co.icontrols.wallpadcall.declare.Global;
  50. import kr.co.icontrols.wallpadcall.declare.Global.ConfigValues;
  51. import kr.co.icontrols.wallpadcall.imap.Request_check_sip_activation;
  52. public class RemoteCallManager extends Service implements VisitorCallLib.Callback {
  53. static String TAG = "RemoteCallManager";
  54. ArrayList<Messenger> mRemoteMsns = new ArrayList<Messenger>();
  55. final Messenger mMessenger = new Messenger(new RemoteCallManagerHandler());
  56. VisitorCallLib mVisitorCallLib;
  57. WallPadRemoteCallUserData wallPadRemoteCallUserData = null;
  58. GuardListTable mGuardListTable = null; // 경비실기 목록
  59. @Override
  60. public IBinder onBind(Intent intent) {
  61. return mMessenger.getBinder();
  62. }
  63. int dong, ho;
  64. String ip;
  65. @Override
  66. public void onCreate() {
  67. try {
  68. Log.i(TAG, "========== RemoteCallManager onCreate called newly!!! ==========");
  69. super.onCreate();
  70. registerBRReceiver();
  71. Log.i(TAG, "[onCreate] --------------- VisitorCallLib ---------------");
  72. if (InitInfo()) {
  73. wallPadRemoteCallUserData = new WallPadRemoteCallUserData(this);
  74. mVisitorCallLib = VisitorCallLib.getInstance();
  75. mVisitorCallLib.setCallback(this);
  76. mVisitorCallLib.ShowLog(1);
  77. Log.d(TAG, "[onCreate] ====== mVisitorCallLib.SetInternalServerInfo ======");
  78. mVisitorCallLib.SetInternalServerInfo(VISITORREMOTECALL.INTERNAL_SERVER_IP, VISITORREMOTECALL.INTERNAL_SERVER_PORT);
  79. WallpadStatusData SetData = new WallpadStatusData(getApplicationContext());
  80. wallpaddbmgr.AddressSet addc = SetData.getAddressMGR();
  81. dong = Integer.parseInt(addc.Dong);
  82. ho = Integer.parseInt(addc.Ho);
  83. ip = addc.IPAddress;
  84. boolean bRegister = SetData.GetRemoteCallRegistration();
  85. Log.d(TAG, "[onCreate] bRegister [" + bRegister + "]");
  86. SetData.closeDB();
  87. // if (!bRegister) sendHandlerMsgDelayed(HANDLERMSG.REGISTER_REMOTECALL_LIB, 0, 0, 2000); // 방문객 원격통화 라이브러리 등록 여부 판단 후 등록 (서비스 시작 후 2초 딜레이)
  88. // else Log.w(TAG, "[onCreate] Already VisitorCallLib Registration did!!!");
  89. } else {
  90. Log.w(TAG, "[onCreate] InitInfo Fail!!");
  91. }
  92. } catch (RuntimeException re) {
  93. LogUtil.errorLogInfo("", TAG, re);
  94. } catch (Exception e) {
  95. Log.e(TAG, "[Exception] onCreate()");
  96. //e.printStackTrace();
  97. LogUtil.errorLogInfo("", TAG, e);
  98. }
  99. }
  100. @Override
  101. public int onStartCommand(Intent intent, int flags, int startId) {
  102. Log.d(TAG, "[onStartCommand] flags [" + flags + "], startId [" + startId + "]");
  103. return START_STICKY; // run until explicitly stopped.
  104. }
  105. @Override
  106. public void onDestroy() {
  107. try {
  108. super.onDestroy();
  109. unregisterBRReceiver();
  110. Log.i(TAG, "[onDestroy] ===================== RemoteCallManager Stopped!! =====================");
  111. } catch (RuntimeException re) {
  112. LogUtil.errorLogInfo("", TAG, re);
  113. } catch (Exception e) {
  114. Log.e(TAG, "[Exception] onDestroy()");
  115. //e.printStackTrace();
  116. LogUtil.errorLogInfo("", TAG, e);
  117. }
  118. }
  119. private void sendMsgToRemoteMsns(int nMsg, CALLTYPE eCallType) {
  120. try {
  121. int nRemoteCnt = mRemoteMsns.size();
  122. // Log.d(TAG, "[sendMsgToRemoteMsns] nRemoteCnt [" + nRemoteCnt + "], eCallType [" + eCallType + "]");
  123. Bundle bundle = new Bundle();
  124. bundle.putString(REMOTECALLHANDELKEY.CALLTYPE, eCallType.toString());
  125. Message msg = Message.obtain(null, nMsg, 0, 0, null);
  126. msg.setData(bundle);
  127. for (int i = 0; i < nRemoteCnt; i++) {
  128. mRemoteMsns.get(i).send(msg);
  129. }
  130. } catch (RuntimeException re) {
  131. LogUtil.errorLogInfo("", TAG, re);
  132. } catch (Exception e) {
  133. Log.e(TAG, "[Exception] sendMsgToRemoteMsns(int nMsg, CALLTYPE eCallType)");
  134. //e.printStackTrace();
  135. LogUtil.errorLogInfo("", TAG, e);
  136. }
  137. }
  138. private void sendMsgToRemoteMsns(int nMsg, CALLTYPE eCallType, AVPacket avPacket) {
  139. try {
  140. int nRemoteCnt = mRemoteMsns.size();
  141. // Log.d(TAG, "[sendMsgToRemoteMsns] nRemoteCnt [" + nRemoteCnt + "], eCallType [" + eCallType + "], avPacket.length [" + avPacket.length + "]");
  142. Bundle bundle = new Bundle();
  143. bundle.putString(REMOTECALLHANDELKEY.CALLTYPE, eCallType.toString());
  144. bundle.putSerializable(REMOTECALLHANDELKEY.AVPACKET, avPacket);
  145. Message msg = Message.obtain(null, nMsg, 0, 0, null);
  146. msg.setData(bundle);
  147. for (int i = 0; i < nRemoteCnt; i++) {
  148. mRemoteMsns.get(i).send(msg);
  149. }
  150. } catch (RuntimeException re) {
  151. LogUtil.errorLogInfo("", TAG, re);
  152. } catch (Exception e) {
  153. Log.e(TAG, "[Exception] sendMsgToRemoteMsns(int nMsg, CALLTYPE eCallType, AVPacket avPacket)");
  154. //e.printStackTrace();
  155. LogUtil.errorLogInfo("", TAG, e);
  156. }
  157. }
  158. private boolean InitInfo() {
  159. try {
  160. WallpadDeviceSet devSet = new WallpadDeviceSet(this);
  161. String[] strValue = devSet.GetSettingData("방문객원격통화");
  162. devSet.closeDB();
  163. if (strValue != null) {
  164. String IP = getExtractData(strValue[1], "IP");
  165. if (IP != null) {
  166. String Port = IP.substring(IP.indexOf(":") + 1);
  167. IP = IP.substring(0, IP.indexOf(":"));
  168. int nPort = 0;
  169. if (Port != null)
  170. nPort = Integer.parseInt(Port);
  171. VISITORREMOTECALL.INTERNAL_SERVER_IP = IP;
  172. VISITORREMOTECALL.INTERNAL_SERVER_PORT = nPort;
  173. Log.d(TAG, "[InitInfo] INTERNAL_SERVER_IP [" + VISITORREMOTECALL.INTERNAL_SERVER_IP + "], INTERNAL_SERVER_PORT [" + VISITORREMOTECALL.INTERNAL_SERVER_PORT + "]");
  174. return true;
  175. }
  176. }
  177. } catch (RuntimeException re) {
  178. LogUtil.errorLogInfo("", TAG, re);
  179. } catch (Exception e) {
  180. Log.e(TAG, "[Exception] InitInfo()");
  181. //e.printStackTrace();
  182. LogUtil.errorLogInfo("", TAG, e);
  183. }
  184. return false;
  185. }
  186. private String getExtractData(String FullText, String Name) {
  187. try {
  188. if (FullText.indexOf(Name) > 0) {
  189. String CutString = FullText.substring(FullText.indexOf(Name));
  190. // Log.d(TAG, "[getExtractData] CutString [" + CutString + "]");
  191. String subString = CutString.substring(Name.length() + 1, CutString.indexOf(")"));
  192. Log.d(TAG, "[getExtractData] subString [" + subString + "]");
  193. return subString;
  194. }
  195. } catch (RuntimeException re) {
  196. LogUtil.errorLogInfo("", TAG, re);
  197. } catch (Exception e) {
  198. //e.printStackTrace();
  199. LogUtil.errorLogInfo("", TAG, e);
  200. }
  201. return null;
  202. }
  203. private void registerRemoteCallLib() {
  204. try {
  205. if (mVisitorCallLib != null) {
  206. WallpadStatusData SetData = new WallpadStatusData(getApplicationContext());
  207. SetData.SetRemoteCallUserCnt(0); // 방문객원격통화 월패드 등록시 사용자 DB도 0으로 설정 (초기화)
  208. SetData.SetRemoteCallRegistration(false);
  209. WallpadDeviceSet devSet = new WallpadDeviceSet(getApplicationContext());
  210. int nHomeViewerUse = devSet.Get_RemoteCall_HomeViewerUse() ? 1 : 0;
  211. devSet.closeDB();
  212. Log.d(TAG, "[registerRemoteCallLib] nHomeViewerUse [" + nHomeViewerUse + "]");
  213. String strResult = mVisitorCallLib.Registration(dong, ho, ip, nHomeViewerUse, 1);
  214. if (strResult != null) {
  215. Log.d(TAG, "[registerRemoteCallLib] ====== mVisitorCallLib.Registration ======");
  216. Log.d(TAG, "[registerRemoteCallLib] strResult [" + strResult + "]");
  217. SetData.SetRemoteCallRegistration(true);
  218. String strGuardList = getGuardList();
  219. if (strGuardList != null) {
  220. if (!strGuardList.equals("")) {
  221. Log.d(TAG, "[registerRemoteCallLib] == mVisitorCallLib.SetSecurityOffice ==");
  222. int nResult = mVisitorCallLib.SetSecurityOffice(dong, ho, strGuardList); // 초기화 후 경비실기 목록 전달
  223. Log.d(TAG, "[registerRemoteCallLib] nResult [" + nResult + "]");
  224. }
  225. } else {
  226. Log.w(TAG, "[registerRemoteCallLib] strGuardList is null!!");
  227. }
  228. }
  229. SetData.closeDB();
  230. }
  231. } catch (RuntimeException re) {
  232. LogUtil.errorLogInfo("", TAG, re);
  233. } catch (Exception e) {
  234. Log.e(TAG, "[Exception] registerRemoteCallLib()");
  235. //e.printStackTrace();
  236. LogUtil.errorLogInfo("", TAG, e);
  237. }
  238. }
  239. /************************************************************
  240. *
  241. * 방문객원격통화 관련 (콜백, 이벤트)
  242. *
  243. ************************************************************/
  244. public static boolean bMobileTalk = false;
  245. // 스마트폰에서 통화 시작
  246. @Override
  247. public int EVENT_StartCalling(int handle, String caller) {
  248. try {
  249. Log.d(TAG, "[EVENT_StartCalling] handle [" + handle + "], caller [" + caller + "]");
  250. Object obj = caller;
  251. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_START_CALLING, obj);
  252. VisitorCallEventHandler.sendMessage(message);
  253. return 0;
  254. } catch (RuntimeException re) {
  255. LogUtil.errorLogInfo("", TAG, re);
  256. return -1;
  257. } catch (Exception e) {
  258. Log.e(TAG, "[Exception] EVENT_StartCalling(int handle, String caller)");
  259. //e.printStackTrace();
  260. LogUtil.errorLogInfo("", TAG, e);
  261. }
  262. return -1;
  263. }
  264. // 스마트폰에서 문열림
  265. @Override
  266. public int EVENT_UnlockDoor(int handle, String device, String caller) {
  267. try {
  268. // 현관, 로비 권한에 따라 문열림 처리
  269. Log.d(TAG, "[EVENT_UnlockDoor] handle [" + handle + "], device [" + device + "], caller [" + caller + "]");
  270. if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_LOBBY)) {
  271. int nUserCnt = wallPadRemoteCallUserData.GetRemoteCallUserCnt();
  272. Log.d(TAG, "[EVENT_UnlockDoor] nUserCnt [" + nUserCnt + "]");
  273. List<RemoteCallUserClass> dataList = wallPadRemoteCallUserData.GetRemoteCallUserData();
  274. for (int i = 0; i < nUserCnt; i++) {
  275. if (caller.equals(dataList.get(i).Name)) {
  276. if (dataList.get(i).LobbyOpenAuth.equals("1")) {
  277. Object obj = device;
  278. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_UNLOCK_DOOR, obj);
  279. VisitorCallEventHandler.sendMessage(message);
  280. return 0;
  281. } else {
  282. return -2; // 로비문열림 권한이 없는 경우
  283. }
  284. }
  285. }
  286. } else if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_DOOR)) {
  287. int nUserCnt = wallPadRemoteCallUserData.GetRemoteCallUserCnt();
  288. Log.d(TAG, "[EVENT_UnlockDoor] nUserCnt [" + nUserCnt + "]");
  289. List<RemoteCallUserClass> dataList = wallPadRemoteCallUserData.GetRemoteCallUserData();
  290. for (int i = 0; i < nUserCnt; i++) {
  291. if (caller.equals(dataList.get(i).Name)) {
  292. if (dataList.get(i).DoorOpenAuth.equals("1")) {
  293. Object obj = device;
  294. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_UNLOCK_DOOR, obj);
  295. VisitorCallEventHandler.sendMessage(message);
  296. return 0;
  297. } else {
  298. return -2; // 현관문열림 권한이 없는 경우
  299. }
  300. }
  301. }
  302. }
  303. } catch (RuntimeException re) {
  304. LogUtil.errorLogInfo("", TAG, re);
  305. } catch (Exception e) {
  306. Log.e(TAG, "[Exception] EVENT_UnlockDoor(int handle, String device, String caller)");
  307. //e.printStackTrace();
  308. LogUtil.errorLogInfo("", TAG, e);
  309. }
  310. return -1;
  311. }
  312. // 스마트폰에서 현관모니터링 또는 경비발신 요청
  313. @Override
  314. public int EVENT_RequestMonitor(int handle, String device, String caller) {
  315. try {
  316. Log.d(TAG, "[EVENT_RequestMonitor] handle [" + handle + "], device [" + device + "], caller [" + caller + "]");
  317. Log.d(TAG, "[EVENT_RequestMonitor] bWallPadCallLive [" + SIPStun.bWallPadCallLive + "]");
  318. if (!SIPStun.bWallPadCallLive && mHandle == -1) {
  319. // 모바일 요청 성공
  320. mVisitorCallLib.ndkHandle = mHandle = handle;
  321. Log.d(TAG, "[EVENT_RequestMonitor] EVENT_REQUEST_MONITOR_SUCCESS mHandle [" + mHandle + "]");
  322. } else {
  323. // 모바일 요청 실패
  324. Log.w(TAG, "[EVENT_RequestMonitor] EVENT_REQUEST_MONITOR_ERR mHandle [" + mHandle + "]");
  325. Object obj = handle;
  326. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_REQUEST_MONITOR_ERR, obj);
  327. VisitorCallEventHandler.sendMessage(message);
  328. return -3;
  329. }
  330. if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_DOOR)) {
  331. // 현관모니터링 요청
  332. int nUserCnt = wallPadRemoteCallUserData.GetRemoteCallUserCnt();
  333. Log.d(TAG, "[EVENT_RequestMonitor] CALLTYPE_DOOR nUserCnt [" + nUserCnt + "]");
  334. List<RemoteCallUserClass> dataList = wallPadRemoteCallUserData.GetRemoteCallUserData();
  335. for (int i = 0; i < nUserCnt; i++) {
  336. if (caller.equals(dataList.get(i).Name)) {
  337. if (dataList.get(i).MonitorAuth.equals("1")) {
  338. Object obj = device;
  339. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_REQUEST_MONITOR, obj);
  340. VisitorCallEventHandler.sendMessage(message);
  341. return 0;
  342. } else {
  343. return -2; // 현관보기 권한이 없는 경우
  344. }
  345. }
  346. }
  347. }
  348. else if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_WALLPAD)) {
  349. // 모바일에서 세대모니터링 요청
  350. int nUserCnt = wallPadRemoteCallUserData.GetRemoteCallUserCnt();
  351. Log.d(TAG, "[EVENT_RequestMonitor] CALLTYPE_WALLPAD nUserCnt [" + nUserCnt + "]");
  352. List<RemoteCallUserClass> dataList = wallPadRemoteCallUserData.GetRemoteCallUserData();
  353. for (int i = 0; i < nUserCnt; i++) {
  354. Log.d(TAG, "[EVENT_RequestMonitor] dataList.Name [" + dataList.get(i).Name + "], dataList.HomeViewerAuth [" + dataList.get(i).HomeViewerAuth + "]");
  355. if (caller.equals(dataList.get(i).Name)) {
  356. if (dataList.get(i).HomeViewerAuth.equals("1")) {
  357. Object obj = device;
  358. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_REQUEST_MONITOR, obj);
  359. VisitorCallEventHandler.sendMessage(message);
  360. return 0;
  361. } else {
  362. return -2; // 홈뷰어 권한이 없는 경우
  363. }
  364. }
  365. }
  366. }
  367. else {
  368. // 모바일에서 경비 발신 요청
  369. if (REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME == null) {
  370. if (mGuardListTable == null) getGuardList();
  371. }
  372. // Log.d(TAG, "[EVENT_RequestMonitor] CALLTYPE_GUARD_NAME.size() [" + REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.size() + "]");
  373. if(REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME!=null)
  374. {
  375. for (int i = 0; i < REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.size(); i++) {
  376. if (REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME!=null && REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.get(i).equals(device)) {
  377. Log.d(TAG, "[EVENT_RequestMonitor] CALLTYPE_GUARD_NAME[" + i + "] = " + REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.get(i));
  378. // 모바일에서 경비실 통화 발신
  379. RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.GUARD;
  380. return tryGuardCall(getGuardID(device));
  381. }
  382. }
  383. }
  384. }
  385. } catch (RuntimeException re) {
  386. LogUtil.errorLogInfo("", TAG, re);
  387. } catch (Exception e) {
  388. Log.e(TAG, "[Exception] EVENT_RequestMonitor(int handle, String device, String caller)");
  389. //e.printStackTrace();
  390. LogUtil.errorLogInfo("", TAG, e);
  391. }
  392. Log.w(TAG, "[EVENT_RequestMonitor] EVENT_RequestMonitor_FAIL!!!");
  393. return -1;
  394. }
  395. // 스마트폰에서 전달한 오디오 데이터 수신 (이 데이터를 현관카메라/로비폰/경비실기로 전달)
  396. @Override
  397. public void EVENT_AudioData(int handle, byte[] bytes, int size) {
  398. try {
  399. // Log.d(TAG, "[EVENT_AudioData] handle [" + handle + "], bytes.length [" + bytes.length + "], size [" + size + "]");
  400. if (!bMobileTalk) {
  401. // Log.w(TAG, "[EVENT_AudioData] CALLOWNER isn't Mobile!!"); // 통화주체(CallOwner)가 모바일인 경우에만 오디오 데이터 수신
  402. return;
  403. }
  404. AVPacket avPacket = new AVPacket();
  405. avPacket.avType = 1; // 1: AUDIO
  406. avPacket.data = bytes;
  407. avPacket.length = size;
  408. avPacket.frameType = 0; // 0: G711, 1: PCM 데이터 전송
  409. Object obj = avPacket;
  410. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_AUDIO_DATA, obj);
  411. VisitorCallEventHandler.sendMessage(message);
  412. } catch (RuntimeException re) {
  413. LogUtil.errorLogInfo("", TAG, re);
  414. } catch (Exception e) {
  415. Log.e(TAG, "[Exception] EVENT_AudioData(int handle, byte[] bytes, int size)");
  416. //e.printStackTrace();
  417. LogUtil.errorLogInfo("", TAG, e);
  418. }
  419. }
  420. // 스마트폰에서 사용자 등록을 위한 인증키 전달
  421. @Override
  422. public int EVENT_RequestShowAuthorityKey(int handle, String strKey) {
  423. try {
  424. Log.d(TAG, "[EVENT_RequestShowAuthorityKey] handle [" + handle + "], strKey [" + strKey + "]");
  425. } catch (RuntimeException re) {
  426. LogUtil.errorLogInfo("", TAG, re);
  427. } catch (Exception e) {
  428. Log.e(TAG, "[Exception] EVENT_RequestShowAuthorityKey(int handler, String strKey)");
  429. //e.printStackTrace();
  430. LogUtil.errorLogInfo("", TAG, e);
  431. }
  432. return -1;
  433. }
  434. // 월패드에서 사용자 리스트 요청 후 비동기로 받음 (GetRegisteredUserList에 대한 콜백)
  435. @Override
  436. public void EVENT_RegisteredUserList(int handle, String userXML) {
  437. try {
  438. Log.d(TAG, "[EVENT_RegisteredUserList] handle [" + handle + "], userXML [" + userXML + "]");
  439. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  440. DocumentBuilder builder = factory.newDocumentBuilder();
  441. Document document = builder.parse(new InputSource(new StringReader(userXML)));
  442. NodeList userList = document.getElementsByTagName("user");
  443. int remoteCallUserCnt = userList.getLength();
  444. Log.d(TAG, "[EVENT_RegisteredUserList] remoteCallUserCnt [" + remoteCallUserCnt + "]");
  445. Log.d(TAG, "[EVENT_RegisteredUserList] === Send BR === REMOTECALL_USER_REGISTER_RESULT");
  446. Intent mIntent = new Intent(); // 설정 앱에서 실제 등록 확인을 위한 사용자 수 BR 전송
  447. mIntent.setAction("REMOTECALL_USER_REGISTER_RESULT");
  448. mIntent.putExtra("REMOTECALL_USER_CNT", remoteCallUserCnt);
  449. sendBroadcast(mIntent);
  450. WallpadStatusData SetData = new WallpadStatusData(getApplicationContext());
  451. SetData.SetRemoteCallUserCnt(remoteCallUserCnt); // 사용자 추가 완료 후 DB 저장 (DB 업데이트)
  452. SetData.closeDB();
  453. addRemoteCallUserInfo(userList, document);
  454. } catch (RuntimeException re) {
  455. LogUtil.errorLogInfo("", TAG, re);
  456. } catch (Exception e) {
  457. Log.e(TAG, "[Exception] EVENT_RegisteredUserList(int handle, String userXML)");
  458. //e.printStackTrace();
  459. LogUtil.errorLogInfo("", TAG, e);
  460. }
  461. }
  462. // 월패드에서 사용자 제거 후 결과값 알려줌 (DelRegisteredUserList에 대한 콜백)
  463. @Override
  464. public void EVENT_DelRegisteredUserList(int handle, int result, String message) {
  465. try {
  466. Log.d(TAG, "[EVENT_DelRegisteredUserList] handle [" + handle + "], result [" + result + "], message [" + message + "]");
  467. } catch (RuntimeException re) {
  468. LogUtil.errorLogInfo("", TAG, re);
  469. } catch (Exception e) {
  470. Log.e(TAG, "[Exception] EVENT_DelRegisteredUserList(int handle, int result, String message)");
  471. //e.printStackTrace();
  472. LogUtil.errorLogInfo("", TAG, e);
  473. }
  474. }
  475. // 월패드에서 사용자 권한 변경 후 결과값 알려줌 (SetUserAuthority에 대한 콜백)
  476. @Override
  477. public void EVENT_SetUserAuthority(int handle, int result, String message) {
  478. try {
  479. Log.d(TAG, "[EVENT_SetUserAuthority] handle [" + handle + "], result [" + result + "], message [" + message + "]");
  480. if (result == 0) {
  481. // debugging
  482. List<RemoteCallUserClass> dataList = wallPadRemoteCallUserData.GetRemoteCallUserData();
  483. for (int i = 0; i < wallPadRemoteCallUserData.GetRemoteCallUserCnt(); i++) {
  484. Log.d(TAG, "[EVENT_SetUserAuthority] dataList.Name [" + dataList.get(i).Name + "], dataList.MonitorAuth [" + dataList.get(i).MonitorAuth + "], dataList.HomeViewerAuth [" + dataList.get(i).HomeViewerAuth + "]");
  485. }
  486. }
  487. } catch (RuntimeException re) {
  488. LogUtil.errorLogInfo("", TAG, re);
  489. } catch (Exception e) {
  490. Log.e(TAG, "[Exception] EVENT_SetUserAuthority(int handle, int result, String message)");
  491. //e.printStackTrace();
  492. LogUtil.errorLogInfo("", TAG, e);
  493. }
  494. }
  495. /**
  496. * 스마트폰에서 사용자 등록을 완료한 경우 호출되는 콜백함수
  497. * @param handle
  498. * @param eventType 0 (사용자 추가)
  499. * @param eventContent 추가된 사용자의 PhoneKey(UDID)
  500. * @param eventLength
  501. */
  502. @Override
  503. public void EVENT_OtherEvent(int handle, int eventType, String eventContent, int eventLength) {
  504. try {
  505. Log.d(TAG, "[EVENT_OtherEvent] handle [" + handle + "], eventType [" + eventType + "], eventContent [" + eventContent + "], eventLength [" + eventLength + "]");
  506. int arg1 = eventType;
  507. Object obj = eventContent;
  508. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_OTHEREVENT, arg1, 0, obj);
  509. VisitorCallEventHandler.sendMessage(message);
  510. } catch (RuntimeException re) {
  511. LogUtil.errorLogInfo("", TAG, re);
  512. } catch (Exception e) {
  513. Log.e(TAG, "[Exception] EVENT_OtherEvent(int handle, int eventType, String eventContent, int eventLength)");
  514. //e.printStackTrace();
  515. LogUtil.errorLogInfo("", TAG, e);
  516. }
  517. }
  518. @Override
  519. public void EVENT_TestMedia(int i, byte[] bytes, int i1, int i2) {
  520. }
  521. // 세션 연결이 끝난 경우 호출되는 콜백함수
  522. @Override
  523. public void EVENT_ClosedSession(int handle, int count) {
  524. try {
  525. Log.d(TAG, "[EVENT_CloseSession] handle [" + handle + "], count [" + count + "]");
  526. if (count == 0) {
  527. bMobileTalk = false;
  528. Object obj = handle;
  529. Message message = VisitorCallEventHandler.obtainMessage(VisitorCallEvent.EVENT_CLOSED_SESSION, obj);
  530. VisitorCallEventHandler.sendMessage(message);
  531. }
  532. } catch (RuntimeException re) {
  533. LogUtil.errorLogInfo("", TAG, re);
  534. } catch (Exception e) {
  535. Log.e(TAG, "[Exception] EVENT_ClosedSession(int handle, int count)");
  536. //e.printStackTrace();
  537. LogUtil.errorLogInfo("", TAG, e);
  538. }
  539. }
  540. // 방문객원격통화 이벤트 핸들러
  541. interface VisitorCallEvent {
  542. public final int EVENT_REGISTRATION = 0;
  543. public final int EVENT_REQUEST_MONITOR = 1;
  544. public final int EVENT_START_CALLING = 2;
  545. public final int EVENT_AUDIO_DATA = 3;
  546. public final int EVENT_UNLOCK_DOOR = 4;
  547. public final int EVENT_GETUSERLIST = 6;
  548. public final int EVENT_DELUSERLIST = 7;
  549. public final int EVENT_OTHEREVENT = 8;
  550. public final int EVENT_REQUEST_MONITOR_ERR = 9;
  551. public final int EVENT_CLOSED_SESSION = 10;
  552. }
  553. int mHandle = -1;
  554. private Handler VisitorCallEventHandler = new Handler() {
  555. @Override
  556. public void handleMessage(Message msg) {
  557. super.handleMessage(msg);
  558. try {
  559. // Log.d(TAG, "[VisitorCallEventHandler] msg.what [" + msg.what + "]");
  560. if (msg.what == VisitorCallEvent.EVENT_REQUEST_MONITOR) {
  561. String device = (String) msg.obj;
  562. if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_DOOR)) {
  563. RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.FRONT;
  564. runCallMainActivity(CALLOWNER.MOBILE, CALLEVENTTYPE.REQUEST_FRONT_MONITORING, RemoteCallMSG.REMOTE_CALLTYPE, null); // 통화 앱 실행
  565. sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_REQUEST_MONITOR, RemoteCallMSG.REMOTE_CALLTYPE); // 데이터 전달
  566. } else if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_WALLPAD)) {
  567. RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.RESIDENCE;
  568. runCallMainActivity(CALLOWNER.MOBILE, CALLEVENTTYPE.REQUEST_FRONT_MONITORING, RemoteCallMSG.REMOTE_CALLTYPE, null); // 통화 앱 실행
  569. sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_REQUEST_MONITOR, RemoteCallMSG.REMOTE_CALLTYPE); // 데이터 전달
  570. }
  571. } else if (msg.what == VisitorCallEvent.EVENT_START_CALLING) {
  572. Log.d(TAG, "[VisitorCallEventHandler] REMOTE_CALLTYPE [" + RemoteCallMSG.REMOTE_CALLTYPE + "]");
  573. if (RemoteCallMSG.REMOTE_CALLTYPE != CALLTYPE.NONE) sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_START_CALL, RemoteCallMSG.REMOTE_CALLTYPE);
  574. } else if (msg.what == VisitorCallEvent.EVENT_AUDIO_DATA) {
  575. AVPacket avp = (AVPacket) msg.obj;
  576. if (RemoteCallMSG.REMOTE_CALLTYPE != CALLTYPE.NONE) sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_AUDIO_DATA, RemoteCallMSG.REMOTE_CALLTYPE, avp);
  577. } else if (msg.what == VisitorCallEvent.EVENT_UNLOCK_DOOR) {
  578. String device = (String) msg.obj;
  579. if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_DOOR)) RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.FRONT;
  580. else if (device.equals(REMOTECALL_CALLTYPE.CALLTYPE_LOBBY)) RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.LOBBY;
  581. else RemoteCallMSG.REMOTE_CALLTYPE = CALLTYPE.NONE;
  582. Log.d(TAG, "[VisitorCallEventHandler] REMOTE_CALLTYPE [" + RemoteCallMSG.REMOTE_CALLTYPE + "]");
  583. if (RemoteCallMSG.REMOTE_CALLTYPE != CALLTYPE.NONE) sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_UNLOCK_DOOR, RemoteCallMSG.REMOTE_CALLTYPE);
  584. } else if (msg.what == VisitorCallEvent.EVENT_OTHEREVENT) {
  585. int eventType = msg.arg1;
  586. String phoneKey = (String) msg.obj;
  587. Log.d(TAG, "[VisitorCallEventHandler] eventType [" + eventType + "], phoneKey [" + phoneKey + "]");
  588. if (eventType == 0) {
  589. sendHandlerMsg(HANDLERMSG.GET_USERLIST, 0, 0, phoneKey);
  590. }
  591. } else if (msg.what == VisitorCallEvent.EVENT_CLOSED_SESSION || msg.what == VisitorCallEvent.EVENT_REQUEST_MONITOR_ERR) {
  592. int handle = (int) msg.obj;
  593. if (mVisitorCallLib != null) {
  594. Log.d(TAG, "[VisitorCallEventHandler] EVENT_CLOSED_SESSION handle [" + handle + "]");
  595. mVisitorCallLib.Close(handle);
  596. mVisitorCallLib.ndkHandle = mHandle = -1;
  597. }
  598. bMobileTalk = false;
  599. Log.d(TAG, "[VisitorCallEventHandler] REMOTE_CALLTYPE handle [" + RemoteCallMSG.REMOTE_CALLTYPE + "]");
  600. if (RemoteCallMSG.REMOTE_CALLTYPE != CALLTYPE.NONE) {
  601. sendMsgToRemoteMsns(REMOTECALLMSG.RECEIVE_EVENT_CLOSE_SESSION, RemoteCallMSG.REMOTE_CALLTYPE);
  602. if (RemoteCallMSG.REMOTE_CALLOWNER == CALLOWNER.MOBILE) {
  603. Log.d(TAG, "[VisitorCallEventHandler] REMOTE_CALLOWNER [" + RemoteCallMSG.REMOTE_CALLOWNER + "]");
  604. WallpadStatusData mWallpadStatusData = new WallpadStatusData(getApplicationContext());
  605. int nAlarmStatus = mWallpadStatusData.GetAlarmStatus();
  606. mWallpadStatusData.closeDB();
  607. Log.d(TAG, "[VisitorCallEventHandler] nAlarmStatus [" + nAlarmStatus + "]");
  608. if (RemoteCallMSG.REMOTE_CALLTYPE == CALLTYPE.FRONT) {
  609. if (nAlarmStatus != WallpadStatusData.GUARD_OUT) sendBR_AppFinish(getApplicationContext());
  610. }
  611. }
  612. }
  613. }
  614. } catch (RuntimeException re) {
  615. LogUtil.errorLogInfo("", TAG, re);
  616. } catch (Exception e) {
  617. Log.e(TAG, "[Exception] VisitorCallEventHandler.handleMessage()");
  618. //e.printStackTrace();
  619. LogUtil.errorLogInfo("", TAG, e);
  620. }
  621. }
  622. };
  623. class RemoteCallManagerHandler extends Handler {
  624. @Override
  625. public void handleMessage(Message msg) {
  626. Log.d(TAG, "[RemoteCallManagerHandler] what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "], obj [" + msg.obj + "]");
  627. switch (msg.what) {
  628. case REMOTECALLMSG.REGISTER:
  629. Log.w(TAG, "[RemoteCallManagerHandler] REGISTER [" + msg.obj + "]");
  630. mRemoteMsns.add(msg.replyTo);
  631. break;
  632. case REMOTECALLMSG.UNREGISTER:
  633. Log.w(TAG, "[RemoteCallManagerHandler] UNREGISTER [" + msg.obj + "]");
  634. mRemoteMsns.remove(msg.replyTo);
  635. break;
  636. case REMOTECALLMSG.SEND_OPEN_REMOTECALLLIB:
  637. openRemoteCallLib(msg.getData());
  638. break;
  639. case REMOTECALLMSG.SEND_CLOSE_REMOTECALLLIB:
  640. closeRemoteCallLib();
  641. break;
  642. case REMOTECALLMSG.SEND_MSG_TO_REMOTECALL:
  643. sendCommandToRemoteCall(msg.getData());
  644. break;
  645. default:
  646. break;
  647. }
  648. }
  649. }
  650. private void openRemoteCallLib(Bundle mBundle) {
  651. try {
  652. CALLTYPE eCallType = CALLTYPE.getCALLTYPE(mBundle.getString(REMOTECALLHANDELKEY.CALLTYPE));
  653. Log.d(TAG, "[openRemoteCallLib] eCallType [" + eCallType + "]");
  654. if (mVisitorCallLib != null) {
  655. if (eCallType == CALLTYPE.FRONT) {
  656. CALLSTATUS eCallStatus = CALLSTATUS.getCALLSTATUS(mBundle.getString(REMOTECALLHANDELKEY.CALLSTATUS));
  657. Log.d(TAG, "[openRemoteCallLib] eCallStatus [" + eCallStatus + "]");
  658. mVisitorCallLib.ndkHandle = mHandle = mVisitorCallLib.OpenEx(dong, ho, REMOTECALL_CALLTYPE.CALLTYPE_DOOR, REMOTECALL_CALLOWNER.CALLEVENT_VISITOR);
  659. Log.d(TAG, "[openRemoteCallLib] mHandle [" + mHandle + "]");
  660. }
  661. else if (eCallType == CALLTYPE.LOBBY) {
  662. mVisitorCallLib.ndkHandle = mHandle = mVisitorCallLib.OpenEx(dong, ho, REMOTECALL_CALLTYPE.CALLTYPE_LOBBY, REMOTECALL_CALLOWNER.CALLEVENT_VISITOR);
  663. Log.d(TAG, "[openRemoteCallLib] mHandle [" + mHandle + "]");
  664. }
  665. else if (eCallType == CALLTYPE.GUARD) {
  666. String sRemoteSIPID = mBundle.getString(REMOTECALLHANDELKEY.REMOTEID);
  667. String sRemoteIP = mBundle.getString(REMOTECALLHANDELKEY.REMOTEIP);
  668. Log.d(TAG, "[openRemoteCallLib] sRemoteSIPID [" + sRemoteSIPID + "], sRemoteIP [" + sRemoteIP + "]");
  669. mVisitorCallLib.ndkHandle = mHandle = mVisitorCallLib.OpenEx(dong, ho, getCallerName(eCallType, sRemoteSIPID, sRemoteIP), REMOTECALL_CALLOWNER.CALLEVENT_CALL);
  670. Log.d(TAG, "[openRemoteCallLib] mHandle [" + mHandle + "]");
  671. }
  672. else {
  673. Log.w(TAG, "[openRemoteCallLib] Not Supported eCallType!! [" + eCallType + "]");
  674. }
  675. }
  676. } catch (RuntimeException re) {
  677. LogUtil.errorLogInfo("", TAG, re);
  678. } catch (Exception e) {
  679. Log.e(TAG, "[Exception] openRemoteCallLib(Bundle mBundle)");
  680. //e.printStackTrace();
  681. LogUtil.errorLogInfo("", TAG, e);
  682. }
  683. }
  684. private void closeRemoteCallLib() {
  685. try {
  686. Log.d(TAG, "[closeRemoteCallLib] mHandle [" + mHandle + "]");
  687. if (mVisitorCallLib != null) {
  688. if (mHandle >= 0) mVisitorCallLib.Close(mHandle);
  689. mVisitorCallLib.ndkHandle = mHandle = -1;
  690. }
  691. } catch (RuntimeException re) {
  692. LogUtil.errorLogInfo("", TAG, re);
  693. } catch (Exception e) {
  694. Log.e(TAG, "[Exception] closeRemoteCallLib()");
  695. //e.printStackTrace();
  696. LogUtil.errorLogInfo("", TAG, e);
  697. }
  698. }
  699. // 추가된 사용자 정보 저장
  700. private void addRemoteCallUserInfo(NodeList userList, Document document) {
  701. try {
  702. int nUserCnt = userList.getLength();
  703. Log.d(TAG, "[addRemoteCallUserInfo] nUserCnt [" + nUserCnt + "]");
  704. String Name = "", PhoneKey = "", MonitorAuth = "", LobbyOpenAuth = "";
  705. for (int i = 0; i < nUserCnt; i++) {
  706. Node node = userList.item(i);
  707. Element element = (Element) node;
  708. NodeList phone_number = element.getElementsByTagName("phone_number");
  709. PhoneKey = phone_number.item(0).getChildNodes().item(0).getNodeValue();
  710. NodeList name = element.getElementsByTagName("name");
  711. Name = name.item(0).getChildNodes().item(0).getNodeValue();
  712. NodeList authList = document.getElementsByTagName("auth");
  713. for (int j = 0; j < authList.getLength(); j++) {
  714. Node authNode = userList.item(j);
  715. Element authElement = (Element) authNode;
  716. NodeList monitor_auth = authElement.getElementsByTagName("monitor");
  717. MonitorAuth = monitor_auth.item(0).getChildNodes().item(0).getNodeValue();
  718. NodeList lobby_auth = authElement.getElementsByTagName("open_lobby");
  719. LobbyOpenAuth = lobby_auth.item(0).getChildNodes().item(0).getNodeValue();
  720. }
  721. }
  722. Log.d(TAG, "[addRemoteCallUserInfo] Name [" + Name + "], PhoneKey [" + PhoneKey + "], MonitorAuth [" + MonitorAuth + "], LobbyOpenAuth [" + LobbyOpenAuth + "]");
  723. if (mVisitorCallLib != null)
  724. mVisitorCallLib.SetUserAuthority(dong, ho, PhoneKey, 1, Integer.parseInt(MonitorAuth), 0, Integer.parseInt(LobbyOpenAuth)); // 통화기능/영상감시/현관문열림/로비문열림
  725. wallPadRemoteCallUserData.AddRemoteCallUserInfo(PhoneKey, Name); // DB에 추가
  726. } catch (RuntimeException re) {
  727. LogUtil.errorLogInfo("", TAG, re);
  728. } catch (Exception e) {
  729. Log.e(TAG, "[Exception] addRemoteCallUserInfo(NodeList userList, Document document)");
  730. //e.printStackTrace();
  731. LogUtil.errorLogInfo("", TAG, e);
  732. }
  733. }
  734. // Open을 통해 연결된 세션으로 타명령어 전송
  735. private void sendCommandToRemoteCall(Bundle mBundle) {
  736. try {
  737. int cmd = mBundle.getInt(REMOTECALLHANDELKEY.COMMAND);
  738. String strRemoteID = mBundle.getString(REMOTECALLHANDELKEY.REMOTEID);
  739. String strRemoteIP = mBundle.getString(REMOTECALLHANDELKEY.REMOTEIP);
  740. CALLTYPE eCallType = CALLTYPE.getCALLTYPE(mBundle.getString(REMOTECALLHANDELKEY.CALLTYPE));
  741. Log.d(TAG, "[sendCommandToRemoteCall] cmd [" + cmd + "], strRemoteID [" + strRemoteID + "], strRemoteIP [" + strRemoteIP + "], eCallType [" + eCallType + "]");
  742. if (eCallType != null) {
  743. String strCaller = getCallerName(eCallType, strRemoteID, strRemoteIP);
  744. Log.d(TAG, "[sendCommandToRemoteCall] strCaller [" + strCaller + "]");
  745. if (mVisitorCallLib != null) {
  746. mVisitorCallLib.SendCommand(mVisitorCallLib.ndkHandle, cmd, strCaller);
  747. }
  748. }
  749. } catch (RuntimeException re) {
  750. LogUtil.errorLogInfo("", TAG, re);
  751. } catch (Exception e) {
  752. Log.e(TAG, "[Exception] sendCommandToRemoteCall()");
  753. //e.printStackTrace();
  754. LogUtil.errorLogInfo("", TAG, e);
  755. }
  756. }
  757. // 원격지 ID와 IP로 Caller 이름 가져오기
  758. private String getCallerName(CALLTYPE eCallType, String sRemoteID, String sRemoteIP) {
  759. try {
  760. Log.d(TAG, "[getCallerName] eCallType [" + eCallType + "]");
  761. if (eCallType == CALLTYPE.GUARD || eCallType == CALLTYPE.RESIDENCE) {
  762. if ((sRemoteID != null) && (sRemoteIP != null)) {
  763. return getRemoteName(sRemoteID, sRemoteIP);
  764. }
  765. } else if (eCallType == CALLTYPE.FRONT) {
  766. return REMOTECALL_CALLER.CALLER_FRONT;
  767. } else if (eCallType == CALLTYPE.LOBBY) {
  768. return REMOTECALL_CALLER.CALLER_LOBBY;
  769. }
  770. return "NONE";
  771. } catch (RuntimeException re) {
  772. LogUtil.errorLogInfo("", TAG, re);
  773. return "ERROR";
  774. } catch (Exception e) {
  775. Log.e(TAG, "[Exception] getCallerName(String strGuardIP)");
  776. //e.printStackTrace();
  777. LogUtil.errorLogInfo("", TAG, e);
  778. return "ERROR";
  779. }
  780. }
  781. public String getRemoteName(String strSIPID, String strIP) {
  782. try {
  783. Log.d(TAG, "[getRemoteName] strSIPID [" + strSIPID + "], strIP [" + strIP + "]");
  784. String[] strParse = strSIPID.split("_");
  785. String strDeviceType = strParse[1];
  786. String strHeadID = Integer.toString(Integer.parseInt(strParse[2]));
  787. String strTailID = Integer.toString(Integer.parseInt(strParse[3]));
  788. String strResult = "NONE";
  789. if (strDeviceType.equalsIgnoreCase(Declare.DEVICENAME.strType_Resi)) {
  790. strResult = strHeadID + "동 " + strTailID + "호";
  791. } else if (strDeviceType.equalsIgnoreCase(Declare.DEVICENAME.strType_RentResi)) {
  792. strResult = strHeadID + "동 " + strTailID + "-1호";
  793. } else if (strDeviceType.equalsIgnoreCase(Declare.DEVICENAME.strType_Guard)) {
  794. strResult = getGuardName(strIP);
  795. if (strResult.equals("NONE") || strResult.equals("ERROR")) {
  796. strResult = strHeadID + "동 " + strTailID + "번 경비";
  797. }
  798. if (strResult.equals("경비실")) strResult = REMOTECALL_CALLTYPE.CALLTYPE_CTRL_GUARD;
  799. else if (strResult.equals("관리실")) strResult = REMOTECALL_CALLTYPE.CALLTYPE_OFFICE_GUARD;
  800. else if (strResult.contains("정문")) strResult = REMOTECALL_CALLTYPE.CALLTYPE_MAINGATE_GUARD;
  801. else if (strResult.contains("후문")) strResult = REMOTECALL_CALLTYPE.CALLTYPE_SUBGATE_GUARD;
  802. } else if (strDeviceType.equalsIgnoreCase(Declare.DEVICENAME.strType_Lobby)) {
  803. strResult = strHeadID + "동 " + strTailID + "번 로비폰";
  804. }
  805. Log.d(TAG, "[getRemoteName] strResult [" + strResult + "]");
  806. return strResult;
  807. } catch (RuntimeException re) {
  808. LogUtil.errorLogInfo("", TAG, re);
  809. return "ERROR";
  810. } catch (Exception e) {
  811. Log.e(TAG, "[Exception] getRemoteName(String strSIPID, String strIP)");
  812. //e.printStackTrace();
  813. LogUtil.errorLogInfo("", TAG, e);
  814. return "ERROR";
  815. }
  816. }
  817. public String getGuardName(String strGuardIP) {
  818. try {
  819. Log.d(TAG, "[getGuardName] strGuardIP [" + strGuardIP + "]");
  820. if (mGuardListTable == null) {
  821. Log.w(TAG, "[getGuardName] mGuardListTable is null!");
  822. getGuardList();
  823. }
  824. if (mGuardListTable != null) {
  825. int nGuardCnt = mGuardListTable.getCnt();
  826. for (int i = 0; i < nGuardCnt; i++) {
  827. if (mGuardListTable.getGuardInfo(i).IP().equals(strGuardIP)) {
  828. String strGuardName = mGuardListTable.getGuardInfo(i).NAME();
  829. Log.d(TAG, "[getGuardName] strGuardName [" + strGuardName + "]");
  830. return strGuardName;
  831. }
  832. }
  833. }
  834. return "NONE";
  835. } catch (RuntimeException re) {
  836. LogUtil.errorLogInfo("", TAG, re);
  837. return "ERROR";
  838. } catch (Exception e) {
  839. Log.e(TAG, "[Exception] getGuardName(String strGuardIP)");
  840. //e.printStackTrace();
  841. LogUtil.errorLogInfo("", TAG, e);
  842. return "ERROR";
  843. }
  844. }
  845. public String getGuardID(String strGuardName) {
  846. try {
  847. if (strGuardName.equals(REMOTECALL_CALLTYPE.CALLTYPE_CTRL_GUARD)) return REMOTECALLHANDELKEY.GUARD_01;
  848. else if (strGuardName.equals(REMOTECALL_CALLTYPE.CALLTYPE_MAINGATE_GUARD)) return REMOTECALLHANDELKEY.GUARD_02;
  849. else if (strGuardName.equals(REMOTECALL_CALLTYPE.CALLTYPE_SUBGATE_GUARD)) return REMOTECALLHANDELKEY.GUARD_03;
  850. else if (strGuardName.equals(REMOTECALL_CALLTYPE.CALLTYPE_OFFICE_GUARD)) return REMOTECALLHANDELKEY.GUARD_04;
  851. else return REMOTECALLHANDELKEY.GUARD_01;
  852. } catch (RuntimeException re) {
  853. LogUtil.errorLogInfo("", TAG, re);
  854. return null;
  855. } catch (Exception e) {
  856. Log.e(TAG, "[Exception] getGuardID(String strGuardName)");
  857. //e.printStackTrace();
  858. LogUtil.errorLogInfo("", TAG, e);
  859. return null;
  860. }
  861. }
  862. private String getGuardList() {
  863. try {
  864. List<String[]> GuardList = null;
  865. WallpadDeviceSet deviceSet = new WallpadDeviceSet(getApplicationContext());
  866. GuardList = deviceSet.GetGuardList();
  867. mGuardListTable = new GuardListTable();
  868. mGuardListTable.clearTable();
  869. Log.d(TAG, "[getGuardList] GuardList.size [" + GuardList.size() + "]");
  870. for (int i = 0; i < GuardList.size(); i++) {
  871. Log.d(TAG, "[getGuardList] GuardList [" + i + "] = " + GuardList.get(i)[0]);
  872. mGuardListTable.addGuardTable(GuardList.get(i)[0], Global.makeGuardIP(GuardList.get(i)[1]), null);
  873. }
  874. deviceSet.closeDB();
  875. int nGuardCnt = mGuardListTable.getCnt();
  876. if (nGuardCnt > 0) {
  877. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME = new ArrayList<>();
  878. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.clear();
  879. for (int i = 0; i < nGuardCnt; i++) {
  880. if (mGuardListTable.getGuardInfo(i).NAME().equals("경비실")) {
  881. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.add(REMOTECALL_CALLTYPE.CALLTYPE_CTRL_GUARD);
  882. REMOTECALL_CALLTYPE.strCONTROLGUARD_IP = mGuardListTable.getGuardInfo(i).IP();
  883. } else if (mGuardListTable.getGuardInfo(i).NAME().contains("정문")) {
  884. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.add(REMOTECALL_CALLTYPE.CALLTYPE_MAINGATE_GUARD);
  885. REMOTECALL_CALLTYPE.strMAINGATEGUARD_IP = mGuardListTable.getGuardInfo(i).IP();
  886. } else if (mGuardListTable.getGuardInfo(i).NAME().contains("후문")) {
  887. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.add(REMOTECALL_CALLTYPE.CALLTYPE_SUBGATE_GUARD);
  888. REMOTECALL_CALLTYPE.strSUBGATEGUARD_IP = mGuardListTable.getGuardInfo(i).IP();
  889. } else if (mGuardListTable.getGuardInfo(i).NAME().equals("관리실")) {
  890. REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.add(REMOTECALL_CALLTYPE.CALLTYPE_OFFICE_GUARD);
  891. REMOTECALL_CALLTYPE.strOFFICEGUARD_IP = mGuardListTable.getGuardInfo(i).IP();
  892. }
  893. }
  894. String strGuardList = "";
  895. for (int i = 0; i < REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.size(); i++) {
  896. strGuardList += REMOTECALL_CALLTYPE.CALLTYPE_GUARD_NAME.get(i) + ",";
  897. }
  898. strGuardList = strGuardList.substring(0, strGuardList.length() - 1);
  899. Log.d(TAG, "[getGuardList] strGuardList [" + strGuardList + "]");
  900. return strGuardList;
  901. }
  902. return null;
  903. } catch (RuntimeException re) {
  904. LogUtil.errorLogInfo("", TAG, re);
  905. return null;
  906. } catch (Exception e) {
  907. Log.e(TAG, "[Exception] getGuardList()");
  908. //e.printStackTrace();
  909. LogUtil.errorLogInfo("", TAG, e);
  910. return null;
  911. }
  912. }
  913. private int tryGuardCall(String strGuardInfo) {
  914. try {
  915. Log.d(TAG, "[tryGuardCall] strGuardInfo [" + strGuardInfo + "]");
  916. String strGuardIP = "";
  917. if (strGuardInfo != null) {
  918. if (strGuardInfo.equals(REMOTECALLHANDELKEY.GUARD_01)) strGuardIP = REMOTECALL_CALLTYPE.strCONTROLGUARD_IP;
  919. else if (strGuardInfo.equals(REMOTECALLHANDELKEY.GUARD_02)) strGuardIP = REMOTECALL_CALLTYPE.strMAINGATEGUARD_IP;
  920. else if (strGuardInfo.equals(REMOTECALLHANDELKEY.GUARD_03)) strGuardIP = REMOTECALL_CALLTYPE.strSUBGATEGUARD_IP;
  921. else if (strGuardInfo.equals(REMOTECALLHANDELKEY.GUARD_04)) strGuardIP = REMOTECALL_CALLTYPE.strOFFICEGUARD_IP;
  922. Log.d(TAG, "[tryGuardCall] strGuardIP [" + strGuardIP + "]");
  923. if (!strGuardIP.equals("")) {
  924. String[] IP_Parse = strGuardIP.split("\\.");
  925. int nDong = 101;
  926. if (ConfigValues.bIPExpansion) {
  927. if (IP_Parse[1].equals("0")) nDong = 100;
  928. else
  929. nDong = (Integer.parseInt(IP_Parse[0]) * 100) + Integer.parseInt(IP_Parse[1]);
  930. }
  931. else {
  932. nDong = ((Integer.parseInt(Global.getDongString()) / 100) * 100) + Integer.parseInt(IP_Parse[1]);
  933. }
  934. int nHo = Integer.parseInt(IP_Parse[3]);
  935. RemoteIDInfo.strDong = Integer.toString(nDong);
  936. RemoteIDInfo.strHo = Integer.toString(nHo);
  937. Log.d(TAG, "[tryGuardCall] strDong [" + RemoteIDInfo.strDong + "], strHo [" + RemoteIDInfo.strHo + "]");
  938. bGuardConnCheck = false; // 변수 초기화
  939. if (send_check_sip_activation_request(strGuardIP)) {
  940. if (!bGuardConnCheck) Thread.sleep(2000); // TODO SIP 연결 체크를 위한 딜레이
  941. Log.d(TAG, "[tryGuardCall] bGuardConnCheck [" + bGuardConnCheck + "]");
  942. if (bGuardConnCheck) return 0;
  943. }
  944. }
  945. }
  946. } catch (RuntimeException re) {
  947. LogUtil.errorLogInfo("", TAG, re);
  948. } catch (Exception e) {
  949. Log.e(TAG, "[Exception] tryGuardCall()");
  950. //e.printStackTrace();
  951. LogUtil.errorLogInfo("", TAG, e);
  952. }
  953. return -1;
  954. }
  955. private boolean bGuardConnCheck = false; // 경비실기 SIP 연결 여부
  956. private boolean send_check_sip_activation_request(final String strTargetIP) {
  957. try {
  958. Request_check_sip_activation check_sip_activation = new Request_check_sip_activation(getApplicationContext());
  959. if (check_sip_activation.send_check_sip_activation(strTargetIP, null)) {
  960. check_sip_activation.setResultCtrl(new RetProci() {
  961. @Override
  962. public void ProcSuccess() {
  963. Log.d(TAG, "[send_check_sip_activation_request] ProcSuccess()");
  964. bGuardConnCheck = true;
  965. runCallMainActivity(CALLOWNER.MOBILE, CALLEVENTTYPE.TRYING_CALL, CALLTYPE.GUARD, strTargetIP); // 통화 앱 실행
  966. }
  967. @Override
  968. public void ProcError() {
  969. Log.e(TAG, "[send_check_sip_activation_request] ProcError()");
  970. bGuardConnCheck = false;
  971. closeRemoteCallLib(); // 경비실기 통신 실패시 방문객원격통화 세션 닫기
  972. }
  973. @Override
  974. public void ProcDoing() {
  975. }
  976. });
  977. Log.d(TAG, "[send_check_sip_activation_request] bGuardConnCheck [" + bGuardConnCheck + "]");
  978. return true;
  979. }
  980. } catch (RuntimeException re) {
  981. LogUtil.errorLogInfo("", TAG, re);
  982. } catch (Exception e) {
  983. Log.e(TAG, "[Exception] send_check_sip_activation_request(String strTargetIP)");
  984. //e.printStackTrace();
  985. LogUtil.errorLogInfo("", TAG, e);
  986. }
  987. return false;
  988. }
  989. private static String strPHONE_KEY = "";
  990. private void callRegisteredUserList(String phoneKey) {
  991. try {
  992. strPHONE_KEY = phoneKey;
  993. Log.d(TAG, "[callRegisteredUserList] strPHONE_KEY [" + strPHONE_KEY + "]");
  994. if (mVisitorCallLib != null) {
  995. Log.d(TAG, "[callRegisteredUserList] dong [" + dong + "], ho [" + ho + "]");
  996. mVisitorCallLib.GetRegisteredUserList(dong, ho); // 사용자 리스트 요청
  997. }
  998. } catch (RuntimeException re) {
  999. LogUtil.errorLogInfo("", TAG, re);
  1000. } catch (Exception e) {
  1001. Log.e(TAG, "[Exception] callRegisteredUserList(String phoneKey)");
  1002. //e.printStackTrace();
  1003. LogUtil.errorLogInfo("", TAG, e);
  1004. }
  1005. }
  1006. String strWallPadCallPackageName = "kr.co.icontrols.wallpadcall";
  1007. String strWallPadCallMainActivityName = "kr.co.icontrols.wallpadcall.MainActivity";
  1008. public void runCallMainActivity(CALLOWNER eCallOwner, CALLEVENTTYPE eEventType, CALLTYPE eCallType, String strRemoteInfo) {
  1009. try {
  1010. if (mHandle < 0) {
  1011. Log.w(TAG, "[runCallMainActivity] mHandle [" + mHandle + "]");
  1012. closeRemoteCallLib();
  1013. return; // 모바일에서 세션이 끊어진 경우 통화 앱 실행 안함
  1014. }
  1015. if (!SIPStun.bWallPadCallLive) {
  1016. // 통화어플을 실행시킨다.
  1017. Log.d(TAG, "[runCallMainActivity] ########## START ##########");
  1018. sendLCDBacklightStatus(true);
  1019. WallpadStatusData mWallpadStatusData = new WallpadStatusData(getApplicationContext());
  1020. int nAlarmStatus = mWallpadStatusData.GetAlarmStatus();
  1021. mWallpadStatusData.closeDB();
  1022. Log.d(TAG, "[runCallMainActivity] nAlarmStatus [" + nAlarmStatus + "]");
  1023. if (nAlarmStatus != WallpadStatusData.GUARD_OUT) sendBR_AppFinish(getApplicationContext());
  1024. ComponentName mComponentName = new ComponentName(strWallPadCallPackageName, strWallPadCallMainActivityName);
  1025. Intent mIntent = new Intent(Intent.ACTION_MAIN);
  1026. mIntent.putExtra(CALLTRIGGER.CALLOWNER, eCallOwner.toString());
  1027. mIntent.putExtra(CALLTRIGGER.CALLEVENTTYPE, eEventType.toString());
  1028. mIntent.putExtra(CALLTRIGGER.CALLTYPE, eCallType.toString());
  1029. mIntent.putExtra(CALLTRIGGER.REMOTEINFO, strRemoteInfo);
  1030. mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  1031. mIntent.setComponent(mComponentName);
  1032. startActivity(mIntent);
  1033. Thread.sleep(500);
  1034. }
  1035. else {
  1036. Log.w(TAG, "[runCallMainActivity] WallPadCall is already running!!");
  1037. }
  1038. } catch (RuntimeException re) {
  1039. LogUtil.errorLogInfo("", TAG, re);
  1040. } catch (Exception e) {
  1041. Log.e(TAG, "[Exception] runCallMainActivity(CALLOWNER eCallOwner, CALLEVENTTYPE eEventType, CALLTYPE eCallType, String strRemoteInfo)");
  1042. //e.printStackTrace();
  1043. LogUtil.errorLogInfo("", TAG, e);
  1044. }
  1045. }
  1046. /**
  1047. * Edited by jeff (2020.06.22)
  1048. * LCD 잔상 현장 복구/보호를 위해 실행되고 있는 LCD Keeper를 종료하기 위해, 통화 App이 실행되면서
  1049. * backlight를 On하기 전에 이를 알리는 BR를 수신하여 LCD Keeper를 종료한다.
  1050. * @param bOn
  1051. */
  1052. private void sendLCDBacklightStatus(boolean bOn) {
  1053. try {
  1054. Log.d(TAG,"[sendLCDBacklightStatus] bOn [" + bOn + "]");
  1055. Intent mIntent = new Intent();
  1056. if (bOn) mIntent.setAction(define.NOTIFY_ACNAME_LCD_BACKLIGHT_ON);
  1057. else mIntent.setAction(define.NOTIFY_ACNAME_LCD_BACKLIGHT_OFF);
  1058. getApplicationContext().sendBroadcast(mIntent);
  1059. } catch (RuntimeException re) {
  1060. LogUtil.errorLogInfo("", TAG, re);
  1061. } catch (Exception e) {
  1062. Log.e(TAG, "[Exception] sendLCDBacklightStatus(boolean bOn)");
  1063. //e.printStackTrace();
  1064. LogUtil.errorLogInfo("", TAG, e);
  1065. }
  1066. }
  1067. public final class HANDLERMSG {
  1068. public final static int REGISTER_REMOTECALL_LIB = 100;
  1069. public final static int GET_USERLIST = 200;
  1070. }
  1071. public Handler mHandler = new Handler(Looper.getMainLooper()) {
  1072. public void handleMessage(Message msg) {
  1073. Log.d(TAG, "[mHandler] what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "]");
  1074. switch (msg.what) {
  1075. case HANDLERMSG.REGISTER_REMOTECALL_LIB:
  1076. registerRemoteCallLib();
  1077. break;
  1078. case HANDLERMSG.GET_USERLIST:
  1079. callRegisteredUserList((String) msg.obj);
  1080. break;
  1081. default:
  1082. break;
  1083. }
  1084. }
  1085. };
  1086. public void sendHandlerMsg(int what, int arg1, int arg2, Object obj) {
  1087. try {
  1088. Log.d(TAG, "[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], obj [" + obj.toString() + "]");
  1089. Message HandleMsg = mHandler.obtainMessage();
  1090. HandleMsg.what = what;
  1091. HandleMsg.arg1 = arg1;
  1092. HandleMsg.arg2 = arg2;
  1093. HandleMsg.obj = obj;
  1094. mHandler.sendMessage(HandleMsg);
  1095. } catch (RuntimeException re) {
  1096. LogUtil.errorLogInfo("", TAG, re);
  1097. } catch (Exception e) {
  1098. Log.e(TAG, "[Exception] sendHandlerMsg(int what, int arg1, int arg2, Object obj)");
  1099. //e.printStackTrace();
  1100. LogUtil.errorLogInfo("", TAG, e);
  1101. }
  1102. }
  1103. public void sendHandlerMsgDelayed(int what, int arg1, int arg2, long delay) {
  1104. try {
  1105. Log.d(TAG, "[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], delay [" + delay + "]");
  1106. Message HandleMsg = mHandler.obtainMessage();
  1107. HandleMsg.what = what;
  1108. HandleMsg.arg1 = arg1;
  1109. HandleMsg.arg2 = arg2;
  1110. mHandler.sendMessageDelayed(HandleMsg, delay);
  1111. } catch (RuntimeException re) {
  1112. LogUtil.errorLogInfo("", TAG, re);
  1113. } catch (Exception e) {
  1114. Log.e(TAG, "[Exception] sendHandlerMsgDelayed(int what, int arg1, int arg2, long delay");
  1115. //e.printStackTrace();
  1116. LogUtil.errorLogInfo("", TAG, e);
  1117. }
  1118. }
  1119. private final static String STRING_SPLITER = "/"; // 방문객원격통화 User Info Spliter
  1120. // BR
  1121. BroadcastReceiver mRemoteCallBR = new BroadcastReceiver() {
  1122. @Override
  1123. public void onReceive(Context context, Intent intent) {
  1124. try {
  1125. String strAction = intent.getAction();
  1126. Log.d(TAG, "[mRemoteCallBR.onReceive] strAction [" + strAction + "]");
  1127. if (strAction.equals(Declare.BR.VISITOR_REMOTE_CALL)) {
  1128. int kind = intent.getIntExtra(define.NOTIBR_KIND, -1);
  1129. // Log.d(TAG, "[mRemoteCallBR] kind [" + kind + "]");
  1130. if (kind == define.NOTIFY_EVENT_REMOTECALL_USER_INITIALIZE) {
  1131. registerRemoteCallLib();
  1132. }
  1133. else if (kind == define.NOTIFY_EVENT_REMOTECALL_USER_DELETE) {
  1134. String strPhoneKey = intent.getStringExtra(define.NOTIBR_REMOTECALL_USER_DELETE_PHONEKEY);
  1135. if (strPhoneKey != null) {
  1136. Log.d(TAG, "[mRemoteCallBR] strPhoneKey [" + strPhoneKey + "]");
  1137. if (!strPhoneKey.equals("")) {
  1138. if (mVisitorCallLib != null)
  1139. mVisitorCallLib.DelRegisteredUserList(dong, ho, strPhoneKey); // 라이브러리 삭제
  1140. }
  1141. }
  1142. }
  1143. else if (kind == define.NOTIFY_EVENT_REMOTECALL_USER_CHANGE_AUTHORITY) {
  1144. String[] strInfo = intent.getStringExtra(define.NOTIBR_REMOTECALL_USER_CHANGE_AUTHORITY_INFO).split(STRING_SPLITER); // PhoneKey/MonitorAuth/LobbyOpenAuth/DoorOpenAuth/HomeViewerAuth;
  1145. if (strInfo != null) {
  1146. String strPhoneKey = strInfo[0];
  1147. String strMonitorAuth = strInfo[1];
  1148. String strLobbyOpenAuth = strInfo[2];
  1149. String strDoorOpenAuth = strInfo[3];
  1150. String strHomeViewerAuth = strInfo[4];
  1151. Log.d(TAG, "[mRemoteCallBR] strPhoneKey [" + strPhoneKey + "], strMonitorAuth [" + strMonitorAuth + "], strLobbyOpenAuth [" + strLobbyOpenAuth + "], " +
  1152. "strDoorOpenAuth [" + strDoorOpenAuth + "], strHomeViewerAuth [" + strHomeViewerAuth + "]");
  1153. if (mVisitorCallLib != null) {
  1154. // 라이브러리 변경 (통화 권한은 모니터링 권한과 동일하게 설정, 현관문열림 권한은 항상 0)
  1155. if (mVisitorCallLib.SetUserAuthority(dong, ho, strPhoneKey, Integer.parseInt(strMonitorAuth), Integer.parseInt(strMonitorAuth), 0, Integer.parseInt(strLobbyOpenAuth)) >= 0) {
  1156. // DB 테이블 변경
  1157. wallPadRemoteCallUserData.UpdateRemoteCallUserInfo(strPhoneKey, Declare.DBInfo.VALUE_NAME_HISTORY_USER[2], strMonitorAuth);
  1158. wallPadRemoteCallUserData.UpdateRemoteCallUserInfo(strPhoneKey, Declare.DBInfo.VALUE_NAME_HISTORY_USER[3], strLobbyOpenAuth);
  1159. wallPadRemoteCallUserData.UpdateRemoteCallUserInfo(strPhoneKey, Declare.DBInfo.VALUE_NAME_HISTORY_USER[4], strDoorOpenAuth);
  1160. wallPadRemoteCallUserData.UpdateRemoteCallUserInfo(strPhoneKey, Declare.DBInfo.VALUE_NAME_HISTORY_USER[5], strHomeViewerAuth);
  1161. }
  1162. }
  1163. }
  1164. }
  1165. else if (kind == define.NOTIFY_EVENT_REMOTECALL_USER_AUTHORITY_KEY) {
  1166. String strKey = intent.getStringExtra("USER_AUTH_KEY");
  1167. Log.d(TAG, "[mRemoteCallBR] strKey [" + strKey + "]");
  1168. if (strKey != null) {
  1169. mVisitorCallLib.SendRegistrationKey(dong, ho, strKey);
  1170. }
  1171. }
  1172. else if (kind == define.NOTIFY_EVENT_CHANGE_GUARDLIST) {
  1173. // 경비실기 설정정보가 변경된 경우 방문객원격통화 스트림 서버로 경비실기 목록 다시 전달
  1174. String strGuardList = getGuardList();
  1175. if (strGuardList != null) {
  1176. Log.d(TAG, "[mRemoteCallBR] strGuardList [" + strGuardList + "]");
  1177. if (!strGuardList.equals("")) {
  1178. Log.d(TAG, "[mRemoteCallBR] == mVisitorCallLib.SetSecurityOffice ==");
  1179. int nResult = mVisitorCallLib.SetSecurityOffice(dong, ho, strGuardList); // 경비실기 목록 재전달
  1180. Log.d(TAG, "[mRemoteCallBR] nResult [" + nResult + "]");
  1181. }
  1182. }
  1183. }
  1184. }
  1185. } catch (RuntimeException re) {
  1186. LogUtil.errorLogInfo("", TAG, re);
  1187. } catch (Exception e) {
  1188. Log.e(TAG, "[Exception] onReceive(Context context, Intent intent)");
  1189. //e.printStackTrace();
  1190. LogUtil.errorLogInfo("", TAG, e);
  1191. }
  1192. }
  1193. };
  1194. private void registerBRReceiver() {
  1195. try {
  1196. IntentFilter filter = new IntentFilter();
  1197. filter.addAction(Declare.BR.VISITOR_REMOTE_CALL);
  1198. registerReceiver(mRemoteCallBR, filter, null, null);
  1199. } catch (RuntimeException re) {
  1200. LogUtil.errorLogInfo("", TAG, re);
  1201. } catch (Exception e) {
  1202. Log.e(TAG, "[Exception] registerBRReceiver()");
  1203. //e.printStackTrace();
  1204. LogUtil.errorLogInfo("", TAG, e);
  1205. }
  1206. }
  1207. private void unregisterBRReceiver() {
  1208. try {
  1209. if (mRemoteCallBR != null) {
  1210. unregisterReceiver(mRemoteCallBR);
  1211. }
  1212. } catch (RuntimeException re) {
  1213. LogUtil.errorLogInfo("", TAG, re);
  1214. } catch (Exception e) {
  1215. Log.e(TAG, "[Exception] unregisterBRReceiver()");
  1216. //e.printStackTrace();
  1217. LogUtil.errorLogInfo("", TAG, e);
  1218. }
  1219. }
  1220. private void sendBR_AppFinish(Context context) {
  1221. try {
  1222. Log.d(TAG, "[sendBR_AppFinish] Send App Finish!!");
  1223. Intent mIntent = new Intent();
  1224. mIntent.setAction(define.BR_APP_FINISH);
  1225. mIntent.putExtra(CALLTRIGGER.CALLOWNER, "MOBILE");
  1226. context.sendBroadcast(mIntent);
  1227. } catch (RuntimeException re) {
  1228. LogUtil.errorLogInfo("", TAG, re);
  1229. } catch (Exception e) {
  1230. Log.e(TAG, "[Exception] sendBR_AppFinish(Context context)");
  1231. //e.printStackTrace();
  1232. LogUtil.errorLogInfo("", TAG, e);
  1233. }
  1234. }
  1235. }