Просмотр исходного кода

[최진오]
백키 핸들러 추가
delay핸들러 추가

jinochoi 8 лет назад
Родитель
Сommit
fe4c3aeabf

+ 66 - 0
onecable/src/main/java/com/ntels/onecable/common/handler/BackPressCloseHandler.java

@@ -0,0 +1,66 @@
+package com.ntels.onecable.common.handler;
+
+import com.ntels.onecable.R;
+import com.ntels.onecable.common.util.Util;
+
+import android.app.Activity;
+import android.widget.Toast;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class BackPressCloseHandler {
+
+    protected static final int BACK_PRESS_VALID_TIME = 2000;
+
+    private long mBackKeyPressedTime = 0;
+    private Activity mActivity;
+    private Toast mToast;
+    private Util mUtil = new Util();
+
+    public BackPressCloseHandler(Activity activity) {
+        this.mActivity = activity;
+    }
+
+    public void onBackPressed() {
+        if (System.currentTimeMillis() > mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            mBackKeyPressedTime = System.currentTimeMillis();
+            showGuide();
+            return;
+        }
+
+        if (System.currentTimeMillis() <= mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            mActivity.finish();
+        }
+    }
+
+    public void onBackPressed(String methodName) {
+        if (System.currentTimeMillis() > mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            mBackKeyPressedTime = System.currentTimeMillis();
+            showGuide();
+            return;
+        }
+
+        if (System.currentTimeMillis() <= mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            runMethod(methodName);
+            mToast.cancel();
+        }
+    }
+
+    private void showGuide() {
+        mToast= mUtil.setShowToast(mActivity, mUtil.getString(mActivity, R.string.MSG823), Toast.LENGTH_SHORT);
+    }
+
+    private void runMethod(String methodName) {
+        try {
+            Method method = mActivity.getClass().getMethod(methodName);
+            method.invoke(mActivity);
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 246 - 0
onecable/src/main/java/com/ntels/onecable/common/handler/CallWithDelayHandler.java

@@ -0,0 +1,246 @@
+package com.ntels.onecable.common.handler;
+
+import com.ntels.onecable.R;
+import com.ntels.onecable.common.Constants;
+import com.ntels.onecable.common.util.Util;
+
+import android.app.Activity;
+import android.os.Handler;
+import android.widget.Toast;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import static com.ntels.onecable.common.handler.BackPressCloseHandler.BACK_PRESS_VALID_TIME;
+
+/**
+ * Created by jinochoi on 2017. 3. 31..
+ */
+
+public class CallWithDelayHandler {
+
+    private long mBackKeyPressedTime = 0;
+    private Activity mActivity;
+    private Toast mToast;
+    private Util mUtil = new Util();
+
+    public CallWithDelayHandler(Activity activity) {
+        this.mActivity = activity;
+    }
+
+
+    public void callWithDelay() {
+        if (System.currentTimeMillis() > mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            mBackKeyPressedTime = System.currentTimeMillis();
+            showGuide();
+            return;
+        }
+
+        if (System.currentTimeMillis() <= mBackKeyPressedTime + BACK_PRESS_VALID_TIME) {
+            mActivity.finish();
+        }
+    }
+
+    public void callFinishWithDelay(String isMethodName) {
+
+        callWithDelayMethod(isMethodName, true, "finish", Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+    public void callFinishWithDelay(String isMethodName, Boolean equalValue) {
+
+        callWithDelayMethod(isMethodName, equalValue, "finish", Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+
+    public void callWithDelay(final String callMethodName) {
+
+        callWithDelayMethod("", true, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+    public void callWithDelay(final String callMethodName, int delayTime) {
+
+        callWithDelayMethod("", true, callMethodName, delayTime);
+
+    }
+
+    public void callWithDelay(String isMethodName, String callMethodName) {
+
+        callWithDelayMethod(isMethodName, true, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+    }
+
+    public void callWithDelay(String isMethodName, Boolean equalValue, String callMethodName) {
+
+        callWithDelayMethod(isMethodName, equalValue, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+    }
+
+    public void callWithDelayMethod(final String isMethodName, final Boolean equalValue, final String callMethodName, final int delayTime) {
+        new Handler().postDelayed(new Runnable() {
+
+            @Override
+            public void run() {
+                try {
+                    Boolean isProc = false;
+
+                    if (!isMethodName.equals("")) {
+                        Method isMethod;
+                        try {
+                            isMethod = mActivity.getClass().getMethod(isMethodName);
+                        } catch (NoSuchMethodException e) {
+                            isMethod = mActivity.getClass().getDeclaredMethod(isMethodName);
+                            isMethod.setAccessible(true);
+                        }
+
+                        Object returnValue = isMethod.invoke(mActivity);
+                        if (returnValue == equalValue) {
+                            isProc = true;
+                        }
+                    } else {
+                        isProc = true;
+                    }
+                    if (isProc) {
+                        if (callMethodName.equals("finish")) {
+                            mActivity.finish();
+                        } else {
+                            Method method;
+                            try {
+                                method = mActivity.getClass().getMethod(callMethodName);
+                            } catch (NoSuchMethodException e) {
+                                method = mActivity.getClass().getDeclaredMethod(callMethodName);
+                                method.setAccessible(true);
+                            }
+                            method.invoke(mActivity);
+                        }
+                    } else {
+                        callWithDelayMethod(isMethodName, equalValue, callMethodName, delayTime);
+                    }
+
+                } catch (NoSuchMethodException e) {
+                    e.printStackTrace();
+                } catch (InvocationTargetException e) {
+                    e.printStackTrace();
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }, delayTime);
+    }
+
+    public void callFinishWithDelayField(String isFieldName) {
+
+        callWithDelayField(isFieldName, true, "finish", Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+    public void callFinishWithDelayField(String isFieldName, Boolean equalValue) {
+
+        callWithDelayField(isFieldName, equalValue, "finish", Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+    public void callWithDelayField(final String callMethodName) {
+
+        callWithDelayField("", true, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+
+    }
+
+    public void callWithDelayField(final String callMethodName, int delayTime) {
+
+        callWithDelayField("", true, callMethodName, delayTime);
+
+    }
+
+    public void callWithDelayField(String isFieldName, String callMethodName) {
+
+        callWithDelayField(isFieldName, true, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+    }
+
+    public void callWithDelayField(String isFieldName, String callMethodName, int delayTime) {
+
+        callWithDelayField(isFieldName, true, callMethodName, delayTime);
+    }
+
+    public void callWithDelayField(String isFieldName, Boolean equalValue, String callMethodName) {
+
+        callWithDelayField(isFieldName, equalValue, callMethodName, Constants.HANDLER_DELAY_MILLIS);
+    }
+
+    public void callWithDelayField(final String isFieldName, final Boolean equalValue, final String callMethodName, final int delayTime) {
+        new Handler().postDelayed(new Runnable() {
+
+            @Override
+            public void run() {
+                try {
+                    Boolean isProc = false;
+
+                    Field isField;
+                    try {
+                        isField = mActivity.getClass().getField(isFieldName);
+                    } catch (NoSuchFieldException e) {
+                        isField = mActivity.getClass().getDeclaredField(isFieldName);
+                        isField.setAccessible(true);
+                    }
+
+                    Object returnValue = isField.get(mActivity);
+                    if (returnValue == equalValue) {
+                        isProc = true;
+                    }
+                    if (isProc) {
+                        if (callMethodName.equals("finish")) {
+                            mActivity.finish();
+                        } else {
+                            Method method;
+                            try {
+                                method = mActivity.getClass().getMethod(callMethodName);
+                            } catch (NoSuchMethodException e) {
+                                method = mActivity.getClass().getDeclaredMethod(callMethodName);
+                                method.setAccessible(true);
+                            }
+                            method.invoke(mActivity);
+                        }
+                    } else {
+                        callWithDelayField(isFieldName, equalValue, callMethodName, delayTime);
+                    }
+
+                } catch (NoSuchFieldException e) {
+                    e.printStackTrace();
+                } catch (NoSuchMethodException e) {
+                    e.printStackTrace();
+                } catch (InvocationTargetException e) {
+                    e.printStackTrace();
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }, delayTime);
+    }
+
+    private boolean doesReturnVoid(Method method) {
+        Boolean isReturn = false;
+        if (void.class.equals(method.getReturnType())) {
+            isReturn = true;
+        }
+
+        return isReturn;
+    }
+
+    private void showGuide() {
+        mToast = mUtil.setShowToast(mActivity, mUtil.getString(mActivity, R.string.MSG823), Toast.LENGTH_SHORT);
+    }
+
+    private void runMethod(String methodName) {
+        try {
+            Method method = mActivity.getClass().getMethod(methodName);
+            method.invoke(mActivity);
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+        } catch (InvocationTargetException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 5 - 1
onecable/src/main/java/com/ntels/onecable/common/util/RecycleUtils.java

@@ -36,7 +36,11 @@ public class RecycleUtils {
                 ViewGroup group = (ViewGroup) root;
                 int count = group.getChildCount();
                 for (int i = 0; i < count; i++) {
-                    recursiveRecycle(group.getChildAt(i));
+                    try {
+                        recursiveRecycle(group.getChildAt(i));
+                    } catch (Exception ex) {
+//                        ex.printStackTrace();
+                    }
                 }
 
                 if (!(root instanceof AdapterView)) {

+ 2 - 1
onecable/src/main/java/com/ntels/onecable/common/util/Util.java

@@ -474,10 +474,11 @@ public class Util {
      * @param body     메세지
      * @param duration 노출 시간
      */
-    public void setShowToast(Context context, String body, int duration) {
+    public CommonToast setShowToast(Context context, String body, int duration) {
 
         CommonToast toast = new CommonToast(context);
         toast.showToast(body, Toast.LENGTH_SHORT);
+        return  toast;
     }
 
     /**

+ 1 - 0
onecable/src/main/java/com/ntels/onecable/common/widget/CustomActivity.java

@@ -494,4 +494,5 @@ public class CustomActivity extends Activity {
         mIsPermissionCheckLogic = false;
     }
 
+
 }

+ 52 - 32
onecable/src/main/java/com/ntels/onecable/view/Intro.java

@@ -10,9 +10,10 @@ import com.google.android.gms.common.GoogleApiAvailability;
 import com.ntels.onecable.R;
 import com.ntels.onecable.common.AppConfig;
 import com.ntels.onecable.common.Constants;
+import com.ntels.onecable.common.broadcast.KneetMessageLocalBroadCast;
 import com.ntels.onecable.common.c_interface.OnDataSendToReslut;
 import com.ntels.onecable.common.gcm.RegistrationIntentService;
-import com.ntels.onecable.common.broadcast.KneetMessageLocalBroadCast;
+import com.ntels.onecable.common.handler.CallWithDelayHandler;
 import com.ntels.onecable.common.http.HttpSend;
 import com.ntels.onecable.common.http.Response;
 import com.ntels.onecable.common.mdns.MdnsRegService;
@@ -82,20 +83,6 @@ public class Intro extends CustomActivity implements CustomDialog.OnMsgAlterToRe
     private int mServerPosition = 0;
     private String mPushTypeCode = "";
     private ArrayList<String> mServerTitles = new ArrayList<String>();
-    private Handler handler = new Handler(new Handler.Callback() {
-        @Override
-        public boolean handleMessage(Message message) {
-
-            if (!mIsPushSuccess) {
-                Dlog.v("handler : " + mAppConfig.getPush_Token());
-                setBackLoadLogin();
-            } else {
-                gotoLoginStart();
-            }
-            return false;
-        }
-    });
-
     private BroadcastReceiver mRegistrationBroadcastReceiver = new BroadcastReceiver() {
 
         @Override public void onReceive(Context context, Intent intent) {
@@ -114,21 +101,6 @@ public class Intro extends CustomActivity implements CustomDialog.OnMsgAlterToRe
             }
         }
     };
-    private Handler finishhandler = new Handler(new Handler.Callback() {
-        @Override
-        public boolean handleMessage(Message message) {
-
-            if (!mIsMdnsSuccess) {
-                Dlog.v("handler : " + mAppConfig.getPush_Token());
-                setFinishLoading();
-            } else if (!mAppConfig.getMain()) {
-                setFinishLoading();
-            } else {
-                setFinish();
-            }
-            return false;
-        }
-    });
 
     @Override
     protected void onNewIntent(Intent saveIntent) {
@@ -193,6 +165,7 @@ public class Intro extends CustomActivity implements CustomDialog.OnMsgAlterToRe
             paramView3.addRule(RelativeLayout.CENTER_IN_PARENT);
             mUtil.getView(mActivity, R.id.ivLogo).setLayoutParams(paramView3);
             comHandler.sendMessageDelayed(comHandler.obtainMessage(MSG_COM_ACTINIT), Constants.HANDLER_DELAY_MILLIS);
+
         }
     }
 
@@ -417,9 +390,27 @@ public class Intro extends CustomActivity implements CustomDialog.OnMsgAlterToRe
      */
     public void setBackLoadLogin() {
 
-        handler.sendEmptyMessageDelayed(0, PUSH_TOKEN_CHECK_INTERVAL); // ms,
+//        handler.sendEmptyMessageDelayed(0, PUSH_TOKEN_CHECK_INTERVAL); // ms,
+
+        new CallWithDelayHandler(this).callWithDelayField("mIsPushSuccess", "gotoLoginStart", PUSH_TOKEN_CHECK_INTERVAL);
     }
 
+//
+//    private Handler handler = new Handler(new Handler.Callback() {
+//        @Override
+//        public boolean handleMessage(Message message) {
+//
+//            if (!mIsPushSuccess) {
+//                Dlog.v("handler : " + mAppConfig.getPush_Token());
+//                setBackLoadLogin();
+//            } else {
+//                gotoLoginStart();
+//            }
+//            return false;
+//        }
+//    });
+
+
     /**
      * 선택된 서버 정보 셋팅.
      *
@@ -622,8 +613,37 @@ public class Intro extends CustomActivity implements CustomDialog.OnMsgAlterToRe
      */
     public void setFinishLoading() {
 
-        finishhandler.sendEmptyMessageDelayed(0, FINISH_CHECK_INTERVAL); // ms,
+//        finishhandler.sendEmptyMessageDelayed(0, FINISH_CHECK_INTERVAL); // ms,
+        new CallWithDelayHandler(this).callWithDelayField("isFinish", "setFinish", FINISH_CHECK_INTERVAL);
+    }
+
+    private Boolean isFinish() {
+        if (!mIsMdnsSuccess) {
+            Dlog.v("handler : " + mAppConfig.getPush_Token());
+            return false;
+        } else if (!mAppConfig.getMain()) {
+            return false;
+        } else {
+            return true;
+        }
+
     }
+//
+//    private Handler finishhandler = new Handler(new Handler.Callback() {
+//        @Override
+//        public boolean handleMessage(Message message) {
+//
+//            if (!mIsMdnsSuccess) {
+//                Dlog.v("handler : " + mAppConfig.getPush_Token());
+//                setFinishLoading();
+//            } else if (!mAppConfig.getMain()) {
+//                setFinishLoading();
+//            } else {
+//                setFinish();
+//            }
+//            return false;
+//        }
+//    });
 
     /**
      * 서비스 실행 여부 확인.

+ 42 - 65
onecable/src/main/java/com/ntels/onecable/view/Login.java

@@ -10,6 +10,8 @@ import com.ntels.onecable.common.Constants;
 import com.ntels.onecable.common.broadcast.KneetMessageLocalBroadCast;
 import com.ntels.onecable.common.db.DatabaseOpenHelper;
 import com.ntels.onecable.common.db.SqlManager;
+import com.ntels.onecable.common.handler.BackPressCloseHandler;
+import com.ntels.onecable.common.handler.CallWithDelayHandler;
 import com.ntels.onecable.common.util.Dlog;
 import com.ntels.onecable.common.util.Util;
 import com.ntels.onecable.common.websocket.OnWebSocketResponse;
@@ -56,9 +58,8 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
     private static final int MSG_COM_G_MEMBER = 2;
     private static final int VIBRATION_DURATION = 100;
     private static final int FINISH_INTERVAL = 1000;
-    Boolean isBackPress = false;
-    Handler handler = new Handler(new FinishHandlerCallBack());
     Handler comHandler = new Handler(new IncomingHandlerCallBack());
+    private BackPressCloseHandler mBackPressCloseHandler;
     private int mType = 0;
     /*공통*/
     private Activity mActivity;
@@ -73,18 +74,6 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
     private String mId = "";
     private String mPass = "";
     private String mPushTypeCode = "";
-    private Handler finishhandler = new Handler(new Handler.Callback() {
-        @Override
-        public boolean handleMessage(Message message) {
-
-            if (!mAppConfig.getMain()) {
-                setFinishLoading();
-            } else {
-                finish();
-            }
-            return false;
-        }
-    });
     private WebSocketService mWebSocketService;
     private boolean mIsBound = false;
     private OnWebSocketResponse webSocketResponse = new OnWebSocketResponse() {
@@ -164,6 +153,30 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
             mIsBound = false;
         }
     };
+    private TextWatcher mTextWatcher = new TextWatcher() {
+        @Override
+        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void afterTextChanged(Editable editable) {
+
+            String id = mUtil.getEditText(mActivity, R.id.edtId).getText().toString();
+            String pass = mUtil.getEditText(mActivity, R.id.edtPass).getText().toString();
+
+            if (mUtil.null2string(id).length() > 0 && mUtil.null2string(pass).length() > 0) {
+                mUtil.getView(mActivity, R.id.btnLogin).setEnabled(true);
+            } else {
+                mUtil.getView(mActivity, R.id.btnLogin).setEnabled(false);
+            }
+        }
+    };
 
     @Override
     protected void onNewIntent(Intent saveIntent) {
@@ -213,6 +226,7 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
         mActivity = Login.this;
         mAppConfig = (AppConfig) mActivity.getApplicationContext();
         mCustomDialog.setOnMsgAlterToResultEvent(this);
+        mBackPressCloseHandler = new BackPressCloseHandler(this);
 
         Intent intent = new Intent(mActivity, WebSocketService.class);
         bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
@@ -253,13 +267,14 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
 
         mUtil.getEditText(mActivity, R.id.edtId).setText("");
         mUtil.getEditText(mActivity, R.id.edtPass).setText("");
-        mUtil.getEditText(mActivity, R.id.edtId).setText("welove75");
-        mUtil.getEditText(mActivity, R.id.edtPass).setText("78980250");
+//        mUtil.getEditText(mActivity, R.id.edtId).setText("welove75");
+//        mUtil.getEditText(mActivity, R.id.edtPass).setText("78980250");
         mUtil.getEditText(mActivity, R.id.edtId).addTextChangedListener(mTextWatcher);
         mUtil.getEditText(mActivity, R.id.edtPass).addTextChangedListener(mTextWatcher);
 
         mUtil.setUserInfo(mActivity);
         mIsSaveId = mAppConfig.getSaveId();
+//        mIsAutoLogin = mAppConfig.getAutoLogin();
         Dlog.v("mIsAutoLogin =" + mIsAutoLogin);
         Dlog.v("mIsSaveId =" + mIsSaveId);
         mUtil.getView(mActivity, R.id.llAutoLogin).setSelected(mIsAutoLogin);
@@ -283,31 +298,6 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
 
     }
 
-    private TextWatcher mTextWatcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-
-        }
-
-        @Override
-        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-
-        }
-
-        @Override
-        public void afterTextChanged(Editable editable) {
-
-            String id = mUtil.getEditText(mActivity, R.id.edtId).getText().toString();
-            String pass = mUtil.getEditText(mActivity, R.id.edtPass).getText().toString();
-
-            if (mUtil.null2string(id).length() > 0 && mUtil.null2string(pass).length() > 0) {
-                mUtil.getView(mActivity, R.id.btnLogin).setEnabled(true);
-            } else {
-                mUtil.getView(mActivity, R.id.btnLogin).setEnabled(false);
-            }
-        }
-    };
-
     /**
      * 서비스허브에 노드 동기화를 요청한다.(데이터 동기화 아님)
      */
@@ -342,14 +332,7 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
     @Override
     public void onBackPressed() {
 
-        if (!isBackPress) {
-            mUtil.setShowToast(mActivity, mUtil.getString(mActivity, R.string.MSG823),
-                    Toast.LENGTH_SHORT);
-            isBackPress = true;
-            handler.sendEmptyMessageDelayed(0, BACK_PRESS_VALID_TIME);
-        } else {
-            setExit();
-        }
+        mBackPressCloseHandler.onBackPressed("setExit");
     }
 
     @Override
@@ -471,8 +454,7 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
                 }
                 mUtil.setVibrator(VIBRATION_DURATION);
                 view.setEnabled(false);
-                comHandler.sendMessageDelayed(comHandler.obtainMessage(MSG_COM_P_MEMBER_LOGIN),
-                        Constants.HANDLER_DELAY_MILLIS);
+                comHandler.sendMessageDelayed(comHandler.obtainMessage(MSG_COM_P_MEMBER_LOGIN), Constants.HANDLER_DELAY_MILLIS);
                 break;
             case R.id.tvJoin:
                 mIntent = new Intent(mActivity, JoinCheck.class);
@@ -784,14 +766,21 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
      * 로딩 완료.
      */
     public void setFinishLoading() {
+        new CallWithDelayHandler(this).callFinishWithDelay("isFinish");
+    }
 
-        finishhandler.sendEmptyMessageDelayed(0, FINISH_INTERVAL); // ms,
+    private Boolean isFinish() {
+        if (!mAppConfig.getMain()) {
+            return false;
+        } else {
+            return true;
+        }
     }
 
     /**
      * App 종료.
      */
-    private void setExit() {
+    public void setExit() {
 
         Dlog.v("setExit()");
         mAppConfig.setIntro(false);
@@ -801,18 +790,6 @@ public class Login extends CustomActivity implements View.OnClickListener, Custo
         finish();
     }
 
-    class FinishHandlerCallBack implements Handler.Callback {
-
-        @Override
-        public boolean handleMessage(Message msg) {
-
-            if (msg.what == 0) {
-                isBackPress = false;
-            }
-            return true;
-        }
-    }
-
     class IncomingHandlerCallBack implements Handler.Callback {
 
         @Override

+ 11 - 31
onecable/src/main/java/com/ntels/onecable/view/Main.java

@@ -12,6 +12,7 @@ import com.ntels.onecable.common.c_interface.MainInterface;
 import com.ntels.onecable.common.c_interface.OnDataSendToReslut;
 import com.ntels.onecable.common.db.DatabaseOpenHelper;
 import com.ntels.onecable.common.db.SqlManager;
+import com.ntels.onecable.common.handler.BackPressCloseHandler;
 import com.ntels.onecable.common.http.HttpSend;
 import com.ntels.onecable.common.http.Response;
 import com.ntels.onecable.common.util.Dlog;
@@ -49,7 +50,6 @@ import android.support.v4.app.FragmentTransaction;
 import android.support.v4.content.LocalBroadcastManager;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.Toast;
 
 import java.util.HashMap;
 
@@ -74,18 +74,8 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
     private static final int MSG_COM_G_MEMBER = 3;
     private static final int MSG_COM_D_HOMEGRP_MEMBERS_MEMBER_ID = 4;
     private static final int MSG_COM_WS_DEVICE_ALIVE = 5;
-    Boolean isBackPress = false;
-    // BACK키 핸들러
-    Handler handler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-
-            if (msg.what == 0) {
-                isBackPress = false;
-            }
-        }
-    };
     Handler comHandler = new Handler(new IncomingHandlerCallBack());
+    private BackPressCloseHandler mBackPressCloseHandler;
     private AppConfig mAppConfig;
     private SqlManager mSqlManager = new SqlManager();
     private Intent mIntent;
@@ -104,25 +94,21 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
             try {
 
                 JSONObject jsonObject = new JSONObject(result);
-                String messageType = mUtil.null2string(jsonObject.get(
-                        Constants.KEY_MESSAGE_TYPE));
+                String messageType = mUtil.null2string(jsonObject.get(Constants.KEY_MESSAGE_TYPE));
                 LogUtil.i(TAG, "websocket message mType : " + messageType);
                 String resultCode = "";
                 String resultMsg = "";
                 if (jsonObject.has(Constants.KEY_RESULT_CODE)) {
-                    resultCode = mUtil.null2string(jsonObject.get(
-                            Constants.KEY_RESULT_CODE));
+                    resultCode = mUtil.null2string(jsonObject.get(Constants.KEY_RESULT_CODE));
                 }
                 if (jsonObject.has(Constants.KEY_RESULT_MSG)) {
-                    resultMsg = mUtil.null2string(jsonObject.get(
-                            Constants.KEY_RESULT_MSG));
+                    resultMsg = mUtil.null2string(jsonObject.get(Constants.KEY_RESULT_MSG));
                 }
                 if (messageType.equals(Constants.WEBSOCKET_TYPE_DEVICE_CONTENT)) {
                     notificationWsDeviceContent(jsonObject);
                 } else if (Constants.WEBSOCKET_TYPE_AUTH.equals(messageType)) {
                     if (mAppConfig.getbWebSocketAuth()) {
-                        comHandler.sendEmptyMessageDelayed(MSG_COM_WS_DEVICE_ALIVE,
-                                Constants.HANDLER_DELAY_MILLIS);
+                        comHandler.sendEmptyMessageDelayed(MSG_COM_WS_DEVICE_ALIVE, Constants.HANDLER_DELAY_MILLIS);
                     }
                 } else if (Constants.WEBSOCKET_TYPE_DEVICE_ALIVE.equals(messageType)) {
                     resultWsDeviceAlive(jsonObject);
@@ -233,6 +219,8 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
         mActivity = Main.this;
         mAppConfig = (AppConfig) mActivity.getApplicationContext();
         mCustomDialog.setOnMsgAlterToResultEvent(this);
+        mBackPressCloseHandler = new BackPressCloseHandler(this);
+
 //        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 //            mActivity.getWindow().setStatusBarTextColor(getResources().getColor(R.color.color_text_01));
 //        }
@@ -244,8 +232,7 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
         View viewToLoad = LayoutInflater.from(mActivity).inflate(R.layout.main, null);
         this.setContentView(viewToLoad);
 
-        comHandler.sendMessageDelayed(comHandler.obtainMessage(MSG_MAIN_INIT),
-                Constants.HANDLER_DELAY_MILLIS);
+        comHandler.sendMessageDelayed(comHandler.obtainMessage(MSG_MAIN_INIT), Constants.HANDLER_DELAY_MILLIS);
 
         mAppConfig.setMain(true);
     }
@@ -471,14 +458,7 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
     public void onBackPressed() {
 
         Dlog.v("onBackPressed()");
-        if (!isBackPress) {
-            mUtil.setShowToast(mActivity, mUtil.getString(mActivity, R.string.MSG823),
-                    Toast.LENGTH_SHORT);
-            isBackPress = true;
-            handler.sendEmptyMessageDelayed(0, BACK_PRESS_VALID_TIME);
-        } else {
-            setExit();
-        }
+        mBackPressCloseHandler.onBackPressed("setExit");
     }
 
     @Override
@@ -950,7 +930,7 @@ public class Main extends CustomActionBarActivity implements View.OnClickListene
     /**
      * App 종료.
      */
-    private void setExit() {
+    public void setExit() {
 
         Dlog.v("setExit()");
         mAppConfig.setIntro(false);

+ 5 - 11
onecable/src/main/java/com/ntels/onecable/view/things/ThingsDeviceNetatmoCameraList.java

@@ -61,16 +61,14 @@ public class ThingsDeviceNetatmoCameraList extends CustomActivity implements Vie
 
     private static final int DEFAULT_ANIMATION_DURATION = 800;
     private static final int DEFAULT_ANIMATION_TIMEOUT = 15000;
-
-    /*통신 관련*/
-    private int mType = 0;
     private static final int MSG_COM_P_NETATMO_HOMEDATA = 1;
     private static final int MSG_COM_P_CLOUD_NODE_REGISTER = 2;
-
     private static final String NODE_MANUFACTURER = "Netatmo";
     private static final String NODE_MODEL_NUMBER = "Welcome";
     private static final String NODE_PROFILE_VERSION = "v3";
-
+    Handler comHandler = new Handler(new IncomingHandlerCallBack());
+    /*통신 관련*/
+    private int mType = 0;
     /*공통*/
     private Activity mActivity;
     private AppConfig mAppConfig;
@@ -128,8 +126,7 @@ public class ThingsDeviceNetatmoCameraList extends CustomActivity implements Vie
                             Toast.LENGTH_SHORT);
                     return;
                 }
-                comHandler.sendEmptyMessageDelayed(MSG_COM_P_CLOUD_NODE_REGISTER,
-                        Constants.HANDLER_DELAY_MILLIS);
+                comHandler.sendEmptyMessageDelayed(MSG_COM_P_CLOUD_NODE_REGISTER, Constants.HANDLER_DELAY_MILLIS);
                 break;
             case R.id.llBtn2:
                 onBackPressed();
@@ -201,8 +198,7 @@ public class ThingsDeviceNetatmoCameraList extends CustomActivity implements Vie
                         if (mIsLoading) {
                             mLoadingAnimation.cancel();
                         }
-                        comHandler.sendEmptyMessageDelayed(Constants.MSG807,
-                                Constants.HANDLER_DELAY_MILLIS);
+                        comHandler.sendEmptyMessageDelayed(Constants.MSG807, Constants.HANDLER_DELAY_MILLIS);
                     }
                 }
 
@@ -346,8 +342,6 @@ public class ThingsDeviceNetatmoCameraList extends CustomActivity implements Vie
         }
     }
 
-    Handler comHandler = new Handler(new IncomingHandlerCallBack());
-
     /**
      * 서버 요청 핸들러.
      */