Bläddra i källkod

Merge branch 'develop' of https://github.com/swict/LifePlusAndroid into develop

Hasemi 7 år sedan
förälder
incheckning
6016a7555d
21 ändrade filer med 535 tillägg och 16 borttagningar
  1. 81 0
      app/src/main/java/kr/co/zumo/app/lifeplus/bean/ContentsBean.java
  2. 59 0
      app/src/main/java/kr/co/zumo/app/lifeplus/helper/DeliveryHelper.java
  3. 21 0
      app/src/main/java/kr/co/zumo/app/lifeplus/helper/Helper.java
  4. 2 2
      app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/ScreenID.java
  5. 11 0
      app/src/main/java/kr/co/zumo/app/lifeplus/util/ResourceUtil.java
  6. 41 1
      app/src/main/java/kr/co/zumo/app/lifeplus/view/Event.java
  7. 11 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/IView.java
  8. 2 2
      app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/auth/MobileAuthPresenter.java
  9. 12 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java
  10. 15 2
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/FragmentBase.java
  11. 90 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsFragment.java
  12. 43 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsModel.java
  13. 66 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsPresenter.java
  14. 19 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/IContentsView.java
  15. 4 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/factory/BasicFragmentFactory.java
  16. 1 0
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainCategoryContentsAdapter.java
  17. 19 2
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainContentsCategoryHolder.java
  18. 18 1
      app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainPresenter.java
  19. 12 0
      app/src/main/res/layout/fragment_contents.xml
  20. 1 1
      app/src/main/res/layout/main_contents_category_image.xml
  21. 7 5
      app/src/main/res/values/strings.xml

+ 81 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/ContentsBean.java

@@ -0,0 +1,81 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.bean;
+
+/**
+ * ContentsBean
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public class ContentsBean extends JsonBeanBase {
+
+  private String categoryNumber;
+  private String itemNumber;
+  private String itemImageNumber;
+  private String title;
+  private String subTitle;
+  private String imageName;
+  private String imageUrl;
+
+  public String getCategoryNumber() {
+    return categoryNumber;
+  }
+
+  public void setCategoryNumber(String categoryNumber) {
+    this.categoryNumber = categoryNumber;
+  }
+
+  public String getItemNumber() {
+    return itemNumber;
+  }
+
+  public void setItemNumber(String itemNumber) {
+    this.itemNumber = itemNumber;
+  }
+
+  public String getItemImageNumber() {
+    return itemImageNumber;
+  }
+
+  public void setItemImageNumber(String itemImageNumber) {
+    this.itemImageNumber = itemImageNumber;
+  }
+
+  public String getTitle() {
+    return title;
+  }
+
+  public void setTitle(String title) {
+    this.title = title;
+  }
+
+  public String getSubTitle() {
+    return subTitle;
+  }
+
+  public void setSubTitle(String subTitle) {
+    this.subTitle = subTitle;
+  }
+
+  public String getImageName() {
+    return imageName;
+  }
+
+  public void setImageName(String imageName) {
+    this.imageName = imageName;
+  }
+
+  public String getImageUrl() {
+    return imageUrl;
+  }
+
+  public void setImageUrl(String imageUrl) {
+    this.imageUrl = imageUrl;
+  }
+}

+ 59 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/helper/DeliveryHelper.java

@@ -0,0 +1,59 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.helper;
+
+import android.util.Log;
+
+/**
+ * DeliveryHelper
+ * - 스크린 간 데이터 공유를 위해서 Activity 에 저장되어 있는 helper
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public class DeliveryHelper extends Helper {
+
+  private Object packaging;
+
+  /**
+   * 저장된 Object 를 반환한다.
+   * - 지정된 class 로 반환이 불가능하다면 null 이 전달된다.
+   *
+   * @param nameClass Bean.class
+   * @return exist bean object or null
+   */
+  public <T> T getPackaging(Class<T> nameClass) {
+    if (null != packaging && packaging.getClass().isAssignableFrom(nameClass)) {
+      return (T) packaging;
+    }
+
+    return null;
+  }
+
+  /**
+   * 배달할 객체를 저장한다.
+   *
+   * @param packaging
+   */
+  public void setPackaging(Object packaging) {
+    Log.i("APP# DeliveryHelper | setPackaging", "|" + " packaging: " + packaging);
+    this.packaging = packaging;
+  }
+
+  /**
+   * 객체 지움
+   */
+  public void clearPackaging() {
+    packaging = null;
+  }
+
+  @Override
+  protected void onCleared() {
+    clearPackaging();
+  }
+}

+ 21 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/helper/Helper.java

@@ -0,0 +1,21 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.helper;
+
+import android.arch.lifecycle.ViewModel;
+
+/**
+ * Helper
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public abstract class Helper extends ViewModel {
+  @Override
+  protected abstract void onCleared();
+}

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

@@ -80,6 +80,7 @@ public class ScreenID {
   public static final int PIN_RESET_INPUT_FROM_SETTING = 60;
   public static final int PIN_RESET_AUTH_FROM_ALREADY_MEMBER = 61;
   public static final int PIN_RESET_INPUT_FROM_ALREADY_MEMBER = 62;
+  public static final int CONTENTS = 63;
 
   @Retention(RetentionPolicy.SOURCE)
   @IntDef({
@@ -90,8 +91,7 @@ public class ScreenID {
     FOURTH_CATEGORY, FIFTH_CATEGORY, NOTIFICATION, SETTING_CODE, MY_MAIN, BOOK_MARK_DEFAULT, BOOK_MARK_LIST, MY_COIN_MAIN, MY_COIN_EXTINCT, MY_PURCHASE_HISTORY,
     GUIDE, LIFE_PLUS_X, SETTING_MEMBER_INFO, MY_MAIN_GUEST, COUPON_MALL, ALL_MENU_GUEST, SETTING_MEMBER_QUIT_INFO, MY_FAQ, SETTING_MEMBER_QUIT_REQUEST,
     SETTING_MEMBER_QUIT_FINISH, SETTING_TERMS, SETTING_MEMBER_QUIT_FAIL, MAIN_PIN_UNLOCK, PIN_RESET_AUTH, PIN_RESET_INPUT, PIN_RESET_AUTH_FROM_SETTING,
-    PIN_RESET_INPUT_FROM_SETTING, PIN_RESET_AUTH_FROM_ALREADY_MEMBER, PIN_RESET_INPUT_FROM_ALREADY_MEMBER
-
+    PIN_RESET_INPUT_FROM_SETTING, PIN_RESET_AUTH_FROM_ALREADY_MEMBER, PIN_RESET_INPUT_FROM_ALREADY_MEMBER, CONTENTS
   })
   public @interface FragmentID {}
 

+ 11 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/util/ResourceUtil.java

@@ -39,6 +39,17 @@ public class ResourceUtil {
     return App.getInstance().getContext().getResources().getIdentifier(idName, "id", App.getInstance().getPackageName());
   }
 
+  /**
+   * string resString 로 text 가져오기
+   *
+   * @param resString "name_1"
+   * @return R.string.name_1 -> "text"
+   */
+  public static String getString(String resString) {
+    int resId = App.getInstance().getContext().getResources().getIdentifier(resString, "string", App.getInstance().getPackageName());
+    return getString(resId);
+  }
+
   /**
    * string resId 로 text 가져오기
    *

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

@@ -138,11 +138,13 @@ public class Event {
   /***********************************
    * Object
    ***********************************/
+  @Event.ID
   private final int eventId;
   private final int integer;
   private final String string;
   private final String json;
   private final boolean bool;
+  private final int index;
 
   private Event(Builder builder) {
     this.eventId = builder.eventId;
@@ -150,6 +152,7 @@ public class Event {
     this.string = builder.string;
     this.json = builder.json;
     this.bool = builder.bool;
+    this.index = builder.index;
   }
 
   /**
@@ -157,6 +160,7 @@ public class Event {
    *
    * @return Event.ID
    */
+  @Event.ID
   public int getEventId() {
     return eventId;
   }
@@ -188,6 +192,15 @@ public class Event {
     return bool;
   }
 
+  /**
+   * index value
+   *
+   * @return
+   */
+  public int getIndex() {
+    return index;
+  }
+
   /**
    * json value
    *
@@ -211,11 +224,25 @@ public class Event {
   @Override
   public String toString() {
     StringBuilder builder = new StringBuilder();
-    builder.append("id: ").append(eventId).append(", int: ").append(integer).append(", str: ").append(string).append(", bool: ").append(bool).append(", json: ").append(json);
+    builder.append("id: ").append(eventId)
+      .append(", int: ").append(integer)
+      .append(", index: ").append(index)
+      .append(", str: ").append(string)
+      .append(", bool: ").append(bool)
+      .append(", json: ").append(json);
 
     return builder.toString();
   }
 
+  /**
+   * 데이터가 복제된 Builder 를 반환
+   *
+   * @return new Builder;
+   */
+  public Builder clone() {
+    return new Builder(getEventId()).string(getString()).integer(getInteger()).index(getIndex()).json(getJson()).bool(getBool());
+  }
+
   /***********************************
    * Builder
    ***********************************/
@@ -223,11 +250,13 @@ public class Event {
    * Event 객체를 생성하기 위한 builder
    */
   public static class Builder {
+
     private int eventId;
     private int integer = NONE;
     private String string = null;
     private String json = null;
     private boolean bool = false;
+    private int index;
 
     /**
      * 필수 항목인 eventId 를 전달 받는다.
@@ -282,6 +311,17 @@ public class Event {
       return this;
     }
 
+    /**
+     * index 설정
+     *
+     * @param value
+     * @return
+     */
+    public Builder index(int value) {
+      this.index = value;
+      return this;
+    }
+
     /**
      * Event 객체 반환
      *

+ 11 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/IView.java

@@ -6,6 +6,8 @@ package kr.co.zumo.app.lifeplus.view;
 
 import android.app.Activity;
 
+import kr.co.zumo.app.lifeplus.helper.Helper;
+
 /**
  * IView
  * <pre>
@@ -25,4 +27,13 @@ public interface IView {
    * @return
    */
   Activity getActivity();
+
+  /**
+   * 각종 Helper 객체를 반환한다.
+   * - Activity 에 종속되는 객체로 그 안에서 싱글톤처럼 사용.
+   *
+   * @param helperClass DeliveryHelper.class
+   * @return new DeliveryHelper() or exist object
+   */
+  <H extends Helper> H getHelper(Class<H> helperClass);
 }

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/auth/MobileAuthPresenter.java

@@ -666,7 +666,7 @@ public class MobileAuthPresenter implements IMobileAuthContract.Presenter {
    * @param index
    */
   public void onClickAgreeDetail(int index) {
-    // todo index 에 따른 디테일 화면 웹뷰 표시
+    String url = ResourceUtil.getString("phone_identify_agree" + (index + 1) + "_url");
     dialog = DialogBuilder.create(DialogID.WEB)
       .listener(new IDialogResultListener() {
         @Override
@@ -679,7 +679,7 @@ public class MobileAuthPresenter implements IMobileAuthContract.Presenter {
           dialog.dispose();
         }
       })
-      .attribute((IAttribute<WebDialog>) d -> d.setUrl("https://google.com/" + index))
+      .attribute((IAttribute<WebDialog>) d -> d.setUrl(url))
       .show();
   }
 

+ 12 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -10,6 +10,7 @@ import android.util.Log;
 import com.google.gson.Gson;
 
 import kr.co.zumo.app.lifeplus.ILifeCycle;
+import kr.co.zumo.app.lifeplus.helper.Helper;
 import kr.co.zumo.app.lifeplus.model.IModelResult;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.network.INetworkReceiverListener;
@@ -205,6 +206,17 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
     onCommand(new HomeCommand(ScreenID.MAIN, ScreenID.DIRECTION_BACK));
   }
 
+   /**
+   * 각종 Helper 객체를 반환한다.
+   * - Activity 에 종속되는 객체로 그 안에서 싱글톤처럼 사용.
+   *
+   * @param helperClass DeliveryHelper.class
+   * @return new DeliveryHelper() or exist object
+   */
+   protected <H extends Helper> H getHelper(Class<H> helperClass) {
+     return view.getHelper(helperClass);
+   }
+
   /***********************************
    * listener
    ***********************************/

+ 15 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/FragmentBase.java

@@ -19,6 +19,7 @@ import android.view.animation.Animation;
 import io.reactivex.disposables.CompositeDisposable;
 import kr.co.zumo.app.lifeplus.manager.ActionButtonManager;
 import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.helper.Helper;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenChangerHelper;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.IView;
@@ -238,15 +239,16 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
    * @param id
    */
   public final void setScreenId(@ScreenID.FragmentID int id) {
-    if(isSkipScreenWhenBack()) {
+    if (isSkipScreenWhenBack()) {
       ScreenChangerHelper.getInstance().addSkipBackId(id);
     }
   }
+
   /**
    * 모델을 반환한다.
    *
    * @param modelClass MainModel.class
-   * @return new MainModel()
+   * @return new MainModel() or exist object
    */
   protected <T extends Model> T getModel(Class<T> modelClass) {
     return ViewModelProviders.of(this).get(modelClass);
@@ -262,6 +264,17 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
     return false;
   }
 
+  /**
+   * 각종 Helper 객체를 반환한다.
+   * - Activity 에 종속되는 객체로 그 안에서 싱글톤처럼 사용.
+   *
+   * @param helperClass DeliveryHelper.class
+   * @return new DeliveryHelper() or exist object
+   */
+  public <H extends Helper> H getHelper(Class<H> helperClass) {
+    return ViewModelProviders.of(getActivity()).get(helperClass);
+  }
+
 
   // fixme for test
   @Override

+ 90 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsFragment.java

@@ -0,0 +1,90 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.contents;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.ContentsBean;
+import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
+import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
+import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
+
+/**
+ * ContentsFragment
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public class ContentsFragment extends FragmentBase<ContentsPresenter> implements IContentsView {
+
+  private WebView webView;
+
+  @Override
+  protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+    return inflater.inflate(R.layout.fragment_contents, container, false);
+  }
+
+  @Override
+  protected void onAfterActivityCreated(Bundle savedInstanceState) {
+    DeliveryHelper deliveryHelper = getHelper(DeliveryHelper.class);
+
+    ContentsBean bean = deliveryHelper.getPackaging(ContentsBean.class);
+    if (null != bean) {
+
+      webView = findViewById(R.id.web_view);
+      webView.setWebViewClient(new WebViewClient() {
+        @Override
+        public boolean shouldOverrideUrlLoading(WebView view, String url) {
+          view.loadUrl(url);
+          return true;
+        }
+      });
+      webView.getSettings().setJavaScriptEnabled(true);
+
+      webView.loadUrl(bean.getImageUrl());
+
+      deliveryHelper.clearPackaging();
+    }
+  }
+
+  @Override
+  protected void defineActionBar() {
+    ActionBarManager.getInstance().begin()
+      .back(actionBar -> presenter.onClickBack(actionBar))
+      .menu(actionBar -> presenter.onClickMenu(actionBar))
+      .show();
+  }
+
+  @Override
+  protected ContentsPresenter definePresenter() {
+    return new ContentsPresenter(getModel(ContentsModel.class), this);
+  }
+
+  @Override
+  protected void onAfterDestroyView() {
+
+  }
+
+  @Override
+  protected void onAfterDestroy() {
+
+  }
+
+  @Override
+  protected boolean isSkipScreenWhenBack() {
+    return false;
+  }
+}

+ 43 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsModel.java

@@ -0,0 +1,43 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.contents;
+
+import kr.co.zumo.app.lifeplus.model.Model;
+
+/**
+ * ContentsModel
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public class ContentsModel extends Model {
+  @Override
+  protected void destroyInternal() {
+
+  }
+
+  @Override
+  protected void startInternal() {
+
+  }
+
+  @Override
+  protected void stopInternal() {
+
+  }
+
+  @Override
+  protected void resumeInternal() {
+
+  }
+
+  @Override
+  protected void pauseInternal() {
+
+  }
+}

+ 66 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsPresenter.java

@@ -0,0 +1,66 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.contents;
+
+import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+
+/**
+ * ContentsPresenter
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public class ContentsPresenter extends Presenter<ContentsModel, IContentsView> {
+
+  public ContentsPresenter(ContentsModel model, IContentsView view) {
+    super(model, view);
+  }
+
+  @Override
+  protected void destroyInternal() {
+
+  }
+
+  @Override
+  protected void startInternal() {
+
+  }
+
+  @Override
+  protected void stopInternal() {
+
+  }
+
+  @Override
+  protected void resumeInternal() {
+
+  }
+
+  @Override
+  protected void pauseInternal() {
+
+  }
+
+  @Override
+  public boolean onBackPressed() {
+    back(ScreenID.MAIN);
+    return true;
+  }
+
+  @Override
+  protected void onEventInternal(Event event) {
+
+  }
+
+  @Override
+  public void onResult(Event event) {
+
+  }
+}

+ 19 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/IContentsView.java

@@ -0,0 +1,19 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.screen.contents;
+
+import kr.co.zumo.app.lifeplus.view.IView;
+
+/**
+ * IContentsView
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 6.]   [최초 작성]
+ * @since 2018. 11. 6.
+ */
+public interface IContentsView extends IView {
+}

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

@@ -7,6 +7,7 @@ import android.support.v4.app.Fragment;
 
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
+import kr.co.zumo.app.lifeplus.view.screen.contents.ContentsFragment;
 import kr.co.zumo.app.lifeplus.view.screen.couponmall.CouponMallFragment;
 import kr.co.zumo.app.lifeplus.view.screen.error.NetworkErrorFragment;
 import kr.co.zumo.app.lifeplus.view.screen.faq.FAQFragment;
@@ -255,6 +256,9 @@ public class BasicFragmentFactory extends FragmentFactory {
       case ScreenID.COUPON_MALL:
         fragment = new CouponMallFragment();
         break;
+      case ScreenID.CONTENTS:
+        fragment = new ContentsFragment();
+        break;
       default:
         break;
     }

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainCategoryContentsAdapter.java

@@ -104,6 +104,7 @@ public class MainCategoryContentsAdapter extends RecyclerView.Adapter<MainCatego
     holder.init(position, bean.getContentsList().get(position), event -> {
       switch (event.getEventId()) {
         case Event.CONTENTS:
+          // event.getInteger() = contents index
           listener.onEvent(new Event.Builder(Event.CONTENTS).integer(event.getInteger()).string(bean.getCategoryNumber()).build());
           break;
         case Event.MORE:

+ 19 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainContentsCategoryHolder.java

@@ -11,6 +11,7 @@ import android.widget.TextView;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.MainContentsBean;
+import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
 
 /**
@@ -63,7 +64,21 @@ public class MainContentsCategoryHolder extends MainContentsHolder {
     recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
 
     adapter = new MainCategoryContentsAdapter(context, bean, event -> {
-      listener.onEvent(event);
+      /**
+       * more 는 그대로 전송하고
+       * contents 에는 data index 를 추가한다.
+       */
+      switch (event.getEventId()) {
+        case Event.CONTENTS:
+          // event.getInteger() = contents index
+          listener.onEvent(event.clone().index(index).build());
+          break;
+        case Event.MORE:
+          listener.onEvent(event);
+          break;
+        default:
+          break;
+      }
     });
     recyclerView.setAdapter(adapter);
     recyclerView.setNestedScrollingEnabled(false);
@@ -71,7 +86,9 @@ public class MainContentsCategoryHolder extends MainContentsHolder {
     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
       @Override
       public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
-        adapter.onScrolled(recyclerView, dx, dy);
+        if (null != adapter) {
+          adapter.onScrolled(recyclerView, dx, dy);
+        }
       }
     });
   }

+ 18 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainPresenter.java

@@ -6,6 +6,8 @@ package kr.co.zumo.app.lifeplus.view.screen.main;
 import android.util.Log;
 
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.ContentsBean;
+import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
@@ -139,7 +141,13 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
         break;
       case Event.CONTENTS:
         Log.i("APP# MainPresenter | onEventInternal", "|" + event.toString());
-        // todo 콘텐츠 상세로 이동;
+
+        String categoryNumber = event.getString();
+        int categoryIndex = event.getIndex();
+        int contentsIndex = event.getInteger();
+
+        setContentsHelper(categoryNumber, categoryIndex, contentsIndex);
+        go(ScreenID.CONTENTS);
         break;
       case Event.MORE:
         gotoCategoryMain(event.getString());
@@ -149,6 +157,15 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
     }
   }
 
+  private void setContentsHelper(String categoryNumber, int categoryIndex, int contentsIndex) {
+    ContentsBean bean = new ContentsBean();
+    bean.setCategoryNumber(categoryNumber);
+    bean.setImageUrl(model.getContentsBeans().get(categoryIndex).getContentsList().get(contentsIndex).getImageUrl());
+
+    DeliveryHelper helper = getHelper(DeliveryHelper.class);
+    helper.setPackaging(bean);
+  }
+
   private void gotoCategoryMain(String id) {
     int screedId;
     switch (id) {

+ 12 - 0
app/src/main/res/layout/fragment_contents.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="match_parent"
+  android:layout_height="match_parent">
+
+  <WebView
+    android:id="@+id/web_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"/>
+
+</android.support.constraint.ConstraintLayout>

+ 1 - 1
app/src/main/res/layout/main_contents_category_image.xml

@@ -11,7 +11,7 @@
     android:layout_width="@dimen/main_contents_image_width"
     android:layout_height="@dimen/main_contents_image_height"
     android:src="@drawable/img_bestbucket_1"
-    android:background="@color/C333333"
+    android:background="@color/CFFFFFF"
     android:scaleType="matrix"
     />
 

+ 7 - 5
app/src/main/res/values/strings.xml

@@ -161,9 +161,13 @@
   <string name="phone_identify_female">여자</string>
   <string name="phone_identify_all_agree">휴대폰 본인인증 약관 전체 동의</string>
   <string name="phone_identify_agree1">"<b>[필수]</b> <font color='@color/C999999'>개인정보 이용 및 제공</font>"</string>
-  <string name="phone_identify_agree2">"<b>[필수]</b> <font color='@color/C999999'>개인정보 수집 및 활용 동의</font>"</string>
-  <string name="phone_identify_agree3">"<b>[필수]</b> <font color='@color/C999999'>고유 식별정보 처리 동의</font>"</string>
-  <string name="phone_identify_agree4">"<b>[필수]</b> <font color='@color/C999999'>통신사 이용약관 동의</font>"</string>
+  <string name="phone_identify_agree2">"<b>[필수]</b> <font color='@color/C999999'>고유식별정보 처리 동의</font>"</string>
+  <string name="phone_identify_agree3">"<b>[필수]</b> <font color='@color/C999999'>통신사 이용약관 동의</font>"</string>
+  <string name="phone_identify_agree4">"<b>[필수]</b> <font color='@color/C999999'>서비스 이용약관 동의</font>"</string>
+  <string name="phone_identify_agree1_url">https://cert.vno.co.kr/app/agree/agree_m_01.jsp</string>
+  <string name="phone_identify_agree2_url">https://cert.vno.co.kr/app/agree/agree_m_02.jsp</string>
+  <string name="phone_identify_agree3_url">https://cert.vno.co.kr/app/agree/agree_m_03.jsp</string>
+  <string name="phone_identify_agree4_url">https://cert.vno.co.kr/app/agree/agree_m_04.jsp</string>
   <string name="phone_identify_phone_hint">뒷번호 7~8자리 입력</string>
   <string name="phone_identify_submit">인증번호 발송</string>
   <string name="phone_identify_submit_message_success">인증번호가 발송되었습니다.</string>
@@ -404,8 +408,6 @@
   <string name="second_filter_case_4_contents_7">킬링타임</string>
 
 
-
-
   <string name="reset_filter">초기화</string>
   <string name="apply">적용</string>
   <string name="all">전체</string>