Jelajahi Sumber

[공통][Bug] Network Watching 을 Activity -> Model 로 옮김

hyodong.min 7 tahun lalu
induk
melakukan
c544477389

+ 0 - 38
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBase.java

@@ -11,14 +11,10 @@ import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.MenuItem;
 
-import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
-import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.network.NetworkReceiver;
-import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
 import kr.co.zumo.app.lifeplus.supervisor.DialogHelper;
 import kr.co.zumo.app.lifeplus.view.IView;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
@@ -95,8 +91,6 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
       model.pause();
     }
 
-    stopNetworkWatching();
-
     super.onPause();
   }
 
@@ -123,8 +117,6 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
       model.resume();
     }
 
-    watchNetwork();
-
     super.onResume();
   }
 
@@ -199,36 +191,6 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
    */
   abstract P definePresenter();
 
-  /**
-   * 네트워크의 연결 상태를 감시한다.
-   * 변동이 있을 때 presenter 로 알려준다.
-   */
-  protected void watchNetwork() {
-
-    Log.w("APP# ActivityBase | watchNetwork", "| " + this.getClass().getSimpleName() + " - WATCHING............");
-
-    disposable.add(
-      NetworkWatcher.watch(App.getInstance().getContext())
-        .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
-        .subscribe(isConnectedAll -> {
-          Log.i("APP# ActivityBase | watchNetwork", "|" + "isConnectedAll: +++++++++" + isConnectedAll);
-          if (null != presenter) {
-            presenter.onChangedConnection(isConnectedAll, 0);
-          }
-        }, e -> {
-          Log.i("APP# ActivityBase | watchNetwork", "|" + "isConnectedAll: ++++++++++" + "error ");
-          if (null != presenter) {
-            presenter.onChangedConnection(false, 0);
-          }
-        })
-    );
-  }
-
-  protected void stopNetworkWatching() {
-    Log.w("APP# ActivityBase | stopNetworkWatching", "| " + this.getClass().getSimpleName() + " - STOP WATCHING___________");
-    disposable.clear();
-  }
-
   /**
    * Android life-cycle 에 귀속되는 모델을 반환한다.
    * - 사실 MVVM 사용되는 ViewModel 이지만 MVP 의 Model 로 사용한다.

+ 4 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashActivity.java

@@ -89,6 +89,10 @@ public class SplashActivity extends AppCompatActivity {
       starter.dispose();
       starter = null;
     }
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 }
 

+ 96 - 37
app/src/main/java/kr/co/zumo/app/lifeplus/model/Model.java

@@ -6,6 +6,11 @@ package kr.co.zumo.app.lifeplus.model;
 import android.arch.lifecycle.ViewModel;
 import android.util.Log;
 
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.schedulers.Schedulers;
+import kr.co.zumo.app.lifeplus.application.App;
+import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.ILifeCycle;
@@ -27,11 +32,66 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  */
 public abstract class Model extends ViewModel implements ILifeCycle {
 
-  protected IModelResult listener;
+  private IModelResult listener;
   protected Presenter presenter;
+  protected CompositeDisposable disposable = new CompositeDisposable();
 
   public Model() {
-    Log.w("APP# Model | Model", "| --------> " + this.getClass().getSimpleName() + " <--------");
+    Log.w("APP# Model | Model", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
+  }
+
+  /***********************************
+   * own
+   ***********************************/
+
+  /**
+   * 네트워크의 연결 상태를 감시한다.
+   * 변동이 있을 때 presenter 로 알려준다.
+   */
+  private void watchNetwork() {
+    Log.w("APP# Model | watchNetwork", "| " + this.getClass().getSimpleName() + " - Start network watching............");
+    disposable.add(
+      NetworkWatcher.watch(App.getInstance().getContext())
+        .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+        .subscribe(isConnectedAll -> {
+          Log.i("APP# Model | watchNetwork", "|" + "isConnectedAll: +++++++++" + isConnectedAll);
+          if (null != presenter) {
+            presenter.onChangedConnection(isConnectedAll, 0);
+          }
+        }, e -> {
+          Log.i("APP# Model | watchNetwork", "|" + "isConnectedAll: ++++++++++" + "error ");
+          if (null != presenter) {
+            presenter.onChangedConnection(false, 0);
+          }
+        })
+    );
+  }
+
+  private void stopNetworkWatching() {
+    Log.w("APP# Model | stopNetworkWatching", "| " + this.getClass().getSimpleName() + " - Stop network watching___________");
+    disposable.clear();
+  }
+
+  protected void onResult(Event event) {
+    try {
+      if (null != listener) {
+        listener.onResult(event);
+      }
+    } catch (Throwable throwable) {
+      onError(new Event.Builder(Event.ERROR).build(), throwable);
+    }
+  }
+
+  protected void onError(Event event, Throwable throwable) {
+    Log.e("APP# Model | onResult", "|" + throwable.toString());
+    try {
+      if (null != listener) {
+        listener.onResult(event);
+      }
+    } catch (Throwable e) {
+      Log.e("APP# Model | onError", "|" + e.toString());
+      e.printStackTrace();
+    }
   }
 
   /**
@@ -52,14 +112,24 @@ public abstract class Model extends ViewModel implements ILifeCycle {
     this.listener = listener;
   }
 
-  public Presenter getPresenter() {
-    return this.presenter;
-  }
-
+  /**
+   * set Presenter
+   *
+   * @param presenter
+   */
   public void setPresenter(Presenter presenter) {
     this.presenter = presenter;
   }
 
+  public Presenter getPresenter() {
+    return this.presenter;
+  }
+
+  /**
+   * Preferences 반환
+   *
+   * @return LifeplusPreferences
+   */
   public LifeplusPreferences getPreferences() {
     return SuperModel.getInstance().getPreferences();
   }
@@ -70,30 +140,36 @@ public abstract class Model extends ViewModel implements ILifeCycle {
    * @return
    */
   public boolean isUpdateUser() {
-    return StringUtil.isFull(getPreferences().getEncryptionUserNo()) && getPreferences().isZumoUserUpdateCompleted() == false;
+    LifeplusPreferences preferences = getPreferences();
+    return StringUtil.isFull(preferences.getEncryptionUserNo()) && preferences.isZumoUserUpdateCompleted() == false;
   }
 
+  /***********************************
+   * ILifeCycle
+   ***********************************/
   @Override
   public final void start() {
-    Log.w("APP#  Model | start", "|" + "| --------> " + this.getClass().getSimpleName() + " <--------");
+    Log.w("APP#  Model | start", "| -------->> " + this.getClass().getSimpleName());
     startInternal();
   }
 
   @Override
-  public final void pause() {
-    Log.w("APP#  Model | pause", "|" + "| --------> " + this.getClass().getSimpleName() + " <--------");
-    pauseInternal();
+  public final void resume() {
+    Log.w("APP# Model | resume", "| -------->> " + this.getClass().getSimpleName());
+    watchNetwork();
+    resumeInternal();
   }
 
   @Override
-  public final void resume() {
-    Log.w("APP# Model | resume", "|" + "| --------> " + this.getClass().getSimpleName() + " <--------");
-    resumeInternal();
+  public final void pause() {
+    Log.w("APP#  Model | pause", "| " + this.getClass().getSimpleName() + " <<--------");
+    stopNetworkWatching();
+    pauseInternal();
   }
 
   @Override
   public final void stop() {
-    Log.w("APP# Model | stop", "|" + "| --------> " + this.getClass().getSimpleName() + " <--------");
+    Log.w("APP# Model | stop", "| " + this.getClass().getSimpleName() + " <<--------");
     stopInternal();
   }
 
@@ -101,7 +177,7 @@ public abstract class Model extends ViewModel implements ILifeCycle {
    * dispose
    */
   private void destroy() {
-    Log.w("APP# Model | dispose", "| >>>>>>>>>>>>>> " + this.getClass().getSimpleName());
+    Log.w("APP# Model | dispose", "| " + this.getClass().getSimpleName() + "<<<<<<<<<<<<");
     destroyInternal();
   }
 
@@ -115,31 +191,14 @@ public abstract class Model extends ViewModel implements ILifeCycle {
 
   protected abstract void pauseInternal();
 
+
+  /***********************************
+   * ViewModel
+   ***********************************/
   @Override
   protected void onCleared() {
     super.onCleared();
 
     destroy();
   }
-
-  protected void onResult(Event event) {
-    try {
-      if (null != listener) {
-        listener.onResult(event);
-      }
-    } catch (Throwable throwable) {
-      onError(new Event.Builder(Event.ERROR).build(), throwable);
-    }
-  }
-
-  protected void onError(Event event, Throwable throwable) {
-    Log.e("APP# Model | onResult", "|" + throwable.toString());
-    try {
-      if (null != listener) {
-        listener.onResult(event);
-      }
-    } catch (Throwable e) {
-      Log.e("APP# Model | onError", "|" + e.toString());
-    }
-  }
 }

+ 4 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/model/SignUpModel.java

@@ -129,16 +129,9 @@ public class SignUpModel extends Model {
   }
 
   /**
-   * 배너 요청;
+   * 배너 요청
    */
   public void requestBanners() {
-    /*
-     로컬에서 처리
-     혜택 하나. 코인	서비스만 이용해도 코인을 드려요
-혜택 둘. 쿠폰	코인을 쿠폰으로 교환하세요
-혜택 셋. 쇼핑	구매/예약하면 추가 코인을 드려요
-
-     */
 
     bannerItems = new ArrayList<>();
     bannerItems.add(new BannerBean(0, ResourceUtil.getString(R.string.sign_up_benefit1), ResourceUtil.getString(R.string.sign_up_benefit1_detail)));
@@ -276,6 +269,9 @@ public class SignUpModel extends Model {
     return true;
   }
 
+  /**
+   * 동의한 약관 전송
+   */
   public void sendPolicy() {
 
     PolicyConfirmRequestBean policyConfirmRequestBean = new PolicyConfirmRequestBean();

+ 11 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/model/SuperModel.java

@@ -32,10 +32,21 @@ public final class SuperModel {
   private SuperModel() {
   }
 
+  /**
+   * 초기화. SplashActivity 에서 호출된다.
+   *
+   * @param preferences LifeplusPreferences
+   */
   public void init(LifeplusPreferences preferences) {
     this.preferences = preferences;
   }
 
+  /**
+   * dispose
+   */
+  public void dispose() {
+  }
+
   /**
    * preferences 객체 반환
    *
@@ -86,12 +97,6 @@ public final class SuperModel {
     preferences.setUserId(userId);
   }
 
-  /**
-   * dispose
-   */
-  public void dispose() {
-  }
-
   /**
    * 유저 토큰
    *