Bläddra i källkod

[WallPadMain]
1. 거동 수상자 관련하여 Call App이 중복으로 연달아 실행(NewTask옵션으로 실행)되는것을 방지하기 위하여 CallBrList 추가
2. 내부 Call 수정이 어려우시면 iMapServer의 15583줄의 false를 true로 변경하여 실행하는 방식으로 적용

jglee 2 år sedan
förälder
incheckning
09bc713666

+ 46 - 0
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/MainActivity.java

@@ -320,6 +320,9 @@ public class MainActivity extends WpadActivity {
     
     // 끝
 
+    //월패드 CallBr 관리하기 위한 List
+    static public ArrayList<Intent> CallBrList;
+
     IconManager mIconManager;
     public IconInfoTable mIconInfoTable;
     public static int nShortcutCnt = 0;
@@ -2728,6 +2731,34 @@ public class MainActivity extends WpadActivity {
 
                             if (!bFromCall) {
                                 // yjyoon. 2443에서는 Call 앱에서 녹화 수행
+                                // 여기서 해당하는 br 정보를 저장 해야 함
+                                //jglee - 여기서 BR들을 관리하기 위하여
+                                if(CallBrList == null)
+                                    CallBrList = new ArrayList<Intent>();
+
+                                Intent brListIntent = new Intent();
+                                brListIntent.setAction(define.NOTIFY_ACNAME);
+                                brListIntent.putExtra(define.NOTIBR_KIND, define.NOTIFY_SMART_DCAM_DETECT);
+
+                                if(CallBrList.size() > 1)
+                                {
+                                    if(CallBrList.get(0) != brListIntent)
+                                    {
+                                        CallBrList.add(brListIntent);
+                                        Log.d(TAG, "jglee - Call 인텐트 추가 > size : " + CallBrList.size()  + ", Action : " + CallBrList.get(0).getAction());
+                                    }
+                                }
+                                else {
+                                    CallBrList.add(brListIntent);
+                                    Log.d(TAG, "jglee - Call 인텐트 추가 > size : " + CallBrList.size()  + ", Action : " + CallBrList.get(0).getAction());
+                                }
+
+                                //여기서 BrList에 남아 있는 갯수를 확인
+                                if(CallBrList!=null && CallBrList.size() > 1)
+                                {
+                                    return;
+                                }
+                                Log.d(TAG, "jglee - Call Record");
                                 m_CallSubMenuScreen.callStartCallAPK(ID.LINKEDSCREEN.SubCall.Door_Record, nEmerState);
                             }
                             break;
@@ -7085,6 +7116,8 @@ public class MainActivity extends WpadActivity {
 
             Log.i(TAG, "[runWallPadCallAPKByUX] eCallOwner [" + eCallOwner + "], eEventType [" + eEventType + "], eCallType [" + eCallType + "]");
 
+
+
             if (getIsSubWallpad()) {
                 // 서브월패드는 국선 기능을 제공하지 않는다.
                 if (eCallType != CALLTYPE.PSTN) runCallMainActivity(eCallOwner, eEventType, eCallType, nEmerState);
@@ -7092,6 +7125,7 @@ public class MainActivity extends WpadActivity {
             else {
                 runCallMainActivity(eCallOwner, eEventType, eCallType, nEmerState);
             }
+
         } catch (RuntimeException re) {
             LogUtil.errorLogInfo("", TAG, re);
         }
@@ -7100,6 +7134,18 @@ public class MainActivity extends WpadActivity {
             LogUtil.errorLogInfo("", TAG, e);
         }
     }
+
+    static public Handler CallIntentHandler = new Handler(Looper.getMainLooper()) {
+        public void handleMessage(Message msg) {
+            if(CallBrList!=null && CallBrList.size() > 0)
+            {
+                Intent intent = CallBrList.get(0);
+                mContext_call.sendBroadcast(intent);
+                Log.d(TAG, "jglee - Call Handler Next 호출 > Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0) );
+            }
+
+        }
+    };
     
     public void runCallMainActivity(CALLOWNER eCallOwner, CALLEVENTTYPE eEventType, CALLTYPE eCallType) {
         try {

+ 47 - 0
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -2394,6 +2394,33 @@ public class iMapServer extends Service {
                                 }
 
                                 Log.w(TAG, "[WallPadInterface.BTN_DOOR] New Call App!!!");
+
+                                //여기서 확인
+                                if(MainActivity.CallBrList == null)
+                                    MainActivity.CallBrList = new ArrayList<Intent>();
+                                Intent brListIntent = new Intent();
+                                brListIntent.setAction(define.NOTIFY_ACNAME);
+                                brListIntent.putExtra(define.NOTIBR_KIND, define.NOTIFY_SMART_DCAM_DETECT);
+
+                                if(MainActivity.CallBrList.size() > 1)
+                                {
+                                    if(MainActivity.CallBrList.get(0) != brListIntent)
+                                    {
+                                        MainActivity.CallBrList.add(brListIntent);
+                                        Log.d(TAG, "jglee - Call 인텐트 추가 > size : " + MainActivity.CallBrList.size()  + ", Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0) );
+                                    }
+                                }
+                                else {
+                                    MainActivity.CallBrList.add(brListIntent);
+                                    Log.d(TAG, "jglee - Call 인텐트 추가 > size : " + MainActivity.CallBrList.size()  + ", Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0));
+                                }
+
+                                //여기서 BrList에 남아 있는 갯수를 확인
+                                if(MainActivity.CallBrList!=null && MainActivity.CallBrList.size() > 1)
+                                {
+                                    return;
+                                }
+                                Log.d(TAG, "jglee - Call Front");
                                 runCallMainActivity(CALLOWNER.NONE, CALLEVENTTYPE.RECEIVE_CALL, CALLTYPE.FRONT, AlarmStatus);
                             } catch (RuntimeException re) {
                                 LogUtil.errorLogInfo("", TAG, re);
@@ -15546,6 +15573,26 @@ public class iMapServer extends Service {
                 if (strActionName.equals(Common.BR_ACK_WALLPADCALL_LIVE)) {
                     bWallPadCallLive = true;
                     Common.bWallPadCallLive = bWallPadCallLive;
+                    //여기서 삭제
+                    if(MainActivity.CallBrList.size()>0) {
+                        Log.d(TAG, "jglee - CallBR Remove > Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0) );
+                        MainActivity.CallBrList.remove(0);
+                        if(MainActivity.CallBrList.size() > 0) {
+                            Log.d(TAG, "jglee - Call Next 호출 > Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0) );
+                            //jglee - 내부 이슈가 수정이 되지 않으면, 아래 핸들러를 이용하여 사용 필요
+                            if(false)
+                            {
+                                if(MainActivity.CallIntentHandler!=null)
+                                    MainActivity.CallIntentHandler.sendMessageDelayed(MainActivity.CallIntentHandler.obtainMessage(), 1500);
+                            }
+                            else
+                            {
+                                getApplicationContext().sendBroadcast(MainActivity.CallBrList.get(0));
+                                Log.d(TAG, "jglee - Call 직접 Next 호출 > Action : " + MainActivity.CallBrList.get(0).getAction() +  ", Extra : " + MainActivity.CallBrList.get(0).getIntExtra(Common.BR_MAIN_NOTI.KIND,0) );
+                            }
+
+                        }
+                    }
                     nWallPadCallACKCnt = MAX_WALLPADCALL_LIVE_CNT;
                     Log.w(TAG,"[WallPadCallLiveBRCheck] bWallPadCallLive [" + bWallPadCallLive + "]");
                 }