Преглед на файлове

[공통][Bug] Activity 종료 커멘드를 presenter 에서 처리하도록 수정

hyodong.min преди 7 години
родител
ревизия
fc0b38e337

+ 0 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/FragmentSkipBackChanger.java

@@ -36,7 +36,6 @@ public class FragmentSkipBackChanger extends FragmentBackStackChanger {
 
   /**
    * 스크린 전환을 이전으로 진행 효과를 주면서 실행
-   * - back stack 에서 지정한 id 를 탐색하여 이동
    *
    * @param id ScreenID.LOGIN
    */
@@ -90,11 +89,6 @@ public class FragmentSkipBackChanger extends FragmentBackStackChanger {
       back(id);
     }
 
-    /**
-     * id 까지 이동 됨.
-     */
-//      fragmentManager.popBackStack(targetId, 0);
-
   }
 
 }

+ 11 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -12,6 +12,7 @@ import android.util.Log;
 import com.google.gson.Gson;
 
 import kr.co.zumo.app.lifeplus.ILifeCycle;
+import kr.co.zumo.app.lifeplus.activity.MainActivity;
 import kr.co.zumo.app.lifeplus.helper.Helper;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.model.IModelResult;
@@ -24,6 +25,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.command.Command;
+import kr.co.zumo.app.lifeplus.view.command.FinishActivityCommand;
 import kr.co.zumo.app.lifeplus.view.command.ScreenCommand;
 import kr.co.zumo.app.lifeplus.view.dialog.ConfirmDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
@@ -194,11 +196,11 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
 
   protected void go(@IntRange(from = 0, to = 1000) int id, @ScreenID.Direction int direction, @Screen.Method int method) {
     onCommand(new ScreenCommand(id, direction, method));
+
   }
 
   protected void go(@IntRange(from = 0, to = 1000) int id) {
     go(id, ScreenID.DIRECTION_NEXT);
-
   }
 
   protected void go(@IntRange(from = 0, to = 1000) int id, @ScreenID.Direction int direction) {
@@ -206,8 +208,15 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   }
 
   protected void back(@IntRange(from = 0, to = 1000) int id) {
-    go(id, ScreenID.DIRECTION_BACK, Screen.METHOD_SKIP);
+    if (id == ScreenID.MAIN) {
+      // 현재 activity 가 main activity 가 아닐 경우 main 으로 가려면 activity 를 종료 해야 함
+      if (view.getActivity().getClass().getSimpleName().equalsIgnoreCase(MainActivity.class.getSimpleName()) == false) {
+        onCommand(new FinishActivityCommand());
+        return;
+      }
+    }
 
+    go(id, ScreenID.DIRECTION_BACK, Screen.METHOD_SKIP);
   }
 
   /**
@@ -217,12 +226,10 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
    */
   protected void jump(@IntRange(from = 0, to = 1000) int id) {
     go(id, ScreenID.DIRECTION_BACK, Screen.METHOD_JUMP);
-
   }
 
   protected void home() {
     go(ScreenID.MAIN, ScreenID.DIRECTION_BACK, Screen.METHOD_HOME);
-
   }
 
   /**

+ 4 - 13
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/error/NetworkErrorPresenter.java

@@ -8,13 +8,12 @@ import android.util.Log;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
-import kr.co.zumo.app.lifeplus.activity.ScreenStarter;
 import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.model.BlankModel;
 import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
+import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.ExitCommand;
-import kr.co.zumo.app.lifeplus.view.command.FinishActivityCommand;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
@@ -30,7 +29,6 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 public class NetworkErrorPresenter extends Presenter<BlankModel, INetworkErrorView> {
 
   protected Disposable disposable;
-  protected ScreenStarter starter;
 
   public NetworkErrorPresenter(BlankModel model, INetworkErrorView view) {
     super(model, view);
@@ -62,10 +60,6 @@ public class NetworkErrorPresenter extends Presenter<BlankModel, INetworkErrorVi
       disposable.dispose();
       disposable = null;
     }
-    if (null != starter) {
-      starter.dispose();
-      starter = null;
-    }
   }
 
   @Override
@@ -93,7 +87,7 @@ public class NetworkErrorPresenter extends Presenter<BlankModel, INetworkErrorVi
     disposable = new NetworkWatcher().check(App.getInstance().getContext())
       .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
       .subscribe(isConnected -> {
-        Log.i("APP# NetworkDisconnectedFragmentPresenter | checkNetworkConnection", "| isConnected: " + isConnected);
+        Log.i("APP# NetworkErrorPresenter | checkNetworkConnection", "| isConnected: " + isConnected);
         if (isConnected) {
           next();
         }
@@ -104,12 +98,9 @@ public class NetworkErrorPresenter extends Presenter<BlankModel, INetworkErrorVi
   }
 
   protected void next() {
-    /**
-     * 진입 지점이 다를 경우 화면 이동 처리
-     */
 
     // 사용 중 에러로 진입 할 경우
-    onCommand(new FinishActivityCommand());
+    back(ScreenID.MAIN);
   }
 
   /***********************************
@@ -117,7 +108,7 @@ public class NetworkErrorPresenter extends Presenter<BlankModel, INetworkErrorVi
    ***********************************/
   @Override
   public void onChangedConnection(boolean isConnected, int type) {
-    Log.i("APP# Presenter | onChangedConnection", "| " + this.getClass().getSimpleName() + ", isConnected:" + isConnected);
+    Log.i("APP# NetworkErrorPresenter | onChangedConnection", "| " + this.getClass().getSimpleName() + ", isConnected:" + isConnected);
 
     if (true == isConnected) {
       next();

+ 12 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/error/NetworkErrorStartingPresenter.java

@@ -19,17 +19,28 @@ import kr.co.zumo.app.lifeplus.model.BlankModel;
  */
 public class NetworkErrorStartingPresenter extends NetworkErrorPresenter {
 
+  protected ScreenStarter starter;
+
   public NetworkErrorStartingPresenter(BlankModel model, INetworkErrorView view) {
     super(model, view);
   }
 
+  @Override
+  protected void destroyInternal() {
+    super.destroyInternal();
+
+    if (null != starter) {
+      starter.dispose();
+      starter = null;
+    }
+  }
+
   protected void next() {
     /**
      * 진입 지점이 다를 경우 화면 이동 처리
      */
 
     // 앱 구동 시 진입 할 경우
-    // 메인으로 이동
     starter = new ScreenStarter(view.getActivity());
     starter.launch(true, (context, fragmentFlag) -> {
       int screenId = new ScreenStarterIDMapper().getScreenId(fragmentFlag);