Sfoglia il codice sorgente

[공통][New] DoubleChecker 추가
- UI ready && API loading 등 두 가지 조건을 만족할 경우 실행해주는 체커

hyodong.min 7 anni fa
parent
commit
2b26baded7

+ 64 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/DoubleChecker.java

@@ -0,0 +1,64 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view;
+
+/**
+ * DoubleChecker 2가지 조건이 완료되면 Runnable 실행
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018-10-24]   [최초 작성]
+ * @since 2018-10-24
+ */
+public class DoubleChecker {
+
+  private boolean isFirstCheck = false;
+  private boolean isSecondCheck = false;
+
+  private Runnable runnable;
+
+  public DoubleChecker(Runnable runnable) {
+    this.runnable = runnable;
+  }
+
+  /**
+   * 첫 번째 조건 완료
+   */
+  public void checkFirst() {
+    isFirstCheck = true;
+    run();
+  }
+
+  /**
+   * 두 번째 조건 완료
+   */
+  public void checkSecond() {
+    isSecondCheck = true;
+    run();
+  }
+
+  /**
+   * 조건을 모두 만족했는지 확인
+   *
+   * @return boolean
+   */
+  public boolean isCompleted() {
+    return isFirstCheck && isSecondCheck;
+  }
+
+  /**
+   * dispose
+   */
+  public void dispose() {
+    runnable = null;
+  }
+
+  private void run() {
+    if (isCompleted()) {
+      runnable.run();
+    }
+  }
+}

+ 12 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/FAQPresenter.java

@@ -5,6 +5,7 @@ package kr.co.zumo.app.lifeplus.view.presenter;
 
 import kr.co.zumo.app.lifeplus.model.FAQModel;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IFAQView;
 import kr.co.zumo.app.lifeplus.view.command.FragmentBackStackChangeCommand;
@@ -28,12 +29,13 @@ import kr.co.zumo.app.lifeplus.view.dialog.IDialogResultListener;
 public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
 
   DialogBase alertDialog;
-  boolean isLoading = false;
-  boolean isReady = false;
+  private DoubleChecker doubleChecker;
 
   public FAQPresenter(FAQModel model, IFAQView view) {
     super(model, view);
 
+    doubleChecker = new DoubleChecker(this::render);
+
     this.model.loadFaq();
   }
 
@@ -50,8 +52,7 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
         onCommand(new FragmentBackStackChangeCommand(ScreenID.FAQ_WRITE, ScreenID.DIRECTION_NEXT));
         break;
       case Event.INIT:
-        isReady = true;
-        render();
+        doubleChecker.checkFirst();
         break;
       default:
         break;
@@ -64,6 +65,11 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
       alertDialog.dispose();
       alertDialog = null;
     }
+
+    if(null != doubleChecker) {
+      doubleChecker.dispose();
+      doubleChecker = null;
+    }
   }
 
   @Override
@@ -93,8 +99,7 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
         showAlert(event.getString());
         break;
       case Event.RESULT:
-        isLoading = true;
-        render();
+        doubleChecker.checkSecond();
         break;
       default:
         break;
@@ -102,9 +107,7 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
   }
 
   private void render() {
-    if (isReady && isLoading) {
-      view.drawList(model.getFaqBeans());
-    }
+    view.drawList(model.getFaqBeans());
   }
 
   private void showAlert(String str) {

+ 12 - 10
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/signup/SignUpAgreePresenter.java

@@ -12,6 +12,7 @@ import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.model.signup.SignUpAgreeModel;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.FragmentChangeCommand;
 import kr.co.zumo.app.lifeplus.view.dialog.ConfirmDialog;
@@ -37,15 +38,16 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgreeView> {
 
   protected boolean isValidated = false;
-  protected boolean isLoaded = false;
   protected boolean isSaved = false;
-  protected boolean isViewReady = false;
   DialogBase alertDialog;
   Disposable disposable;
+  private DoubleChecker doubleChecker;
 
   public SignUpAgreePresenter(SignUpAgreeModel model, ISignUpAgreeView view) {
     super(model, view);
 
+    doubleChecker = new DoubleChecker(this::renderAfterReady);
+
     this.model.requestPolicy();
   }
 
@@ -82,6 +84,11 @@ public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgr
       disposable.dispose();
       disposable = null;
     }
+
+    if(null != doubleChecker) {
+      doubleChecker.dispose();
+      doubleChecker = null;
+    }
   }
 
   @Override
@@ -89,8 +96,7 @@ public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgr
     switch (event.getEventId()) {
       case Event.RESULT:
         if (event.getInteger() == Event.POLICY_REQUEST) {
-          isLoaded = true;
-          renderAfterReady();
+          doubleChecker.checkFirst();
         }
         else if (event.getInteger() == Event.POLICY_CONFIRM) {
           // 약관 동의 전송 했음;
@@ -172,9 +178,7 @@ public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgr
   }
 
   private void renderAfterReady() {
-    if (isLoaded && isViewReady) {
-      view.init(getAgreeItems());
-    }
+    view.init(getAgreeItems());
   }
 
   @Override
@@ -215,8 +219,7 @@ public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgr
         onAgreeChanged();
         break;
       case Event.INIT:
-        isViewReady = true;
-        renderAfterReady();
+        doubleChecker.checkSecond();
         break;
       case Event.DETAIL:
         onClickDetail(event);
@@ -254,7 +257,6 @@ public class SignUpAgreePresenter extends Presenter<SignUpAgreeModel, ISignUpAgr
   }
 
   private void onAgreeChanged() {
-
     validate();
     setButtonUsage();
   }

+ 11 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/signup/SignUpStartPresenter.java

@@ -9,6 +9,7 @@ import kr.co.zumo.app.lifeplus.bean.api.BannerBean;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
 import kr.co.zumo.app.lifeplus.model.signup.SignUpStartModel;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.FragmentChangeCommand;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
@@ -25,12 +26,13 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  */
 public class SignUpStartPresenter extends Presenter<SignUpStartModel, ISignUpStartView> {
 
-  protected boolean isLoaded = false;
-  protected boolean isViewReady = false;
+  private DoubleChecker doubleChecker;
 
   public SignUpStartPresenter(SignUpStartModel model, ISignUpStartView view) {
     super(model, view);
 
+    doubleChecker = new DoubleChecker(this::renderAfterReady);
+
     this.model.requestBanners();
   }
 
@@ -56,6 +58,11 @@ public class SignUpStartPresenter extends Presenter<SignUpStartModel, ISignUpSta
 
   @Override
   protected void destroyInternal() {
+
+    if(null != doubleChecker) {
+      doubleChecker.dispose();
+      doubleChecker = null;
+    }
   }
 
   @Override
@@ -63,8 +70,7 @@ public class SignUpStartPresenter extends Presenter<SignUpStartModel, ISignUpSta
     switch (event.getEventId()) {
       case Event.RESULT:
         if (event.getInteger() == Event.BANNER_REQUEST) {
-          isLoaded = true;
-          renderAfterReady();
+          doubleChecker.checkFirst();
         }
         break;
       default:
@@ -85,8 +91,7 @@ public class SignUpStartPresenter extends Presenter<SignUpStartModel, ISignUpSta
         onCommand(new FragmentChangeCommand(ScreenID.SIGN_UP_MOBILE_AUTHORIZATION, ScreenID.DIRECTION_NEXT));
         break;
       case Event.INIT:
-        isViewReady = true;
-        renderAfterReady();
+        doubleChecker.checkSecond();
         break;
       default:
         break;
@@ -98,9 +103,7 @@ public class SignUpStartPresenter extends Presenter<SignUpStartModel, ISignUpSta
   }
 
   private void renderAfterReady() {
-    if (isLoaded && isViewReady) {
       view.drawBanners(getBannerItems());
-    }
   }
 
   /**