Browse Source

[푸시][New] 푸시 링크 화면 이동 로직 리팩토링

hyodong.min 6 years ago
parent
commit
762a22091c

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

@@ -123,7 +123,7 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
 
       // screen changer
       ScreenChangerHelper helper = getHelper(ScreenChangerHelper.class);
-      helper.setAppCompatActivity(this);
+      helper.setFragmentActivity(this);
       helper.setContainerId(R.id.container_main);
 
     }

+ 5 - 122
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBaseSetup.java

@@ -3,34 +3,13 @@
  */
 package kr.co.zumo.app.lifeplus.activity;
 
-import android.arch.lifecycle.ViewModelProviders;
 import android.content.Intent;
-import android.net.Uri;
-import android.support.v4.app.FragmentActivity;
 import android.util.Log;
 
-import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
-import kr.co.zumo.app.lifeplus.bean.EventDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.PushBean;
-import kr.co.zumo.app.lifeplus.bean.UtilityActivityBean;
-import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
-import kr.co.zumo.app.lifeplus.config.NetworkConfig;
-import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
-import kr.co.zumo.app.lifeplus.helper.Helper;
-import kr.co.zumo.app.lifeplus.helper.ScreenChangerHelper;
-import kr.co.zumo.app.lifeplus.model.BlankModel;
-import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.supervisor.ActivityDeliveryHelper;
-import kr.co.zumo.app.lifeplus.supervisor.PushMessageManager;
-import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
-import kr.co.zumo.app.lifeplus.supervisor.screen.Screen;
-import kr.co.zumo.app.lifeplus.util.StringUtil;
-import kr.co.zumo.app.lifeplus.view.IView;
-import kr.co.zumo.app.lifeplus.view.command.ScreenCommand;
-import kr.co.zumo.app.lifeplus.view.presenter.BlankPresenter;
-import kr.co.zumo.app.lifeplus.view.presenter.CommandInvoker;
-import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.supervisor.PushMessageLink;
 
 /**
  * ActivitySetup
@@ -68,110 +47,14 @@ public abstract class ActivityBaseSetup extends ActivityBase {
        */
       PushBean pushBean = ActivityDeliveryHelper.getInstance().getPackaging(PushBean.class);
 
-      if (null != pushBean) {
-        Log.d("APP# ActivityBaseSetup | doOnLink", "|" + "pushBean: " + pushBean.toJson());
-        ActivityDeliveryHelper.getInstance().clearPackaging();
-        DeliveryHelper deliveryHelper = getHelper(DeliveryHelper.class);
-
-        int id = ScreenID.NONE;
-        String code = pushBean.getScreenCode();
-
-        if (StringUtil.isFull(code)) {
-          UtilityActivityBean utilityActivityBean;
-          switch (code) {
-            case PushMessageManager.CODE_QNA:
-              // 나의 문의 내역 - 프래그먼트 뿐이므로 유틸리티 액티비티를 이용
-              utilityActivityBean = new UtilityActivityBean();
-              utilityActivityBean.setScreenId(ScreenID.MY_FAQ);
-              deliveryHelper.setPackaging(utilityActivityBean);
-              id = ScreenID.UTILITY_ACTIVITY;
-              break;
-            case PushMessageManager.CODE_EXTINCTION:
-              // my extinct coin - 프래그먼트 뿐이므로 유틸리티 액티비티를 이용
-              utilityActivityBean = new UtilityActivityBean();
-              utilityActivityBean.setScreenId(ScreenID.MY_COIN_EXTINCT);
-              deliveryHelper.setPackaging(utilityActivityBean);
-              id = ScreenID.UTILITY_ACTIVITY;
-              break;
-            case PushMessageManager.CODE_EVENT_WINNER:
-              // event winner
-              deliveryHelper.setPackaging(pushBean.getItemNo());
-              id = ScreenID.EVENT_WINNER;
-              break;
-            case PushMessageManager.CODE_EVENT_DETAIL:
-              // event detail
-              // 이벤트 타입없이 전달하면 타입 구분 후 진행된다.
-              deliveryHelper.setPackaging(new EventDeliveryBean(pushBean.getItemNo(), ""));
-
-              id = ScreenID.EVENT_DETAIL;
-
-              break;
-            case PushMessageManager.CODE_CONTENTS:
-              // 컨텐츠
-              // 데이터 준비
-              LifeplusContentsBean lifeplusContentsBean = new LifeplusContentsBean();
-              lifeplusContentsBean.setItemNo(pushBean.getItemNo());
-              ContentsDeliveryBean contentsDeliveryBean = new ContentsDeliveryBean.Builder(lifeplusContentsBean).pageIndex(0).build();
-              deliveryHelper.setPackaging(contentsDeliveryBean);
-
-              id = ScreenID.CONTENTS;
-              break;
-            case PushMessageManager.CODE_MY_COUPON:
-              // 마이 쿠폰
-              Uri.Builder uri = Uri.parse(NetworkConfig.getCoopUrl() + ":" + NetworkConfig.getCoopPort()).buildUpon();
-              uri.appendPath(NetworkConfig.getCoopMyPage());
-              deliveryHelper.setPackaging(uri.toString());
-
-              id = ScreenID.COUPON_MALL;
-              break;
-            default:
-              id = ScreenID.MAIN;
-              break;
-          }
-        }
-
-        if (id != ScreenID.NONE) {
-          goTo(id);
-        }
-      }
-      else {
-        Log.e("APP#  ActivityBaseSetup | doOnLink", "|" + " has no link via push...................");
-      }
-
+      PushMessageLink.link(this, pushBean);
+    }
+    else {
+      Log.e("APP#  ActivityBaseSetup | doOnLink", "|" + " has no link via push...................");
     }
-  }
-
-  private void goTo(int id) {
-    //fixme 화면 이동하는데 필요 설정을 더 간단히 할 수 있을 것 같다.
-
-    // dummy for change screen
-    ScreenChangerHelper helper = getHelper(ScreenChangerHelper.class);
-    helper.setAppCompatActivity(this);
-
-    Presenter presenter = new BlankPresenter(getModel(BlankModel.class), new IView() {
-      @Override
-      public FragmentActivity getActivity() {
-        return ActivityBaseSetup.this;
-      }
-
-      @Override
-      public <H extends Helper> H getHelper(Class<H> helperClass) {
-        return ActivityBaseSetup.this.getHelper(helperClass);
-      }
-    });
 
-    new CommandInvoker().invoke(presenter, new ScreenCommand(id, ScreenID.DIRECTION_NEXT, Screen.METHOD_SKIP));
   }
 
-  /**
-   * 모델을 반환한다.
-   *
-   * @param modelClass MainModel.class
-   * @return new MainModel() or exist object
-   */
-  public <T extends Model> T getModel(Class<T> modelClass) {
-    return ViewModelProviders.of(this).get(modelClass);
-  }
 
 }
 

+ 6 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/helper/ScreenChangerHelper.java

@@ -4,7 +4,7 @@
 package kr.co.zumo.app.lifeplus.helper;
 
 import android.support.annotation.IdRes;
-import android.support.v7.app.AppCompatActivity;
+import android.support.v4.app.FragmentActivity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -26,7 +26,7 @@ public class ScreenChangerHelper extends Helper {
   public ScreenChangerHelper() {
   }
 
-  private AppCompatActivity appCompatActivity;
+  private FragmentActivity fragmentActivity;
   @IdRes
   private int containerId;
 
@@ -51,12 +51,12 @@ public class ScreenChangerHelper extends Helper {
     this.containerId = containerId;
   }
 
-  public AppCompatActivity getAppCompatActivity() {
-    return appCompatActivity;
+  public FragmentActivity getFragmentActivity() {
+    return fragmentActivity;
   }
 
-  public void setAppCompatActivity(AppCompatActivity activity) {
-    this.appCompatActivity = activity;
+  public void setFragmentActivity(FragmentActivity activity) {
+    this.fragmentActivity = activity;
   }
 
   @Override

+ 14 - 12
app/src/main/java/kr/co/zumo/app/lifeplus/push/FirebasePushService.java

@@ -75,18 +75,20 @@ public class FirebasePushService extends FirebaseMessagingService {
       PushBean bean = gson.fromJson(jsonElement, PushBean.class);
 //      Log.d("APP# FirebasePushService | onMessageReceived", "|" + bean.toJson());
 
-      PushMessageManager manager = PushMessageManager.getStoredManager().addPushBean(bean);
-      PushMessageManager.saveManager(manager);
-      PushMessageBroker.getInstance().push(manager);
-
-      // 노티를 표시할지 구분
-      if (PushMessageManager.isEventCode(bean.getScreenCode()) && SuperModel.getInstance().getPreferences().isPushEventEnabled()) {
-        // event 코드이고 수신 설정 시
-        sendNotification(bean);
-      }
-      else if (PushMessageManager.isContentsCode(bean.getScreenCode()) && SuperModel.getInstance().getPreferences().isPushContentsAndService()) {
-        // 컨텐츠 코드이고 수신 설정 시
-        sendNotification(bean);
+      if (null != bean && PushMessageManager.isAvailableCode(bean.getScreenCode())) {
+        PushMessageManager manager = PushMessageManager.getStoredManager().addPushBean(bean);
+        PushMessageManager.saveManager(manager);
+        PushMessageBroker.getInstance().push(manager);
+
+        // 노티를 표시할지 구분
+        if (PushMessageManager.isEventCode(bean.getScreenCode()) && SuperModel.getInstance().getPreferences().isPushEventEnabled()) {
+          // event 코드이고 수신 설정 시
+          sendNotification(bean);
+        }
+        else if (PushMessageManager.isContentsCode(bean.getScreenCode()) && SuperModel.getInstance().getPreferences().isPushContentsAndService()) {
+          // 컨텐츠 코드이고 수신 설정 시
+          sendNotification(bean);
+        }
       }
     }
 

+ 129 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/PushMessageLink.java

@@ -0,0 +1,129 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.supervisor;
+
+import android.arch.lifecycle.ViewModelProviders;
+import android.net.Uri;
+import android.support.v4.app.FragmentActivity;
+import android.util.Log;
+
+import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
+import kr.co.zumo.app.lifeplus.bean.EventDeliveryBean;
+import kr.co.zumo.app.lifeplus.bean.PushBean;
+import kr.co.zumo.app.lifeplus.bean.UtilityActivityBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
+import kr.co.zumo.app.lifeplus.config.NetworkConfig;
+import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
+import kr.co.zumo.app.lifeplus.helper.Helper;
+import kr.co.zumo.app.lifeplus.helper.ScreenChangerHelper;
+import kr.co.zumo.app.lifeplus.model.BlankModel;
+import kr.co.zumo.app.lifeplus.supervisor.screen.Screen;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
+import kr.co.zumo.app.lifeplus.view.IView;
+import kr.co.zumo.app.lifeplus.view.command.ScreenCommand;
+import kr.co.zumo.app.lifeplus.view.presenter.BlankPresenter;
+import kr.co.zumo.app.lifeplus.view.presenter.CommandInvoker;
+import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+
+/**
+ * PushMessageLink
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019-02-09]   [최초 작성]
+ * @since 2019-02-09
+ */
+public class PushMessageLink {
+  /**
+   * push message 의 링크 이동
+   *  @param activity
+   * @param pushBean
+   */
+  public static void link(FragmentActivity activity, PushBean pushBean) {
+    if (null != pushBean) {
+      Log.d("APP# PushMessageLink | link", "|" + "pushBean: " + pushBean.toJson());
+      ActivityDeliveryHelper.getInstance().clearPackaging();
+      DeliveryHelper deliveryHelper = ViewModelProviders.of(activity).get(DeliveryHelper.class);
+
+      int id = ScreenID.NONE;
+      String code = pushBean.getScreenCode();
+
+      if (StringUtil.isFull(code)) {
+        UtilityActivityBean utilityActivityBean;
+        switch (code) {
+          case PushMessageManager.CODE_EXTINCTION:
+            // my extinct coin - 프래그먼트 뿐이므로 유틸리티 액티비티를 이용
+            utilityActivityBean = new UtilityActivityBean();
+            utilityActivityBean.setScreenId(ScreenID.MY_COIN_EXTINCT);
+            deliveryHelper.setPackaging(utilityActivityBean);
+            id = ScreenID.UTILITY_ACTIVITY;
+            break;
+          case PushMessageManager.CODE_EVENT_WINNER:
+            // event winner
+            deliveryHelper.setPackaging(pushBean.getItemNo());
+            id = ScreenID.EVENT_WINNER;
+            break;
+          case PushMessageManager.CODE_MY_COUPON:
+            // 마이 쿠폰
+            Uri.Builder uri = Uri.parse(NetworkConfig.getCoopUrl() + ":" + NetworkConfig.getCoopPort()).buildUpon();
+            uri.appendPath(NetworkConfig.getCoopMyPage());
+            deliveryHelper.setPackaging(uri.toString());
+
+            id = ScreenID.COUPON_MALL;
+            break;
+          case PushMessageManager.CODE_QNA:
+            // 나의 문의 내역 - 프래그먼트 뿐이므로 유틸리티 액티비티를 이용
+            utilityActivityBean = new UtilityActivityBean();
+            utilityActivityBean.setScreenId(ScreenID.MY_FAQ);
+            deliveryHelper.setPackaging(utilityActivityBean);
+            id = ScreenID.UTILITY_ACTIVITY;
+            break;
+          case PushMessageManager.CODE_EVENT_DETAIL:
+            // event detail
+            // 이벤트 타입없이 전달하면 타입 구분 후 진행된다.
+            deliveryHelper.setPackaging(new EventDeliveryBean(pushBean.getItemNo(), ""));
+
+            id = ScreenID.EVENT_DETAIL;
+
+            break;
+          case PushMessageManager.CODE_CONTENTS:
+            // 컨텐츠
+            // 데이터 준비
+            LifeplusContentsBean lifeplusContentsBean = new LifeplusContentsBean();
+            lifeplusContentsBean.setItemNo(pushBean.getItemNo());
+            ContentsDeliveryBean contentsDeliveryBean = new ContentsDeliveryBean.Builder(lifeplusContentsBean).pageIndex(0).build();
+            deliveryHelper.setPackaging(contentsDeliveryBean);
+
+            id = ScreenID.CONTENTS;
+            break;
+          default:
+            id = ScreenID.MAIN;
+            break;
+        }
+      }
+
+      if (id != ScreenID.NONE) {
+        // dummy for change screen
+        ScreenChangerHelper helper = ViewModelProviders.of(activity).get(ScreenChangerHelper.class);
+        helper.setFragmentActivity(activity);
+
+        Presenter presenter = new BlankPresenter(ViewModelProviders.of(activity).get(BlankModel.class), new IView() {
+          @Override
+          public FragmentActivity getActivity() {
+            return activity;
+          }
+
+          @Override
+          public <H extends Helper> H getHelper(Class<H> helperClass) {
+            return ViewModelProviders.of(activity).get(helperClass);
+          }
+        });
+
+        new CommandInvoker().invoke(presenter, new ScreenCommand(id, ScreenID.DIRECTION_NEXT, Screen.METHOD_SKIP));
+      }
+    }
+  }
+}

+ 10 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/PushMessageManager.java

@@ -182,6 +182,16 @@ public class PushMessageManager {
     return false;
   }
 
+  /**
+   * 사용 가능 코드 확인
+   *
+   * @param code
+   * @return
+   */
+  public static boolean isAvailableCode(String code) {
+    return isContentsCode(code) || isEventCode(code);
+  }
+
   public static int getScreendIdByCode(String code) {
     @ScreenID.ID int id;
     switch (code) {

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/FragmentBackStackChangeCommand.java

@@ -25,6 +25,6 @@ public class FragmentBackStackChangeCommand extends FragmentChangeCommand {
   }
 
   protected ScreenChanger getScreenChanger(FragmentFactory factory, ScreenChangerHelper helper) {
-    return new FragmentBackStackChanger(helper.getAppCompatActivity().getSupportFragmentManager(), helper.getContainerId(), factory);
+    return new FragmentBackStackChanger(helper.getFragmentActivity().getSupportFragmentManager(), helper.getContainerId(), factory);
   }
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/FragmentChangeCommand.java

@@ -37,7 +37,7 @@ public class FragmentChangeCommand extends Command<Model, IView, Presenter> {
   }
 
   protected ScreenChanger getScreenChanger(FragmentFactory factory, ScreenChangerHelper helper) {
-    return new FragmentChanger(helper.getAppCompatActivity().getSupportFragmentManager(), helper.getContainerId(), factory);
+    return new FragmentChanger(helper.getFragmentActivity().getSupportFragmentManager(), helper.getContainerId(), factory);
   }
 
   @Override

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/FragmentJumpBackCommand.java

@@ -26,6 +26,6 @@ public class FragmentJumpBackCommand extends FragmentChangeCommand {
   }
 
   protected ScreenChanger getScreenChanger(FragmentFactory factory, ScreenChangerHelper helper) {
-    return new FragmentJumpBackChanger(helper.getAppCompatActivity().getSupportFragmentManager(), helper.getContainerId(), factory, helper.getSkipBackIds());
+    return new FragmentJumpBackChanger(helper.getFragmentActivity().getSupportFragmentManager(), helper.getContainerId(), factory, helper.getSkipBackIds());
   }
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/FragmentSkipBackCommand.java

@@ -26,6 +26,6 @@ public class FragmentSkipBackCommand extends FragmentChangeCommand {
   }
 
   protected ScreenChanger getScreenChanger(FragmentFactory factory, ScreenChangerHelper helper) {
-    return new FragmentSkipBackChanger(helper.getAppCompatActivity().getSupportFragmentManager(), helper.getContainerId(), factory, helper.getSkipBackIds());
+    return new FragmentSkipBackChanger(helper.getFragmentActivity().getSupportFragmentManager(), helper.getContainerId(), factory, helper.getSkipBackIds());
   }
 }

+ 10 - 15
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/notification/NotiPresenter.java

@@ -1,11 +1,10 @@
 package kr.co.zumo.app.lifeplus.view.screen.notification;
 
-import android.net.Uri;
-
 import kr.co.zumo.app.R;
-import kr.co.zumo.app.lifeplus.bean.UtilityActivityBean;
+import kr.co.zumo.app.lifeplus.bean.PushBean;
 import kr.co.zumo.app.lifeplus.bean.api.NoticeBean;
-import kr.co.zumo.app.lifeplus.config.NetworkConfig;
+import kr.co.zumo.app.lifeplus.supervisor.PushMessageLink;
+import kr.co.zumo.app.lifeplus.supervisor.PushMessageManager;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
@@ -116,30 +115,26 @@ public class NotiPresenter extends Presenter<NotiModel, INotiView> {
 
   private void link(NoticeBean bean) {
     if (null != bean) {
+
+      PushBean pushBean = new PushBean();
+      pushBean.setItemNo(bean.getEventId());
       switch (bean.getFlag()) {
         case NoticeBean.FLAG_NEWS_COIN:
           // 소멸 예정 코인
-          UtilityActivityBean utilityActivityBean = new UtilityActivityBean();
-          utilityActivityBean.setScreenId(ScreenID.MY_COIN_EXTINCT);
-          model.setDeliveryPackaging(utilityActivityBean);
-          go(ScreenID.UTILITY_ACTIVITY);
+          pushBean.setScreenCode(PushMessageManager.CODE_EXTINCTION);
           break;
         case NoticeBean.FLAG_NEWS_WINNER:
           // 당첨 발표
-          model.setDeliveryPackaging(bean.getEventId());
-          go(ScreenID.EVENT_WINNER);
+          pushBean.setScreenCode(PushMessageManager.CODE_EVENT_WINNER);
           break;
         case NoticeBean.FLAG_NEWS_COUPON:
           // 보유 쿠폰
-          Uri.Builder uri = Uri.parse(NetworkConfig.getCoopUrl() + ":" + NetworkConfig.getCoopPort()).buildUpon();
-          uri.appendPath(NetworkConfig.getCoopMyPage());
-          model.setDeliveryPackaging(uri.toString());
-
-          go(ScreenID.COUPON_MALL);
+          pushBean.setScreenCode(PushMessageManager.CODE_MY_COUPON);
           break;
         default:
           break;
       }
+      PushMessageLink.link(view.getActivity(), pushBean);
     }
   }
 

+ 2 - 2
app/src/test/java/kr/co/zumo/app/lifeplus/supervisor/ScreenChangerHelperTest.java

@@ -42,9 +42,9 @@ public class ScreenChangerHelperTest {
   @Test
   public void getFragmentActivity() {
     MainActivity activity = mock(MainActivity.class);
-    screenChangerHelper.setAppCompatActivity(activity);
+    screenChangerHelper.setFragmentActivity(activity);
 
-    Assert.assertEquals(activity, screenChangerHelper.getAppCompatActivity());
+    Assert.assertEquals(activity, screenChangerHelper.getFragmentActivity());
   }
 
   @Test