Kaynağa Gözat

[공통][New] 네트워크 감시 Activity 연동

hyodong.min 7 yıl önce
ebeveyn
işleme
fe1782303d

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

@@ -5,12 +5,20 @@ package kr.co.zumo.app.lifeplus.activity;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.support.annotation.CallSuper;
+import android.support.annotation.NonNull;
 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 kr.co.zumo.app.lifeplus.activity.factory.ActivityFactory;
 import kr.co.zumo.app.lifeplus.bean.JsonBeanBase;
+import kr.co.zumo.app.lifeplus.config.NetworkConfig;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
+import kr.co.zumo.app.lifeplus.network.InternetStatus;
+import kr.co.zumo.app.lifeplus.network.NetworkReceiver;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.IView;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
@@ -27,6 +35,9 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  */
 public abstract class ActivityBase<P extends Presenter> extends AppCompatActivity implements IView {
 
+  NetworkReceiver networkReceiver;
+  CompositeDisposable disposable = new CompositeDisposable();
+
   P presenter;
 
   /***********************************
@@ -43,9 +54,30 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
     defineActionBar();
   }
 
+  @CallSuper
   @Override
   protected void onDestroy() {
     super.onDestroy();
+
+    if (null != networkReceiver) {
+      networkReceiver.dispose();
+      networkReceiver = null;
+    }
+
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
+  }
+
+  @Override
+  protected void onPause() {
+    super.onPause();
+  }
+
+  @Override
+  protected void onStart() {
+    super.onStart();
   }
 
   private boolean exitToBack() {
@@ -98,6 +130,34 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
    */
   abstract void defineActionBar();
 
+  /**
+   * 네트워크의 연결 상태를 감시한다.
+   * 변동이 있을 때 presenter 로 알려준다.
+   */
+  protected void watchNetwork() {
+//    Context context = App.getInstance().getContext();
+//    networkReceiver = new NetworkReceiver(context, (isConnected1, type) -> {
+//      Log.i("APP# ActivityBase | watchNetwork", "|" + "Network Status: --------- " + isConnected1 + ", type: " + type);
+//      presenter.onChangedConnection(isConnected1, type);
+//    });
+
+    Log.w("APP# ActivityBase | watchNetwork", "| " + this.getClass().getSimpleName() + " - WATCHING............");
+    disposable.add(InternetStatus.observe(NetworkConfig.HOST_URL, NetworkConfig.HOST_PORT, 2000, 1000)
+      .observeOn(AndroidSchedulers.mainThread())
+      .subscribe(isConnectedInternet -> {
+        Log.i("APP# ActivityBase | watchNetwork", "|" + "Internet Status: ++++++++++" + isConnectedInternet);
+        presenter.onChangedConnection(isConnectedInternet, 0);
+      }, e -> {
+        Log.i("APP# ActivityBase | watchNetwork", "|" + "Internet Status: ++++++++++" + "error ");
+        presenter.onChangedConnection(false, 0);
+      })
+    );
+  }
+
+  protected void stopNetworkWatching() {
+    Log.w("APP# ActivityBase | stopNetworkWatching", "| " + this.getClass().getSimpleName() + " - STOP WATCHING___________");
+    disposable.clear();
+  }
 
   /***********************************
    * IView
@@ -109,6 +169,8 @@ public abstract class ActivityBase<P extends Presenter> extends AppCompatActivit
 
   @Override
   public void changeActivity(@ScreenID.ActivityID int activityId, JsonBeanBase bean) {
+    stopNetworkWatching();
+
     ActivityFactory factory = new ActivityFactory();
     Intent intent = new Intent(this, factory.getActivityClass(activityId));
     startActivity(intent);

+ 4 - 36
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -9,27 +9,22 @@ import android.preference.PreferenceManager;
 import android.util.Log;
 import android.widget.Button;
 
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
-import kr.co.zumo.app.lifeplus.config.NetworkConfig;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
-import kr.co.zumo.app.lifeplus.view.command.ActivityChangeCommand;
 import kr.co.zumo.app.lifeplus.model.BaseSharedPreferences;
-import kr.co.zumo.app.lifeplus.view.IMainView;
 import kr.co.zumo.app.lifeplus.model.LifeplusPreferences;
 import kr.co.zumo.app.lifeplus.model.MainModel;
-import kr.co.zumo.app.lifeplus.view.presenter.MainPresenter;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
-import kr.co.zumo.app.lifeplus.network.InternetStatus;
 import kr.co.zumo.app.lifeplus.network.NetworkConnection;
-import kr.co.zumo.app.lifeplus.network.NetworkReceiver;
 import kr.co.zumo.app.lifeplus.supervisor.DialogHelper;
 import kr.co.zumo.app.lifeplus.supervisor.DialogManager;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.view.IMainView;
+import kr.co.zumo.app.lifeplus.view.command.ActivityChangeCommand;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogResult;
+import kr.co.zumo.app.lifeplus.view.presenter.MainPresenter;
 
 /**
  * MainActivity
@@ -43,8 +38,6 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogResult;
  */
 public class MainActivity extends ActivityBase<MainPresenter> implements IMainView {
 
-  private NetworkReceiver networkReceiver;
-  private CompositeDisposable disposable = new CompositeDisposable();
 
   @Override
   void onAfterCreate(Bundle savedInstanceState) {
@@ -62,22 +55,7 @@ public class MainActivity extends ActivityBase<MainPresenter> implements IMainVi
         Context context = App.getInstance().getContext();
         SuperModel.getInstance().init(new LifeplusPreferences(new BaseSharedPreferences(PreferenceManager.getDefaultSharedPreferences(context))));
 
-        // fixme true-> true, false-> false  중복으로 전달되는 부분 처리 필요;
-        networkReceiver = new NetworkReceiver(context, (isConnected1, type) -> {
-          Log.i("APP# ActivityBase | onCreate", "|" + "Network Status: " + isConnected1 + ", type: " + type);
-          presenter.onChangedConnection(isConnected1, type);
-        });
-
-        disposable.add(InternetStatus.observe(NetworkConfig.HOST_URL, NetworkConfig.HOST_PORT, 5000, 3000)
-          .observeOn(AndroidSchedulers.mainThread())
-          .subscribe(isConnectedInternet -> {
-            Log.i("APP# ActivityBase | onCreate", "|" + "InternetStatus: " + isConnectedInternet);
-            presenter.onChangedConnection(isConnectedInternet, 0);
-          }, e -> {
-            presenter.onChangedConnection(false, 0);
-          })
-        );
-
+        watchNetwork();
 
         Log.i("APP# ActivityBase | onCreate", "| Network Connected ==============================================================> " + isConnected);
         if (isConnected == false) {
@@ -124,16 +102,6 @@ public class MainActivity extends ActivityBase<MainPresenter> implements IMainVi
   @Override
   protected void onDestroy() {
     super.onDestroy();
-
-    if (null != networkReceiver) {
-      networkReceiver.dispose();
-      networkReceiver = null;
-    }
-
-    if(null != disposable) {
-      disposable.dispose();
-      disposable = null;
-    }
   }
 
   @Override

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/NetworkErrorActivity.java

@@ -30,6 +30,7 @@ public class NetworkErrorActivity extends ActivityBase<NetworkErrorPresenter> im
   void onAfterCreate(Bundle savedInstanceState) {
     setContentView(R.layout.fragment_network_disconnected);
 
+    watchNetwork();
     presenter = new NetworkErrorPresenter(new NetworkErrorModel(), this);
 
     Button buttonRetry = findViewById(R.id.button_retry);

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/PinActivity.java

@@ -38,6 +38,7 @@ public class PinActivity extends ActivityBase<PinPresenter> implements IPinView
 
     DialogHelper.getInstance().setFragmentManager(getSupportFragmentManager());
 
+    watchNetwork();
     presenter = new PinPresenter(new PinModel(), this);
 
 

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SignUpActivity.java

@@ -38,6 +38,7 @@ public class SignUpActivity extends ActivityBase<SignUpPresenter> implements ISi
 
     DialogHelper.getInstance().setFragmentManager(getSupportFragmentManager());
 
+    watchNetwork();
     presenter = new SignUpPresenter(new SignUpModel(), this);
 
 //    presenter.onCommand(new FragmentChangeCommand(ScreenID.MAIN));

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/TutorialActivity.java

@@ -38,6 +38,7 @@ public class TutorialActivity extends ActivityBase implements ITutorialView {
 
     DialogHelper.getInstance().setFragmentManager(getSupportFragmentManager());
 
+    watchNetwork();
     presenter = new TutorialPresenter(new TutorialModel(), this);
 
     viewPager = (ViewPager) findViewById(R.id.tutorial_view_pager);

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/network/InternetStatus.java

@@ -75,6 +75,7 @@ public class InternetStatus {
   }
 
   static boolean isConnected(final Socket socket, final String host, final int port, final int timeoutInMs) {
+//    Log.i("APP# InternetStatus | isConnected", "|" + host + ":" + port);
     boolean isConnected;
     try {
       socket.connect(new InetSocketAddress(host, port), timeoutInMs);