Преглед изворни кода

[공통][New] 프로모션/코인 배너 링크 추가
- 몇 스크린 링크에는 추가 작업이 필요함
- 이벤트 세부 링크는 아직 없음

hyodong.min пре 7 година
родитељ
комит
3e73735a92

+ 4 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/LinkBean.java

@@ -26,10 +26,10 @@ public class LinkBean extends JsonBeanBase {
     01:외부URL, 02:컨텐츠, 03:이벤트, 04:특정메뉴
    */
 
-  public final static String CODE_URL = "01";
-  public final static String CODE_CONTENTS = "02";
-  public final static String CODE_EVENT = "03";
-  public final static String CODE_MENU = "04";
+  public final static String TYPE_URL = "01";
+  public final static String TYPE_CONTENTS = "02";
+  public final static String TYPE_EVENT = "03";
+  public final static String TYPE_MENU = "04";
 
   @SerializedName("linkDvcd")
   private String linkType;

+ 144 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/LinkInvoker.java

@@ -0,0 +1,144 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.presenter;
+
+import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
+import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
+import kr.co.zumo.app.lifeplus.bean.api.LinkBean;
+import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
+import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+
+/**
+ * LinkInvoker
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 1. 9.]   [최초 작성]
+ * @since 2019. 1. 9.
+ */
+public class LinkInvoker {
+
+  public static boolean invoke(Presenter presenter, LinkBean linkBean) {
+    boolean isSuccess = true;
+    /*
+    링크 구분 코드
+    01:외부URL, 02:컨텐츠, 03:이벤트, 04:특정메뉴
+     */
+    DeliveryHelper helper = (DeliveryHelper) presenter.getHelper(DeliveryHelper.class);
+    switch (linkBean.getLinkType()) {
+      case LinkBean.TYPE_CONTENTS:
+        LifeplusContentsBean bean = new LifeplusContentsBean();
+        bean.setContentsNo(linkBean.getLink());
+        ContentsDeliveryBean contentsDeliveryBean = new ContentsDeliveryBean.Builder(bean).build();
+
+        helper.setPackaging(contentsDeliveryBean);
+        presenter.go(ScreenID.CONTENTS);
+        break;
+      case LinkBean.TYPE_URL:
+        ContentsWebDeliveryBean contentsWebDeliveryBean = new ContentsWebDeliveryBean(null, -1, linkBean.getLink());
+
+        helper.setPackaging(contentsWebDeliveryBean);
+        presenter.go(ScreenID.WEB_FROM_CONTENTS);
+        break;
+      case LinkBean.TYPE_EVENT:
+        presenter.go(ScreenID.EVENT);
+        break;
+      case LinkBean.TYPE_MENU:
+        presenter.go(getScreenIdByApiId(linkBean.getLink()));
+        break;
+      default:
+        isSuccess = false;
+        break;
+    }
+
+    return isSuccess;
+  }
+  /*
+  EV0000	이벤트
+  MY0000	My홈
+  MY1000	My코인
+  CO1000	카테고리메인(주말)
+  CO2000	카테고리메인(여행)
+  CO3000	카테고리메인(취미)
+  CO4000	카테고리메인(트렌드이슈)
+  CO4500	카테고리메인(This Week)
+  FA1000	버킷리스트
+  SC0000	검색
+  ST2000	회원정보관리
+  ST4004	스페셜코드
+   */
+
+  public static final String API_ID_EVENT = "EV0000";
+  public static final String API_ID_MY_MAIN = "MY0000";
+  public static final String API_ID_MY_COIN_MAIN = "MY1000";
+  public static final String API_ID_CATEGORY_0 = "CO1000";
+  public static final String API_ID_CATEGORY_1 = "CO2000";
+  public static final String API_ID_CATEGORY_2 = "CO3000";
+  public static final String API_ID_CATEGORY_3 = "CO4000";
+  public static final String API_ID_CATEGORY_4 = "CO4500";
+  public static final String API_ID_BUCKET_LIST = "FA1000";
+  public static final String API_ID_SEARCH = "SC0000";
+  public static final String API_ID_SETTING_MEMBER_INFO = "ST2000";
+  public static final String API_ID_SPECIAL_CODE = "ST4004";
+
+  /**
+   * 프로모션 팝업에서 사용되는 링크의 id 를 ScreenID 로 변환하여 반환한다.
+   *
+   * @param apiId
+   * @return
+   */
+  public static int getScreenIdByApiId(String apiId) {
+    @ScreenID.ID int screenId;
+    switch (apiId) {
+      case API_ID_EVENT:
+        screenId = ScreenID.EVENT;
+        break;
+      case API_ID_MY_MAIN:
+        screenId = ScreenID.MY_MAIN;
+        break;
+      case API_ID_MY_COIN_MAIN:
+        screenId = ScreenID.MY_COIN_MAIN;
+        break;
+      case API_ID_CATEGORY_0:
+        screenId = ScreenID.FIRST_CATEGORY;
+        break;
+      case API_ID_CATEGORY_1:
+        screenId = ScreenID.SECOND_CATEGORY;
+        break;
+      case API_ID_CATEGORY_2:
+        screenId = ScreenID.THIRD_CATEGORY;
+        break;
+      case API_ID_CATEGORY_3:
+        screenId = ScreenID.FOURTH_CATEGORY;
+        break;
+      case API_ID_CATEGORY_4:
+        screenId = ScreenID.FIFTH_CATEGORY;
+        break;
+      case API_ID_BUCKET_LIST:
+        // todo 버킷리스트 유무에 따라서 화면을 결정해줘야한다.
+        screenId = ScreenID.BUCKET_ACTIVITY;
+        break;
+      case API_ID_SEARCH:
+        screenId = ScreenID.SEARCH;
+        break;
+      case API_ID_SETTING_MEMBER_INFO:
+        // todo 비밀번호 확인 필요
+        screenId = ScreenID.SETTING_MEMBER_INFO;
+        break;
+      case API_ID_SPECIAL_CODE:
+        // todo 코드 등록 후 피드백 처리 필요
+        screenId = ScreenID.SETTING_CODE;
+        break;
+      default:
+        screenId = ScreenID.EVENT;
+        break;
+    }
+
+    return screenId;
+
+  }
+}

+ 5 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainPresenter.java

@@ -27,6 +27,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomDialogListener;
 import kr.co.zumo.app.lifeplus.view.dialog.PromotionDialog;
+import kr.co.zumo.app.lifeplus.view.presenter.LinkInvoker;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 import kr.co.zumo.app.lifeplus.view.screen.category.CategoryID;
 
@@ -351,15 +352,16 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
 
         @Override
         public void onDialogResult(PromotionDialog dialog, Event event) {
+          dialog.dispose();
           if (event.getEventId() == Event.TODAY) {
             model.setPromotionSkipTime();
           }
           else if (event.getEventId() == Event.BANNER) {
             // 배너 클릭
-            int index = event.getIndex();
-            // todo 링크 타입별로 화면 이동
+            if (LinkInvoker.invoke(MainPresenter.this, model.getPromotionPopupBeans().get(event.getIndex())) == false) {
+              showToast("Invalid Link");
+            }
           }
-          dialog.dispose();
         }
 
         @Override

+ 4 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/MyCoinMainPresenter.java

@@ -4,6 +4,7 @@ import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.presenter.LinkInvoker;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
@@ -96,8 +97,9 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
         break;
       case Event.BANNER:
         // 하단 배너
-        int index = event.getIndex();
-        // todo 데이터 형식에 따라서 링크를 달리하여 처리함
+        if (LinkInvoker.invoke(MyCoinMainPresenter.this, model.getCoinBannerBeans().get(event.getIndex())) == false) {
+          showToast("Invalid Link");
+        }
         break;
       default:
         break;

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/IWebFromContentsView.java

@@ -24,4 +24,6 @@ public interface IWebFromContentsView extends IView {
 
   void onClickNext();
 
+  void setVisibleShare(boolean isVisible);
+
 }

+ 8 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsFragment.java

@@ -40,6 +40,7 @@ public class WebFromContentsFragment extends FragmentBase<WebFromContentsPresent
 
   private WebView webView;
   private ImageView imageViewNext;
+  private View shareView;
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -75,7 +76,8 @@ public class WebFromContentsFragment extends FragmentBase<WebFromContentsPresent
     findViewById(R.id.image_view_prev).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.PREV).build());});
     imageViewNext.setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.NEXT).build());});
     findViewById(R.id.image_view_refresh).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.REFRESH).build());});
-    findViewById(R.id.image_view_share).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.SHARE).build());});
+    shareView = findViewById(R.id.image_view_share);
+    shareView.setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.SHARE).build());});
   }
 
   private void init(WebView webView) {
@@ -157,4 +159,9 @@ public class WebFromContentsFragment extends FragmentBase<WebFromContentsPresent
       webView.goForward();
     }
   }
+
+  @Override
+  public void setVisibleShare(boolean isVisible) {
+    shareView.setVisibility(isVisible ? View.VISIBLE : View.GONE);
+  }
 }

+ 4 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsPresenter.java

@@ -124,6 +124,10 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
   @Override
   public void onScreenReady() {
     view.loadUrl(model.getUrl());
+
+    if (null == model.getShareContents()) {
+      view.setVisibleShare(false);
+    }
   }
 
   @Override

Разлика између датотеке није приказан због своје велике величине
+ 20 - 0
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java