Selaa lähdekoodia

[스플래시][Common] 비즈니스 로직 프리젠터로 이동

hyodong.min 6 vuotta sitten
vanhempi
commit
98bc423f63

+ 23 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ISplashContract.java

@@ -22,25 +22,37 @@ public interface ISplashContract {
   interface View {
     FragmentActivity getActivity();
 
-    /**
-     * 권한 획득 완룐
-     */
-    void onPermissionCompleted();
-
     /**
      * 위치 앱 권환 요청
      *
      * @param permissions
      */
     void requestLocationPermissions(@NonNull String[] permissions);
+
+    /**
+     * 액티비티 종료
+     */
+    void finish();
+
+    /**
+     * 외부 유입 링크 처리
+     */
+    void onLink();
+
+    /**
+     * 다음 액티비티로 전환
+     *
+     * @param screenId
+     */
+    void linkActivity(int screenId);
   }
 
   interface Presenter {
 
     /**
-     * 전체 퍼미션 확인
+     * start
      */
-    void launchAllPermission();
+    void start();
 
     /**
      * 디바이스 위치 서비스 설정 후 재시작
@@ -54,6 +66,8 @@ public interface ISplashContract {
      * @param grantResults
      */
     void onRequestPermissionsResult(String[] permissions, int[] grantResults);
+
+    void dispose();
   }
 
   interface Model {
@@ -105,5 +119,7 @@ public interface ISplashContract {
      * @return
      */
     String getPermissionsString();
+
+    void dispose();
   }
 }

+ 30 - 96
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashActivity.java

@@ -1,6 +1,5 @@
 package kr.co.zumo.app.lifeplus.activity;
 
-import android.content.Context;
 import android.content.Intent;
 import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
@@ -10,18 +9,10 @@ import android.view.View;
 
 import java.util.Arrays;
 
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
-import kr.co.zumo.app.lifeplus.config.NetworkConfigProvider;
-import kr.co.zumo.app.lifeplus.helper.AppShieldHelper;
-import kr.co.zumo.app.lifeplus.helper.FirebaseHelper;
-import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.model.SuperModelInit;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleHelper;
-import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
 
 /**
  * Splash 화면
@@ -35,23 +26,22 @@ import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
  */
 public class SplashActivity extends ActivityBaseSetup implements ISplashContract.View {
 
-  CompositeDisposable disposable = new CompositeDisposable();
-  ScreenStarter starter;
-
   ISplashContract.Presenter presenter;
 
+  private final int REQUEST_CODE = 9909;
+
   @Override
   protected void setup() {
 
+    SuperModelInit.instant(App.getInstance().getContext());
+
     // for visible loading...
     rootView.setVisibility(View.VISIBLE);
 
     Log.d("APP# SplashActivity | setup", "|" + "========== setup..............");
 
-    SuperModelInit.instant(getApplicationContext());
     presenter = new SplashPresenter(new SplashModel(), this);
-
-    presenter.launchAllPermission();
+    presenter.start();
   }
 
   @Override
@@ -59,58 +49,6 @@ public class SplashActivity extends ActivityBaseSetup implements ISplashContract
     presenter.onResume();
   }
 
-
-  private void next() {
-    setupInternal();
-  }
-
-  protected void setupInternal() {
-
-    Context context = App.getInstance().getContext();
-
-    // 앱이 실행 중인지 판단한다.
-    if (SuperModel.getInstance().isAppInitialized()) {
-      Log.e("APP#  SplashActivity | setupInternal", "|" + " restart from call...........");
-
-      finish();
-      doOnLink();
-    }
-    else {
-      Log.e("APP#  SplashActivity | setupInternal", "|" + " first ...........................");
-
-      SuperModelInit.instant(getApplicationContext());
-
-      NetworkConfigProvider.init();
-
-      starter = new ScreenStarter(this);
-
-      AppShieldHelper.getInstance().checkApp(context);
-
-      // 네트워크 연결 체크
-      disposable.add(
-        new NetworkWatcher().check(context)
-          .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
-          .subscribe(isConnected -> {
-            disposable.dispose();
-
-            starter.launch(isConnected, (context1, fragmentFlag) -> {
-            /*
-              App init
-             */
-
-              AppInitializer.init(context);
-
-              // topic 가입
-              FirebaseHelper.getInstance().subscribeToTopic();
-
-              linkActivity(fragmentFlag);
-
-            });
-          }, Throwable::printStackTrace)
-      );
-    }
-  }
-
   @Override
   protected boolean allowCountActivity() {
     return false;
@@ -123,13 +61,9 @@ public class SplashActivity extends ActivityBaseSetup implements ISplashContract
 
   @Override
   protected void onAfterDestroy() {
-    if (null != starter) {
-      starter.dispose();
-      starter = null;
-    }
-    if (null != disposable) {
-      disposable.dispose();
-      disposable = null;
+    if (null != presenter) {
+      presenter.dispose();
+      presenter = null;
     }
   }
 
@@ -139,21 +73,6 @@ public class SplashActivity extends ActivityBaseSetup implements ISplashContract
 
   @Override
   protected void onAfterNewIntent(Intent intent) {
-
-  }
-
-  private void linkActivity(int fragmentFlag) {
-    Intent intent = new Intent(this, MainActivity.class);
-    intent.putExtra(ScreenStarter.SCREEN_ID, fragmentFlag);
-    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
-    if (false == APIModuleHelper.isDispatched()) {
-      finish();
-      overridePendingTransition(R.anim.none, R.anim.none);
-      startActivity(intent, SLIDE_TYPE_HOME);
-
-      doOnLink();
-    }
   }
 
   /***********************************
@@ -165,21 +84,36 @@ public class SplashActivity extends ActivityBaseSetup implements ISplashContract
   }
 
   @Override
-  public void onPermissionCompleted() {
-    // 권한 처리 종료 -> 앱 시작
-    next();
+  public void requestLocationPermissions(@NonNull String[] permissions) {
+    Log.i("APP# SplashActivity | requestLocationPermissions", "|" + " permissions: " + Arrays.toString(permissions));
+    ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
   }
 
   @Override
-  public void requestLocationPermissions(@NonNull String[] permissions) {
-    Log.i("APP# SplashActivity | requestLocationPermissions", "|" + " permissions: " + Arrays.toString(permissions));
-    ActivityCompat.requestPermissions(this, permissions, 9909);
+  public void onLink() {
+    doOnLink();
   }
 
+  @Override
+  public void linkActivity(int screenId) {
+    Intent intent = new Intent(this, MainActivity.class);
+    intent.putExtra(ScreenStarter.SCREEN_ID, screenId);
+    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+    if (false == APIModuleHelper.isDispatched()) {
+      finish();
+      overridePendingTransition(R.anim.none, R.anim.none);
+      startActivity(intent, SLIDE_TYPE_HOME);
+
+      doOnLink();
+    }
+  }
+
+
   @Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
     switch (requestCode) {
-      case 9909: {
+      case REQUEST_CODE: {
         presenter.onRequestPermissionsResult(permissions, grantResults);
         break;
       }

+ 6 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashModel.java

@@ -23,7 +23,7 @@ import kr.co.zumo.app.lifeplus.model.SuperModel;
  */
 class SplashModel implements ISplashContract.Model {
 
-  public SplashModel() {
+  SplashModel() {
   }
 
   /**
@@ -81,4 +81,9 @@ class SplashModel implements ISplashContract.Model {
   public String getPermissionsString() {
     return Manifest.permission.ACCESS_FINE_LOCATION;
   }
+
+  @Override
+  public void dispose() {
+    //
+  }
 }

+ 90 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashPresenter.java

@@ -3,6 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.activity;
 
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.provider.Settings;
@@ -10,7 +11,17 @@ import android.util.Log;
 
 import java.util.Arrays;
 
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.application.App;
+import kr.co.zumo.app.lifeplus.config.NetworkConfigProvider;
+import kr.co.zumo.app.lifeplus.helper.AppShieldHelper;
+import kr.co.zumo.app.lifeplus.helper.FirebaseHelper;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.model.SuperModelInit;
+import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.dialog.ConfirmDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
@@ -32,9 +43,12 @@ public class SplashPresenter implements ISplashContract.Presenter {
   private ISplashContract.Model model;
   private ISplashContract.View view;
 
+  private CompositeDisposable disposable = new CompositeDisposable();
+  private ScreenStarter starter;
+
   private boolean isRequestingLocationService = false;
 
-  public SplashPresenter(ISplashContract.Model model, ISplashContract.View view) {
+  SplashPresenter(ISplashContract.Model model, ISplashContract.View view) {
     this.model = model;
     this.view = view;
   }
@@ -109,11 +123,14 @@ public class SplashPresenter implements ISplashContract.Presenter {
   }
 
   @Override
-  public void launchAllPermission() {
+  public void start() {
+
+    // 전체 퍼미션 확인
+
     // 앱 첫 실행시에만 실행한다.
     if (model.getFirstPermissionCompleted()) {
       // 이미 처리 완료했음.
-      view.onPermissionCompleted();
+      onPermissionCompleted();
     }
     else {
       model.setFirstPermissionCompleted();
@@ -122,7 +139,7 @@ public class SplashPresenter implements ISplashContract.Presenter {
         launchDeviceLocationPermission(() -> {
           launchLocationPermission(() -> {
             // 권한 처리 종료
-            view.onPermissionCompleted();
+            onPermissionCompleted();
           });
         });
       });
@@ -136,7 +153,7 @@ public class SplashPresenter implements ISplashContract.Presenter {
 
       launchLocationPermission(() -> {
         // 권한 처리 종료
-        view.onPermissionCompleted();
+        onPermissionCompleted();
       });
     }
   }
@@ -162,6 +179,73 @@ public class SplashPresenter implements ISplashContract.Presenter {
     }
 
     // 권한 처리 종료
-    view.onPermissionCompleted();
+    onPermissionCompleted();
+  }
+
+  @Override
+  public void dispose() {
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
+    if (null != model) {
+      model.dispose();
+      model = null;
+    }
+    if (null != starter) {
+      starter.dispose();
+      starter = null;
+    }
+    view = null;
+  }
+
+  private void onPermissionCompleted() {
+    setupInternal();
+  }
+
+  private void setupInternal() {
+
+    Context context = App.getInstance().getContext();
+
+    // 앱이 실행 중인지 판단한다.
+    if (SuperModel.getInstance().isAppInitialized()) {
+      Log.e("APP#  SplashPresenter | setupInternal", "|" + " restart from call...........");
+
+      view.finish();
+      view.onLink();
+    }
+    else {
+      Log.e("APP#  SplashPresenter | setupInternal", "|" + " first ...........................");
+
+      SuperModelInit.instant(context);
+
+      NetworkConfigProvider.init();
+
+      starter = new ScreenStarter(view.getActivity());
+
+      AppShieldHelper.getInstance().checkApp(context);
+
+      // 네트워크 연결 체크
+      disposable.add(
+        new NetworkWatcher().check(context)
+          .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+          .subscribe(isConnected -> {
+            disposable.dispose();
+
+            starter.launch(isConnected, (context1, fragmentFlag) -> {
+              /**
+               * App init
+               */
+              AppInitializer.init(context);
+
+              // topic 가입
+              FirebaseHelper.getInstance().subscribeToTopic();
+
+              view.linkActivity(fragmentFlag);
+
+            });
+          }, Throwable::printStackTrace)
+      );
+    }
   }
 }