浏览代码

[메뉴][New] Push message 아이콘 표시

hyodong.min 6 年之前
父节点
当前提交
a1013c2462

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

@@ -76,6 +76,7 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
 
     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
 
+    // 이전 액티비티에서 전달한 트랜지션 타입
     slideType = getIntent().getIntExtra(SLIDE_TYPE, SLIDE_TYPE_ACTIVITY);
 
     if (allowCountActivity()) {
@@ -239,6 +240,13 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
     }
   }
 
+  /**
+   * Activity 변환 에니메이션 타입을 정하여 시작
+   * - 호출되는 Activity 에게 타입을 전달한다.
+   *
+   * @param intent
+   * @param type
+   */
   public void startActivity(Intent intent, @SlideType int type) {
     intent.putExtra(SLIDE_TYPE, type);
     super.startActivity(intent);

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

@@ -50,11 +50,6 @@ public class FirebasePushService extends FirebaseMessagingService {
   public void onNewToken(String token) {
     Log.d("APP# FirebasePushService | onMessageReceived", "|" + "Refreshed token: " + token);
 
-    // If you want to send messages to this application instance or
-    // manage this apps subscriptions on the server side, send the
-    // Instance ID token to your app server.
-
-//    sendRegistrationToServer(token);
     FirebaseHelper.getInstance().sendRegistrationToServer(token);
   }
 
@@ -78,6 +73,8 @@ public class FirebasePushService extends FirebaseMessagingService {
       PushMessageManager.savePushMessages(new PushMessageManager(PushMessageManager.getPushMessages()).addPushBean(bean));
 
       sendNotification(bean.getTitle(), bean.getContents());
+
+      PushMessageBroker.getInstance().push(bean);
     }
 
     // Check if message contains a notification payload.
@@ -92,11 +89,12 @@ public class FirebasePushService extends FirebaseMessagingService {
 
   }
 
-  //  /**
-//   * Create and show a simple notification containing the received FCM message.
-//   *
-//   * @param messageBody FCM message body received.
-//   */
+  /**
+   * Create and show a simple notification containing the received FCM message.
+   *
+   * @param title       FCM message title received.
+   * @param messageBody FCM message body received.
+   */
   private void sendNotification(String title, String messageBody) {
     Intent intent = new Intent(this, MainActivity.class);
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@ -128,24 +126,4 @@ public class FirebasePushService extends FirebaseMessagingService {
 
     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
   }
-
-//  private void sendNotification(String title, String message) {
-//    Intent intent = new Intent(this, MainActivity.class);
-//    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-//    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
-//      PendingIntent.FLAG_CANCEL_CURRENT);
-//
-//    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
-//    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
-//      .setLargeIcon(BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_dialog_info))
-//      .setSmallIcon(R.mipmap.ic_launcher)
-//      .setContentTitle(title)
-//      .setContentText(message)
-//      .setAutoCancel(true)
-//      .setSound(defaultSoundUri)
-//      .setContentIntent(pendingIntent);
-//
-//    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-//    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
-//  }
 }

+ 59 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/push/PushMessageBroker.java

@@ -0,0 +1,59 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.push;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import kr.co.zumo.app.lifeplus.bean.PushBean;
+
+/**
+ * PushMessageBroker
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019-02-03]   [최초 작성]
+ * @since 2019-02-03
+ */
+public class PushMessageBroker {
+  private static PushMessageBroker ourInstance = new PushMessageBroker();
+
+  public static PushMessageBroker getInstance() {
+    return ourInstance;
+  }
+
+  private PushMessageBroker() {
+    listeners = new ArrayList<>();
+  }
+
+  private List<IPushMessageListener> listeners;
+
+  public void push(PushBean bean) {
+    if (null != this.listeners && null != bean) {
+      int len = listeners.size();
+      for (int i = 0; i < len; ++i) {
+        this.listeners.get(i).onMessageReceived(bean);
+      }
+    }
+  }
+
+  public void registerObserver(IPushMessageListener listener) {
+    if (listeners.indexOf(listener) == -1) {
+      this.listeners.add(listener);
+    }
+  }
+
+  public void unregisterObserver(IPushMessageListener listener) {
+    int index = listeners.indexOf(listener);
+    if (index > -1) {
+      listeners.remove(index);
+    }
+  }
+
+  public interface IPushMessageListener {
+    void onMessageReceived(PushBean bean);
+  }
+}

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/AnimatorManager.java

@@ -22,6 +22,8 @@ import java.util.List;
  * @since 2018-12-09
  */
 public class AnimatorManager {
+  // fixme local helper 로 변경할 필요 있음.
+  // -> 메인 refresh 시 출돌 우려 있음
   private static AnimatorManager ourInstance;
 
   public static AnimatorManager getInstance() {

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

@@ -37,6 +37,12 @@ public class PushMessageManager {
     this.pushBeans = pushBeans;
   }
 
+  /**
+   * 푸시 메세지 한 개를 추가한다.
+   *
+   * @param bean
+   * @return
+   */
   public PushMessageManager addPushBean(PushBean bean) {
     if (LifeplusData.isTrue(bean.getNeedSaving())) {
       Log.i("APP# PushMessageManager | addPushBean", "|" + "add: " + bean.toJson());
@@ -45,14 +51,38 @@ public class PushMessageManager {
     return this;
   }
 
+  /**
+   * 메세지가 있는지 확인 (기존 메세지 포함)
+   *
+   * @return
+   */
+  public boolean hasMessages() {
+    return pushBeans.size() > 0;
+  }
+
+  /**
+   * 메세지 모두 삭제
+   * - RAM에서만 제거(저장 되는 것은 아님)
+   */
   public void clear() {
     pushBeans.clear();
   }
 
+  /**
+   * 메세지들 반환
+   *
+   * @return
+   */
   public List<PushBean> getPushBeans() {
     return pushBeans;
   }
 
+  /**
+   * JSON string 반환
+   * - Manager 자체를 Bean 처럼 이용하기 때문에, this 를 to json
+   *
+   * @return
+   */
   public String toJson() {
     return new Gson().toJson(this);
   }
@@ -62,7 +92,7 @@ public class PushMessageManager {
    * static
    ***********************************/
   public static List<PushBean> getPushMessages() {
-    SuperModelInit.init(App.getInstance().getContext());
+    SuperModelInit.instant(App.getInstance().getContext());
     String data = SuperModel.getInstance().getPreferences().getPushMessages();
     PushMessageManager manager = new Gson().fromJson(data, PushMessageManager.class);
 
@@ -73,7 +103,7 @@ public class PushMessageManager {
   }
 
   public static void savePushMessages(PushMessageManager manager) {
-    SuperModelInit.init(App.getInstance().getContext());
+    SuperModelInit.instant(App.getInstance().getContext());
     String json = manager.toJson();
     if (StringUtil.isFull(json)) {
       SuperModel.getInstance().getPreferences().setPushMessages(json);

+ 2 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/Event.java

@@ -141,6 +141,7 @@ public class Event {
   public static final int DIALOG = 113;
   public static final int URI = 114;
   public static final int AGREE = 115;
+  public static final int PUSH = 116;
 
   @Retention(RetentionPolicy.SOURCE)
   @IntDef({
@@ -153,7 +154,7 @@ public class Event {
     SWITCH, BOOK_MARK_DEFAULT, BOOK_MARK_LIST, ADD, MY_COIN_MAIN, MY_PURCHASE_HISTORY, GUIDE, ADD_BUCKET, MY_MAIN_GUEST, COUPON_MALL, CATEGORY_CLICK,
     MY_FAQ, UPDATE, FILTER, CLOSE, HELP, CONTENTS, MORE, BANNER, RECOMMEND, KAKAO_TALK, FACE_BOOK, CODE_COPY, EVENT, TAG, BOOKMARK, ORDER, DEFAULT, COMPLETE_BUCKET,
     LIKE, FRAGMENT_STACK_EMPTY, OVER_VIEW, SHARE, CALL_INFO, LINK, HOME_PAGE, INSTAGRAM, ADDRESS, SCROLL, SORT, TUTORIAL, CLICK_HTML, LAST, PREV, NEXT, REFRESH, MY_EVENT,
-    ING_EVENT, WINNER_ANNOUNCEMENT, COUPON, TODAY, RECT, VOTE, MAIN, SEARCH, COIN, ENTRY, IMAGE, DIALOG, URI, AGREE
+    ING_EVENT, WINNER_ANNOUNCEMENT, COUPON, TODAY, RECT, VOTE, MAIN, SEARCH, COIN, ENTRY, IMAGE, DIALOG, URI, AGREE, PUSH
 
   })
   public @interface ID {}

+ 31 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/menu/AllMenuModel.java

@@ -3,7 +3,11 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.menu;
 
+import kr.co.zumo.app.lifeplus.bean.PushBean;
 import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.push.PushMessageBroker;
+import kr.co.zumo.app.lifeplus.supervisor.PushMessageManager;
+import kr.co.zumo.app.lifeplus.view.Event;
 
 /**
  * AllMenuModel
@@ -15,13 +19,22 @@ import kr.co.zumo.app.lifeplus.model.Model;
  * @history 민효동   [2018. 10. 17.]   [최초 작성]
  * @since 2018. 10. 17.
  */
-public class AllMenuModel extends Model {
+public class AllMenuModel extends Model implements PushMessageBroker.IPushMessageListener {
+  private PushMessageManager pushMessageManager;
+  private PushBean pushBean = null;
+
+  public AllMenuModel() {
+    pushMessageManager = new PushMessageManager(PushMessageManager.getPushMessages());
+    PushMessageBroker.getInstance().registerObserver(this);
+  }
+
   @Override
   protected void createViewInternal() {
   }
+
   @Override
   protected void destroyInternal() {
-
+    PushMessageBroker.getInstance().unregisterObserver(this);
   }
 
   @Override
@@ -40,11 +53,26 @@ public class AllMenuModel extends Model {
 
   @Override
   protected void resumeInternal() {
-
+    // 메세지가 있다면
+    if (hasMessages()) {
+      onResult(new Event.Builder(Event.PUSH).build());
+    }
   }
 
   @Override
   protected void pauseInternal() {
 
   }
+
+  public boolean hasMessages() {
+    return pushMessageManager.hasMessages() || null != pushBean;
+  }
+
+  /***********************************
+   * PushMessageBroker.IPushMessageListener
+   ***********************************/
+  @Override
+  public void onMessageReceived(PushBean bean) {
+    pushBean = bean;
+  }
 }

+ 7 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/menu/AllMenuPresenter.java

@@ -5,7 +5,6 @@ import android.util.Log;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.Event;
-import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
@@ -20,8 +19,6 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  */
 public class AllMenuPresenter extends Presenter<AllMenuModel, IAllMenuView> {
 
-  private DialogBase alertDialog;
-
   public AllMenuPresenter(AllMenuModel model, IAllMenuView view) {
     super(model, view);
   }
@@ -121,6 +118,13 @@ public class AllMenuPresenter extends Presenter<AllMenuModel, IAllMenuView> {
 
   @Override
   public void onResult(Event event) {
+    switch (event.getEventId()) {
+      case Event.PUSH:
+        view.showNotiAnimation(true, true);
+        break;
+      default:
+        break;
+    }
 
   }
 
@@ -137,7 +141,6 @@ public class AllMenuPresenter extends Presenter<AllMenuModel, IAllMenuView> {
 
   @Override
   public void onNavigationClickClose(NavigationBar navigationBar) {
-    //view.hideMenuAnimation();
     onBackPressed();
   }
 
@@ -150,7 +153,5 @@ public class AllMenuPresenter extends Presenter<AllMenuModel, IAllMenuView> {
 
   @Override
   public void onScreenReady() {
-    // TODO: 알림 1개 이상일 경우 뱃지 노출
-    //view.showNotiAnimation(true, true);
   }
 }