Pārlūkot izejas kodu

[공통][New] LoadingDriver 추가
- api 호출을 연속으로 할 경우, 이어지는 호출의 응답이 늦는다면 로딩이 닫히고 300초 후 다시 열리게된다. 이를 방지하기 위해 추가

hyodong.min 6 gadi atpakaļ
vecāks
revīzija
0c1851afe1

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/animation/Loading.java

@@ -90,6 +90,7 @@ public class Loading {
       FrameLayout frameLayout = activity.findViewById(android.R.id.content);
       frameLayout.removeView(view);
       view = null;
+      activity = null;
     }
   }
 }

+ 69 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/animation/LoadingDriver.java

@@ -0,0 +1,69 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.animation;
+
+import android.app.Activity;
+import android.util.Log;
+
+/**
+ * LoadingDriver
+ * - api 호출을 연속으로 할 경우, 이어지는 호출의 응답이 늦는다면 로딩이 닫히고 300초 후 다시 열리게된다.
+ * 이를 방지하기 위해서 연속 호출도 한 개의 로딩으로 표시
+ * 모든 호출이 완료되면 로딩을 제거한다.
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019-02-14]   [최초 작성]
+ * @since 2019-02-14
+ */
+public class LoadingDriver {
+
+  private int loadingCount = 0;
+  private Loading waiter = null;
+
+  /**
+   * 로딩 표시
+   * 호출 될 때마다 카운트를 증가시켜 닫기를 대비한다.
+   *
+   * @param activity
+   * @return
+   */
+  public LoadingDriver create(Activity activity) {
+    ++loadingCount;
+    if (null == waiter) {
+      waiter = new Loading(activity, 300);
+      waiter.show();
+      Log.d("APP# LoadingDriver | remove", "|" + " ----------- create!! " + loadingCount);
+    }
+    Log.d("APP# LoadingDriver | create", "|" + " loading ++ " + loadingCount);
+    return this;
+  }
+
+  /**
+   * 로딩 제거
+   * 호출 된 카운트를 역산하여 0일 경우 제거 가능하다.
+   */
+  public void remove() {
+    --loadingCount;
+    Log.d("APP# LoadingDriver | remove", "|" + " loading -- " + loadingCount);
+
+    if (null != waiter && loadingCount < 1) {
+      loadingCount = 0;
+      waiter.hide();
+      waiter = null;
+      Log.d("APP# LoadingDriver | remove", "|" + " ------------- removed!! " + loadingCount);
+    }
+  }
+
+  /**
+   * 모든 로딩이 닫히고 객체가 제거 가능한 상황인지 반환
+   *
+   * @return
+   */
+  public boolean canDispose() {
+    return loadingCount < 1 && null == waiter;
+  }
+}

+ 10 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -38,7 +38,7 @@ import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
 import kr.co.zumo.app.lifeplus.view.IView;
 import kr.co.zumo.app.lifeplus.view.IWaiterCallable;
-import kr.co.zumo.app.lifeplus.view.animation.Loading;
+import kr.co.zumo.app.lifeplus.view.animation.LoadingDriver;
 import kr.co.zumo.app.lifeplus.view.command.Command;
 import kr.co.zumo.app.lifeplus.view.command.EmailSendingCommand;
 import kr.co.zumo.app.lifeplus.view.command.ExitCommand;
@@ -73,7 +73,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   private DialogBase dialogNetwork;
   private DialogBase pinDialog;
   //  private LoadingDialog waiter;
-  private Loading waiter;
+  private LoadingDriver waiter;
 
   private boolean resumed = false;
 
@@ -687,16 +687,20 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   @Override
   public void showWaiter() {
     if (null == waiter) {
-      waiter = new Loading(view.getActivity(), 300);
-      waiter.show();
+      waiter = new LoadingDriver().create(view.getActivity());
+    }
+    else {
+      waiter.create(view.getActivity());
     }
   }
 
   @Override
   public void hideWaiter() {
     if (null != waiter) {
-      waiter.hide();
-      waiter = null;
+      waiter.remove();
+      if (waiter.canDispose()) {
+        waiter = null;
+      }
     }
   }