Browse Source

[마이][New] 메인 북마크 미리보기: 북마크/좋아요 표시

hyodong.min 7 years ago
parent
commit
cc7e928a3d

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

@@ -105,10 +105,11 @@ public class Event {
   public static final int CODE_COPY = 77;
   public static final int EVENT = 78;
   public static final int TAG = 79;
-  public static final int BOOK_MARK = 80;
+  public static final int BOOKMARK = 80;
   public static final int ORDER = 81;
   public static final int DEFAULT = 82;
   public static final int COMPLETE_BUCKET = 83;
+  public static final int LIKE = 84;
 
 
   @Retention(RetentionPolicy.SOURCE)
@@ -120,7 +121,8 @@ public class Event {
     ACTION_BAR_HOME, ACTION_BAR_NOTIFICATION, ACTION_BAR_SETTING, ACTION_BAR_CLOSE, ACTION_BAR_BACK,
     ACTION_BAR_SEARCH, ACTION_BAR_MENU, ACTION_BAR_TITLE, FIRST_CATEGORY, SECOND_CATEGORY, THIRD_CATEGORY, FOURTH_CATEGORY, FIFTH_CATEGORY,
     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, BOOK_MARK, ORDER, DEFAULT, COMPLETE_BUCKET
+    MY_FAQ, UPDATE, FILTER, CLOSE, HELP, CONTENTS, MORE, BANNER, RECOMMEND, KAKAO_TALK, FACE_BOOK, CODE_COPY, EVENT, TAG, BOOKMARK, ORDER, DEFAULT, COMPLETE_BUCKET,
+    LIKE
   })
   public @interface ID {}
 

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

@@ -28,4 +28,8 @@ public interface IMyMainView extends IView {
   void drawBucketLabel(int count);
 
   void drawMyBucketList(ArrayList<BucketWithTagBean> myBucketBeans);
+
+  void setBookmarkContentsLiked(int index, boolean isChecked);
+
+  void setBookmarkContentsBookmarked(int index, boolean isChecked);
 }

+ 53 - 14
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainFragment.java

@@ -11,6 +11,7 @@ import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.CheckBox;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -62,6 +63,11 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
   protected View arrowBucket;
   protected TextView textBucketLabel;
 
+  protected CheckBox likeCheck1;
+  protected CheckBox likeCheck2;
+  protected CheckBox bookmarkCheck1;
+  protected CheckBox bookmarkCheck2;
+
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -94,6 +100,10 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
     arrowBucket = findViewById(R.id.image_view_arrow_bucket_list);
     textBucketLabel = findViewById(R.id.text_view_exists_bucket_list);
 
+    likeCheck1 = findViewById(R.id.like_check);
+    likeCheck2 = findViewById(R.id.like_check2);
+    bookmarkCheck1 = findViewById(R.id.book_mark_check);
+    bookmarkCheck2 = findViewById(R.id.book_mark_check2);
 
     layoutMyBucketListPreview = findViewById(R.id.layout_my_bucket_list_preview);
     recyclerViewBucketListPreview = findViewById(R.id.recycler_view_bucket_preview);
@@ -151,32 +161,61 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
   public void setMyBookmarkList(ArrayList<BookmarkBean> bookmarkBeans) {
     int size = bookmarkBeans.size();
     textViewBookmarkCount.setText("북마크 " + size);
+    textViewBookmarkCount.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK_LIST).build()));
     textViewBookmarkRecommend.setVisibility(View.GONE);
-    if (bookmarkBeans.size() == 1) {
-      textViewBookmark1.setText(bookmarkBeans.get(0).getTitle());
+
+    if (size > 0) {
+      // #1
       layoutLikeBookmark1.setVisibility(View.VISIBLE);
+      textViewBookmark1.setText(bookmarkBeans.get(0).getTitle());
       Glide.with(imageViewBookmark1).load(bookmarkBeans.get(0).getImageUrl()).into(imageViewBookmark1);
-      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(0).build()));
-      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(0).build()));
 
+      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(0).build()));
+      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(0).build()));
 
+      likeCheck1.setOnClickListener(view -> {
+        presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_LIKE).index(0).build());
+      });
+      bookmarkCheck1.setOnClickListener(view -> {
+        presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_BOOKMARK).index(0).build());
+      });
     }
-    else {
-      textViewBookmark1.setText(bookmarkBeans.get(0).getTitle());
-      layoutLikeBookmark1.setVisibility(View.VISIBLE);
-      Glide.with(imageViewBookmark1).load(bookmarkBeans.get(0).getImageUrl()).into(imageViewBookmark1);
-      textViewBookmark2.setText(bookmarkBeans.get(1).getTitle());
+
+    if (size > 1) {
+      // #2
       layoutLikeBookmark2.setVisibility(View.VISIBLE);
+      textViewBookmark2.setText(bookmarkBeans.get(1).getTitle());
       Glide.with(imageViewBookmark2).load(bookmarkBeans.get(1).getImageUrl()).into(imageViewBookmark2);
 
-      textViewBookmarkCount.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK_LIST).build()));
+      imageViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(1).build()));
+      textViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(1).build()));
 
-      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(0).build()));
-      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(0).build()));
+      likeCheck2.setOnClickListener(view -> {
+        presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_LIKE).index(1).build());
+      });
+      bookmarkCheck2.setOnClickListener(view -> {
+        presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_BOOKMARK).index(1).build());
+      });
+    }
+  }
 
-      textViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(1).build()));
-      imageViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK).index(1).build()));
+  @Override
+  public void setBookmarkContentsLiked(int index, boolean isChecked) {
+    if (index == 0) {
+      likeCheck1.setChecked(isChecked);
+    }
+    else {
+      likeCheck2.setChecked(isChecked);
+    }
+  }
 
+  @Override
+  public void setBookmarkContentsBookmarked(int index, boolean isChecked) {
+    if (index == 0) {
+      bookmarkCheck1.setChecked(isChecked);
+    }
+    else {
+      bookmarkCheck2.setChecked(isChecked);
     }
   }
 

+ 62 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainModel.java

@@ -11,6 +11,10 @@ import kr.co.zumo.app.lifeplus.bean.api.BucketBestListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketListRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketWithTagBean;
+import kr.co.zumo.app.lifeplus.bean.api.ContentsFlagRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusData;
 import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.module.APIBookmarkBestModule;
@@ -18,6 +22,7 @@ import kr.co.zumo.app.lifeplus.model.module.APIBookmarkMyModule;
 import kr.co.zumo.app.lifeplus.model.module.APIBucketBestModule;
 import kr.co.zumo.app.lifeplus.model.module.IAPIModuleListener;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.screen.contents.ContentsFlagHelper;
 import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.BucketListModelHelper;
 
 /**
@@ -31,6 +36,8 @@ import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.BucketListModelHelper;
  * @since 2018-11-13
  */
 public class MyMainModel extends Model {
+  private Disposable disposableLiked;
+  private Disposable disposableBookmarked;
 
   private Disposable disposableBookMarkList;
   private ArrayList<BookmarkBean> bookmarkBeans;
@@ -184,5 +191,60 @@ public class MyMainModel extends Model {
       disposableBucket.dispose();
       disposableBucket = null;
     }
+    if (null != disposableLiked) {
+      disposableLiked.dispose();
+      disposableLiked = null;
+    }
+    if (null != disposableBookmarked) {
+      disposableBookmarked.dispose();
+      disposableBookmarked = null;
+    }
+  }
+
+
+  public void updateLiked(int index) {
+    LifeplusContentsBean contentsBean = getBookmarkList().get(index);
+
+    boolean toChecked = !contentsBean.isLiked();
+    disposableLiked = ContentsFlagHelper.getInstance().updateLiked(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
+      @Override
+      public void onApiSuccess(LifeplusAPIBean resultBean) {
+        contentsBean.setLiked(toChecked);
+        onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_LIKE).bool(toChecked).index(index).build());
+      }
+
+      @Override
+      public void onApiReason(LifeplusAPIBean resultBean) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.CONTENTS_LIKE).bool(toChecked).index(index).string(resultBean.getReturnMessage()).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.CONTENTS_LIKE).bool(toChecked).index(index).string(errorMessage).build());
+      }
+    });
+  }
+
+  public void updateBookmarked(int index) {
+    LifeplusContentsBean contentsBean = getBookmarkList().get(index);
+
+    boolean toChecked = !contentsBean.isBookmarked();
+    disposableBookmarked = ContentsFlagHelper.getInstance().updateBookmarked(new ContentsFlagRequestBean(getUserName(), contentsBean.getItemNumber(), LifeplusData.valueOf(toChecked)), new IAPIModuleListener<LifeplusAPIBean>() {
+      @Override
+      public void onApiSuccess(LifeplusAPIBean resultBean) {
+        contentsBean.setBookmarked(toChecked);
+        onResult(new Event.Builder(Event.SUCCESS).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).index(index).build());
+      }
+
+      @Override
+      public void onApiReason(LifeplusAPIBean resultBean) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).index(index).string(resultBean.getReturnMessage()).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.CONTENTS_BOOKMARK).bool(toChecked).index(index).string(errorMessage).build());
+      }
+    });
   }
 }

+ 59 - 15
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainPresenter.java

@@ -1,8 +1,6 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.main;
 
 
-import android.util.Log;
-
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
@@ -17,6 +15,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.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.view.screen.contents.ContentsFlagHelper;
 
 /**
  * MyMainPresenter
@@ -54,7 +53,6 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
 
   @Override
   protected void destroyInternal() {
-
   }
 
   @Override
@@ -87,6 +85,8 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
   protected void onEventInternal(Event event) {
     ContentsDeliveryBean contentsDeliveryBean;
     LifeplusContentsBean bean;
+    int integer = event.getInteger();
+    int index = event.getIndex();
     switch (event.getEventId()) {
       case Event.BOOK_MARK_LIST:
         if (model.getBookmarkList().size() == 0) {
@@ -104,7 +104,6 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
         break;
       case Event.ADD_BUCKET:
         if (model.isMember()) {
-          int index = event.getIndex();
           getHelper(DeliveryHelper.class).setPackaging(model.getBestBeans().get(index).getTitle());
           go(ScreenID.ADD_MY_BUCKET);
         }
@@ -145,23 +144,32 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
       case Event.SIGN_UP:
         go(ScreenID.SIGN_UP_START);
         break;
-      case Event.BOOK_MARK:
-        //북마크 리스트 상세클릭시
-        bean = model.getBookmarkList().get(event.getIndex());
-        contentsDeliveryBean = new ContentsDeliveryBean.Builder(bean).build();
-        deliveryHelper.setPackaging(contentsDeliveryBean);
-        go(ScreenID.CONTENTS);
-
+      case Event.BOOKMARK:
+        if (integer == Event.CONTENTS_BOOKMARK) {
+          // 북마크의 북마크(체크박스)
+          model.updateBookmarked(index);
+        }
+        else if (integer == Event.CONTENTS_LIKE) {
+          // 북마크의 좋아요(체크박스)
+          model.updateLiked(index);
+        }
+        else {
+          //북마크 리스트 상세클릭시
+          bean = model.getBookmarkList().get(index);
+          contentsDeliveryBean = new ContentsDeliveryBean.Builder(bean).build();
+          deliveryHelper.setPackaging(contentsDeliveryBean);
+          go(ScreenID.CONTENTS);
+        }
         break;
       case Event.CONTENTS:
         //북마크 추천리스트 상세클릭시
-        bean = model.getDefaultBookmarkList().get(event.getIndex());
+        bean = model.getDefaultBookmarkList().get(index);
         contentsDeliveryBean = new ContentsDeliveryBean.Builder(bean).build();
         deliveryHelper.setPackaging(contentsDeliveryBean);
         go(ScreenID.CONTENTS);
         break;
       case Event.DETAIL:
-        deliveryHelper.setPackaging(model.getBucketList().get(event.getIndex()));
+        deliveryHelper.setPackaging(model.getBucketList().get(index));
         go(ScreenID.BUCKET_DETAIL);
         break;
       default:
@@ -171,6 +179,7 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
 
   @Override
   public void onResult(Event event) {
+    int integer = event.getInteger();
     switch (event.getEventId()) {
       case Event.BOOK_MARK_LIST:
         doubleCheckerBookmarkList.checkSecond();
@@ -179,14 +188,33 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
         doubleCheckerDefaultBookmarkList.checkSecond();
         break;
       case Event.SUCCESS:
-        // best bucket
-        doubleCheckerBestBucket.checkSecond();
+        if (integer == Event.CONTENTS_BOOKMARK) {
+          // 북마크의 북마크(체크박스)
+          view.setBookmarkContentsBookmarked(event.getIndex(), event.getBool());
+        }
+        else if (integer == Event.CONTENTS_LIKE) {
+          // 북마크의 좋아요(체크박스)
+          view.setBookmarkContentsLiked(event.getIndex(), event.getBool());
+        }
+        else {
+          // best bucket
+          doubleCheckerBestBucket.checkSecond();
+        }
         break;
       case Event.RESULT:
         // my bucket
         doubleCheckerMyBucket.checkSecond();
         break;
       case Event.ERROR:
+        if (integer == Event.CONTENTS_BOOKMARK) {
+          // 북마크의 북마크(체크박스)
+          view.setBookmarkContentsBookmarked(event.getIndex(), event.getBool());
+        }
+        else if (integer == Event.CONTENTS_LIKE) {
+          // 북마크의 좋아요(체크박스)
+          view.setBookmarkContentsLiked(event.getIndex(), event.getBool());
+        }
+
         showErrorDialog(event.getString());
         break;
       default:
@@ -223,6 +251,22 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
 
   private void setMyBookmarkList() {
     view.setMyBookmarkList(model.getBookmarkList());
+    int len = model.getBookmarkList().size();
+
+    if (len > 2) {
+      len = 2;
+    }
+
+    LifeplusContentsBean bean;
+    for (int i = 0; i < len; ++i) {
+      bean = model.getBookmarkList().get(i);
+      bean.setLiked(ContentsFlagHelper.getInstance().isLiked(bean.getItemNumber()));
+      bean.setBookmarked(ContentsFlagHelper.getInstance().isBookmarked(bean.getItemNumber()));
+      // 북마크의 좋아요(체크박스)
+      view.setBookmarkContentsLiked(i, bean.isLiked());
+      // 북마크의 북마크(체크박스)
+      view.setBookmarkContentsBookmarked(i, bean.isBookmarked());
+    }
   }
 
   private void drawBestBucket() {