Przeglądaj źródła

[푸시][New] 노티 별 화면 이동
- 이벤트는 추가 해야 함

hyodong.min 6 lat temu
rodzic
commit
42cf5cef22

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

@@ -27,7 +27,6 @@ import kr.co.zumo.app.lifeplus.helper.Helper;
 import kr.co.zumo.app.lifeplus.helper.IHelperProvider;
 import kr.co.zumo.app.lifeplus.helper.ScreenChangerHelper;
 import kr.co.zumo.app.lifeplus.helper.ScreenSizeHelper;
-import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.supervisor.ActivityDeliveryResultHelper;
 import kr.co.zumo.app.lifeplus.supervisor.FragmentSkipBackChanger;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenChanger;
@@ -151,15 +150,6 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
 
   protected abstract void onAfterNewIntent(Intent intent);
 
-  protected void doOnLink() {
-    // 컨텐츠 링크가 준비돼있다면 표시한다.
-    if (SuperModel.getInstance().hasContentsLink()) {
-      SuperModel.getInstance().setContentsLink(false);
-      Intent intent = new Intent(this, ContentsActivity.class);
-      startActivity(intent);
-    }
-  }
-
   @Override
   protected final void onNewIntent(Intent intent) {
     super.onNewIntent(intent);

+ 133 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBaseSetup.java

@@ -3,6 +3,34 @@
  */
 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.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;
+
 /**
  * ActivitySetup
  * - 화면 표시 없이 작동하는 액티비티
@@ -23,6 +51,111 @@ public abstract class ActivityBaseSetup extends ActivityBase {
 
   protected abstract void setup();
 
+  protected void doOnLink() {
+    // 컨텐츠 링크가 준비돼있다면 표시한다.
+    if (SuperModel.getInstance().hasContentsLink()) {
+      SuperModel.getInstance().setContentsLink(false);
+      Intent intent = new Intent(this, ContentsActivity.class);
+      startActivity(intent);
+    }
+    else if (SuperModel.getInstance().hasPushLink()) {
+      SuperModel.getInstance().setPushLink(false);
+
+      PushBean pushBean = ActivityDeliveryHelper.getInstance().getPackaging(PushBean.class);
+      if (null != pushBean) {
+        ActivityDeliveryHelper.getInstance().clearPackaging();
+        DeliveryHelper deliveryHelper = getHelper(DeliveryHelper.class);
+
+        int id = ScreenID.MAIN;
+        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
+              // todo event winner
+
+              id = ScreenID.EVENT_WINNER;
+              break;
+            case PushMessageManager.CODE_EVENT_DETAIL:
+              // event detail
+              // todo event detail
+
+              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:
+              break;
+          }
+        }
+
+        // temp 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));
+      }
+      else {
+        Log.e("APP#  ActivityBaseSetup | doOnLink", "|" + " has no link via push...................");
+      }
+
+    }
+  }
+
+  /**
+   * 모델을 반환한다.
+   *
+   * @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);
+  }
+
 }
 
 

+ 12 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/activity/PushGateActivity.java

@@ -3,7 +3,12 @@ package kr.co.zumo.app.lifeplus.activity;
 import android.content.Intent;
 import android.util.Log;
 
+import com.google.gson.Gson;
+
+import kr.co.zumo.app.lifeplus.bean.PushBean;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.supervisor.ActivityDeliveryHelper;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 
 /**
  * PushGateActivity
@@ -36,16 +41,21 @@ public class PushGateActivity extends ActivityBaseSetup {
      *
      * 모든 예외 사항들( 잠금 화면 등)을 넘어서 메인 컨텐츠 를 표시 할 수 있을 때 데이터를 이용해서 컨텐츠를 표시한다.
      */
+    if (StringUtil.isFull(json)) {
+      // 데이터 준비
+      PushBean pushBean = new Gson().fromJson(json, PushBean.class);
+      ActivityDeliveryHelper.getInstance().setPackaging(pushBean);
+      SuperModel.getInstance().setPushLink(true);
+    }
 
     finish();
 
     if (SuperModel.getInstance().isAppInitialized()) {
       // 이미 앱 실행 중 -> 해당 화면으로 이동
-      // todo
+      doOnLink();
     }
     else {
       // 앱이 처음 실행이라면 스플래시부터 진행
-      // todo
       Intent intent = new Intent(this, SplashActivity.class);
       startActivity(intent);
     }

+ 5 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/helper/DeliveryHelper.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.helper;
 import android.util.Log;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import io.reactivex.annotations.Nullable;
@@ -76,16 +77,18 @@ public class DeliveryHelper extends Helper {
       return;
     }
 
-    for (String key : packagingMap.keySet()) {
+    for (Iterator<String> iterator = packagingMap.keySet().iterator(); iterator.hasNext(); ) {
+      String key = iterator.next();
       Packaging pack = packagingMap.get(key);
       if (pack.isCleared) {
-        packagingMap.remove(key);
+        iterator.remove();
         Log.i("APP# DeliveryHelper | clearPackaging", "|" + " removed ---------------> " + key);
       }
       else {
         Log.i("APP# DeliveryHelper | clearPackaging", "|" + " still alive ---------------> " + key);
       }
     }
+
   }
 
   @Override

+ 14 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/SuperModel.java

@@ -58,6 +58,7 @@ public final class SuperModel implements IMemberStatusManager {
   private boolean hasContentsLink;
   private boolean isUnlocked;
   private boolean isReviewCounted;
+  private boolean hasPushLink = false;
 
   private int memberStatus = 0;
   private LifeplusPreferences preferences;
@@ -272,6 +273,19 @@ public final class SuperModel implements IMemberStatusManager {
     this.hasContentsLink = hasContentsLink;
   }
 
+  /**
+   * 푸시 메시지 링크가 설정됐는지 표시
+   *
+   * @return
+   */
+  public boolean hasPushLink() {
+    return hasPushLink;
+  }
+
+  public void setPushLink(boolean hasPushLink) {
+    this.hasPushLink = hasPushLink;
+  }
+
   /**
    * 화면 잠금 해제 했는지 확인
    *

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

@@ -66,14 +66,14 @@ public class FirebasePushService extends FirebaseMessagingService {
 
     // Check if message contains a data payload.
     if (remoteMessage.getData().size() > 0) {
-      Log.d("APP# FirebasePushService | onMessageReceived", "|" + "Message data payload: " + remoteMessage.getData());
+//      Log.d("APP# FirebasePushService | onMessageReceived", "|" + "Message data payload: " + remoteMessage.getData());
 
       Map<String, String> data = remoteMessage.getData();
 
       Gson gson = new Gson();
       JsonElement jsonElement = gson.toJsonTree(data);
       PushBean bean = gson.fromJson(jsonElement, PushBean.class);
-      Log.d("APP# FirebasePushService | onMessageReceived", "|" + bean.toJson());
+//      Log.d("APP# FirebasePushService | onMessageReceived", "|" + bean.toJson());
 
       PushMessageManager.savePushMessages(new PushMessageManager(PushMessageManager.getPushMessages()).addPushBean(bean));
       PushMessageBroker.getInstance().push(bean);

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

@@ -60,7 +60,7 @@ public class PushMessageManager {
    */
   public PushMessageManager addPushBean(PushBean bean) {
     if (LifeplusData.isTrue(bean.getNeedSaving())) {
-      Log.i("APP# PushMessageManager | addPushBean", "|" + "add: " + bean.toJson());
+      Log.d("APP# PushMessageManager | addPushBean", "|" + "add: " + bean.toJson());
       pushBeans.add(bean);
     }
     return this;

+ 3 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/BlankPresenter.java

@@ -55,7 +55,9 @@ public class BlankPresenter extends Presenter<BlankModel, IView> {
 
   @Override
   protected void startInternalOnce() {
-
+    /**
+     * 여기에 아무것도 기술하지 마시오.
+     */
   }
 
   @Override